Thanks for checking this, Manuel. I’ve already filed a bug report and Eli has found a fix, but unfortunately only for this very specific case with line truncation. The general issue remains. We are seeking a self-contained reproducer for the more general case in other wrap modes (visual-line, normal wrapping). Please see https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67533 to continue the discussion there. > On Dec 1, 2023, at 3:36 AM, Manuel Giraud wrote: > > JD Smith > writes: > >> In developing a new pixel-precise smooth scrolling mode, I’ve noticed >> that inline SVG images confuse Emacs regarding pixel positions of >> surrounding elements. You sometimes also experience this while >> visiting SVG image-rich files (think org-latex-preview) while in >> visual line mode. In this case, previous/next-line sometimes jump >> from one side of the window to the other. >> >> But it’s easiest to reproduce with line-truncation in effect. Run the >> snippet below with your frame either expanded wide enough to >> accommodate the full width of the 1st line of text, or too narrow >> (eliciting truncation). While truly truncated and with point on the >> SVG, pixel text measurements above are erroneous (reporting zero pixel >> height above), as if it thinks it’s on the prior line. At other >> points in line 2, the pixel-size values are correct. > > Hi, I can reproduce this on master. Below I modified your example > slightly and I also observe different pixel width for the same text > line. > > I think you should file a bug report with this issue. Thanks. > > --8<---------------cut here---------------start------------->8--- > ;;; test-svg-pixel-position --- test pixel position for SVG images > > ;;; This small code creates a buffer with two lines, the first of > ;;; which is long, and the second of which has an SVG image at start. > ;;; Line truncation is turned on. `window-text-pixel-size` returns > ;;; differing results depending on whether truncation is actually in > ;;; effect (alter the frame width to see this). > > ;;; Code: > (require 'svg) > (let ((buf "svg-pixel-demo") > (svg (svg-create 50 25))) > (svg-circle svg 25 25 25 :stroke-color "green") > (with-current-buffer (get-buffer-create buf) > (erase-buffer) > (insert "Pellentesque condimentum, magna ut suscipit hendrerit, ipsum augue ornare nulla, non luctus diam neque sit amet urna.\n") > (insert "Pellentesque condimentum, magna ut suscipit hendrerit, ipsum augue ornare nulla, non luctus diam neque sit amet urna.\n") > (insert (propertize "THISISACIRCLE" 'display (svg-image svg))) > (insert " Aliquam posuere.\n") > (pop-to-buffer buf) > (goto-char (point-max)) > (forward-line -1) > (toggle-truncate-lines 1) > (let ((above-image (window-text-pixel-size nil (cons (point) -1) (point) nil nil nil t))) > (forward-line -1) > (message "FIRST LINE: %S; ABOVE IMAGE: %S" > (window-text-pixel-size nil (cons (point) -1) (point) nil nil nil t) > above-image)))) > --8<---------------cut here---------------end--------------->8--- > -- > Manuel Giraud