From unknown Thu Aug 14 21:46:36 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#67533 <67533@debbugs.gnu.org> To: bug#67533 <67533@debbugs.gnu.org> Subject: Status: SVG images confound position pixel measurements Reply-To: bug#67533 <67533@debbugs.gnu.org> Date: Fri, 15 Aug 2025 04:46:36 +0000 retitle 67533 SVG images confound position pixel measurements reassign 67533 emacs submitter 67533 JD Smith severity 67533 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 29 15:32:14 2023 Received: (at submit) by debbugs.gnu.org; 29 Nov 2023 20:32:14 +0000 Received: from localhost ([127.0.0.1]:51542 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8REE-0007e3-9t for submit@debbugs.gnu.org; Wed, 29 Nov 2023 15:32:14 -0500 Received: from lists.gnu.org ([2001:470:142::17]:52758) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8REB-0007dp-Nz for submit@debbugs.gnu.org; Wed, 29 Nov 2023 15:32:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r8RDy-0005XO-9N for bug-gnu-emacs@gnu.org; Wed, 29 Nov 2023 15:31:58 -0500 Received: from mail-yw1-x112e.google.com ([2607:f8b0:4864:20::112e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r8RDw-0002ke-MU for bug-gnu-emacs@gnu.org; Wed, 29 Nov 2023 15:31:58 -0500 Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-5cce5075bd6so1871877b3.0 for ; Wed, 29 Nov 2023 12:31:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701289914; x=1701894714; darn=gnu.org; h=message-id:in-reply-to:to:references:date:subject:mime-version :content-transfer-encoding:from:from:to:cc:subject:date:message-id :reply-to; bh=OOd53gl5399BOzBJSkbwDcJyiwOTLjm0t//bELvITtk=; b=b6uLp9xthbAHfOwaTlzi5eK431N1obNBgFXxkV8rYqDIwm79457CEOgaLPQ3FBE60m qipw9+9hSjG/YNHbCKqnoxsQRLBFNzvhkGyj5ruK7MR3+rW4Tb1OgeVRHwegYKErlJgN 62v3nh93EUq3kPYRcjKcd+1xVi6WmKCaKVI+sJrIz9W4rMDTdqEXATr3Kme04FslJ8x6 aNUD7WqSmuu0H5MbBw0RNkb8UQuUGWpeyBh8J1WdUz1wel7V2Ex0mfPnIxEhILJgCBXB NdFZyJErTZFoswz13jg7+RzF3bk3jXhk2LEx+KBQ4o36tH96dhN28nOsszqM64SKwJrO /sUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701289914; x=1701894714; h=message-id:in-reply-to:to:references:date:subject:mime-version :content-transfer-encoding:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OOd53gl5399BOzBJSkbwDcJyiwOTLjm0t//bELvITtk=; b=wR3k3yjOomK7Os5824qY8ppyXZTyvN4iHNxl8tpfLxbMKO0C3RvNAAJ94E210P8IM3 zN43Fe2sxm2Zb2Z/FgFS5smZLP8fs3DD52rpVNd8+meAB0Ee5lYMu3M7erHKfSG5lL7t Ypl5kJRGW4nKbbOLNDyIOKPdRZ+3lQxcZC6qFQKDLf6ldJjywBT96hsmGXZEOTuzXEs4 9w3/+QCxg6wfaq7nmubenK9w6zA5fdPn1Z2NOXws3WX256YLWieMIL2t96EohwDiqLGw o9zzKk8y8NfcmyT2QyDaR68QZt0KyT2hZoY1td0EchdONzSwAfrKpZFgJMlSmlU07nDh eeKA== X-Gm-Message-State: AOJu0YyyZhZJUgim/t4r0KlsX8q1VrIEawXU14jKFdL8rfwosCDdttnF tMBgeow36tCrKg1FYj02qBoegOCV51I= X-Google-Smtp-Source: AGHT+IEIJeGjnkKvYFo+KluxjFHuSPNAJ/yt6VtvI41G3n+KeFldpVQATeBKXKgU/IXKhxyqw1zIOw== X-Received: by 2002:a81:ae26:0:b0:5ce:16cb:b709 with SMTP id m38-20020a81ae26000000b005ce16cbb709mr12964277ywh.25.1701289914631; Wed, 29 Nov 2023 12:31:54 -0800 (PST) Received: from smtpclient.apple ([131.183.131.33]) by smtp.gmail.com with ESMTPSA id dy19-20020a05690c271300b005ce039bf1ecsm4140347ywb.7.2023.11.29.12.31.53 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 Nov 2023 12:31:54 -0800 (PST) From: JD Smith Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: SVG images confound position pixel measurements Date: Wed, 29 Nov 2023 15:31:43 -0500 References: To: bug-gnu-emacs@gnu.org In-Reply-To: Message-Id: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> X-Mailer: Apple Mail (2.3774.200.91.1.1) Received-SPF: pass client-ip=2607:f8b0:4864:20::112e; envelope-from=jdtsmith@gmail.com; helo=mail-yw1-x112e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) (As posted on emacs-devel) ++++++++++++++++++++++ In developing a new pixel-precise smooth scrolling mode, I=E2=80=99ve = 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. =20 But it=E2=80=99s 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=E2=80=99s on the prior line. At other = points in line 2, the pixel-size values are correct. =20 This erroneous pixel size/position result occurs whether the image = appears via an overlay or a text-property. Tested in Emacs 29.1 NS and Mac ports. Small update: this only occurs when the image is at the start of the = line. And PNG images exhibit the same issue. +++++++ ;;; 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 (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) (message "PIXEL SIZE OF LINE ABOVE IMAGE: %S" (window-text-pixel-size nil (cons (point) -1) (point) nil = nil nil t))))= From debbugs-submit-bounces@debbugs.gnu.org Thu Nov 30 12:33:13 2023 Received: (at 67533) by debbugs.gnu.org; 30 Nov 2023 17:33:13 +0000 Received: from localhost ([127.0.0.1]:54437 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8kuX-00050H-7g for submit@debbugs.gnu.org; Thu, 30 Nov 2023 12:33:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43004) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8kuV-000504-UT for 67533@debbugs.gnu.org; Thu, 30 Nov 2023 12:33:12 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r8kuI-0000dE-7H; Thu, 30 Nov 2023 12:32:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=vxIhGJ/0td33H7BwHdTmxayj6c+PxuykNm9IaeLj06Y=; b=kP7O5K2cM1fl pu2mWVPow1P+4owReK0vngUcJw0J/Uqwg1doUYyihvwFW0HQ/URhiJbquyVnRqg3/r0fpsMD0Dnzy dw0SW9lrxttDcJpkueDHaV2f0HV0jNieLpF8OIy3BbIRGNeQpq905Hq0i7dg3F4809YdIo23xtZpn VPtwez9qeCTY2CF4sANbvtJobVYcgVujPcPstjyj3OMpHjKenRJz3f3Hs9h1VR4lNNxzapZUf826U 2SMpNT3MqepWgrpLE5gcNL3mKIfOWU2XTBmbtqIMwufw/iEnYtMIdEAspZZqBkK7fjrMTBOB6Q/cp e/woKEFpHiRalxhZ2Cs0yA==; Date: Thu, 30 Nov 2023 19:32:52 +0200 Message-Id: <83o7fbb0zf.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> (message from JD Smith on Wed, 29 Nov 2023 15:31:43 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Wed, 29 Nov 2023 15:31:43 -0500 > > ;;; 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 (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) > (message "PIXEL SIZE OF LINE ABOVE IMAGE: %S" > (window-text-pixel-size nil (cons (point) -1) (point) nil nil nil t)))) Does the patch below fix the issue? (It should fix the recipe you posted, but you hinted that this is just the simplest way of seeing a more general problem, so I wonder whether that more general problem is also fixed.) diff --git a/src/xdisp.c b/src/xdisp.c index eb38ebb..7cf3902 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11487,6 +11487,16 @@ window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to, it.max_descent = max (it.max_descent, it.descent); } } + else if (IT_CHARPOS (it) > end + && it.line_wrap == TRUNCATE + && it.current_x - it.first_visible_x >= it.last_visible_x) + { + /* If the display property at END is at the beginning of the + line, and the previous line was truncated, we are at END, + but it.current_y is not yet updated to reflect that. */ + it.current_y += max (it.max_ascent, it.ascent) + + max (it.max_descent, it.descent); + } } else bidi_unshelve_cache (it2data, true); From debbugs-submit-bounces@debbugs.gnu.org Thu Nov 30 16:00:37 2023 Received: (at 67533) by debbugs.gnu.org; 30 Nov 2023 21:00:37 +0000 Received: from localhost ([127.0.0.1]:54558 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8o9F-0002QQ-Ln for submit@debbugs.gnu.org; Thu, 30 Nov 2023 16:00:37 -0500 Received: from mail-yb1-xb30.google.com ([2607:f8b0:4864:20::b30]:52400) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8o9E-0002Q8-7G for 67533@debbugs.gnu.org; Thu, 30 Nov 2023 16:00:36 -0500 Received: by mail-yb1-xb30.google.com with SMTP id 3f1490d57ef6-daf7ed42ea6so1342434276.0 for <67533@debbugs.gnu.org>; Thu, 30 Nov 2023 13:00:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701378022; x=1701982822; darn=debbugs.gnu.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=o3OWL5YY9Qpk5MbQKJc7OzOGawhwelrjqIOTWPUL1i0=; b=gaxPxSOjKQJzLj6+GlojhQwskvbAl5tIgHrRZQ7DrVGll5y6qQAhkyJxonY7E7owUq QPe8GHbtQWtJqMdMvZrolskeXJ7MQg6COkAj/vCmlpWRQnd1Q3y0UiwkADOSaReB4R7Y nJz536sKdAGg/DtLyxGmMdXRqERQITnExqNKhHPEpy84ODAizrG6WQiMUp/XB1TVsDO2 FlQO0OaSk9h+YjFov7lvIk2xtzVy/WrjCWNk74Fs2QJTdtlmvQRWZqgo+OVXKAFmKlCZ pBnql1L2KXRbxZAJjYE6DxhLI2e0FUDsLEGR7vhmsuRwQYzCTgoSI73Qe7MqSLulguRD Boyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701378022; x=1701982822; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=o3OWL5YY9Qpk5MbQKJc7OzOGawhwelrjqIOTWPUL1i0=; b=ktI/yWDZEsC2fj+zfimDCng0G+f4x5QeSx7Sp6YRC2y1VoNqaGVMg2PUC2lQbDRsKY X7nhUcUB1N9C1f2H1h02TmqWgV6PTuU2WCgTEjBkW8O4Rn9GE/ewODP/aj7KIKvNWOPg f7YRuPdSz9T8Uri/63QGkLYqjGuEqdbaFrtJcK1Pd/IykrN+kpZ55i++AOHxK+K1xW7K Xo585kwzPDj8KWbrpODjeISeSv5PnVpPRowVVOn37ljc7xiez1XpKSGBje0YqYHYXEIY EpvccJxmXkCnxY2woHJ5rkQ9pvJZwWtF4r2hZTvKysKoa+RUu3I9uwDNmfn/MOYz2B2g EsSQ== X-Gm-Message-State: AOJu0Yz9aj3Y1AeRgdJUF73vtmntDVOgHHw+bAjeFRw1H6FWU7U5yJc+ 8Wsx5cdabDWWJaEhnxrvhbWLDye/fI0= X-Google-Smtp-Source: AGHT+IGBD8dyQAJJpGDojuQyg9DE8Tznabe3IEhIZVMvLBOjyVkQzG1t1R481gFtGH4yTUgj2kEdEg== X-Received: by 2002:a25:b195:0:b0:d7e:8175:4fa9 with SMTP id h21-20020a25b195000000b00d7e81754fa9mr23831844ybj.4.1701378021893; Thu, 30 Nov 2023 13:00:21 -0800 (PST) Received: from smtpclient.apple ([131.183.131.33]) by smtp.gmail.com with ESMTPSA id x12-20020a25ac8c000000b00da07d9e47b4sm435829ybi.55.2023.11.30.13.00.20 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Nov 2023 13:00:20 -0800 (PST) From: JD Smith Message-Id: <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_FA77158A-A161-499E-8B72-DFB59974BF4D" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements Date: Thu, 30 Nov 2023 16:00:09 -0500 In-Reply-To: <83o7fbb0zf.fsf@gnu.org> To: Eli Zaretskii References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --Apple-Mail=_FA77158A-A161-499E-8B72-DFB59974BF4D Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Nov 30, 2023, at 12:32=E2=80=AFPM, Eli Zaretskii = wrote: >=20 > Does the patch below fix the issue? (It should fix the recipe you > posted, but you hinted that this is just the simplest way of seeing a > more general problem, so I wonder whether that more general problem is > also fixed.) Thanks for looking into it. As you surmised, this patch fixes only the = demo case with truncate-lines. For the more general case, originally = discovered with visual-line-mode on an org-mode file with many SVG = preview overlays, the issue remains. In that more general case, = window-text-pixel-size sometimes gives 0 or (when the image is not at = the start of the visual line) a value which is too large. =20 The file I can pretty readily reproduce it on here is at = https://gist.github.com/jdtsmith/de34aac901fc9f96f1a88a1b1b67d46e (I use = dvigms for latex preview). Only some of the preview overlay images (and = other locations) exhibit the misbehavior, but more so for narrower = frames with more wrapping. I=E2=80=99m happy to test on this end, since = my pixel scrolling code finds these types of incorrect results quite = instantly. As I change the window width and the text reflows, different = positions exhibit the problems.=20 The misbehavior extends to other regular text on the line, too, not just = images. There are various possibilities for what = (window-text-pixel-size nil (cons (point) -1) (point) nil nil nil t) = returns: The correct value for position (start of line above) and = (line-pixel-height) of that line. Most text does this, but not when the = visual line starts with a =E2=80=9Cbad=E2=80=9D image. Images at line start can (but don=E2=80=99t always) return their own = position and zero height. On an image further right of a line-starting =E2=80=9Cbad=E2=80=9D = image, it returns the bad image position, but the full height of the = line.=20 Some images on lines which do not start with an image return the correct = position (on the prior line), but a height which is too large, as if = they included some of their own height in the total. Here=E2=80=99s a shot of a larger version of the file, with point on a = position which gives misbehavior #2. =EF=BF=BC --Apple-Mail=_FA77158A-A161-499E-8B72-DFB59974BF4D Content-Type: multipart/related; type="text/html"; boundary="Apple-Mail=_73E740D8-FDBC-4708-98B5-3EE2CC5199FC" --Apple-Mail=_73E740D8-FDBC-4708-98B5-3EE2CC5199FC Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

On Nov 30, = 2023, at 12:32=E2=80=AFPM, Eli Zaretskii <eliz@gnu.org> = wrote:

Does the patch below fix = the issue?  (It should fix the recipe you
posted, but you hinted that this is just = the simplest way of seeing a
more = general problem, so I wonder whether that more general problem = is
also fixed.)

Thanks for looking into it.  As you surmised, = this patch fixes only the demo case with truncate-lines.  For the = more general case, originally discovered with visual-line-mode on an = org-mode file with many SVG preview overlays, the issue remains. =  In that more general case, window-text-pixel-size sometimes gives = 0 or (when the image is not at the start of the visual line) a = value which is too large.  

The file I can pretty readily = reproduce it on here is at https://gist.github.com/jdtsmith/de34aac901fc9f96f1a88a1b1b67d46e&nbs= p;(I use dvigms for latex preview).  Only some of the preview = overlay images (and other locations) exhibit the misbehavior, but more = so for narrower frames with more wrapping.  I=E2=80=99m happy to = test on this end, since my pixel scrolling code finds these types of = incorrect results quite instantly.  As I change the window width = and the text reflows, different positions exhibit the = problems. 

The misbehavior extends to = other regular text on the line, too, not just images.  There are = various possibilities for what (window-text-pixel-size nil (cons (point) = -1) (point) nil nil nil t) returns:

  1. The correct value for position (start of line = above) and (line-pixel-height) of that line.  Most text does this, = but not when the visual line starts with a =E2=80=9Cbad=E2=80=9D = image.
  2. Images at line start can (but don=E2=80=99t always) = return their own position and zero height.
  3. On an image further = right of a line-starting =E2=80=9Cbad=E2=80=9D image, it returns the bad = image position, but the full height of the line. 
  4. Some = images on lines which do not start with an image return the correct = position (on the prior line), but a height which is too large, as if = they included some of their own height in the = total.

Here=E2=80=99s a shot of a = larger version of the file, with point on a position which gives = misbehavior #2.

3D"PastedGraphic-1.png"

= --Apple-Mail=_73E740D8-FDBC-4708-98B5-3EE2CC5199FC Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=PastedGraphic-1.png Content-Type: image/png; x-unix-mode=0666; name="PastedGraphic-1.png" Content-Id: <1A0BBE14-2A8A-4DB3-AE9B-D272F17648C1> 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 T+zr44JFvlwa3Zx6egOezKwH/5TJXf4vff/TAkXWv9l/AVXrDV7Iqjo4AAAAimVYSWZNTQAqAAAA CAAEARoABQAAAAEAAAA+ARsABQAAAAEAAABGASgAAwAAAAEAAgAAh2kABAAAAAEAAABOAAAAAAAA AJAAAAABAAAAkAAAAAEAA5KGAAcAAAASAAAAeKACAAQAAAABAAAEkqADAAQAAAABAAABPAAAAABB U0NJSQAAAFNjcmVlbnNob3R+n8hiAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB12lUWHRYTUw6Y29t LmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0 az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMu b3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJk ZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4 aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMTY8L2V4aWY6UGl4ZWxZ RGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTE3MDwvZXhpZjpQaXhl bFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6 VXNlckNvbW1lbnQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4 bXBtZXRhPgrb0VIBAAAAHGlET1QAAAACAAAAAAAAAJ4AAAAoAAAAngAAAJ4AAMvACP/R/gAAQABJ REFUeAHsXQec1MQXfihdOtKlCFJUsKAUlWah6V+qohQVRUF67x2O3rtiRbEAgoqI0hQs9CKHYqGD 0pWOBYX/++ZultlcdjeZ7O3t3c3jxyWbZEq+TCYzb977XpqqjTteif1yHkHOnjpBtWrVEvuxsbFi 6/ZP3rx53SbxdH2WLFk8pTeJDQIGgfAjUPKmYtSj2/PUb+B4+v3309oF3HBDfrq/emX6448z9Muu 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 Iun/2s5AC2PZixgAAAAASUVORK5CYII= --Apple-Mail=_73E740D8-FDBC-4708-98B5-3EE2CC5199FC-- --Apple-Mail=_FA77158A-A161-499E-8B72-DFB59974BF4D-- From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 02:09:10 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 07:09:10 +0000 Received: from localhost ([127.0.0.1]:54999 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8xe9-000242-R7 for submit@debbugs.gnu.org; Fri, 01 Dec 2023 02:09:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:46942) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8xe6-00023W-Vs for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 02:09:08 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r8xds-0000ab-Qc; Fri, 01 Dec 2023 02:08:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=Iwah9n+gb7wMXKur6GYOdKnLclzb4M6j6ROgUsRnTS8=; b=DOq+O3dR3jpVTfB7zfh8 F17iYmpVeDd3hC5NvTebfSuMvIHxRjOXTAiKLRojqlbt/iKXAzbXbvCdW12sMWZHfbnZZtWZtS1Tx cAJijN4q9isEM2I3yf7WXNcd0aCiBwtK5TLacgM479hPVjcMIZgVuHNI4hTQ7bl6qhRqiZjYYFMwO LeW5NP6Nmx0C1ISKXK+ITliCyT48n7h/iFJmLbLz7FaJc35Cf+F9ef8Zthwkp9bWK8wUGiMEhIkGG w8dNka2p5o+0wmqqsgrlZeftk3sss2w+ZOpXObu6qT09x/g6VfHiyKfGwAcNoKdq0vDa6WFU+uGkS fvDzKQMepafWrA==; Date: Fri, 01 Dec 2023 09:08:44 +0200 Message-Id: <837clybds3.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> (message from JD Smith on Thu, 30 Nov 2023 16:00:09 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Thu, 30 Nov 2023 16:00:09 -0500 > Cc: 67533@debbugs.gnu.org > > > On Nov 30, 2023, at 12:32 PM, Eli Zaretskii wrote: > > > > Does the patch below fix the issue? (It should fix the recipe you > > posted, but you hinted that this is just the simplest way of seeing a > > more general problem, so I wonder whether that more general problem is > > also fixed.) > > Thanks for looking into it. As you surmised, this patch fixes only the demo case with truncate-lines. For the more general case, originally discovered with visual-line-mode on an org-mode file with many SVG preview overlays, the issue remains. In that more general case, window-text-pixel-size sometimes gives 0 or (when the image is not at the start of the visual line) a value which is too large. > > The file I can pretty readily reproduce it on here is at https://gist.github.com/jdtsmith/de34aac901fc9f96f1a88a1b1b67d46e (I use dvigms for latex preview). Only some of the preview overlay images (and other locations) exhibit the misbehavior, but more so for narrower frames with more wrapping. I’m happy to test on this end, since my pixel scrolling code finds these types of incorrect results quite instantly. As I change the window width and the text reflows, different positions exhibit the problems. > > The misbehavior extends to other regular text on the line, too, not just images. There are various possibilities for what (window-text-pixel-size nil (cons (point) -1) (point) nil nil nil t) returns: > > The correct value for position (start of line above) and (line-pixel-height) of that line. Most text does this, but not when the visual line starts with a “bad” image. > Images at line start can (but don’t always) return their own position and zero height. > On an image further right of a line-starting “bad” image, it returns the bad image position, but the full height of the line. > Some images on lines which do not start with an image return the correct position (on the prior line), but a height which is too large, as if they included some of their own height in the total. Thanks, but I need recipes I could reproduce on my system, and reproduce relatively easily. Debugging this usually takes numerous runs under GDB, so the recipe should be reasonably easy to run, so it doesn't take too long to set up a debugging session, and preferably it should not require installation of optional packages. It also cannot depend on something that doesn't work on MS-Windows, because this is the only system where I can debug a GUI Emacs. So, for example, using LaTeX Preview and dvigsm is out of the question; I need ready image files prepared by LaTeX Preview and Lisp code to display them in a way that causes problems. So please try to provide recipes for the problems you still see, after applying the patch I sent, as simple and preferably stand-alone Lisp programs that don't require to install and run all of your code. If necessary, please emulate what your package does with simplified Lisp code that just inserts text with display properties and overlays, to produce the same result as the package does. I'm sorry to insist on this and asking you to do extra work, but IME this is the only way I can debug these issues efficiently enough to solve them. I appreciate the offer to test on your end, but such testing is only useful when I have a tentative solution in hand for you to test. Such a tentative solution must be based on some problem I found and fixed here, and for that I must be able to step through the offending code in GDB. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 09:41:16 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 14:41:17 +0000 Received: from localhost ([127.0.0.1]:55370 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r94hg-0005Cz-FQ for submit@debbugs.gnu.org; Fri, 01 Dec 2023 09:41:16 -0500 Received: from ledu-giraud.fr ([51.159.28.247]:16772) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r94hb-0005Cl-Ax for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 09:41:15 -0500 DKIM-Signature: v=1; a=ed25519-sha256; c=simple/simple; s=ed25519; bh=wbZz9yUu wxVzIYtj/OkvmXVnhnjdmftm93C44bg0X1Q=; h=date:references:in-reply-to: subject:cc:to:from; d=ledu-giraud.fr; b=RvT1JmyWt8PzPqek5oJrBwcOQFktEj JPXonRkNlX9D7M3Uq7+HrUcfr1HTFqvOEUqSvDn6wBqeT+l6NysHVEDg== DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=rsa; bh=wbZz9yUuwxVzIYtj /OkvmXVnhnjdmftm93C44bg0X1Q=; h=date:references:in-reply-to:subject: cc:to:from; d=ledu-giraud.fr; b=IMMGcFn8b5b6UhVUoeIiEsmDXDRIlWhSOm8urD 9DmSFcU5EX1xvKJdVLUwhs0rocSf5Gr2+tv+hBKoY5dSOF8gtxY9cLF3cJ+bjI+lE+A7jN 4Tz0XlxNUx+iwTIxPoSUO2E9FM1iioFvPXf8ekkrSBmQb2EfynCvfZc0RQwxl0w3IFw0Ba BOYq/N7dxyAWu7Ca7n6KngtR0Ad+NMAYlgSFfLhNwG4rj/HE46AGupT3ibgQowHP5u15Au AD8AxZmJ9f4Cxn5T6pmGb6np2BBbknofBiNb2F3uXrf0927hTEzFKCFt98EDVUKVyadbMY ZDnNATSreqalY4FmOnl2kvEg== Received: from computer ( [10.1.1.1]) by ledu-giraud.fr (OpenSMTPD) with ESMTPSA id f2f64c5f (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Fri, 1 Dec 2023 15:41:00 +0100 (CET) From: Manuel Giraud To: Eli Zaretskii Subject: Re: bug#67533: SVG images confound position pixel measurements In-Reply-To: <83o7fbb0zf.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 30 Nov 2023 19:32:52 +0200") References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Date: Fri, 01 Dec 2023 15:40:59 +0100 Message-ID: <87ttp2ugsk.fsf@ledu-giraud.fr> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, JD Smith X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> From: JD Smith >> Date: Wed, 29 Nov 2023 15:31:43 -0500 >> >> ;;; 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 (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) >> (message "PIXEL SIZE OF LINE ABOVE IMAGE: %S" >> (window-text-pixel-size nil (cons (point) -1) (point) nil nil nil t)))) > > Does the patch below fix the issue? (It should fix the recipe you > posted, but you hinted that this is just the simplest way of seeing a > more general problem, so I wonder whether that more general problem is > also fixed.) Hi, I have applied your patch to master and here are the results I get with the recipe at the end of this message: With a not large enough window: FIRST LINE: (925 24 1); ABOVE IMAGE: (925 24 119) With a large enough window (i.e., that can display the whole first line): FIRST LINE: (1053 24 1); ABOVE IMAGE: (1062 24 119) --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 From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 09:56:11 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 14:56:11 +0000 Received: from localhost ([127.0.0.1]:55923 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r94w7-0005mG-5e for submit@debbugs.gnu.org; Fri, 01 Dec 2023 09:56:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:50458) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r94w3-0005m4-OH for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 09:56:09 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r94vo-0002iN-4E; Fri, 01 Dec 2023 09:55:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=sE/cEOHYyExNmBwlFxEfQv/nGuK26enghJrXPBels4I=; b=VnizCf4wDuTY /maDgYZZtklvrw6LSlUaVw83CnywTMg7Qih05fb7cjh9Bg651TfCm5vbe+3sAKOL6vjt69pSHGsHM kaTF0kdsPhRLv/WGpuoCux50szOSz9c4oHO0w0qJxNpZG6LFvXQom1lA5gTVe++Fq9RsS2ktsX3Ju I+iIRvLRSZfYcPlbfE06No9iWZyeWT7shHDGuh0W2f0VdpzPTGofQp1ARfyVOZ7qybegKtyJiAnVT gU3Qumf7iMN2Er6mya75mvMQwPBTqT6epSSiSWA141rYjPqPlv/TLtkmDxFSWN2tnbAlkwwtAjEhl /SwR6FzJgnfe2gumvsCbZw==; Date: Fri, 01 Dec 2023 16:55:47 +0200 Message-Id: <83h6l29dl8.fsf@gnu.org> From: Eli Zaretskii To: Manuel Giraud In-Reply-To: <87ttp2ugsk.fsf@ledu-giraud.fr> (message from Manuel Giraud on Fri, 01 Dec 2023 15:40:59 +0100) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <87ttp2ugsk.fsf@ledu-giraud.fr> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, jdtsmith@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Manuel Giraud > Cc: JD Smith , 67533@debbugs.gnu.org > Date: Fri, 01 Dec 2023 15:40:59 +0100 > > Eli Zaretskii writes: > > > Does the patch below fix the issue? (It should fix the recipe you > > posted, but you hinted that this is just the simplest way of seeing a > > more general problem, so I wonder whether that more general problem is > > also fixed.) > > Hi, > > I have applied your patch to master and here are the results I get with > the recipe at the end of this message: > > With a not large enough window: > FIRST LINE: (925 24 1); ABOVE IMAGE: (925 24 119) > > With a large enough window (i.e., that can display the whole first > line): > FIRST LINE: (1053 24 1); ABOVE IMAGE: (1062 24 119) If you think these results still show a problem, please elaborate. Since you did this on your system, with your fonts and frame dimensions, I cannot know whether the numbers are correct or not. The patch I posted is supposed to fix only one issue: the fact that the Y-dimension of the line above the image was shown as zero. AFAIU, it is indeed not zero in the output you show above. Btw, I wonder what you and JD expect from the (cons (point) -1) argument. The doc string says: If FROM is a cons, its car specifies a buffer position, and its cdr specifies the vertical offset in pixels from that position to the first screen line to be measured. What is the meaning of negative offset from the first line of the buffer? there's no screen line at that offset, so what do you expect that to do? Or what am I missing? From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 10:21:50 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 15:21:50 +0000 Received: from localhost ([127.0.0.1]:55947 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r95Kv-0006S1-R8 for submit@debbugs.gnu.org; Fri, 01 Dec 2023 10:21:50 -0500 Received: from mail-io1-xd33.google.com ([2607:f8b0:4864:20::d33]:47357) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r95Kr-0006Rl-Pd for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 10:21:48 -0500 Received: by mail-io1-xd33.google.com with SMTP id ca18e2360f4ac-7b389399dfdso68168639f.2 for <67533@debbugs.gnu.org>; Fri, 01 Dec 2023 07:21:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701444091; x=1702048891; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=zaY5ookCvLPElQwmhMSwbyNXQIdgQejkqJyP4Fdnz0c=; b=be30ivChGd3OV130lAs3T2SNwgIGdlEQVODIQ/j0yT7uYIrtv3qpGC34YpDwKJq91z C0SUUsCDyyIPWlJK35uJ34y1gskPrPzYiq1Uw2B1AnG1OKZ8+JvLiJEu2O1OdTzCMEhK PpBFpjhH6Rk3oGoNrAngR17cxgUzvx+43e+dNVazfWZOSUrCy83DAIi9AdBsP+dsdpIF 3WaA5174n7GInW1+rF+U18Xi80h0gHLh9Fi2AcdjhLH3LbOrfCeV/slnvuSLV0YuxoE2 n08xrAubKIvWSbwo4TUkxNkc1w+LUtzZAffyH2ttY31FX1Uvuzw4+1ETWuQR2HLKrcHz km6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701444091; x=1702048891; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zaY5ookCvLPElQwmhMSwbyNXQIdgQejkqJyP4Fdnz0c=; b=o+IEbbJSZYhlfq9hBLtA2kDO0+LZreN0QcKPo7g+TlpMnJfT9QlavpwzCnTQgDFmE5 5pqThTx8lX5ilaPLzNbbRHoyg98o/C9Z9eFTSKQIdDa2+j0bs1qUOIaPRsxkuo5yiF3I 7yhYMFoO4NX3a3KUAr1dIsIjH+ij3PVqWuKJOJs7Ze/yTdLUL2rP03cN2kQKwvqPBH7F g3L5PvfH0TXHu544xwYuJN3MrPkbfNx+tUgUvwGHr0LRzkhqKcYBr5SVKB5iG4cTHgZG xdedXryJ5nL1Jp0+iIOg3I4AgQiqT0hOFBlhTFGSbrMORLVtfVvN3RzC+0F6n5MEVYFz 5WaQ== X-Gm-Message-State: AOJu0Ywv9AGhB0jdy11H2qogM5XEGEcintq+MMKCBI4KDor+/KXgmHOb ZKwbk6Ocbjr9PhV4fKXVHWQ= X-Google-Smtp-Source: AGHT+IG2fLgWxE0+Bo5I+NOurAZZ9r5G5VC7SX3S+C6XYDgHBP3Rhn9oIcX4dlTCpQvAEvUTtIcrfg== X-Received: by 2002:a05:6602:6411:b0:7a9:a31e:c05d with SMTP id gn17-20020a056602641100b007a9a31ec05dmr28532934iob.18.1701444091134; Fri, 01 Dec 2023 07:21:31 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id u3-20020a02c043000000b0043cee9b7f86sm878004jam.77.2023.12.01.07.21.30 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Dec 2023 07:21:30 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements From: JD Smith In-Reply-To: <83h6l29dl8.fsf@gnu.org> Date: Fri, 1 Dec 2023 10:21:19 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <87ttp2ugsk.fsf@ledu-giraud.fr> <83h6l29dl8.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, Manuel Giraud X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Dec 1, 2023, at 9:55=E2=80=AFAM, Eli Zaretskii = wrote: >=20 >> From: Manuel Giraud >> Cc: JD Smith , 67533@debbugs.gnu.org >> Date: Fri, 01 Dec 2023 15:40:59 +0100 >>=20 >> Eli Zaretskii writes: >>=20 >>> Does the patch below fix the issue? (It should fix the recipe you >>> posted, but you hinted that this is just the simplest way of seeing = a >>> more general problem, so I wonder whether that more general problem = is >>> also fixed.) >>=20 >> Hi, >>=20 >> I have applied your patch to master and here are the results I get = with >> the recipe at the end of this message: >>=20 >> With a not large enough window: >> FIRST LINE: (925 24 1); ABOVE IMAGE: (925 24 119) >>=20 >> With a large enough window (i.e., that can display the whole first >> line): >> FIRST LINE: (1053 24 1); ABOVE IMAGE: (1062 24 119) >=20 > Btw, I wonder what you and JD expect from the (cons (point) -1) > argument. The doc string says: >=20 > If FROM is a cons, its car specifies a buffer position, and its cdr > specifies the vertical offset in pixels from that position to the > first screen line to be measured. >=20 > What is the meaning of negative offset from the first line of the > buffer? there's no screen line at that offset, so what do you expect > that to do? Or what am I missing? In that case I would expect zero pixel height is returned. As you saw, = the problem occurs at lines beyond the first visual line. =20 My guiding assumption is that the display pixel dimensions returned from = (cons (point) -1) to (point) (when omitting the height of the line = including (point)) should be equal to the height of the prior visual = line (line-pixel-height), unless it has zero height. I=E2=80=99ll work up a simpler reproducer in non-truncated and/or = visual-line-mode.= From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 10:37:17 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 15:37:17 +0000 Received: from localhost ([127.0.0.1]:55988 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r95Zr-0006tB-Ky for submit@debbugs.gnu.org; Fri, 01 Dec 2023 10:37:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60234) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r95Zn-0006su-7m for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 10:37:15 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r95ZY-0007Sh-CF; Fri, 01 Dec 2023 10:36:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=j46CTGH2h1/K6jpfDSyfwbi/ghKpeM283wqqUyNeNys=; b=LXgUhsPjO89XIkgtJfZk 1h+ebCeqVyfXX2zXORqVMMirNlppPtuU9xHsBpTtwokw1urbZX8AjOmZDSefQLIBjbHz3sURKTE1t TvPXqLdL+mNxXSQtXc/cnwbWAxj9PVUQTSaYp9ouK7vn8R4uEJ8DVAu2cPMrtPAcAaM9/742uP5pK yK/qgeG+xM0vemOk0i5cs8nGkNJraQsJh2NS/MrFcOYq1MqwMa9qO2PvKxFFVnacbkB/asbQIniRW AqBElp4hUJutNJJ18rosPHOs+94cWX8dywVfdwYwldrsCO+S6dNnCh6AXxmKxwu7ZODo4JKSFUUad 8UyeyTqytTNUsQ==; Date: Fri, 01 Dec 2023 17:36:34 +0200 Message-Id: <83fs0m9bp9.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: (message from JD Smith on Fri, 1 Dec 2023 10:21:19 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <87ttp2ugsk.fsf@ledu-giraud.fr> <83h6l29dl8.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, manuel@ledu-giraud.fr X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Fri, 1 Dec 2023 10:21:19 -0500 > Cc: Manuel Giraud , > 67533@debbugs.gnu.org > > > > Btw, I wonder what you and JD expect from the (cons (point) -1) > > argument. The doc string says: > > > > If FROM is a cons, its car specifies a buffer position, and its cdr > > specifies the vertical offset in pixels from that position to the > > first screen line to be measured. > > > > What is the meaning of negative offset from the first line of the > > buffer? there's no screen line at that offset, so what do you expect > > that to do? Or what am I missing? > > In that case I would expect zero pixel height is returned. Why zero? Why not consider that undefined behavior? > I’ll work up a simpler reproducer in non-truncated and/or visual-line-mode. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 10:45:30 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 15:45:30 +0000 Received: from localhost ([127.0.0.1]:55997 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r95hq-000767-01 for submit@debbugs.gnu.org; Fri, 01 Dec 2023 10:45:30 -0500 Received: from mail-il1-x12a.google.com ([2607:f8b0:4864:20::12a]:56679) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r95hn-00075t-Es for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 10:45:28 -0500 Received: by mail-il1-x12a.google.com with SMTP id e9e14a558f8ab-35d4c0eb3abso3128415ab.1 for <67533@debbugs.gnu.org>; Fri, 01 Dec 2023 07:45:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701445513; x=1702050313; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=+p4ne7ZhbMFOEKMRVQ8Q+jh6Tpw//ENmdT8YuLYlBZw=; b=cJXa7AoYT6bxcYAgHOnHRV95FsFU66ON5XTS0FvZmUedGh3hb+o8hoaZYFu27jc+VY OyDM6Qbb3u892KYeeXYPexZhtihQ08EqqUOVHfsMxBbdZJsZ3wCwT4iWJFSyooUmrXdX BxZ04M4wbebZZ6kuO6HxkPRBWoRCJ3J9zf7DAtL2Da9ZLYl9ZFau7C0opxWklqmGCd42 Uq/tSAz+hZNVWvlLcPoZQGWdRvXGikUS1haq+j34LJHmjM3L2K40lB6bKHvSq0N7eXME KSmOtcla8S6D0wLBZR5eijyciPrkoVdReJqBk8rQZcBTJzBerbbCUz9cwap3HNPN7H5P wElA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701445513; x=1702050313; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+p4ne7ZhbMFOEKMRVQ8Q+jh6Tpw//ENmdT8YuLYlBZw=; b=p221+yj6n8V3OQejbBvbmBSJh3Suh3/dvfaRrYLqHja0HHcZgYohAy+tjsbYTqWK+I CSX5nQtGuiyb87cSffyKfXWUi+0dAMYoZKbpTBn8v6ZhU3YNdNTHjjGeMTmTJlhFEHB2 vUzLUzN4gvy0TTe4X7Yc+/CVKSjrBPOvs6L2/YuXNNxR34ivqqPlEtI/HwWrU7hM/87l ZnVWoMRfcVB5Uwe165TxsQX6L0JJ9yUxT9VYPdTPhn6+1bUP6+3tI9VKcb3tGzSBqUkW jl71GHqkqiDnwXfPAs6IVKrkGtaImjBqZPj+4C06KDFhoxGQmskvPxBQWuSk0UnQDFeL oGrw== X-Gm-Message-State: AOJu0Yxp1+q7nqZsmYJNA5dmB1k27hpu7LfxlYFYKXvXWrL8wE6xC5X0 11A3YtsC6IZQdiBbM1jJt7s= X-Google-Smtp-Source: AGHT+IHTqGHD4LgCDC3M8nAlt/QzDfB0qeW77ygEOVktrJ6IDfPmEkJ4smuQCUYirQZvLSUznC4K6g== X-Received: by 2002:a05:6e02:792:b0:35c:611c:c2a4 with SMTP id q18-20020a056e02079200b0035c611cc2a4mr25873626ils.24.1701445512883; Fri, 01 Dec 2023 07:45:12 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id bq4-20020a056e02238400b0035b118f6c9fsm1152011ilb.56.2023.12.01.07.45.12 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Dec 2023 07:45:12 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements From: JD Smith In-Reply-To: <83fs0m9bp9.fsf@gnu.org> Date: Fri, 1 Dec 2023 10:45:00 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <87ttp2ugsk.fsf@ledu-giraud.fr> <83h6l29dl8.fsf@gnu.org> <83fs0m9bp9.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, Manuel Giraud X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Dec 1, 2023, at 10:36=E2=80=AFAM, Eli Zaretskii = wrote: >=20 >> From: JD Smith >> Date: Fri, 1 Dec 2023 10:21:19 -0500 >> Cc: Manuel Giraud , >> 67533@debbugs.gnu.org >>=20 >>=20 >>> Btw, I wonder what you and JD expect from the (cons (point) -1) >>> argument. The doc string says: >>>=20 >>> If FROM is a cons, its car specifies a buffer position, and its cdr >>> specifies the vertical offset in pixels from that position to the >>> first screen line to be measured. >>>=20 >>> What is the meaning of negative offset from the first line of the >>> buffer? there's no screen line at that offset, so what do you expect >>> that to do? Or what am I missing? >>=20 >> In that case I would expect zero pixel height is returned. >=20 > Why zero? Why not consider that undefined behavior? Depends on what the natural height on a non-existent line is. Zero = makes sense to me. But I suppose returning height=3Dnil or something = else to indicate =E2=80=9CI gave up=E2=80=9D would also be reasonable.=20= From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 11:00:03 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 16:00:04 +0000 Received: from localhost ([127.0.0.1]:56003 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r95vv-0007YX-Ii for submit@debbugs.gnu.org; Fri, 01 Dec 2023 11:00:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36422) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r95vq-0007XS-N6 for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 11:00:01 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r95va-0007EG-Sk; Fri, 01 Dec 2023 10:59:43 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=N72KIrySoAeEms6gICrWpWTIys9Z6W+aCWKw7MgrSnQ=; b=L3a3hdDOK8JgXUiXHvnE vZEmSdGpSE8QmuCjPzD9qBgJceIi03FrMlzal5gQiooKd0TyIBXSmZhVDp+bZFnY95XCEO4uzT9Ms a//s6zF2e0K6kUp+UKxcJ2kcWmMEpDPHkvKDG+IRodeM6Bemk/dvGl7LnyaM7eSj35KSaxq0XCjmN ivlRLNU21MnJpRNaQIvEe+0iAY1diIYaIE+gyQn2ajnJlYQhbsQJ5ZLhu9rPozjO8PZZUUcZ3vnGM 3dyheyRXWfT/tslTrpaxB5ZugLLPmcFql1bqSU2iujax/emCui7Bpg+NH/2evxzoOrkUaXVxkPwG1 7IE1OmIG5j7ONw==; Date: Fri, 01 Dec 2023 17:59:36 +0200 Message-Id: <83bkb9ap7b.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: (message from JD Smith on Fri, 1 Dec 2023 10:45:00 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <87ttp2ugsk.fsf@ledu-giraud.fr> <83h6l29dl8.fsf@gnu.org> <83fs0m9bp9.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, manuel@ledu-giraud.fr X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Fri, 1 Dec 2023 10:45:00 -0500 > Cc: Manuel Giraud , > 67533@debbugs.gnu.org > > > > > On Dec 1, 2023, at 10:36 AM, Eli Zaretskii wrote: > > > >> From: JD Smith > >> Date: Fri, 1 Dec 2023 10:21:19 -0500 > >> Cc: Manuel Giraud , > >> 67533@debbugs.gnu.org > >> > >> > >>> Btw, I wonder what you and JD expect from the (cons (point) -1) > >>> argument. The doc string says: > >>> > >>> If FROM is a cons, its car specifies a buffer position, and its cdr > >>> specifies the vertical offset in pixels from that position to the > >>> first screen line to be measured. > >>> > >>> What is the meaning of negative offset from the first line of the > >>> buffer? there's no screen line at that offset, so what do you expect > >>> that to do? Or what am I missing? > >> > >> In that case I would expect zero pixel height is returned. > > > > Why zero? Why not consider that undefined behavior? > > Depends on what the natural height on a non-existent line is. Zero makes sense to me. But I suppose returning height=nil or something else to indicate “I gave up” would also be reasonable. A non-existent line can have any height, including an infinite one. Since that line doesn't exist, any assertion about it cannot be disproved. From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 11:18:22 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 16:18:22 +0000 Received: from localhost ([127.0.0.1]:56017 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r96De-000864-3i for submit@debbugs.gnu.org; Fri, 01 Dec 2023 11:18:22 -0500 Received: from mail-io1-xd2c.google.com ([2607:f8b0:4864:20::d2c]:53566) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r96DX-00085l-W9 for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 11:18:20 -0500 Received: by mail-io1-xd2c.google.com with SMTP id ca18e2360f4ac-7b3870ee4easo69813239f.3 for <67533@debbugs.gnu.org>; Fri, 01 Dec 2023 08:18:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701447481; x=1702052281; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=uBFhzBem9NfliAA1luR9/Hl4U+hS4EysmBlIhEB1qKU=; b=IsTcGfnUZlGg6Ln04Sv8hkkt96ZOe3PHHoQdS/JJ8ymrFcQRfU71j116zjMfgbmQgb +IuxcmV+fMLmR44+2qtnRwCybAX0h4vsW6zkYySX/hBQ48rv7X1P3CuOBoAMwQ2xN7j3 F4+8ha/EIQ5RpYqM7RT7Xm4Oz/4n/QbFQUjusBlTL1fLhZtMnP6SYT7QekUN/t4oheRe UIM3K5NB/X17XkUlQulhjrjaEG+jCu885oa2oNOk7yl1ad/z25+brCuIFCtAhKmpWQKl g//JzbbtvyYVd1V+NT/g0cRofhW7nfApSGsZ/inVA7LqiVzsO6ySD/jDWmv4WTzrogyb Aoig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701447481; x=1702052281; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uBFhzBem9NfliAA1luR9/Hl4U+hS4EysmBlIhEB1qKU=; b=rTbu2MMxTG8RdRYUt2DFGO1cKBxYfFj4Mxhix75joJTATT190q3bg0SZWYRHqqzpEP OjtBARrQDsfyTUHnjm8Dva6xeDAN77g+1WtkxvUMGoeD0pIZ8boP6HezFZ/yuha4AvWr +JLiJy8dttXpAE6AQ7aHYk9fXYHy640B8FSFv7lN81WSISsnWizdyYbr0xz8cg3S2JPX K04jWhbC7hJdCHC0GA9D++u0Kw1IWr1GUTPNA9N8C+yhxUEBkQvCJzuPExnLP0T3H6TH Agbok2VosPUKiJBFEHOifkA1q2KhFhbXTyiJgEYnpMlZf2MFRjSJI+gRGGd2MUbHw9wt UIzQ== X-Gm-Message-State: AOJu0Yxd7wJd1syXSAlt2v2FCYMl8Qv5yBOeQjgDVpLkhl2ZEskdHJLs SCStekx1mfMXHmCS3BURP0s= X-Google-Smtp-Source: AGHT+IEx7kkbbH/fFN8UjPjA2+lajCneKKZysTNhE1eEsPoFb67oEz3fQBja6ikGPcEVKmJp/iCxFA== X-Received: by 2002:a6b:f107:0:b0:7b3:cc20:5746 with SMTP id e7-20020a6bf107000000b007b3cc205746mr12888059iog.19.1701447481349; Fri, 01 Dec 2023 08:18:01 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id e12-20020a02a50c000000b004665cf3e94dsm931325jam.2.2023.12.01.08.18.00 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Dec 2023 08:18:00 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements From: JD Smith In-Reply-To: <83bkb9ap7b.fsf@gnu.org> Date: Fri, 1 Dec 2023 11:17:49 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: <12BD906C-11C1-482E-B980-6F831CAD0B4E@gmail.com> References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <87ttp2ugsk.fsf@ledu-giraud.fr> <83h6l29dl8.fsf@gnu.org> <83fs0m9bp9.fsf@gnu.org> <83bkb9ap7b.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, Manuel Giraud X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Dec 1, 2023, at 10:59=E2=80=AFAM, Eli Zaretskii = wrote: >>>>> What is the meaning of negative offset from the first line of the >>>>> buffer? there's no screen line at that offset, so what do you = expect >>>>> that to do? Or what am I missing? >>>>=20 >>>> In that case I would expect zero pixel height is returned. >>>=20 >>> Why zero? Why not consider that undefined behavior? >>=20 >> Depends on what the natural height on a non-existent line is. Zero = makes sense to me. But I suppose returning height=3Dnil or something = else to indicate =E2=80=9CI gave up=E2=80=9D would also be reasonable. >=20 > A non-existent line can have any height, including an infinite one. > Since that line doesn't exist, any assertion about it cannot be > disproved. As a general statement, of course. But since the docs say: > The optional argument FROM, if non-nil, specifies the first text > position to consider, and defaults to the minimum accessible position > of the buffer. would it not be reasonable that (FROM . (- too-many-pixels)) would also = =E2=80=9Cdefault to the minimum accessible position=E2=80=9D, should the = offset prove to be too-many-pixels? Then, by symmetry, asking for pixel = measurements beyond the final accessible line should "default to the maximum accessible position of the buffer=E2=80=9D. Basically = clip the request at the window=E2=80=99s boundaries. But in any case, = the answer to this specific question is I believe a side issue for this = bug. From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 11:27:40 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 16:27:40 +0000 Received: from localhost ([127.0.0.1]:56023 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r96Me-0008JN-CQ for submit@debbugs.gnu.org; Fri, 01 Dec 2023 11:27:40 -0500 Received: from ledu-giraud.fr ([51.159.28.247]:24814) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r96Mb-0008JD-0l for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 11:27:39 -0500 DKIM-Signature: v=1; a=ed25519-sha256; c=simple/simple; s=ed25519; bh=pDOWoFhG /XbO0tyBkjQc0FAY+Jgj3DemhsJrdhEu+yo=; h=date:references:in-reply-to: subject:cc:to:from; d=ledu-giraud.fr; b=sA4IOtDKMHBvt7IpsFqPb4pVq6Gae9 6cMbikH+j7+Tma+xazJzDvkZXIkzqHyVhNPcUc5JreNwHQdqDap8/HCA== DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=rsa; bh=pDOWoFhG/XbO0tyB kjQc0FAY+Jgj3DemhsJrdhEu+yo=; h=date:references:in-reply-to:subject: cc:to:from; d=ledu-giraud.fr; b=Ox7LOVSN6lNy/cZRjDutRf8ek9Rb0MqlGVADD5 BJhtF2q6zV0jMGIzFFjBtSc6CT23KZojO3MZJeVkhfFZaR8QkINpLJ8odd9Jgbvbm460Lb fBAJxy3012H3rB7z2snJ5J1RknvQZzFe42cn6mx5A3KTVOmCoHbBlQnimEREbBwilJzgLa LH5c9Qwk8FuYVm55dCEOmz6/Hvv0Uc4SBp8oODjSxEWo0FXsD1ghAVJ1RGunZGOA7UtUio mvckjaw53t8gOd373I/UjslsDiVTA2mO2Wp1sNyovOgz8qRL+v1vHB4Ul2fHMnI7PLkAVj R2fmGtc1yGFB2tdkVWq8s3SA== Received: from computer ( [10.1.1.1]) by ledu-giraud.fr (OpenSMTPD) with ESMTPSA id b2444346 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Fri, 1 Dec 2023 17:27:26 +0100 (CET) From: Manuel Giraud To: Eli Zaretskii Subject: Re: bug#67533: SVG images confound position pixel measurements In-Reply-To: <83h6l29dl8.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 01 Dec 2023 16:55:47 +0200") References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <87ttp2ugsk.fsf@ledu-giraud.fr> <83h6l29dl8.fsf@gnu.org> Date: Fri, 01 Dec 2023 17:27:25 +0100 Message-ID: <87plzpvqfm.fsf@ledu-giraud.fr> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, jdtsmith@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: [...] > The patch I posted is supposed to fix only one issue: the fact that > the Y-dimension of the line above the image was shown as zero. AFAIU, > it is indeed not zero in the output you show above. Yes, so your patch is the correct fix. BTW, I was just trying to help with some more data point. > Btw, I wonder what you and JD expect from the (cons (point) -1) > argument. The doc string says: And I was not expecting anything here. I've just used the JD's example. -- Manuel Giraud From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 11:30:54 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 16:30:54 +0000 Received: from localhost ([127.0.0.1]:56028 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r96Pl-0008PY-V7 for submit@debbugs.gnu.org; Fri, 01 Dec 2023 11:30:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:33582) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r96Pi-0008PJ-IP for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 11:30:52 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r96PU-0004du-4i; Fri, 01 Dec 2023 11:30:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=KVB2RNpxd99YYOeRMeSTz72uvOb+GKrrpRzQlDoVo9g=; b=UNlf45oeinT6n4i09a97 ps3Z7enQctpGdVlAr451Cltm7yYNBKeKPxYzKjGmMw/eKLVDz3erhX0A91/rKot+FxS4cK4oMhH8c OgsNaSlzEfiw6J7HL+qeOhlcdOZStxK2IrgtyG8dlR7rRyHLfg4kyB6ZCPqBnYQMZEdufrwS4BkmZ dHd18iWDbRnPKBTefsxp/uM31oe+O0URmDWXHo20xwlJYMJbitKFIakCsvd0z3WdoPTxB/B/0V8vx 9E1uG/9UQ1+Un+fGJv8xsaST3saH4BeNg5wWJyZzHmj4PK039TvpIxC2ZGmO8ZJHwLAPI4c9gHlUb aV3Ph6h9IXWsYw==; Date: Fri, 01 Dec 2023 18:30:27 +0200 Message-Id: <838r6danrw.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: <12BD906C-11C1-482E-B980-6F831CAD0B4E@gmail.com> (message from JD Smith on Fri, 1 Dec 2023 11:17:49 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <87ttp2ugsk.fsf@ledu-giraud.fr> <83h6l29dl8.fsf@gnu.org> <83fs0m9bp9.fsf@gnu.org> <83bkb9ap7b.fsf@gnu.org> <12BD906C-11C1-482E-B980-6F831CAD0B4E@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, manuel@ledu-giraud.fr X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Fri, 1 Dec 2023 11:17:49 -0500 > Cc: Manuel Giraud , > 67533@debbugs.gnu.org > > >>> Why zero? Why not consider that undefined behavior? > >> > >> Depends on what the natural height on a non-existent line is. Zero makes sense to me. But I suppose returning height=nil or something else to indicate “I gave up” would also be reasonable. > > > > A non-existent line can have any height, including an infinite one. > > Since that line doesn't exist, any assertion about it cannot be > > disproved. > > As a general statement, of course. But since the docs say: > > > The optional argument FROM, if non-nil, specifies the first text > > position to consider, and defaults to the minimum accessible position > > of the buffer. > > > would it not be reasonable that (FROM . (- too-many-pixels)) would also “default to the minimum accessible position”, should the offset prove to be too-many-pixels? No, "defaults to" according to our conventions means "if it's nil or omitted". Nonsense values don't activate the default and are not replaced by the default. Unless we say something like "any other value is taken as...". From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 11:31:48 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 16:31:48 +0000 Received: from localhost ([127.0.0.1]:56033 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r96Qe-0008R6-EU for submit@debbugs.gnu.org; Fri, 01 Dec 2023 11:31:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38078) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r96Qb-0008Qr-TG for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 11:31:46 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r96QN-0004s0-Q4; Fri, 01 Dec 2023 11:31:31 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=s9jiw+KsP0DEAsRjmQwBRk2G6lByiYIOyQWUWI8GpCE=; b=L9jPsyWZlV/u h/Ya9E1fRs7L64mEIFS3U+Q9S1oHnXERma5or3AbyFhZRhKdspPKz7O9gvlbI0fwWWe7OOcYx/ap8 HR/8h4olfzTv59aDI715NWNgdjuiBfXhvqwm7z67caou5NRf6z6FNXplviyx+dRwRLCzixvq7T5S3 HoN/1Mw6OSONhQGF3P8ZhoQ6E4gWOMkOqZQFh2WOMpLOqPiyfCstqaiffAJyIS4NZXuYY0DNCwfmc 0x1aetrvBlqs8VZtMb03ixGir5nQxSSSZJJA3RWkBbiF/nrkXn8PsPVRY2EdGi2qsA/UB4IFn3wdY 0K3kTUVJ8pG7hVaPo8eLsA==; Date: Fri, 01 Dec 2023 18:31:28 +0200 Message-Id: <837clxanq7.fsf@gnu.org> From: Eli Zaretskii To: Manuel Giraud In-Reply-To: <87plzpvqfm.fsf@ledu-giraud.fr> (message from Manuel Giraud on Fri, 01 Dec 2023 17:27:25 +0100) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <87ttp2ugsk.fsf@ledu-giraud.fr> <83h6l29dl8.fsf@gnu.org> <87plzpvqfm.fsf@ledu-giraud.fr> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, jdtsmith@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Manuel Giraud > Cc: jdtsmith@gmail.com, 67533@debbugs.gnu.org > Date: Fri, 01 Dec 2023 17:27:25 +0100 > > Eli Zaretskii writes: > > > The patch I posted is supposed to fix only one issue: the fact that > > the Y-dimension of the line above the image was shown as zero. AFAIU, > > it is indeed not zero in the output you show above. > > Yes, so your patch is the correct fix. BTW, I was just trying to help > with some more data point. Thanks. > > Btw, I wonder what you and JD expect from the (cons (point) -1) > > argument. The doc string says: > > And I was not expecting anything here. I've just used the JD's example. Understood. From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 01 17:09:21 2023 Received: (at 67533) by debbugs.gnu.org; 1 Dec 2023 22:09:21 +0000 Received: from localhost ([127.0.0.1]:56231 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9BhJ-0003bE-6B for submit@debbugs.gnu.org; Fri, 01 Dec 2023 17:09:21 -0500 Received: from mail-yw1-x1129.google.com ([2607:f8b0:4864:20::1129]:50435) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9BhD-0003au-Np for 67533@debbugs.gnu.org; Fri, 01 Dec 2023 17:09:19 -0500 Received: by mail-yw1-x1129.google.com with SMTP id 00721157ae682-59b5484fbe6so29241297b3.1 for <67533@debbugs.gnu.org>; Fri, 01 Dec 2023 14:09:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701468541; x=1702073341; darn=debbugs.gnu.org; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :from:to:cc:subject:date:message-id:reply-to; bh=uKJR7Hv9/oCO1BziG298Pp8gMm84gTk2mt6mAQC5RNY=; b=IgekjjfLYurtw48C8pcrE26D8zGH14avfqwfoguhFkIApdKEo0iG96AEq10/MbTngt 77wlycpKWbObDQlnwzN89dWY0FwhwrP5tktJEAwcLkJ6Ht+oX2PjY79ZcN49kExw+G9s idb9AxRwIOlS6LbiMpeULCz3LmKlxpPo7NDFypS5Clgyr6CFNc7uSDJFueTA7ZJTWfuk /Ko5m0llDs5TQYJzuUy3jIB3UbsSlgcoLAmcVJRxMp5kCd1vICfpW/E/jnvV/B6ya1g3 BYIPRWsoVVuvr41IA2A/J+YrbCrYi5EKcbPr5Qm8o8ilodZpgvHiHvWenvghNNu3e73Z fPLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701468541; x=1702073341; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uKJR7Hv9/oCO1BziG298Pp8gMm84gTk2mt6mAQC5RNY=; b=SoxaAYH0Lz5F0SO6TM1OtQN5oaV/SZexOdngyxbMPVE5cuoDWxD3JG6wJrysyJiV6V 7kMRvLYie/OkmFPCRM3YOIWxT+RXGneTEwI/wG/99MllGH8YQIHB1U4n6MXjBOVvOOjW BsZoj0oqJyLkxvoWYdfamvkfsV0K2Nx43yLKXl+X38Ntl1BJ0HCfCXSDDr+eEzDKh5+b d1k8isfXfAbZr/vQNh0rEg7yF1lRqqsO+RWgsApiRhdFBI0WJV8hfn7J6kAWpEWj/KJ5 KeGcmfYhUgN9SYjUt7i8jIciferUHGyC+NUgxPuP/QFJrksSlc3XiYzbNDwSZIycEYOX N/pQ== X-Gm-Message-State: AOJu0YzRdFmuAspwCZxL2ne/RsFXLwnzBmvjU+33MekRNOVjTwAP52Vj piZAnl/mO1gvEhZBtxhwdn0= X-Google-Smtp-Source: AGHT+IGIy6JvvsZBm65K/DrjyELLn3qYIdmNcmzYyJoqF7aEm9WcBPPGDr6ATco2LZiQhC+GPfXQHg== X-Received: by 2002:a81:9a42:0:b0:5d3:7c6d:59b1 with SMTP id r63-20020a819a42000000b005d37c6d59b1mr5522567ywg.16.1701468540664; Fri, 01 Dec 2023 14:09:00 -0800 (PST) Received: from smtpclient.apple ([131.183.131.33]) by smtp.gmail.com with ESMTPSA id x67-20020a817c46000000b0057a8de72338sm1373919ywc.68.2023.12.01.14.08.59 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Dec 2023 14:08:59 -0800 (PST) From: JD Smith Content-Type: multipart/alternative; boundary="Apple-Mail=_E982381F-4296-4C15-B888-0CE847095A82" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements Date: Fri, 1 Dec 2023 17:04:59 -0500 References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> To: Eli Zaretskii , 67533@debbugs.gnu.org In-Reply-To: <837clybds3.fsf@gnu.org> Message-Id: X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_E982381F-4296-4C15-B888-0CE847095A82 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Dec 1, 2023, at 2:08=E2=80=AFAM, Eli Zaretskii = wrote: >=20 > Thanks, but I need recipes I could reproduce on my system, and > reproduce relatively easily. =20 Please find a stand-alone reproduction code which can separately test = both text-property and overlay inline SVGs at this gist = . = See the header for instructions. =20 You should get many reported errors in which the size above is larger = than expected, but as you narrow your frame and re-run the check, = you=E2=80=99ll eventually find some images reporting 0 height above. = Interestingly, for the same frame width, overlays produce some of the = same but overall fewer errors than text-properties, using precisely the = same images for =E2=80=98display. The report also reveals that the posn-x-y of the mis-reporting images is = usually wrong, which is at least partially responsible for incorrect = pixel position measurements. =20 The one bug in my original org file I haven=E2=80=99t been able to = reproduce is random text characters (usually on a line with a bad image) = misreporting pixel measurements. But I could certainly imagine how in = more complex files this could get out of sync.=20 BTW, I haven=E2=80=99t tested it, but I do not think this misbehavior is = specific to SVG images.= --Apple-Mail=_E982381F-4296-4C15-B888-0CE847095A82 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8
On Dec 1, = 2023, at 2:08=E2=80=AFAM, Eli Zaretskii <eliz@gnu.org> = wrote:

Thanks, but I need = recipes I could reproduce on my system, and
reproduce relatively easily. =  

Please find a stand-alone = reproduction code which can separately test both text-property and = overlay inline SVGs at this gist.  See the header for instructions. =  

You should get many reported errors in = which the size above is larger than expected, but as you narrow your = frame and re-run the check, you=E2=80=99ll eventually find some images = reporting 0 height above.  Interestingly, for the same frame width, = overlays produce some of the same but overall fewer errors than = text-properties, using precisely the same images for = =E2=80=98display.

The report also reveals that = the posn-x-y of the mis-reporting images is usually wrong, which is at = least partially responsible for incorrect pixel position measurements. =  

The one bug in my original org file I = haven=E2=80=99t been able to reproduce is random text characters = (usually on a line with a bad image) misreporting pixel measurements. =  But I could certainly imagine how in more complex files this could = get out of sync. 

BTW, I haven=E2=80=99t = tested it, but I do not think this misbehavior is specific to SVG = images.
= --Apple-Mail=_E982381F-4296-4C15-B888-0CE847095A82-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 02 02:31:16 2023 Received: (at 67533) by debbugs.gnu.org; 2 Dec 2023 07:31:16 +0000 Received: from localhost ([127.0.0.1]:56579 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9KT5-0007AI-Ps for submit@debbugs.gnu.org; Sat, 02 Dec 2023 02:31:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44192) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9KT4-0007A4-BO for 67533@debbugs.gnu.org; Sat, 02 Dec 2023 02:31:14 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r9KSp-0003UA-Bf; Sat, 02 Dec 2023 02:30:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=j1pmKtK8uO2CeEm2NeQGVxkzOhtVHGhuxhXLAqsddLc=; b=BoUX9zFlazkIUFgVhmEl GTEf+KT6SF2c8QbrGlF5BiugV5vpkjecrqxQ7gaPP6ytkoDyUMpR8hcRADXto3Pqv7xlGQsBzSrKi Wmt89C5c+Kemx+F2zfGK9XXAIb5rQAsZItqkbKj3ILWPtHK+8PlJK4vQ1zlLW3mHVQuyQqQVf1OYt LVDZeyPOcnnrs/WDr7HW3+Z2nYlOCsTpf9IEY0ot1YbInZvrNn4JZWRIqkCRIsgP276YYoGgJcclZ yy1K3Dqlj+VZN8GlZ77RFMTxyBHPpbXJVM2XPldj98wjoDkSCWv2Vk5GzYZig8aQB5up3r5gca3Zd DDoXPaTlAf8RRQ==; Date: Sat, 02 Dec 2023 09:30:55 +0200 Message-Id: <83wmtx83io.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: (message from JD Smith on Fri, 1 Dec 2023 17:04:59 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Fri, 1 Dec 2023 17:04:59 -0500 > > On Dec 1, 2023, at 2:08 AM, Eli Zaretskii wrote: > > Thanks, but I need recipes I could reproduce on my system, and > reproduce relatively easily. > > Please find a stand-alone reproduction code which can separately test both text-property and overlay > inline SVGs at this gist. See the header for instructions. Thanks, but I'd appreciate more focused pointers to specific problems, see below. I also seem to be unable to reproduce the problems(?). > You should get many reported errors in which the size above is larger than expected, but as you > narrow your frame and re-run the check, you’ll eventually find some images reporting 0 height above. > Interestingly, for the same frame width, overlays produce some of the same but overall fewer errors > than text-properties, using precisely the same images for ‘display. What is/are the specific problem(s) I should be looking into? Is the problem only the zero size when it is reported? Or are there also other problems, and if so, how do I recognize where and when they happen? > The report also reveals that the posn-x-y of the mis-reporting images is usually wrong, which is at > least partially responsible for incorrect pixel position measurements. Again, can you point me to the situations when this happens and tell how to realize it did happen? I'd need to reproduce those specific situations under a debugger. When I run "M-x my/check-buffer-pixel-values" in the buffer created by "M-x my/test-svg-positions", all I see is a single message "End of buffer", nothing else. I've resized the frame horizontally many times, and I still see only this single message. So either the code somehow doesn't work on my system, or I am missing some important part of the reproduction recipe. Also, your test file doesn't use lexical-binding -- should it? Or does it not matter for the purposes of reproducing these issues? > The one bug in my original org file I haven’t been able to reproduce is random text characters (usually > on a line with a bad image) misreporting pixel measurements. Misreporting pixel measurements of what? > BTW, I haven’t tested it, but I do not think this misbehavior is specific to SVG images. I don't think it is. The display engine has no idea about the source of the image data, all it cares about is that it is an image of a given size and given attributes. From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 02 08:36:37 2023 Received: (at 67533) by debbugs.gnu.org; 2 Dec 2023 13:36:37 +0000 Received: from localhost ([127.0.0.1]:56904 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9QAe-0007Po-Ht for submit@debbugs.gnu.org; Sat, 02 Dec 2023 08:36:37 -0500 Received: from mail-il1-x12f.google.com ([2607:f8b0:4864:20::12f]:45071) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9QAc-0007Pb-Nj for 67533@debbugs.gnu.org; Sat, 02 Dec 2023 08:36:35 -0500 Received: by mail-il1-x12f.google.com with SMTP id e9e14a558f8ab-35d624b0415so1007915ab.2 for <67533@debbugs.gnu.org>; Sat, 02 Dec 2023 05:36:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701524179; x=1702128979; darn=debbugs.gnu.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=uHIc5qjQmBRyFoL88uLe5JSgSgUHnPjMD6HIi1+1GEY=; b=dyKG6rDBM3Oma7zDr3DvR9R6kVQ1fmK/wPntXNfMs8hYDJMA+96q4vvm7d3egrYL9i dEfsQqRG0UIoRUlQZLutGl20hxcebT983fWfGElrrQtGRRHGfeHwQcYgrsXpKAQv36Ws kDvDa0uKz+qksWD2VBab81uDBmmqsW+HS8qEXLJehsylPxfDLJt9LU4rF1kt2NOrqy/t 2nkjj1meL4NKY23Un0o5XPc3H6gVmlY4WXuaS42X40+QYWuMqnQCkB7AK60y0h2VNp2v fjL5ZxEf7vJm0/HOLx4h9/2vkLeF2OTp6AZIoO3qz/pxJ3Wp0NVBFLvKHABw2kYvLYvD ag0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701524179; x=1702128979; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uHIc5qjQmBRyFoL88uLe5JSgSgUHnPjMD6HIi1+1GEY=; b=jB8UTmKSzJKwsYFlJDNl6ZB+/az5rAv7O5J2f8OwWJA4k0I01OFCbTJ1peUIzzFYcH bD8upaKkxjsmjGpF3GHFUSn2qRwSmIkiGzjLxUsh4F+wAikbdFTfDMxQI8Nq9kH4mRRB yYP7CPgCqqp4iSsKYMdYlSru7t8pLcu3tzDiTO+pDwlCgXNGaTEl3/E60vELEDbS8V35 jdH5DyOjpXTqUqHns76514FtnkMGxkN6JewVvjtXOKrL05/YKTYWHo9gqYSCdJI6DMVP aLT57yvjZgNdl14cQkFOKz258WZauzTinYaFDSlwPprHZgv3CXNsQsbkfq1JtB4PIgHo 7VTQ== X-Gm-Message-State: AOJu0YwHmIQrEr8JUu7nCShRDmVrhJnoCb2tUtZlanc9yg58+9AIO+N3 EtUiLFC6rEncOsKbs+YwB0TTMpHTswk= X-Google-Smtp-Source: AGHT+IGlm57wZIbQy2KM7FecQdbmmIYNEc+bSNFvOoHRzf61hNjmdExzO93+KTdl6lIjIIygmrtcuA== X-Received: by 2002:a05:6e02:1b04:b0:35d:3ac4:b7cb with SMTP id i4-20020a056e021b0400b0035d3ac4b7cbmr1863571ilv.19.1701524179552; Sat, 02 Dec 2023 05:36:19 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id r14-20020a92760e000000b0035ca73322f9sm361193ilc.73.2023.12.02.05.36.18 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 02 Dec 2023 05:36:18 -0800 (PST) From: JD Smith Message-Id: <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_BD49FD27-DAC9-4AC4-8227-470489AB9B1A" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements Date: Sat, 2 Dec 2023 08:36:07 -0500 In-Reply-To: <83wmtx83io.fsf@gnu.org> To: Eli Zaretskii References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_BD49FD27-DAC9-4AC4-8227-470489AB9B1A Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Dec 2, 2023, at 2:30=E2=80=AFAM, Eli Zaretskii = wrote: >=20 >> From: JD Smith >> Date: Fri, 1 Dec 2023 17:04:59 -0500 >>=20 >> On Dec 1, 2023, at 2:08=E2=80=AFAM, Eli Zaretskii = wrote: >>=20 >> Thanks, but I need recipes I could reproduce on my system, and >> reproduce relatively easily. =20 >>=20 >> Please find a stand-alone reproduction code which can separately test = both text-property and overlay >> inline SVGs at this gist. See the header for instructions. =20 >=20 > Thanks, but I'd appreciate more focused pointers to specific problems, > see below. I also seem to be unable to reproduce the problems(?). Strange. Both of my ports here (NS and Mac) show the same issue. Did = you check the svg-pixel-demo-report buffer the header mentions, where = the mismatch measurement information gets reported? The specific = problems encountered are listed in the report buffer, updated with = my/check-buffer-pixel-values. For example, at a standard width of 80 = characters, I get this report: SVG Position analysis for svg-pixel-demo (width 80, text-properties) Incorrect at point=3D 34: line 2 at (224 . 14) (image): expected 14 = got 28 Incorrect at point=3D 99: line 3 at (244 . 43) (image): expected 29 = got 46 Incorrect at point=3D126: line 4 at (42 . 75) (image): expected 32 = got 46 Incorrect at point=3D162: line 4 at (345 . 75) (image): expected 32 = got 52 Incorrect at point=3D210: line 5 at (133 . 110) (image): expected 35 = got 49 So in this case, 5 of the image locations (of 7) are showing sizes of = entities one pixel above them as too large (with sizes sometimes not = matching any line height). At small window widths (like 25-30 = characters) many zero heights start showing up. Running the check in a = normal text window produces an empty report (no errors).=20 > When I run "M-x my/check-buffer-pixel-values" in the buffer created by > "M-x my/test-svg-positions", all I see is a single message "End of > buffer", nothing else. =20 Perhaps you did not check the report buffer? I usually am opening that = in another frame.=20 > Also, your test file doesn't use lexical-binding -- should it? Or > does it not matter for the purposes of reproducing these issues? I neglected that. I don=E2=80=99t think it makes a difference, but have = now included it, and fixed a couple of resulting unused variable = complaints. Please re-download the gist = and = try it again to be sure. >> The one bug in my original org file I haven=E2=80=99t been able to = reproduce is random text characters (usually >> on a line with a bad image) misreporting pixel measurements. >=20 > Misreporting pixel measurements of what? Same thing as for the images: the pixel heights of the entity at an = offset of -1 pixels. In the demo code I=E2=80=99ve written, this seems = to occur only on characters with image 'display (overlay/text-property). = In my (much larger) org mode with latex preview file, it sometimes = happens on regular text characters. I=E2=80=99m hoping/expecting = whatever fix we find for this problem corrects that too.=20 >> BTW, I haven=E2=80=99t tested it, but I do not think this misbehavior = is specific to SVG images. >=20 > I don't think it is. The display engine has no idea about the source > of the image data, all it cares about is that it is an image of a > given size and given attributes. Makes sense. That comports with the fact that I=E2=80=99ve seen similar = issues with PNG overlays. --Apple-Mail=_BD49FD27-DAC9-4AC4-8227-470489AB9B1A Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

On Dec 2, 2023, at 2:30=E2=80=AFAM, Eli Zaretskii = <eliz@gnu.org> wrote:

From: JD Smith <jdtsmith@gmail.com>
Date: Fri, 1 = Dec 2023 17:04:59 -0500

On Dec 1, 2023, at 2:08=E2=80=AFAM, Eli = Zaretskii <eliz@gnu.org> wrote:

Thanks, but I need recipes = I could reproduce on my system, and
reproduce relatively easily. =  

Please find a stand-alone reproduction code which can = separately test both text-property and overlay
inline SVGs at this = gist.  See the header for instructions. =  

Thanks, but I'd appreciate more focused = pointers to specific problems,
see below.  I also seem to be = unable to reproduce the = problems(?).

Strange. =  Both of my ports here (NS and Mac) show the same issue. =  Did you check the svg-pixel-demo-report buffer the header = mentions, where the mismatch measurement information gets reported? =  The specific problems encountered are listed in the report buffer, = updated with my/check-buffer-pixel-values.  For example, at a = standard width of 80 characters, I get this = report:

SVG Position analysis = for svg-pixel-demo (width 80, = text-properties)

Incorrect at point=3D 34: line  2 at =   (224 . 14) (image): expected 14 got = 28
Incorrect at point=3D 99: = line  3 at   (244 . 43) (image): expected 29 got = 46
Incorrect at point=3D126: = line  4 at    (42 . 75) (image): expected 32 got = 46
Incorrect at point=3D162: = line  4 at   (345 . 75) (image): expected 32 got = 52
Incorrect at point=3D210: = line  5 at  (133 . 110) (image): expected 35 got = 49

So in this case, 5 of the image locations (of 7) are showing = sizes of entities one pixel above them as too large (with sizes = sometimes not matching any line height).  At small window widths = (like 25-30 characters) many zero heights start showing up.   = Running the check in a normal text window produces an empty report (no = errors). 

When I run = "M-x my/check-buffer-pixel-values" in the buffer created by
"M-x = my/test-svg-positions", all I see is a single message "End = of
buffer", nothing else. =  

Perhaps you did = not check the report buffer? I usually am opening that in another = frame. 

Also, your = test file doesn't use lexical-binding -- should it?  Or
does it = not matter for the purposes of reproducing these = issues?

I neglected = that.  I don=E2=80=99t think it makes a difference, but have now = included it, and fixed a couple of resulting unused variable complaints. =  Please re-download the gist and try it again to be = sure.

The one bug in my original org file I haven=E2=80=99t been = able to reproduce is random text characters (usually
on a line with a = bad image) misreporting pixel = measurements.

Misreporting pixel measurements of = what?

Same thing as for = the images: the pixel heights of the entity at an offset of -1 pixels. =  In the demo code I=E2=80=99ve written, this seems to occur only on = characters with image 'display (overlay/text-property).  In my = (much larger) org mode with latex preview file, it sometimes happens on = regular text characters.  I=E2=80=99m hoping/expecting whatever fix = we find for this problem corrects that too. 

BTW, I haven=E2=80=99t = tested it, but I do not think this misbehavior is specific to SVG = images.

I don't think it is.  The display = engine has no idea about the source
of the image data, all it cares = about is that it is an image of a
given size and given = attributes.

Makes sense. =  That comports with the fact that I=E2=80=99ve seen similar issues = with PNG overlays.

= --Apple-Mail=_BD49FD27-DAC9-4AC4-8227-470489AB9B1A-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 02 09:18:46 2023 Received: (at 67533) by debbugs.gnu.org; 2 Dec 2023 14:18:46 +0000 Received: from localhost ([127.0.0.1]:56968 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9QpR-00008U-UZ for submit@debbugs.gnu.org; Sat, 02 Dec 2023 09:18:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49538) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9QpP-00008I-TS for 67533@debbugs.gnu.org; Sat, 02 Dec 2023 09:18:44 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r9QpA-0005cK-Og; Sat, 02 Dec 2023 09:18:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=+pIdGDpxoPnaxI9xNNQJoDfL82m7KADJDR21zJn47ss=; b=Ld5yAgcBnAqa anKIWheb5ABveTKBDa4O7xjGS+WZc7RrzPZS36bTS82Sp6DPlcWBoj+Onr914SplzkV+hdmgmA0hS YaYlXr1GyfqRrBuDw0EsTgOvlPcT12LlU2OJ1Np696omIyyZ8GiBVWcPCQqbAOgcjRcuEINptAFBS qbkH5MeZp8AZY9c4vGxNcNtq8Gte41pYXdg0FEfemQXoGHbDDKgH0kpGxXWW/PSYxhaJ2zkXaBxL0 joEJACrN2fqepwO9c9ARrxo3+1bAlpmf9UJETnTOL63xPUdWzJFc0NNGm34ynK/9ogw+bBwa6XO28 n14lLPby5XhCT6xcJLgnkg==; Date: Sat, 02 Dec 2023 16:18:28 +0200 Message-Id: <835y1g8z7v.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> (message from JD Smith on Sat, 2 Dec 2023 08:36:07 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Sat, 2 Dec 2023 08:36:07 -0500 > Cc: 67533@debbugs.gnu.org > > Strange. Both of my ports here (NS and Mac) show the same issue. Did you check the > svg-pixel-demo-report buffer the header mentions, where the mismatch measurement information > gets reported? The specific problems encountered are listed in the report buffer, updated with > my/check-buffer-pixel-values. For example, at a standard width of 80 characters, I get this report: > > SVG Position analysis for svg-pixel-demo (width 80, text-properties) > > Incorrect at point= 34: line 2 at (224 . 14) (image): expected 14 got 28 > Incorrect at point= 99: line 3 at (244 . 43) (image): expected 29 got 46 > Incorrect at point=126: line 4 at (42 . 75) (image): expected 32 got 46 > Incorrect at point=162: line 4 at (345 . 75) (image): expected 32 got 52 > Incorrect at point=210: line 5 at (133 . 110) (image): expected 35 got 49 I never understood I need to look in another buffer. I will look into these. > So in this case, 5 of the image locations (of 7) are showing sizes of entities one pixel above them as > too large (with sizes sometimes not matching any line height). At small window widths (like 25-30 > characters) many zero heights start showing up. Running the check in a normal text window > produces an empty report (no errors). So any messages in that buffer are problems in your opinion? Or just those which state zero height? From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 02 14:39:41 2023 Received: (at 67533) by debbugs.gnu.org; 2 Dec 2023 19:39:41 +0000 Received: from localhost ([127.0.0.1]:58674 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9Vq0-00060S-Ov for submit@debbugs.gnu.org; Sat, 02 Dec 2023 14:39:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35212) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9Vpz-00060F-0D for 67533@debbugs.gnu.org; Sat, 02 Dec 2023 14:39:39 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r9Vpk-0002sL-3K; Sat, 02 Dec 2023 14:39:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=V0kGCj5C6kGdNBx08RFzzNox3QKAdg772M/9IPL3kR4=; b=fPsr8X18Fu5d hVn4jsQXrOqkbYOOCKlmnHyM+ms+KIfof+qVJDoTcaN8zEoVvgSUWtMfkTSL5Gwmc1S+0fdrFKJjR 1bM6aY5lZ/+B4O4TWe2MzUbZ+BJ5bazyuQVQ51wC3FlhA1c9mojJkOGiIDDIWeBzCvHl3B4iGSPCx Y4KosrY/ei9WwwygKyES6cUnwOHNdgYOv5En0Dlyh13nSRUTQxw2xgA78nbPJPzaYhuNcHi+mQVcY EQylbWJTGfn4cMTXwlDXpkDlbINE0uT99AGkMADJ4Fdjs90STM/JriD1zmjikFPWvtgz+oKZi7ai1 XdOXpHzYepJoppUlcyNf8w==; Date: Sat, 02 Dec 2023 21:39:22 +0200 Message-Id: <8334wk8kd1.fsf@gnu.org> From: Eli Zaretskii To: jdtsmith@gmail.com In-Reply-To: <835y1g8z7v.fsf@gnu.org> (message from Eli Zaretskii on Sat, 02 Dec 2023 16:18:28 +0200) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 67533@debbugs.gnu.org > Date: Sat, 02 Dec 2023 16:18:28 +0200 > From: Eli Zaretskii > > > From: JD Smith > > Date: Sat, 2 Dec 2023 08:36:07 -0500 > > Cc: 67533@debbugs.gnu.org > > > > Strange. Both of my ports here (NS and Mac) show the same issue. Did you check the > > svg-pixel-demo-report buffer the header mentions, where the mismatch measurement information > > gets reported? The specific problems encountered are listed in the report buffer, updated with > > my/check-buffer-pixel-values. For example, at a standard width of 80 characters, I get this report: > > > > SVG Position analysis for svg-pixel-demo (width 80, text-properties) > > > > Incorrect at point= 34: line 2 at (224 . 14) (image): expected 14 got 28 > > Incorrect at point= 99: line 3 at (244 . 43) (image): expected 29 got 46 > > Incorrect at point=126: line 4 at (42 . 75) (image): expected 32 got 46 > > Incorrect at point=162: line 4 at (345 . 75) (image): expected 32 got 52 > > Incorrect at point=210: line 5 at (133 . 110) (image): expected 35 got 49 > > I never understood I need to look in another buffer. I will look into > these. Please try the patch below and see if any problems remain. diff --git a/src/xdisp.c b/src/xdisp.c index 0b2508c..cc95ab3 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11436,7 +11436,7 @@ window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to, /* Start at the beginning of the line containing FROM. Otherwise IT.current_x will be incorrectly set to zero at some arbitrary non-zero X coordinate. */ - reseat_at_previous_visible_line_start (&it); + move_it_by_lines (&it, 0); it.current_x = it.hpos = 0; if (IT_CHARPOS (it) != start) { @@ -11513,6 +11513,8 @@ window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to, the width of the last buffer position manually. */ if (IT_CHARPOS (it) > end) { + int end_y = it.current_y; + end--; RESTORE_IT (&it, &it2, it2data); x = move_it_to (&it, end, to_x, max_y, -1, move_op); @@ -11525,8 +11527,13 @@ window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to, /* DTRT if ignore_line_at_end is t. */ if (!NILP (ignore_line_at_end)) - doff = (max (it.max_ascent, it.ascent) - + max (it.max_descent, it.descent)); + { + /* If END-1 is on the previous screen line, we need to + account for the vertical dimensions of previous line. */ + if (it.current_y < end_y) + doff = (max (it.max_ascent, it.ascent) + + max (it.max_descent, it.descent)); + } else { it.max_ascent = max (it.max_ascent, it.ascent); From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 02 16:45:05 2023 Received: (at 67533) by debbugs.gnu.org; 2 Dec 2023 21:45:05 +0000 Received: from localhost ([127.0.0.1]:58853 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9XnN-0000qr-5u for submit@debbugs.gnu.org; Sat, 02 Dec 2023 16:45:05 -0500 Received: from mail-io1-xd30.google.com ([2607:f8b0:4864:20::d30]:43209) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9XnL-0000q3-Vr for 67533@debbugs.gnu.org; Sat, 02 Dec 2023 16:45:04 -0500 Received: by mail-io1-xd30.google.com with SMTP id ca18e2360f4ac-7b3968cc62aso73280039f.0 for <67533@debbugs.gnu.org>; Sat, 02 Dec 2023 13:44:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701553488; x=1702158288; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=oKgxx/U9U1ETd9nPNL8F5DF9ci1NvM7F9kgZiJEaTns=; b=RJ9cqadAMgLMK8zVTq5G0Z2kFcLA/AK774Ro5yM8M0uHE+xPNiICkQC+k6nO5mXn0K jzTsfdsapHqmnjuxHW7JsW4wnHfeC6D1nlzGkFlrBNMBT/D50KXfNQbmkaozQWjfwLco j8xZjD+u6G/7iZvCtIPZRSFHOA/uONkCNs05Mm7XuqC2hDk53N3jla9iqfQKblimjDCU bxc06auUQvEx8Bj6B29FGyTuKAuf/2WIlgQQLlch+ZXW3GCT9nMEmS6dYWs+HHPdUJeI JATvd5AIYVQviKwJEntSCXZ6G30u0Zebkk+MjipfY1e9ioogWqduMNpN+GFIq4Lcin0H bZig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701553488; x=1702158288; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oKgxx/U9U1ETd9nPNL8F5DF9ci1NvM7F9kgZiJEaTns=; b=K36kyg63CkJ4VD+LVuHqf30kWB+/yshg7380TNWQQn6sKa9l8Pt90KWvlgWLen+Ouo McFVwN7wEAci9H/kKsp+v56WlqUIW2km8WuPFVU/zdDrZN/T6omYGSwJOaAEynnA6Lri OdZ3jjJsLZcuF3n2IgTuMudSHTfPEkGZeQG8UMTfX6GARgmWTcxMNn8FIMmK2hbcI+Ok P9p8hN5uSpMrKkRSwl5eZJaL0WkPmwH6YaWaBj+hOFnxOrrV47Ad/DvsA0rlyQh8UBcW QqOi8Q2os1h6Lss2cIMbFGjRg6CZLsZ5lrKfx4c/8RPlc6jppHAT4z7dnFaGYQ49v/qR ztAw== X-Gm-Message-State: AOJu0YzP0mi+YGD5tJ8GmFR5ouPv9kEyYVkk06wN6O3gyHZASWGFz5Mg S6tnoVUWOxOgCAYR1iourLc= X-Google-Smtp-Source: AGHT+IFWcW3Ug9jD3o+1GMJ0CxjcFQIiQZGLfYmpOSTZ2z+yil7VgwSxPMLoIzgEoEO2d0sTlMaZZA== X-Received: by 2002:a05:6e02:1a81:b0:35d:5fcb:98b9 with SMTP id k1-20020a056e021a8100b0035d5fcb98b9mr789482ilv.33.1701553488643; Sat, 02 Dec 2023 13:44:48 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id n20-20020a02a914000000b0043978165d54sm1610103jam.104.2023.12.02.13.44.47 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 02 Dec 2023 13:44:48 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements From: JD Smith In-Reply-To: <8334wk8kd1.fsf@gnu.org> Date: Sat, 2 Dec 2023 16:44:37 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Thanks for your work. The port I use has fallen a few weeks behind = master and the patches to xdisp.c unfortunately don=E2=80=99t apply = cleanly. I=E2=80=99ll see about building an NS port and report back.=20 > On Dec 2, 2023, at 2:39=E2=80=AFPM, Eli Zaretskii = wrote: >=20 >> Cc: 67533@debbugs.gnu.org >> Date: Sat, 02 Dec 2023 16:18:28 +0200 >> From: Eli Zaretskii >>=20 >>> From: JD Smith >>> Date: Sat, 2 Dec 2023 08:36:07 -0500 >>> Cc: 67533@debbugs.gnu.org >>>=20 >>> Strange. Both of my ports here (NS and Mac) show the same issue. = Did you check the >>> svg-pixel-demo-report buffer the header mentions, where the mismatch = measurement information >>> gets reported? The specific problems encountered are listed in the = report buffer, updated with >>> my/check-buffer-pixel-values. For example, at a standard width of = 80 characters, I get this report: >>>=20 >>> SVG Position analysis for svg-pixel-demo (width 80, text-properties) >>>=20 >>> Incorrect at point=3D 34: line 2 at (224 . 14) (image): expected = 14 got 28 >>> Incorrect at point=3D 99: line 3 at (244 . 43) (image): expected = 29 got 46 >>> Incorrect at point=3D126: line 4 at (42 . 75) (image): expected = 32 got 46 >>> Incorrect at point=3D162: line 4 at (345 . 75) (image): expected = 32 got 52 >>> Incorrect at point=3D210: line 5 at (133 . 110) (image): expected = 35 got 49 >>=20 >> I never understood I need to look in another buffer. I will look = into >> these. >=20 > Please try the patch below and see if any problems remain. >=20 > diff --git a/src/xdisp.c b/src/xdisp.c > index 0b2508c..cc95ab3 100644 > --- a/src/xdisp.c > +++ b/src/xdisp.c > @@ -11436,7 +11436,7 @@ window_text_pixel_size (Lisp_Object window, = Lisp_Object from, Lisp_Object to, > /* Start at the beginning of the line containing FROM. = Otherwise > IT.current_x will be incorrectly set to zero at some arbitrary > non-zero X coordinate. */ > - reseat_at_previous_visible_line_start (&it); > + move_it_by_lines (&it, 0); > it.current_x =3D it.hpos =3D 0; > if (IT_CHARPOS (it) !=3D start) > { > @@ -11513,6 +11513,8 @@ window_text_pixel_size (Lisp_Object window, = Lisp_Object from, Lisp_Object to, > the width of the last buffer position manually. */ > if (IT_CHARPOS (it) > end) > { > + int end_y =3D it.current_y; > + > end--; > RESTORE_IT (&it, &it2, it2data); > x =3D move_it_to (&it, end, to_x, max_y, -1, move_op); > @@ -11525,8 +11527,13 @@ window_text_pixel_size (Lisp_Object window, = Lisp_Object from, Lisp_Object to, >=20 > /* DTRT if ignore_line_at_end is t. */ > if (!NILP (ignore_line_at_end)) > - doff =3D (max (it.max_ascent, it.ascent) > - + max (it.max_descent, it.descent)); > + { > + /* If END-1 is on the previous screen line, we need to > + account for the vertical dimensions of previous = line. */ > + if (it.current_y < end_y) > + doff =3D (max (it.max_ascent, it.ascent) > + + max (it.max_descent, it.descent)); > + } > else > { > it.max_ascent =3D max (it.max_ascent, it.ascent); From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 02 22:04:54 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 03:04:54 +0000 Received: from localhost ([127.0.0.1]:58990 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9cms-0000bB-0y for submit@debbugs.gnu.org; Sat, 02 Dec 2023 22:04:54 -0500 Received: from mail-il1-x134.google.com ([2607:f8b0:4864:20::134]:42486) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9cmq-0000ax-IR for 67533@debbugs.gnu.org; Sat, 02 Dec 2023 22:04:53 -0500 Received: by mail-il1-x134.google.com with SMTP id e9e14a558f8ab-35d5d54a8eeso1642075ab.1 for <67533@debbugs.gnu.org>; Sat, 02 Dec 2023 19:04:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701572677; x=1702177477; darn=debbugs.gnu.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=0RwlZK4rOouqXBuuw1DK0Zws05tVxMNaymkS6ADBekI=; b=deiW6bSs8aZa8dNG4NgIZ+zh3OygyybyiIhSn8nCCMgMjRAeFOKFtnWXcSimrb32UE xYvcryqDoIsx+KRinuSQ59KmwphSbl697MGhN13WMv6nW+TxOqnegH67wQw3xn/zLVwd if1uQWRmQnkp4bvXHJDomhIMmMGmjRoN4gO+JIPekHS4U9Fs0Zakb/pRjFL6+auPaHMu DQWlm34brM1ot/EXHM0e5MV4dbEzUzF5sJ7n2CmNKI8ph1TvlWKD7/HaQD0ynnGdUy17 +3tnZRofsGkin5JykqWUHw5ubdlSa4egdgyHhPkrqArivNDI4ZlwgDBsH69nEJ4QE8Ke yb/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701572677; x=1702177477; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0RwlZK4rOouqXBuuw1DK0Zws05tVxMNaymkS6ADBekI=; b=MXEpag5KAsgaSpsTxm7i3f4k5HtoEaKRYgrQJW3jHhIoDpXlXbJ3LMAttE0hkduyj6 yKKtCikiBhns2AmrZHJ9h6jmotS81FEmOEDRp7PJWsKoYXxk/l9iaSTYCWSdtQzLohHL s/eFfJxC0pR2wJs1qCExEsOQQV6zIcIZz1Cf80G6E96YA3joAcpzjPmgjmMYOkX7Fqay bfSQd7YOjUPmdTIkiL3y4w0bvo0rebSgNeHReasiw2WaXHrq2sx6tf8VvsE9MpNk3UV3 ifzohzea1TeBHMPCocSTIVv7zyIpGHbTxsz1zfOznUK2WVMZPNde+vEP0ikN0jNC0cHc h5gw== X-Gm-Message-State: AOJu0YzefAbAxbXkWgMzQHg6sm/yDabggv2SPcGUTqYBoESX09GhzPBK P1eTNqeDkEYErX3vdRpLBPvSWrQALr4= X-Google-Smtp-Source: AGHT+IFx0HadIwVcr1J21+/dsHLPgdHguLjHsmm9DMwMzDAztCvnItHTLr96XtEPlqtCdFPt55VwYg== X-Received: by 2002:a92:c26e:0:b0:35d:59b3:2f87 with SMTP id h14-20020a92c26e000000b0035d59b32f87mr1505870ild.28.1701572677173; Sat, 02 Dec 2023 19:04:37 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id l3-20020a02a883000000b00466bd8ccac1sm1760157jam.143.2023.12.02.19.04.35 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 02 Dec 2023 19:04:36 -0800 (PST) From: JD Smith Message-Id: <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_B5F08AB9-E130-4A4F-A54D-DB1D472E6020" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements Date: Sat, 2 Dec 2023 22:04:25 -0500 In-Reply-To: <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> To: Eli Zaretskii References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_B5F08AB9-E130-4A4F-A54D-DB1D472E6020 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Progress. The latest patch had two small hunks fail (see below), but = they were simple enough that I was able to insert them by hand and = recompile. The good news is that this patch does on my end fix all the problems = with the generated SVGs buffer from my recent test, at all window = widths. Unfortunately, checking my original file where this issue was = revealed, there are still quite a few =E2=80=9Cfalse zero height = above=E2=80=9D reports. Happily in that file there are no longer any of = the =E2=80=9Coverly large height=E2=80=9D variety, so this particular = issue has apparently has been fixed by your patch. I=E2=80=99ve placed a new test that generates a minimal buffer with a = single :file-based SVG overlay at the same gist, and copied/attached = them below, for posterity. I=E2=80=99ve also fixed the bug in = my/check-buffer-pixel-values which caused the report buffer not to = appear (due to end-of-buffer being signaled), so please update that. = And please note the new svg_test.svg file, to be placed in the same = directory. I don=E2=80=99t think there should be anything special about this = particular SVG file; it was automatically generated from the underlying = latex fragment. But it seems to be confusing the display engine somehow = (as do many others). One thing to note about these SVG files is that they have transparent = backgrounds, but I don=E2=80=99t think that=E2=80=99s anything unusual. ++++++++ New test: ++++++++ (let ((buf "svg-file-pixel-zero-demo")) (with-current-buffer (get-buffer-create buf) (erase-buffer) (visual-line-mode 1) (insert "\nProin quam nisl, tincidunt et, mattis eget, convallis = nec, purus. $\\chi(y) =3D \\exp\\left(\\sqrt{\\tan(y)}\\right)$ Nullam = tempus.") (goto-char (point-min)) (when (re-search-forward (rx ?$ (* (not ?$)) ?$)) (let ((ov (make-overlay (match-beginning 0) (match-end 0)))) (overlay-put ov 'display `(image :type svg :file ,(expand-file-name "svg_test.svg") :ascent center))))) (pop-to-buffer buf) (my/check-buffer-pixel-values)) ++++++++++++++ Buffer check code ++++++++++++++ (eval-when-compile (require 'cl-lib)) (defun my/check-buffer-pixel-values () (interactive) (goto-char (point-min)) (let ((line-heights (vconcat (save-excursion (cl-loop while (< (point) (point-max)) collect (line-pixel-height) do (vertical-motion 1))))) (line 0) vmax) (with-output-to-temp-buffer "svg-pixel-demo-report" (princ (format "SVG Position analysis for %s (width %d, %s)\n\n" (current-buffer) (window-width) (if (next-single-property-change (point-min) 'display) "text-properties" "overlays"))) (while (not (eobp)) (beginning-of-visual-line) (vertical-motion 1) (setq vmax (save-excursion (end-of-visual-line) (point))) (save-excursion (while (and (<=3D (point) vmax) (not (eobp))) (let* ((ps (window-text-pixel-size nil (cons (point) -1) (point) nil nil nil t)) (h (nth 1 ps))) (unless (=3D h (aref line-heights line)) (princ (format "Incorrect at point=3D%3d: line %2d at %12S (%5s): expected %2d = got %2d\n" (point) (+ line 2) (posn-x-y (posn-at-point)) (if (or (overlays-at (point)) (get-text-property (point) 'display)) "image" (char-to-string (char-after (point)))) (aref line-heights line) h)))) (forward-char))) (cl-incf line))))) ++++++++++ Failed hunks: ++++++++++ @ -11436,7 +11436,7 @@ /* Start at the beginning of the line containing FROM. Otherwise IT.current_x will be incorrectly set to zero at some arbitrary non-zero X coordinate. */ - reseat_at_previous_visible_line_start (&it); + move_it_by_lines (&it, 0); it.current_x =3D it.hpos =3D 0; if (IT_CHARPOS (it) !=3D start) { @@ -11513,6 +11513,8 @@ the width of the last buffer position manually. */ if (IT_CHARPOS (it) > end) { + int end_y =3D it.current_y; + end--; RESTORE_IT (&it, &it2, it2data); x =3D move_it_to (&it, end, to_x, max_y, -1, move_op); --Apple-Mail=_B5F08AB9-E130-4A4F-A54D-DB1D472E6020 Content-Disposition: inline; filename=svg_test.svg Content-Type: image/svg+xml; x-unix-mode=0644; name="svg_test.svg" Content-Transfer-Encoding: quoted-printable =0A=0A=0A=0A=0A=0A=0A= =0A=0A=0A=0A=0A=0A=0A=0A=0A= =0A=0A=0A=0A= =0A= =0A= =0A= =0A=0A=0A=0A=0A=0A=0A=0A=0A=0A=0A=0A=0A=0A=0A=0A= --Apple-Mail=_B5F08AB9-E130-4A4F-A54D-DB1D472E6020 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Dec 2, 2023, at 4:44=E2=80=AFPM, JD Smith = wrote: >=20 > Thanks for your work. The port I use has fallen a few weeks behind = master and the patches to xdisp.c unfortunately don=E2=80=99t apply = cleanly. I=E2=80=99ll see about building an NS port and report back.=20 >=20 >> On Dec 2, 2023, at 2:39=E2=80=AFPM, Eli Zaretskii = wrote: >>=20 >>> Cc: 67533@debbugs.gnu.org >>> Date: Sat, 02 Dec 2023 16:18:28 +0200 >>> From: Eli Zaretskii >>>=20 >>>> From: JD Smith >>>> Date: Sat, 2 Dec 2023 08:36:07 -0500 >>>> Cc: 67533@debbugs.gnu.org >>>>=20 >>>> Strange. Both of my ports here (NS and Mac) show the same issue. = Did you check the >>>> svg-pixel-demo-report buffer the header mentions, where the = mismatch measurement information >>>> gets reported? The specific problems encountered are listed in the = report buffer, updated with >>>> my/check-buffer-pixel-values. For example, at a standard width of = 80 characters, I get this report: >>>>=20 >>>> SVG Position analysis for svg-pixel-demo (width 80, = text-properties) >>>>=20 >>>> Incorrect at point=3D 34: line 2 at (224 . 14) (image): expected = 14 got 28 >>>> Incorrect at point=3D 99: line 3 at (244 . 43) (image): expected = 29 got 46 >>>> Incorrect at point=3D126: line 4 at (42 . 75) (image): expected = 32 got 46 >>>> Incorrect at point=3D162: line 4 at (345 . 75) (image): expected = 32 got 52 >>>> Incorrect at point=3D210: line 5 at (133 . 110) (image): expected = 35 got 49 >>>=20 >>> I never understood I need to look in another buffer. I will look = into >>> these. >>=20 >> Please try the patch below and see if any problems remain. >>=20 >> diff --git a/src/xdisp.c b/src/xdisp.c >> index 0b2508c..cc95ab3 100644 >> --- a/src/xdisp.c >> +++ b/src/xdisp.c >> @@ -11436,7 +11436,7 @@ window_text_pixel_size (Lisp_Object window, = Lisp_Object from, Lisp_Object to, >> /* Start at the beginning of the line containing FROM. = Otherwise >> IT.current_x will be incorrectly set to zero at some arbitrary >> non-zero X coordinate. */ >> - reseat_at_previous_visible_line_start (&it); >> + move_it_by_lines (&it, 0); >> it.current_x =3D it.hpos =3D 0; >> if (IT_CHARPOS (it) !=3D start) >> { >> @@ -11513,6 +11513,8 @@ window_text_pixel_size (Lisp_Object window, = Lisp_Object from, Lisp_Object to, >> the width of the last buffer position manually. */ >> if (IT_CHARPOS (it) > end) >> { >> + int end_y =3D it.current_y; >> + >> end--; >> RESTORE_IT (&it, &it2, it2data); >> x =3D move_it_to (&it, end, to_x, max_y, -1, move_op); >> @@ -11525,8 +11527,13 @@ window_text_pixel_size (Lisp_Object window, = Lisp_Object from, Lisp_Object to, >>=20 >> /* DTRT if ignore_line_at_end is t. */ >> if (!NILP (ignore_line_at_end)) >> - doff =3D (max (it.max_ascent, it.ascent) >> - + max (it.max_descent, it.descent)); >> + { >> + /* If END-1 is on the previous screen line, we need to >> + account for the vertical dimensions of previous = line. */ >> + if (it.current_y < end_y) >> + doff =3D (max (it.max_ascent, it.ascent) >> + + max (it.max_descent, it.descent)); >> + } >> else >> { >> it.max_ascent =3D max (it.max_ascent, it.ascent); >=20 --Apple-Mail=_B5F08AB9-E130-4A4F-A54D-DB1D472E6020-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 08:02:37 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 13:02:37 +0000 Received: from localhost ([127.0.0.1]:59231 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9m7J-000845-6Q for submit@debbugs.gnu.org; Sun, 03 Dec 2023 08:02:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:48178) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9m7G-00083p-JF for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 08:02:36 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r9m71-0003pm-8Z; Sun, 03 Dec 2023 08:02:19 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=ZkzELDcF7az3XAE/0JsWHgOQLhb/wzwotqmQs9XqoUs=; b=Yx6R7rcG0Hm58+LA0PdV x1n4+Kth2qSn4FBv36uTOKkbXllFNjGqOCoGmUHVuepqPYXZSIFif9HQHt/R/PeMIEnDPoxt1ZAKp tZbfpe/spXbUgmzjwjugNqFjCqU4+FJrTLHcgyjWt4B9wLIudGVViRmsBsQCwARJ2QtvjLwcTdl/p 8tesUGUzrND+5Irl56sW6hurfQ2DfOcr32YXi21m3frWmQMFVjCi22r/2B+fDLgGekTJeh/3+c42F VbOLCTSBHz9ALlAC8X7/FOW0yl84PFJvtLPjDrpdT8vVy6gC6TINy2JSXidVcptrxam7/ObGW/Bw1 tBKzyeGiClRmVA==; Date: Sun, 03 Dec 2023 15:02:21 +0200 Message-Id: <83r0k3782q.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> (message from JD Smith on Sat, 2 Dec 2023 22:04:25 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Sat, 2 Dec 2023 22:04:25 -0500 > Cc: 67533@debbugs.gnu.org > > Progress. The latest patch had two small hunks fail (see below), but they were simple enough that I was able to insert them by hand and recompile. > > The good news is that this patch does on my end fix all the problems with the generated SVGs buffer from my recent test, at all window widths. Unfortunately, checking my original file where this issue was revealed, there are still quite a few “false zero height above” reports. Happily in that file there are no longer any of the “overly large height” variety, so this particular issue has apparently has been fixed by your patch. > > I’ve placed a new test that generates a minimal buffer with a single :file-based SVG overlay at the same gist, and copied/attached them below, for posterity. I’ve also fixed the bug in my/check-buffer-pixel-values which caused the report buffer not to appear (due to end-of-buffer being signaled), so please update that. And please note the new svg_test.svg file, to be placed in the same directory. > > I don’t think there should be anything special about this particular SVG file; it was automatically generated from the underlying latex fragment. But it seems to be confusing the display engine somehow (as do many others). There _is_ something special about that SVG: it is wider that 1/4th of the default frame width. If you widen the frame to be wider than 4*209=836 pixels, the problem disappears. Such wide images are handles specially by the display engine. The cumulative patch below should fix all the problems you threw on me till now. diff --git a/src/xdisp.c b/src/xdisp.c index 0b2508c..ca85838 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11436,7 +11436,7 @@ window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to, /* Start at the beginning of the line containing FROM. Otherwise IT.current_x will be incorrectly set to zero at some arbitrary non-zero X coordinate. */ - reseat_at_previous_visible_line_start (&it); + move_it_by_lines (&it, 0); it.current_x = it.hpos = 0; if (IT_CHARPOS (it) != start) { @@ -11513,6 +11513,8 @@ window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to, the width of the last buffer position manually. */ if (IT_CHARPOS (it) > end) { + int end_y = it.current_y; + end--; RESTORE_IT (&it, &it2, it2data); x = move_it_to (&it, end, to_x, max_y, -1, move_op); @@ -11525,14 +11527,29 @@ window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to, /* DTRT if ignore_line_at_end is t. */ if (!NILP (ignore_line_at_end)) - doff = (max (it.max_ascent, it.ascent) - + max (it.max_descent, it.descent)); + { + /* If END-1 is on the previous screen line, we need to + account for the vertical dimensions of previous line. */ + if (it.current_y < end_y) + doff = (max (it.max_ascent, it.ascent) + + max (it.max_descent, it.descent)); + } else { it.max_ascent = max (it.max_ascent, it.ascent); it.max_descent = max (it.max_descent, it.descent); } } + else if (IT_CHARPOS (it) > end + && it.line_wrap == TRUNCATE + && it.current_x - it.first_visible_x >= it.last_visible_x) + { + /* If the display property at END is at the beginning of the + line, and the previous line was truncated, we are at END, + but it.current_y is not yet updated to reflect that. */ + it.current_y += max (it.max_ascent, it.ascent) + + max (it.max_descent, it.descent); + } } else bidi_unshelve_cache (it2data, true); @@ -31343,9 +31360,13 @@ produce_image_glyph (struct it *it) take_vertical_position_into_account (it); - /* Automatically crop wide image glyphs at right edge so we can - draw the cursor on same display row. */ - if ((crop = it->pixel_width - (it->last_visible_x - it->current_x), crop > 0) + /* Automatically crop wide image glyphs at right edge so we can draw + the cursor on same display row. But don't do that under + word-wrap, unless the image starts at column zero, because + wrapping correctly needs the real pixel width of the image. */ + if ((it->line_wrap != WORD_WRAP || it->hpos == 0) + && (crop = it->pixel_width - (it->last_visible_x - it->current_x), + crop > 0) && (it->hpos == 0 || it->pixel_width > it->last_visible_x / 4)) { it->pixel_width -= crop; From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 10:48:52 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 15:48:52 +0000 Received: from localhost ([127.0.0.1]:60636 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9oiB-0004Oy-Cy for submit@debbugs.gnu.org; Sun, 03 Dec 2023 10:48:52 -0500 Received: from mail-il1-x133.google.com ([2607:f8b0:4864:20::133]:60522) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9oi7-0004O3-L1 for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 10:48:50 -0500 Received: by mail-il1-x133.google.com with SMTP id e9e14a558f8ab-35d56fb336aso5031755ab.0 for <67533@debbugs.gnu.org>; Sun, 03 Dec 2023 07:48:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701618512; x=1702223312; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=IvQcM/JS/m2u6B6efTQIO0D6n8+Kn/8a9E7k6ANHJCA=; b=KeECtcwy8deXw2DtIcCY84MKs976TH2fSBGCRosWGM1voz8SAWcYPtOa2KDSK5vQ4/ vJyBEGSqfS1P2FjBk6Q7tn31MOXCHjtLjyb5cMKNWpQNbKOFFgaLXjVIPtbmdP8EKapT XwqtpLg1sGeN9VZaVFYxlZM+TjeAD7yX/SpMcxjgq5MxqsxT3gAlV453rQkXTw1KO8IX l/hzHm76WKoRV4TYj3Rny9nYtLysowhJaTSQyArci1c5NhA3uQro1CP6UJgOsfr3W4bo g++7CgtG34054hYLmuk8S5lSk8ph4dbdt9nIbcp9wHb4hGi4x81A7Sj4iQtv5NWPSYbU 3tdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701618512; x=1702223312; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IvQcM/JS/m2u6B6efTQIO0D6n8+Kn/8a9E7k6ANHJCA=; b=klQZq0bH4EaMNt8JROy0N4MZSG6nkQwdTZSHhbXRabKWzpUtapX+35b/jG/EWfpMlg dDCIXohRXK/N4yspcfx0a7SBr9R0eWtMJJzYJ/Xx/icj9R3IWjaGm4CxVUwoweS2aGgj vHg01qx08yIgp6NIELq30y9ppoea1eS9vXgE+olumdlecZYvUoe1p6Gcz/bvlNvLrhE3 oAvzEprLj64RTI+5LTlUWw/lDAaIFxfywoad3yBxBwyCqE1RhQdQGPvPJ65hDFrO+Z6A QwcJhGH7FmKAezLTtHiQIfBbCRmPSYc2/qLqu58DSdL63jSqKeatpqDgkP8gpZEENeoC 8TSQ== X-Gm-Message-State: AOJu0YyhGfdQ7xkQlv9bzSRxDhDfaP2vVO+1Lrs4NPwPhpvZ59VauFq8 xlLtv6NcFlDaBw9qMxSgNg1xXHlC6BQ= X-Google-Smtp-Source: AGHT+IFkyfl503KbB07dj9xqUNpVNUorJP1NTFKsAKOlwm/+xMKxOpbi5ORE0GrY4b/+npdF1wSfsQ== X-Received: by 2002:a05:6e02:e54:b0:35d:59a2:a322 with SMTP id l20-20020a056e020e5400b0035d59a2a322mr1446708ilk.36.1701618511972; Sun, 03 Dec 2023 07:48:31 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id dl39-20020a05663827a700b0046678de2a62sm1998269jab.165.2023.12.03.07.48.31 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Dec 2023 07:48:31 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements From: JD Smith In-Reply-To: <83r0k3782q.fsf@gnu.org> Date: Sun, 3 Dec 2023 10:48:20 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Dec 3, 2023, at 8:02=E2=80=AFAM, Eli Zaretskii = wrote: >>=20 >>=20 >>=20 >> I don=E2=80=99t think there should be anything special about this = particular SVG file; it was automatically generated from the underlying = latex fragment. But it seems to be confusing the display engine somehow = (as do many others). >=20 > There _is_ something special about that SVG: it is wider that 1/4th of > the default frame width. If you widen the frame to be wider than > 4*209=3D836 pixels, the problem disappears. Such wide images are > handles specially by the display engine. >=20 > The cumulative patch below should fix all the problems you threw on me > till now. Most excellent, thank you for the sleuthing Eli! Your roll-up patch = applies cleanly and fixes all the pixel size related issues in my large = complex org-with-latex-preview file. I can induce the same behavior in = my original svg-generating code by bumping the default width up to: (w (+ 142 (* 2 (round (expt (1+ r) 1.25))))) and it solves it there too. (I=E2=80=99ve updated the gist to do this, = and included the final function below, for posterity). Now, because every good novel has a denouement, there=E2=80=99s... one = more thing. When I was running my/check-buffer-pixel-values in my = large latex-preview-laden org file with your new patch, everything was = going swimmingly. No reported problems at all at a variety of frame = widths. But, then, at a single magic frame width (81 chars, but I think = this is arbitrary), a bunch of `expected 28 got 14=E2=80=99 errors = showed up on one particular line. A new flavor of under-reported pixel size? No! In fact, all the = characters on the reported line were yielding the correct size above = themselves. Instead, around this line, (vertical-motion) as well as = previous/next line is *skipping a screen line*, confusing my test! I = have sometimes seen this while using up/down arrow to navigate such = image-rich files, when an image is wrapped to column zero. E.g. instead = of moving directly up, point jumps to the end of the line above. Given that the size problems are fixed, I think I should try to isolate = this motion problem and submit it as a separate bug. So far it has = eluded a simple reproduction. I=E2=80=99ve included a short movie of = the effect in a gist comment[1] to spurs some thoughts. [1] = https://gist.github.com/jdtsmith/ad765047a6afe20f353de573d8c07da9?permalin= k_comment_id=3D4780726#gistcomment-4780726 +++ (defun my/test-svg-positions (arg) (interactive "P") (let ((buf "svg-pixel-demo") (default-height (frame-char-height))) (with-current-buffer (get-buffer-create buf) (erase-buffer) (insert "\nPellentesque condimentum, magna ut suscipit hendrerit, = ipsum augue ornare nulla, non luctus diam neque sit amet urna.\nEtiam = vel tortor sodales tellus ultricies commodo. Curabitur vulputate = vestibulum lorem. Nam euismod tellus id erat.\n\nNullam tristique diam = non turpis.\n") (goto-char (point-min)) (cl-loop for i from 1 for p =3D (point) then (progn (forward-word) (point)) while (< p (point-max)) if (zerop (% i 5)) do (let* ((word-start (save-excursion (backward-word) (point))) (r0 (/ (float i) 11)) (r (round (* 10 (- r0 (floor r0))))) ; some psuedo-randoms (r2 (round (* 10 (- (* r0 10) (floor (* r0 10)))))) (h (+ default-height (* 3 r2))) (w (+ 142 (* 2 (round (expt (1+ r) 1.25))))) (m (/ w 2)) (svg (svg-create w h))) (svg-circle svg m m m :fill-color (face-foreground 'default) :stroke-width 3 :stroke-color (if (zerop (% i 2)) "green" "red")) (if arg (let ((ov (make-overlay word-start p))) (overlay-put ov 'evaporate t) (overlay-put ov 'display (svg-image svg :ascent 'center))) (put-text-property word-start p 'display (svg-image svg :ascent 'center))))) (pop-to-buffer buf) (visual-line-mode 1) (my/check-buffer-pixel-values))))= From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 10:50:07 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 15:50:07 +0000 Received: from localhost ([127.0.0.1]:60640 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9ojP-0004S1-9A for submit@debbugs.gnu.org; Sun, 03 Dec 2023 10:50:07 -0500 Received: from mail-il1-x132.google.com ([2607:f8b0:4864:20::132]:47461) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9ojN-0004RT-8O for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 10:50:05 -0500 Received: by mail-il1-x132.google.com with SMTP id e9e14a558f8ab-35d67599613so7436375ab.3 for <67533@debbugs.gnu.org>; Sun, 03 Dec 2023 07:49:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701618588; x=1702223388; darn=debbugs.gnu.org; h=message-id:in-reply-to:to:references:date:subject:mime-version :content-transfer-encoding:from:from:to:cc:subject:date:message-id :reply-to; bh=CUTLoLsPPzBXK58motDluM9uj9OXiLOrfMJxoj8Cj+g=; b=nNIS9LKnWIipChXvXvlQtmiTvuvCBKx2ZfBwBSsNSFRR3Hi/yqu7Tpti495eaKFKb3 /OuOGNb0CimojieBeses2pOP8LIBQ4XrkftOudHg1ByqZiI7dbEc6DjJ7iuH8M1jGhYU FZgFgXkIxbLMcLG3p8YoW5adF5ZAjoRUcqKVGgAsbxzpwYey4BiNPHzzaBjTfvmvdwrQ DIl781gv8OxIzho7F/W2sK1o/V2+eexhBVna1ePrXRWp1dGnC8A8euXIbRRdtkjZH0uq tkv7qLpK8EkZp+uYP7ibHbSKiHUf/JOrYlQrVUVmQaVKh4S+8Xu3/TBb269+V9Ggewc2 sXPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701618588; x=1702223388; h=message-id:in-reply-to:to:references:date:subject:mime-version :content-transfer-encoding:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CUTLoLsPPzBXK58motDluM9uj9OXiLOrfMJxoj8Cj+g=; b=RB+RuAgP8Ql50IscaCMrATlZ3IsSYHlaB7tYYS20xVzw1KpnmSemSjgXaiRGZvlw/H KeXft9OAdp1r0Wgl7YhgmunFh7MoSGZtrRw0LDMMPGX/QMFVHnl30FJeQIJDXfTF1io1 k23xmqBc7X9O99gxg+SpzRHxAn4/sNKFQsCyPH33+2H0Uhz8oY2nrAarXRTvHdHg96n6 MeYYF6VQSP3QL4s2sNzejmCQnW9avbcSk+898fWmcfeYZfgqV+8an6Qgdc+2KFcgMoPS ht9NxEs6usfKK89Hvo0OB+N5A8NYghxJNBgk6iawp5QkBTx5rCAwjAPSlIKouAVkmz2k rTzg== X-Gm-Message-State: AOJu0Yz341ZF7tydI61gwsO1sybU6xrSJWoqnV8ElzdjWNwY3yuLnxqz Jc1hF7xtd/d6jUMrCqzi/nwQDqJWjlA= X-Google-Smtp-Source: AGHT+IH8OS/AGXKH4qOUqnfSodXHQ71G7F0+VL7121cVp20vte+kbvEaZ+qkfnlFOaH74a+FPXGj2Q== X-Received: by 2002:a05:6e02:3702:b0:35d:6a77:64c9 with SMTP id ck2-20020a056e02370200b0035d6a7764c9mr1818461ilb.37.1701618588353; Sun, 03 Dec 2023 07:49:48 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id o3-20020a02b803000000b004664a0a7f2csm2001890jam.177.2023.12.03.07.49.47 for <67533@debbugs.gnu.org> (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Dec 2023 07:49:47 -0800 (PST) From: JD Smith Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements Date: Sun, 3 Dec 2023 10:49:37 -0500 References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> To: 67533@debbugs.gnu.org In-Reply-To: <83r0k3782q.fsf@gnu.org> Message-Id: X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) BTW, in case anyone is wondering where window-text-pixel-size with a = negative pixel FROM offset is needed, Po Lu's = pixel-scroll-precision-up-page is using precisely this approach to = measure the content above window-start (so as to smoothly scroll up with = high performance): (let* ((start (window-start)) (dims (window-text-pixel-size nil (cons start (- delta)) start nil nil nil t))= From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 10:52:30 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 15:52:30 +0000 Received: from localhost ([127.0.0.1]:60645 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9olh-0004VR-Pd for submit@debbugs.gnu.org; Sun, 03 Dec 2023 10:52:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:46000) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9ole-0004VE-LH for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 10:52:27 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r9olP-0004OS-35; Sun, 03 Dec 2023 10:52:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=FLkFy6iElCQACaFqimiaGfJmOav+5mErABVO3dP9Lkc=; b=m7X4i71+V162p5euM/Lg t+Xo8WG1D4F2c3go1DF4Ob32tG784pGAAdW8UeIBrphTcaPJjb8XWErX5eiZeLKoXMNJNyqXDfrWo +csLgwAQxVJ6o5iMx9Hxb0AyyjVGc1QTfElj5mc7mojvHF10IsfNY84XDZRT0Fw5uqf2yABV+rQHt li4FWMmjB7UkLLNKMRcjksM4ZqjaXFCUEO1xaPt+9EfKvyHq9qtxdcZlLnVxV12ghmBzOTo8sYoPH KbCyo5BDEb9KXL3qBoCkZn+3u1ACFYPBIFoHDHSq9b7pv+V3TDWfPeOZvtMzE4CO5jN0SjZMzoZt1 RMN0WCgv8ynPzQ==; Date: Sun, 03 Dec 2023 17:52:12 +0200 Message-Id: <83jzpv707n.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: (message from JD Smith on Sun, 3 Dec 2023 10:48:20 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Sun, 3 Dec 2023 10:48:20 -0500 > Cc: 67533@debbugs.gnu.org > > > The cumulative patch below should fix all the problems you threw on me > > till now. > > Most excellent, thank you for the sleuthing Eli! Your roll-up patch applies cleanly and fixes all the pixel size related issues in my large complex org-with-latex-preview file. I can induce the same behavior in my original svg-generating code by bumping the default width up to: > > (w (+ 142 (* 2 (round (expt (1+ r) 1.25))))) > > and it solves it there too. (I’ve updated the gist to do this, and included the final function below, for posterity). Thanks, I will install the changes (on master) soon. > Now, because every good novel has a denouement, there’s... one more thing. When I was running my/check-buffer-pixel-values in my large latex-preview-laden org file with your new patch, everything was going swimmingly. No reported problems at all at a variety of frame widths. But, then, at a single magic frame width (81 chars, but I think this is arbitrary), a bunch of `expected 28 got 14’ errors showed up on one particular line. > > A new flavor of under-reported pixel size? No! In fact, all the characters on the reported line were yielding the correct size above themselves. Instead, around this line, (vertical-motion) as well as previous/next line is *skipping a screen line*, confusing my test! I have sometimes seen this while using up/down arrow to navigate such image-rich files, when an image is wrapped to column zero. E.g. instead of moving directly up, point jumps to the end of the line above. > > Given that the size problems are fixed, I think I should try to isolate this motion problem and submit it as a separate bug. So far it has eluded a simple reproduction. I’ve included a short movie of the effect in a gist comment[1] to spurs some thoughts. Yes, a separate bug would be good. In general, vertical-motion can go awry when there are too many images, so I'll withdraw judgment until I see the issue. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 11:31:35 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 16:31:35 +0000 Received: from localhost ([127.0.0.1]:60683 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9pNX-0005dh-D0 for submit@debbugs.gnu.org; Sun, 03 Dec 2023 11:31:35 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:41244) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9pNV-0005dQ-FN for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 11:31:33 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r9pNE-0007EI-Ts; Sun, 03 Dec 2023 11:31:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=N+f/MkoxaB9esMwB2pn8vilXnE7TneQkShOzgAAYdDE=; b=TKqDpO8v54gzJ14Q2j6e +f/HxjpIviSe/S7dGDc0uAFPR1EasfX/oxL+qz7WabGli7GqA2SaVgizzfh3effgSkvkPjZvvWtWi egKWr8Nz4SdYb/GARn1tpsVMHiAgv2aHBlLQx2I6Jsc0X2/ErMo7SK61zZj4v71NgXX7v5M2REG9p kizMJ6igLdJPaiFi5M06CqX4tQcDAaltVD8sPYySOqdo7sVzzJea9yGOWG1yBJU7gkN+8b7lyfwcX wtRLwZ53y1ZbjdkdMACRHN8p0nqD4k387F11IT487ItZaXQNcEtFCaXoUM7Zx7llGTM64tfxrv6b3 8UL2a0+7E4NBxA==; Date: Sun, 03 Dec 2023 18:31:18 +0200 Message-Id: <83h6kz6yeh.fsf@gnu.org> From: Eli Zaretskii To: Eli Zaretskii In-Reply-To: <83jzpv707n.fsf@gnu.org> (message from Eli Zaretskii on Sun, 03 Dec 2023 17:52:12 +0200) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, jdtsmith@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 67533@debbugs.gnu.org > Date: Sun, 03 Dec 2023 17:52:12 +0200 > From: Eli Zaretskii > > > From: JD Smith > > Date: Sun, 3 Dec 2023 10:48:20 -0500 > > Cc: 67533@debbugs.gnu.org > > > > > The cumulative patch below should fix all the problems you threw on me > > > till now. > > > > Most excellent, thank you for the sleuthing Eli! Your roll-up patch applies cleanly and fixes all the pixel size related issues in my large complex org-with-latex-preview file. I can induce the same behavior in my original svg-generating code by bumping the default width up to: > > > > (w (+ 142 (* 2 (round (expt (1+ r) 1.25))))) > > > > and it solves it there too. (I’ve updated the gist to do this, and included the final function below, for posterity). > > Thanks, I will install the changes (on master) soon. Now done. Is there anything else to do here, or can we close this bug? Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 11:33:20 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 16:33:20 +0000 Received: from localhost ([127.0.0.1]:60691 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9pPE-0005gp-5q for submit@debbugs.gnu.org; Sun, 03 Dec 2023 11:33:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:46944) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9pPB-0005ga-W1 for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 11:33:18 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r9pOw-0007Tn-Km; Sun, 03 Dec 2023 11:33:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=IsiUFexWOrTrB7H9z2r89O9LXQ2uxtRUPnpwmT7j3+s=; b=i1m6sxi8U7Hu 7H+hK8Y7XTbo0szqzCUny+ZGPU+pRfOWXtAIkFRomJBohPB6DlQfLXsXyk8YMGw9ijrgqSlvKdO1X uI0uF9pOraZDY+yNdrFDsK8kqfzKmOLVOr0XVpFjrAlWbWkNhmiQiIRTYDJ8hl63pjrfrb3IvmUh2 kJcf4kWqfmbsg9BczljShO86Q7HchGkhpWsOLDVN3eTmnrqA3fD1BIhuL9zMcBMzLNJgk43GICD51 K04fc0xjCe9wkeziLe2Hs5iUJXqY6NTGva2MWxOedHv7qzP9B0wEdkJ0m6Qo3hldFIC8NoG3v1z8G VRvaQj8QIRgpfwvL/c5Nsw==; Date: Sun, 03 Dec 2023 18:33:05 +0200 Message-Id: <83fs0j6ybi.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: (message from JD Smith on Sun, 3 Dec 2023 10:49:37 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Sun, 3 Dec 2023 10:49:37 -0500 > > BTW, in case anyone is wondering where window-text-pixel-size with a negative pixel FROM offset is needed, Po Lu's pixel-scroll-precision-up-page is using precisely this approach to measure the content above window-start (so as to smoothly scroll up with high performance): > > (let* ((start (window-start)) > (dims (window-text-pixel-size nil (cons start (- delta)) > start nil nil nil t)) > I know very well why that feature was added. My questions was not about negative offsets in general, but about negative offsets when FROM is in the first line of the buffer, i.e. when there's no text at all above that line. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 13:58:58 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 18:58:58 +0000 Received: from localhost ([127.0.0.1]:60989 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9rg9-000451-Or for submit@debbugs.gnu.org; Sun, 03 Dec 2023 13:58:58 -0500 Received: from mail-io1-xd2b.google.com ([2607:f8b0:4864:20::d2b]:42337) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9rg6-00044g-IB for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 13:58:57 -0500 Received: by mail-io1-xd2b.google.com with SMTP id ca18e2360f4ac-7b3bc70fca5so91046639f.1 for <67533@debbugs.gnu.org>; Sun, 03 Dec 2023 10:58:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701629918; x=1702234718; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=M1j0Jf0WHRgQsk3ZIBlUj/8QOpHeB948QdxEPftGvDs=; b=RZGuUdAdef0NZbQHvG38bUAnXxTd8qwDRP+/fkbSsSkomeuv+ITBtDMIAaSVEPALu5 d4oBAw9bIzGXqZuCQfLfzir2F+5LNE3s5XvUSv0+XJwlCJpAAGI2JTF74jyoyyR2zS/K dH2DUWITVv+zHpkwTLQ/bqOXqDsRUlVzNAA9EYl4gFAmYwkbrTs4iZeEujjCr+5m6LTk abV97FR/JmZ9y3/qy52r4rpoW+XXOhuvsxKAhsleixBniRPcNaIm8LJQ6gkNEu+8MLcg xtG6E6zzpAWwy7br3puyW46lkYfG0FK5RmvvT6lVqRffOyyfesMKgPS1yjk54PTbW8W/ 5OMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701629918; x=1702234718; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M1j0Jf0WHRgQsk3ZIBlUj/8QOpHeB948QdxEPftGvDs=; b=O+tuq1h4h3Mn/g7SQdIPmmk+ntajPmwyEREY4HK7LC+tVZOve/qTqxRMr1ZQiBiYuN KzblbOqMl0czWsy7tkldj2gc69pzh4s4Ik9+y4pXR9vF431V8NOxOMDADWRjElOD6uVT daF4tHkn/AWg7KyFlSRKq1gj1LOMSLJglQptWsiAGTs/2+UkUBFlDVmEXZstvuZG5qgP G4IAKzY9dQvP8Kfo/FXZXH3sB5e0ro+lW95Q21CkhNBjz1fzM2ErelpYCX98vH6tY5C2 HZ8ZSTJVlRzVEdIc34frFu4BSMYQ0anxqDaCkBCfk2UhDSaHvG5UtAUw7xvmnAZIlMEo w6IQ== X-Gm-Message-State: AOJu0Yz48ESSALZm0Sxja4QhRRRj0VbcN12fKuV5LobR7iaE9hM5fhjR 5J3SPxj2VK/Irsz2SAViJFg= X-Google-Smtp-Source: AGHT+IEz6RQCYViOtZWjJ6aR7oW+VxppEwuK8FdBbRsSauMEP0YTcsNE/rTnzSoWm4DV/RYPjTfmzA== X-Received: by 2002:a5d:8952:0:b0:7b4:2909:73b with SMTP id b18-20020a5d8952000000b007b42909073bmr2111848iot.18.1701629918561; Sun, 03 Dec 2023 10:58:38 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id k6-20020a056638140600b00439f2a2cdfbsm1018681jad.138.2023.12.03.10.58.37 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Dec 2023 10:58:37 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements From: JD Smith In-Reply-To: <83fs0j6ybi.fsf@gnu.org> Date: Sun, 3 Dec 2023 13:58:26 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: <5DB1A264-C46A-4509-973D-6BE77936D1FE@gmail.com> References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83fs0j6ybi.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Dec 3, 2023, at 11:33=E2=80=AFAM, Eli Zaretskii = wrote: >=20 >> From: JD Smith >> Date: Sun, 3 Dec 2023 10:49:37 -0500 >>=20 >> BTW, in case anyone is wondering where window-text-pixel-size with a = negative pixel FROM offset is needed, Po Lu's = pixel-scroll-precision-up-page is using precisely this approach to = measure the content above window-start (so as to smoothly scroll up with = high performance): >>=20 >> (let* ((start (window-start)) >> (dims (window-text-pixel-size nil (cons start (- = delta)) >> start nil nil nil t)) >>=20 >=20 > I know very well why that feature was added. My questions was not > about negative offsets in general, but about negative offsets when > FROM is in the first line of the buffer, i.e. when there's no text at > all above that line. Thanks, all set on this end. Just mentioning the use-case for the = casual reader who may wonder what real world impact it has. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 16:25:50 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 21:25:50 +0000 Received: from localhost ([127.0.0.1]:32874 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9tyE-00083m-Ve for submit@debbugs.gnu.org; Sun, 03 Dec 2023 16:25:50 -0500 Received: from mail-io1-xd30.google.com ([2607:f8b0:4864:20::d30]:49274) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9txx-00083C-JU for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 16:25:45 -0500 Received: by mail-io1-xd30.google.com with SMTP id ca18e2360f4ac-7b06844971dso115661839f.2 for <67533@debbugs.gnu.org>; Sun, 03 Dec 2023 13:25:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701638713; x=1702243513; darn=debbugs.gnu.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=Y7e8xXAXxAo6McSXN+4D5whBIOSnd001QT309Sfgtws=; b=NU7ghsvY3U95FhSvcw/tL94/98U8ULP7iHspeM9uX9KJkHpt0AlMlj9qH1FDfi5LRP dq9SVL1sUjbTFz2NwyQS2C7KxXAFKK7qFzpQOZTPWEZF3TbhIqxjIfSXbMEhP9ASPdCJ MO8HXRWekfJeXXPHpykjaO4uxfYL526Hqu2wq+EWMYLjI8a6BrPxg03gqdmcq5kapauP fbaqcr6VVEmPsfsMc0T7mBKWWGw3vHXReYtGcmto3yA0LOORM9c77FM6Wd22c9kSp2Y8 n87YrYj9/X8eaBhsg/7Tul2COJH4xiqStrnodhUVLzgjNSOUz3AlWQkc4sbCvDWCn2Zp 5AfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701638713; x=1702243513; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Y7e8xXAXxAo6McSXN+4D5whBIOSnd001QT309Sfgtws=; b=CehuDLcr4WIqzzlbI++AZD8xNaVtp1o2cxf2jxVmCw8BLXMVHDsHiMYM7apgGwPN3O 3Cxdc20kBWryqkouy/djShbQ4JTIGAPHY4M3WNi/wvdssMK7gIn49iS70iw9OSguyNal tGDkg34xNAbYEyS4kwsoXGkSyi/i/lAWYs5x3b91u3GUB5NCZVRgToSqLLZDwoovSCXT XOE38VtA/wfCXdgcsaJDXq821cxrFQ/nB/vX6hCLoXwtral5rzkm9KApwOMDQHJ1gCDR eyb0+9iLlkBxtwbrHh/R7SwZbctNLnLDtgUbRqjGghuJVV8fvzEXGWWxGrWd04CRn6mK jL5w== X-Gm-Message-State: AOJu0YxthezhAtmpmyjrqiuQdKtoZ+eywQAluFS/a/WJmWYTydT3fwpT jx9CPudkq5U5JY/O3Z3+t5U= X-Google-Smtp-Source: AGHT+IGBe+aYTDinH6PRxvMsix9DjsQv2razuMhAX0qK55aISDzh/g7a7DlOXBvWR1L8ajg7APsBuA== X-Received: by 2002:a5d:938f:0:b0:7b3:8d4a:f45 with SMTP id c15-20020a5d938f000000b007b38d4a0f45mr1437031iol.9.1701638712783; Sun, 03 Dec 2023 13:25:12 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id p19-20020a6bce13000000b0078647b08ab0sm2318933iob.6.2023.12.03.13.25.11 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Dec 2023 13:25:11 -0800 (PST) From: JD Smith Message-Id: <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_891791E5-F9D2-40ED-A121-1F2C22011999" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements Date: Sun, 3 Dec 2023 16:25:01 -0500 In-Reply-To: <83h6kz6yeh.fsf@gnu.org> To: Eli Zaretskii References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> <83h6kz6yeh.fsf@gnu.org> X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_891791E5-F9D2-40ED-A121-1F2C22011999 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 I=E2=80=99m sorry to report that this fix seems to have introduced a = hard lockup in org-display-inline-images, when displaying images in an = org file with larger images. =20 I just confirmed by reverting to the state just before your patch was = applied to master. It may have something to do with the final large = image fix. > On Dec 3, 2023, at 11:31=E2=80=AFAM, Eli Zaretskii = wrote: >=20 >> Cc: 67533@debbugs.gnu.org >> Date: Sun, 03 Dec 2023 17:52:12 +0200 >> From: Eli Zaretskii >>=20 >>> From: JD Smith >>> Date: Sun, 3 Dec 2023 10:48:20 -0500 >>> Cc: 67533@debbugs.gnu.org >>>=20 >>>> The cumulative patch below should fix all the problems you threw on = me >>>> till now. >>>=20 >>> Most excellent, thank you for the sleuthing Eli! Your roll-up patch = applies cleanly and fixes all the pixel size related issues in my large = complex org-with-latex-preview file. I can induce the same behavior in = my original svg-generating code by bumping the default width up to: >>>=20 >>> (w (+ 142 (* 2 (round (expt (1+ r) 1.25))))) >>>=20 >>> and it solves it there too. (I=E2=80=99ve updated the gist to do = this, and included the final function below, for posterity). >>=20 >> Thanks, I will install the changes (on master) soon. >=20 > Now done. >=20 > Is there anything else to do here, or can we close this bug? >=20 > Thanks. --Apple-Mail=_891791E5-F9D2-40ED-A121-1F2C22011999 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 I=E2=80=99m = sorry to report that this fix seems to have introduced a hard lockup in = org-display-inline-images, when displaying images in an org file with = larger images.  

I just confirmed by reverting = to the state just before your patch was applied to master.  It may = have something to do with the final large image fix.

On Dec 3, 2023, at 11:31=E2=80=AFAM, Eli Zaretskii = <eliz@gnu.org> wrote:

Cc: 67533@debbugs.gnu.org
Date: Sun, 03 Dec = 2023 17:52:12 +0200
From: Eli Zaretskii = <eliz@gnu.org>

From: JD Smith = <jdtsmith@gmail.com>
Date: Sun, 3 Dec 2023 10:48:20 = -0500
Cc: 67533@debbugs.gnu.org

The = cumulative patch below should fix all the problems you threw on = me
till now.

Most excellent, thank you for the = sleuthing Eli!  Your roll-up patch applies cleanly and fixes all = the pixel size related issues in my large complex org-with-latex-preview = file.  I can induce the same behavior in my original svg-generating = code by bumping the default width up = to:

     (w (+ 142 (* 2 (round (expt (1+ = r) 1.25)))))

and it solves it there too. (I=E2=80=99ve updated = the gist to do this, and included the final function below, for = posterity).

Thanks, I will install the changes (on = master) soon.

Now = done.

Is there anything else = to do here, or can we close this bug?

Thanks.

= --Apple-Mail=_891791E5-F9D2-40ED-A121-1F2C22011999-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 18:15:29 2023 Received: (at 67533) by debbugs.gnu.org; 3 Dec 2023 23:15:29 +0000 Received: from localhost ([127.0.0.1]:33038 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9vgP-0002v0-8v for submit@debbugs.gnu.org; Sun, 03 Dec 2023 18:15:29 -0500 Received: from mail-io1-xd34.google.com ([2607:f8b0:4864:20::d34]:46561) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9vgK-0002ug-Ro for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 18:15:27 -0500 Received: by mail-io1-xd34.google.com with SMTP id ca18e2360f4ac-7b37dbf896eso245708339f.1 for <67533@debbugs.gnu.org>; Sun, 03 Dec 2023 15:15:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701645309; x=1702250109; darn=debbugs.gnu.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=7C/NJFh2CAQ+8h8qHi8Mm7ECbktR/10E36xkxIO9g+g=; b=IT8qVw+/CAq3MydUv8sFCLdG6dOoxVnuvotkAGWHsMES+eyoun3Ge0zR9TER3aL3SC rZexrrpr/qzHmprxB0gglYuxzofTtWka2AtyuSDnoUKGLzxRsxk1jGqXueXZ+hgPwYLq s17dcFt7VOEKg6/BU2MuUa6CCkHeu51LUD39hfHzyITBLHAhJIqvGYU1FvHFVcVwgvgk smKjoVvF0pScUgkKsDVIWDR5KBeSMH7Q+r7mPm5F3yrS+/sUb9+uD1UKpAc2L9AAq1o9 eYUeCbLPefw0KMu83Hp1ig1hgd5yhUzlunFB4vdvTo4Dq+kR8QclMHEyqwWi5iiMLysp XM/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701645309; x=1702250109; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7C/NJFh2CAQ+8h8qHi8Mm7ECbktR/10E36xkxIO9g+g=; b=osR8p8wFlC7desop8bTlyPO91iO6StwviNEZGUkxUVuW1H4XvPbuhSVvEoPa2hH5/I sUuh06jBP08qRzTRb8zfBDKEfRtrtyJpH3VB+fAmwWWviytBVYK2sLLrbRCMBOOYPdQk BVrNkRXP8ggd5lQNdUTqVpNG++C4gxKTkYkQD4TahMonFri3jjFBF0ifW54wp4/Nzdb4 743WQQKTVqyNfCZkINs2kGUe90zHHuKJhueVGlwhpqtR0cQvK69psLm6zV65subik7Pq YunXR/XWlOlsMWDUuS0rzfhNr+xFldD/7LFX/rZKopBvzWdND1MYWb+cWlmk4N+UP79Q kShA== X-Gm-Message-State: AOJu0Yw5/rlvy/5KEZlIELsq0fzAQGMJ6mhJhrA3X0OHYIQv52Ya3Xb6 0Hucxz4xp03mOXDBoDvOJGQ= X-Google-Smtp-Source: AGHT+IFGZiX3dwkvUlIm0iS5DP5OqlG7DjGfV1sjAiZsXtUxpYqVpCauxgd5vDe3Dtludtt5PpF0KQ== X-Received: by 2002:a5d:8709:0:b0:7b3:e5d1:9e0c with SMTP id u9-20020a5d8709000000b007b3e5d19e0cmr4690251iom.0.1701645308838; Sun, 03 Dec 2023 15:15:08 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id p24-20020a02b898000000b0046651cf4d98sm2217708jam.78.2023.12.03.15.15.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Dec 2023 15:15:08 -0800 (PST) From: JD Smith Message-Id: <2AF7C34C-FB7D-49C6-AC85-054D2DFE2E4C@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_325F228A-30B8-40A6-87ED-4C07464A0456" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements Date: Sun, 3 Dec 2023 18:14:57 -0500 In-Reply-To: <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> To: Eli Zaretskii References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> <83h6kz6yeh.fsf@gnu.org> <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_325F228A-30B8-40A6-87ED-4C07464A0456 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 This has something to do with org-indent or the org-element-cache. So = this may be a =E2=80=9Crevealed bug=E2=80=9D in that code, which was = perhaps relying on some flaw in movement around larger images. =20 I don=E2=80=99t think there=E2=80=99s an urgent need to revert; I=E2=80=99= ll bring this to the org folk=E2=80=99s attention. > On Dec 3, 2023, at 4:25=E2=80=AFPM, JD Smith = wrote: >=20 > I=E2=80=99m sorry to report that this fix seems to have introduced a = hard lockup in org-display-inline-images, when displaying images in an = org file with larger images. =20 >=20 > I just confirmed by reverting to the state just before your patch was = applied to master. It may have something to do with the final large = image fix. >=20 >> On Dec 3, 2023, at 11:31=E2=80=AFAM, Eli Zaretskii = wrote: >>=20 >>> Cc: 67533@debbugs.gnu.org >>> Date: Sun, 03 Dec 2023 17:52:12 +0200 >>> From: Eli Zaretskii >>>=20 >>>> From: JD Smith >>>> Date: Sun, 3 Dec 2023 10:48:20 -0500 >>>> Cc: 67533@debbugs.gnu.org >>>>=20 >>>>> The cumulative patch below should fix all the problems you threw = on me >>>>> till now. >>>>=20 >>>> Most excellent, thank you for the sleuthing Eli! Your roll-up = patch applies cleanly and fixes all the pixel size related issues in my = large complex org-with-latex-preview file. I can induce the same = behavior in my original svg-generating code by bumping the default width = up to: >>>>=20 >>>> (w (+ 142 (* 2 (round (expt (1+ r) 1.25))))) >>>>=20 >>>> and it solves it there too. (I=E2=80=99ve updated the gist to do = this, and included the final function below, for posterity). >>>=20 >>> Thanks, I will install the changes (on master) soon. >>=20 >> Now done. >>=20 >> Is there anything else to do here, or can we close this bug? >>=20 >> Thanks. >=20 --Apple-Mail=_325F228A-30B8-40A6-87ED-4C07464A0456 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 <conjecture>
This has something to do with = org-indent or the org-element-cache.  So this may be a =E2=80=9Crevea= led bug=E2=80=9D in that code, which was perhaps relying on some flaw in = movement around larger images. =  
</conjecture>

I don=E2=80=99= t think there=E2=80=99s an urgent need to revert; I=E2=80=99ll bring = this to the org folk=E2=80=99s attention.

On Dec 3, 2023, at 4:25=E2=80=AFPM, JD Smith = <jdtsmith@gmail.com> wrote:

I=E2=80=99m sorry to report that this fix seems to = have introduced a hard lockup in org-display-inline-images, when = displaying images in an org file with larger images. =  

I just confirmed by reverting to the state = just before your patch was applied to master.  It may have = something to do with the final large image fix.

On Dec 3, 2023, at 11:31=E2=80=AFAM, Eli Zaretskii = <eliz@gnu.org> wrote:

Cc: 67533@debbugs.gnu.org
Date: Sun, 03 Dec = 2023 17:52:12 +0200
From: Eli Zaretskii = <eliz@gnu.org>

From: JD Smith = <jdtsmith@gmail.com>
Date: Sun, 3 Dec 2023 10:48:20 = -0500
Cc: 67533@debbugs.gnu.org

The = cumulative patch below should fix all the problems you threw on = me
till now.

Most excellent, thank you for the = sleuthing Eli!  Your roll-up patch applies cleanly and fixes all = the pixel size related issues in my large complex org-with-latex-preview = file.  I can induce the same behavior in my original svg-generating = code by bumping the default width up = to:

     (w (+ 142 (* 2 (round (expt (1+ = r) 1.25)))))

and it solves it there too. (I=E2=80=99ve updated = the gist to do this, and included the final function below, for = posterity).

Thanks, I will install the changes (on = master) soon.

Now = done.

Is there anything else = to do here, or can we close this bug?

Thanks.

=

= --Apple-Mail=_325F228A-30B8-40A6-87ED-4C07464A0456-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 22:28:02 2023 Received: (at 67533) by debbugs.gnu.org; 4 Dec 2023 03:28:02 +0000 Received: from localhost ([127.0.0.1]:33246 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9zco-00046B-7N for submit@debbugs.gnu.org; Sun, 03 Dec 2023 22:28:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55046) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r9zcm-00045n-Ii for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 22:28:01 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r9zcW-0008J2-Rw; Sun, 03 Dec 2023 22:27:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=t8iqq3pvpNZYI2JvD7bNIRoNwa/Yj2YZH+IzoWgLf2M=; b=Zslol1zDaI6efWqn4DBu sDveJYlXXzDOd+//3mqtzx5Z4CgfmxDhFFuf7CJcANSgsWohoN4ajyobegu/Kc+n8oh/DpDUlak3T DacPqJ8Sap2kX45Hh+53vDUoiuTamg6X7yz5vzm8wIw9tPBaU1X0BhY/xAQA1VIP3eqDymZpdOgyo sI4KnixkT8RNALnbW/qquOr0DHG9Q2fbXC6rYetENTzfAb9XSmuasU/qoFCzA4esGOajb1I9A8WkV eHsGk3usKD/YVJyab7x3v9W8zUkED+oUkUafxx6yp1ygkqlaWVxGabBjDivVqVNKQO9/j2s7yclqZ BHfUOwKuuL3XSQ==; Date: Mon, 04 Dec 2023 05:27:47 +0200 Message-Id: <834jgy7iks.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> (message from JD Smith on Sun, 3 Dec 2023 16:25:01 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> <83h6kz6yeh.fsf@gnu.org> <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Sun, 3 Dec 2023 16:25:01 -0500 > Cc: 67533@debbugs.gnu.org > > I’m sorry to report that this fix seems to have introduced a hard lockup in org-display-inline-images, > when displaying images in an org file with larger images. > > I just confirmed by reverting to the state just before your patch was applied to master. It may have > something to do with the final large image fix. Please provide a recipe to reproduce these lockups. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 03 23:33:16 2023 Received: (at 67533) by debbugs.gnu.org; 4 Dec 2023 04:33:16 +0000 Received: from localhost ([127.0.0.1]:33270 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rA0dv-0005me-Vl for submit@debbugs.gnu.org; Sun, 03 Dec 2023 23:33:16 -0500 Received: from mail-ot1-x334.google.com ([2607:f8b0:4864:20::334]:58501) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rA0dt-0005mQ-1R for 67533@debbugs.gnu.org; Sun, 03 Dec 2023 23:33:14 -0500 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-6d858670630so2074805a34.0 for <67533@debbugs.gnu.org>; Sun, 03 Dec 2023 20:33:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701664377; x=1702269177; darn=debbugs.gnu.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=/M4YjpGe8C3LK7doGeh+ErTl9I6tROwZJMec08Kimk8=; b=iasLZ1UtEVLgpGS/rzTKIdNBe2MFaypy5q9hvRUGQwkyQ4vu0tTXvGys5lyIRdy0M0 97+CHSElJ9SB1El6h2RJI94XUviH4eWPIb/xpfJ6N4BS5UEzZnlHegcbptwnAv0/QBn+ /Po6XDjArDfVaFnn427/5lvJzmo9DQUV/s+diWyJU4NYc0PsVCaVw19giwN2TJVvtUO5 9vWsWAd7umurxX5L9VZTnQ+E8cdmibyyyBohmBwmBKK0bc3CygE8qUeP3PbVxPMD9FHs 6aj3v1ZuM0VlxUmzKj/yaD51kwmPUdtSe8USvdTNgkUG+GK3OuMT0xm9ysePjoQb9wDt FN0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701664377; x=1702269177; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/M4YjpGe8C3LK7doGeh+ErTl9I6tROwZJMec08Kimk8=; b=UaCIVU7Y0Zmf9H9bGJZ/FyPzA1pqQGhjROP5kDQwWW0HLo5vAePcG7eMntQrPaFtA2 bSZ+DqZ3u2RgaLKeu3mfvdB1OCYwRl3lQkRLAQJLZcdyCFzjieEa5Wxb+f+kqkTbcfsk WLXjunyHW0KF0WkcVrwNmbyif90r/dtDVAg6qXdIMIUxoLK8hz+F1J+dV3CUYGqtU7N3 ApP1s+AT4LR4bWIL5pniQPWOdUwPJalEnFjWPRyXP11cshchIwUHvavrpUFHyoMQOAx/ XhxkQvIuOwhr1bCttp/T7sNFvgOhqDiN28CeS97d6fkqO8xErJVhsW6Q0Fv9A51n5Zwz xeaA== X-Gm-Message-State: AOJu0YxzZTzfBjP9Sb+bmh1lbcI7JzlGDDE2Osx6hP7DsK1Iwu+08K6G Et/8ZWN1O/64D8naCysP4yM= X-Google-Smtp-Source: AGHT+IFHnvXvMG4nojh93ZsC3WAdahcxLx1p6FzrpAPlJEb/WD8uJNlVYd72C16q630yPECMQqsYVA== X-Received: by 2002:a05:6870:818f:b0:1fb:75b:9997 with SMTP id k15-20020a056870818f00b001fb075b9997mr5721787oae.70.1701664376739; Sun, 03 Dec 2023 20:32:56 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id cd15-20020a0566381a0f00b004690ce8e9aesm98081jab.46.2023.12.03.20.32.55 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Dec 2023 20:32:55 -0800 (PST) From: JD Smith Message-Id: <86427BDB-8992-4C6B-8D8C-3A50B5CD7155@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_A5952FEE-DEDF-4DF5-A823-AD7CE9B06DFB" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements Date: Sun, 3 Dec 2023 23:32:44 -0500 In-Reply-To: <834jgy7iks.fsf@gnu.org> To: Eli Zaretskii References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> <83h6kz6yeh.fsf@gnu.org> <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> <834jgy7iks.fsf@gnu.org> X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_A5952FEE-DEDF-4DF5-A823-AD7CE9B06DFB Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 I am so far unable to find a recipe without including org-mode in the = mix. An org-mode recipe is quite simple: Create a new org-mode file. M-x org-indent-mode M-x visual-line-mode Insert text below, replacing the image name with a large image of your = choosing (wider than the standard frame width), placed in the same = directory as your org file M-x org-display-inline-images Move point down towards the image Emacs hangs +++ * Image [[./image.png]] > On Dec 3, 2023, at 10:27=E2=80=AFPM, Eli Zaretskii = wrote: >=20 >> From: JD Smith >> Date: Sun, 3 Dec 2023 16:25:01 -0500 >> Cc: 67533@debbugs.gnu.org >>=20 >> I=E2=80=99m sorry to report that this fix seems to have introduced a = hard lockup in org-display-inline-images, >> when displaying images in an org file with larger images. =20 >>=20 >> I just confirmed by reverting to the state just before your patch was = applied to master. It may have >> something to do with the final large image fix. >=20 > Please provide a recipe to reproduce these lockups. >=20 > Thanks. --Apple-Mail=_A5952FEE-DEDF-4DF5-A823-AD7CE9B06DFB Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 I am so far = unable to find a recipe without including org-mode in the mix.  An = org-mode recipe is quite simple:

  1. Create a new org-mode file.
  2. M-x = org-indent-mode
  3. M-x visual-line-mode
  4. Insert text below, = replacing the image name with a large image of your choosing (wider than = the standard frame width), placed in the same directory as your org = file
  5. M-x org-display-inline-images
  6. Move point down = towards the image
  7. Emacs = hangs

+++
* = Image
[[./image.png]]


On Dec 3, 2023, at 10:27=E2=80=AFPM, Eli Zaretskii = <eliz@gnu.org> wrote:

From: JD Smith <jdtsmith@gmail.com>
Date: Sun, 3 = Dec 2023 16:25:01 -0500
Cc: 67533@debbugs.gnu.org

I=E2=80=99m = sorry to report that this fix seems to have introduced a hard lockup in = org-display-inline-images,
when displaying images in an org file with = larger images.  

I just confirmed by reverting to the state = just before your patch was applied to master.  It may = have
something to do with the final large image = fix.

Please provide a recipe to reproduce these = lockups.

Thanks.

= --Apple-Mail=_A5952FEE-DEDF-4DF5-A823-AD7CE9B06DFB-- From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 04 08:11:31 2023 Received: (at 67533) by debbugs.gnu.org; 4 Dec 2023 13:11:32 +0000 Received: from localhost ([127.0.0.1]:33656 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rA8jT-0005j4-K8 for submit@debbugs.gnu.org; Mon, 04 Dec 2023 08:11:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38782) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rA8jR-0005ip-Aj for 67533@debbugs.gnu.org; Mon, 04 Dec 2023 08:11:30 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rA8jA-0003LA-8r; Mon, 04 Dec 2023 08:11:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=RHTZARltujvoUsyeh3fs1vOQkG9B5mbul80GRCDn6hk=; b=I6JEpZXxnq2D 1xnzR9vqr3RgoP1Pc4i/5Gp2PyAnmuoxNAP+GaMkw+0sFWsHBZs6lU4GcYwTiz+9Lzzs0zLrgKXUL sJF/7RgFhbcEF0Ke2RKM42pcTOwWQLWzhIjbg8zTcx3g6tnDnQkXMwtiPkQORu5OGQzupiH6WBOUZ Qc9y0sHKzmdSHaEWeImAjZdQ4RyaLkdT0uzyu20HfwNaMR0jHJQP6FuratQzLtJQ19XGJrlTEkDoz MikVHss7mL6JvITnEqxTG3rmRzdjz8M0u+3DXgp0MDTLtpJ9LT6wLql9POH6vHJDKyF6DC8M3OxMX zHIuVZhUFrmK82EsG0X4zw==; Date: Mon, 04 Dec 2023 15:11:05 +0200 Message-Id: <83v89e5d06.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: <86427BDB-8992-4C6B-8D8C-3A50B5CD7155@gmail.com> (message from JD Smith on Sun, 3 Dec 2023 23:32:44 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> <83h6kz6yeh.fsf@gnu.org> <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> <834jgy7iks.fsf@gnu.org> <86427BDB-8992-4C6B-8D8C-3A50B5CD7155@gmail.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Sun, 3 Dec 2023 23:32:44 -0500 > Cc: 67533@debbugs.gnu.org > > 1 Create a new org-mode file. > 2 M-x org-indent-mode > 3 M-x visual-line-mode > 4 Insert text below, replacing the image name with a large image of your choosing (wider than the > standard frame width), placed in the same directory as your org file > 5 M-x org-display-inline-images > 6 Move point down towards the image > 7 Emacs hangs Thanks, I hope I fixed this now. From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 04 09:15:02 2023 Received: (at 67533) by debbugs.gnu.org; 4 Dec 2023 14:15:02 +0000 Received: from localhost ([127.0.0.1]:33747 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rA9iv-0007bM-VP for submit@debbugs.gnu.org; Mon, 04 Dec 2023 09:15:02 -0500 Received: from mail-io1-xd2f.google.com ([2607:f8b0:4864:20::d2f]:54581) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rA9iu-0007ax-64 for 67533@debbugs.gnu.org; Mon, 04 Dec 2023 09:15:00 -0500 Received: by mail-io1-xd2f.google.com with SMTP id ca18e2360f4ac-7b060378c47so144744339f.1 for <67533@debbugs.gnu.org>; Mon, 04 Dec 2023 06:14:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701699284; x=1702304084; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=r3M7SiPfXiIudFTNXAXLc9plEtIII9JW3e7Zeo7gpZM=; b=nbLZfOtE8oAEd0akyttoGCxbr+TD7mYRtwevnczXfEBu3jYy57p1XldRKrmDqeyKvp Pre064OIL9u9bvT8TUY0H1picAEaRzRjLKVMp6JzUyuUchW7i34eFV0mxwo2BjqTN6gT +1pM5OOq3uEk2nptzh1T2L3sSb6Da37qv+lWTqO2rD8urNrWbuL47d+r0/Vrp/BsNeHC sxHiCP5pGpOwmgRslsKr3pYRdbcGH9d7hECYhoXf41V1FwAqAS0zROvrTUmifp2Cvczr 2NlRSZJSB1r2DMtCJJ7xtJGEYnfpxT10hIFYqhD+2rxZt5VHhjkHS6/o3+/fW0GyeM83 ZZcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701699284; x=1702304084; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=r3M7SiPfXiIudFTNXAXLc9plEtIII9JW3e7Zeo7gpZM=; b=d4CNQ1nMADYvxmSP/NIleD8saDBlCpQS5FrgSXAgkKGbAOE/Tbc5YUyEjHPQifNoiP KIGxZ0ipWCgF+K7CgGlv1eFz3Ymoryz1Um9ixtcy7/ejaBTQ4Ey8asw08lfaSU7MUvB0 KFYHdzpbv55J98KD2/zSmC8iC4jZEt+Jbf8yP7R14VWP04glUSn9VBxOu5xrzeLhW7KV De7N3J5I/W8IMmTUbpIPCfDj3AEqkgKciY+auZb1f9kMHDHCIvDTwo2y0BqIam7us5R9 irWEaYuan9G2ELfpdVYBka7V4QFGXV/H3YX238J8Q6ZHCRMGg+L1l1eRjdxanu9aIFYE e+Bg== X-Gm-Message-State: AOJu0Yz90Kf69PKl/AqUmAP0jA26TTJBWQcP1VM6cC/vPUuV9sTjDWKG uPA5+DI7v6phNoAFTOIGYLNoWFDTJlk= X-Google-Smtp-Source: AGHT+IF3TxNfi+E0Xds1C3nGe7amGOGMJ+SGyJ/1sHwk3bjmdZQljOCr5EMSUD2P86cwR8lyahde1A== X-Received: by 2002:a6b:e712:0:b0:7b3:ad0b:32c9 with SMTP id b18-20020a6be712000000b007b3ad0b32c9mr4144689ioh.7.1701699283861; Mon, 04 Dec 2023 06:14:43 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id h15-20020a0566380f0f00b0046671f9717csm2539770jas.109.2023.12.04.06.14.43 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Dec 2023 06:14:43 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: bug#67533: SVG images confound position pixel measurements From: JD Smith In-Reply-To: <83v89e5d06.fsf@gnu.org> Date: Mon, 4 Dec 2023 09:14:32 -0500 Content-Transfer-Encoding: quoted-printable Message-Id: References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> <83h6kz6yeh.fsf@gnu.org> <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> <834jgy7iks.fsf@gnu.org> <86427BDB-8992-4C6B-8D8C-3A50B5CD7155@gmail.com> <83v89e5d06.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Dec 4, 2023, at 8:11=E2=80=AFAM, Eli Zaretskii = wrote: >=20 >> From: JD Smith >> Date: Sun, 3 Dec 2023 23:32:44 -0500 >> Cc: 67533@debbugs.gnu.org >>=20 >> 1 Create a new org-mode file. >> 2 M-x org-indent-mode >> 3 M-x visual-line-mode >> 4 Insert text below, replacing the image name with a large image of = your choosing (wider than the >> standard frame width), placed in the same directory as your org file >> 5 M-x org-display-inline-images >> 6 Move point down towards the image >> 7 Emacs hangs >=20 > Thanks, I hope I fixed this now. Great, I just recompiled and it=E2=80=99s fixed here too. Will keep an = eye out for any other image-display issues. Thanks for your work on = this.= From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 16 04:33:05 2023 Received: (at 67533) by debbugs.gnu.org; 16 Dec 2023 09:33:05 +0000 Received: from localhost ([127.0.0.1]:53965 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rER2e-0001D1-VG for submit@debbugs.gnu.org; Sat, 16 Dec 2023 04:33:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35132) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rER2c-0001CR-SS for 67533@debbugs.gnu.org; Sat, 16 Dec 2023 04:33:03 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rER2W-0007cn-At; Sat, 16 Dec 2023 04:32:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=1L8R9P5M9yk3Q1PXMbQ7++akMZaZWj4lLPwa0ueEiDo=; b=JIvE0cHLwEwSNhNOl6mJ vAH79RLe7ci6asaB24ICcE2SU1Rpx3jx0K62U31uRfLO0d1eepxCD5wPguuppJ7jb30IJo2S/rXaa Htj/NUeMe1oxiMmo4FTMVifN9uPoPt0lNkHtF2+PjOEYhYo5KtSE9bhQzDNWrc8oskzbkG13R/+Yu /464chMqg9SKzn0Pei4cNYOwl3im40cf92Fa20s3oEwQdFIsmIaJ1CdvaX4sfew/B90sZfbLmVzPT 73c9GCAHP+CplNDrfazXRc1FTozpME3tO91v06tDknol/VzZ7ySFrVyKZFeRCQwqaX0ck/GdBSmFC 6JqabXn6tQostw==; Date: Sat, 16 Dec 2023 11:32:35 +0200 Message-Id: <831qbmo5l8.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: (message from JD Smith on Mon, 4 Dec 2023 09:14:32 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> <83h6kz6yeh.fsf@gnu.org> <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> <834jgy7iks.fsf@gnu.org> <86427BDB-8992-4C6B-8D8C-3A50B5CD7155@gmail.com> <83v89e5d06.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Mon, 4 Dec 2023 09:14:32 -0500 > Cc: 67533@debbugs.gnu.org > > > > > On Dec 4, 2023, at 8:11 AM, Eli Zaretskii wrote: > > > >> From: JD Smith > >> Date: Sun, 3 Dec 2023 23:32:44 -0500 > >> Cc: 67533@debbugs.gnu.org > >> > >> 1 Create a new org-mode file. > >> 2 M-x org-indent-mode > >> 3 M-x visual-line-mode > >> 4 Insert text below, replacing the image name with a large image of your choosing (wider than the > >> standard frame width), placed in the same directory as your org file > >> 5 M-x org-display-inline-images > >> 6 Move point down towards the image > >> 7 Emacs hangs > > > > Thanks, I hope I fixed this now. > > Great, I just recompiled and it’s fixed here too. Will keep an eye out for any other image-display issues. Thanks for your work on this. Any further issues, or can this be closed now? From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 16 10:07:55 2023 Received: (at 67533) by debbugs.gnu.org; 16 Dec 2023 15:07:55 +0000 Received: from localhost ([127.0.0.1]:55694 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rEWGg-0000ng-Nl for submit@debbugs.gnu.org; Sat, 16 Dec 2023 10:07:55 -0500 Received: from mail-il1-x130.google.com ([2607:f8b0:4864:20::130]:49653) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rEWGd-0000nT-R2 for 67533@debbugs.gnu.org; Sat, 16 Dec 2023 10:07:53 -0500 Received: by mail-il1-x130.google.com with SMTP id e9e14a558f8ab-35f519f3ea9so8543055ab.3 for <67533@debbugs.gnu.org>; Sat, 16 Dec 2023 07:07:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702739265; x=1703344065; darn=debbugs.gnu.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=rECsBqgh66/0FeBj1bpMXRvDgU3UJGJWyfOWNso10Os=; b=Fw+VqY/HuuLz4xXbyxdv0JqXSXIoQznulY94/wBcBSY9nvTvpKuu6x9mYtFnd02Kk0 8URB+dIevkauq347bbWLXHNwm/B2HhiO+twBvPO+5WuYSXjKujFPEQVyDw3VGQ0S9owk 6FGMDJrjYEEt8x7Z7wods3yb2c13DxuDZ9or6oHlSf8q2Kzsd6cYC3E3ylf7kj++fbri HQf9syXsuNzuLe0UMU+GYMeHB1EEf/kIEvY9rMtwQoxlIaDjp2lhhNCAWwvFJmTRJ+6/ Lv7mwgVGbFjSJyce2/n8jDsT/K+XMneOvkYv55P+DmpGEGKLljlX8fngErKB92Hz0+ds kAww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702739265; x=1703344065; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rECsBqgh66/0FeBj1bpMXRvDgU3UJGJWyfOWNso10Os=; b=spkunOdF4p82e5Hpeg4uLkodZTEzrxXzhweICz9ZjD/5KwkJPSZxRtggAYsQRXLo6K fN2dbdB8uZYlHDaGLn0B3v2TWrRXlucC0nkvp2u4qfOrUo55XuyOEC7f5v7bmI1LfDAY 2/A1u7PL3mlsD1Gp+WFj4UsOgRXcnpWWLFrXmcMqBb1USUIRqX0g7ZZ6Qyd7Plg5VTlB FAKe2pMj9me3MTOLBf7RlgiHYBRetloXbmQ7SnzhHV2ikSf8rzkN2t/WTvIHGchZ42Wk AL1SLkiQ/gdXnHdxuYmx1fYGn9ROcfhsJtcksQSpF2EoruOvN3lUIsp9WFYH0qaSaxei Pdkw== X-Gm-Message-State: AOJu0YzcCX9xVrnVamqrVVGw+uMSfrTHZKoV3yMqMTTFaD9q4I74PQOL tZNmjt7O3BqVxnIvy+M3Wk8= X-Google-Smtp-Source: AGHT+IEnBMjjZuDHTCZKSE5u8qI20ioaeyT3bOA3lybjqeXkYmq6HUVBn9vEraEtCsE21WORQ3hhkA== X-Received: by 2002:a92:ca0a:0:b0:35d:5f41:5940 with SMTP id j10-20020a92ca0a000000b0035d5f415940mr14234819ils.96.1702739265291; Sat, 16 Dec 2023 07:07:45 -0800 (PST) Received: from smtpclient.apple (cm-24-53-187-34.buckeyecom.net. [24.53.187.34]) by smtp.gmail.com with ESMTPSA id cn8-20020a0566383a0800b00468ea86ae6fsm4624313jab.83.2023.12.16.07.07.44 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 16 Dec 2023 07:07:44 -0800 (PST) From: JD Smith Message-Id: <3906BCD4-364C-4EF8-B9CB-40D9DA3AB504@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_4BCC5E8E-FBBF-4687-B57A-9A0AF599C121" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.300.61.1.2\)) Subject: Re: bug#67533: SVG images confound position pixel measurements Date: Sat, 16 Dec 2023 10:07:33 -0500 In-Reply-To: <831qbmo5l8.fsf@gnu.org> To: Eli Zaretskii References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> <83h6kz6yeh.fsf@gnu.org> <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> <834jgy7iks.fsf@gnu.org> <86427BDB-8992-4C6B-8D8C-3A50B5CD7155@gmail.com> <83v89e5d06.fsf@gnu.org> <831qbmo5l8.fsf@gnu.org> X-Mailer: Apple Mail (2.3774.300.61.1.2) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 67533 Cc: 67533@debbugs.gnu.org, contact@karthinks.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_4BCC5E8E-FBBF-4687-B57A-9A0AF599C121 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Dec 16, 2023, at 4:32=E2=80=AFAM, Eli Zaretskii = wrote: >>=20 >> Great, I just recompiled and it=E2=80=99s fixed here too. Will keep = an eye out for any other image-display issues. Thanks for your work on = this. >=20 > Any further issues, or can this be closed now? I haven=E2=80=99t encountered any, other than the possibly related = motion issue with inline images in bug#67604. I believe it can be = closed. =20 Given the unexpected issue that cropped up with org-indent and displayed = wide images, it may be worth stress-testing this fix in buffers with = other unusual/wide images (copying Karthik since I know he often works = on latex/org image preview). Thanks for your work. --Apple-Mail=_4BCC5E8E-FBBF-4687-B57A-9A0AF599C121 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

On Dec 16, = 2023, at 4:32=E2=80=AFAM, Eli Zaretskii <eliz@gnu.org> = wrote:

Great, I just = recompiled and it=E2=80=99s fixed here too. Will keep an eye out for any = other image-display issues.  Thanks for your work on = this.

Any further issues, or can this be closed = now?

I haven=E2=80=99= t encountered any, other than the possibly related motion issue with = inline images in bug#67604.  I believe it can be = closed.  

Given the unexpected issue that cropped up with org-indent and displayed wide images, = it may be worth stress-testing this fix in buffers with = other unusual/wide images (copying Karthik since I know he often works = on latex/org image preview).

Thanks for your work.

= --Apple-Mail=_4BCC5E8E-FBBF-4687-B57A-9A0AF599C121-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 16 10:23:46 2023 Received: (at 67533-done) by debbugs.gnu.org; 16 Dec 2023 15:23:46 +0000 Received: from localhost ([127.0.0.1]:55756 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rEWW1-0003o9-Qk for submit@debbugs.gnu.org; Sat, 16 Dec 2023 10:23:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35786) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rEWW0-0003nw-Dp for 67533-done@debbugs.gnu.org; Sat, 16 Dec 2023 10:23:44 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rEWVt-0000Kx-7Z; Sat, 16 Dec 2023 10:23:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=xhTBYQET+7kHY9ADQKioWhlsbUkYaNDUKJX5MonF0uw=; b=Gca5AvhrSF5dis6KIe+W BfBdOFNQoshDIRpY6L4kArJghGgJax45gy22kdEL9fhG/ZSyjsF3FfIVw5HbLFsi/NlN/08anj9AU 3z+vH8jSlUuhZiO0PtxpRCMvxLHtEJTRy7SZJPAJC8tOJYh7VQkg4jI6v8jIkgHrihqjehX9oJ5MT TluoGc9YhRePbtebpAgE8Bvivzi3xxPWOrSHeiuC+Elu8JfQdnuh9PB4ojyoGVwN7ksGS4lhHofl1 UUJm6V3EciYs1CxuUP+3sOvIa6vs8sBfzmE4eMOWC0cpWix98hNDw1yfWojnX1EoOLSJBZBcsByIn zAn/YQtcP9eKMg==; Date: Sat, 16 Dec 2023 17:23:18 +0200 Message-Id: <83wmtekw7t.fsf@gnu.org> From: Eli Zaretskii To: JD Smith In-Reply-To: <3906BCD4-364C-4EF8-B9CB-40D9DA3AB504@gmail.com> (message from JD Smith on Sat, 16 Dec 2023 10:07:33 -0500) Subject: Re: bug#67533: SVG images confound position pixel measurements References: <9B9C683E-B951-406E-98AA-32F4539B3FF7@gmail.com> <83o7fbb0zf.fsf@gnu.org> <6158BB83-3C05-4CEC-BF65-A6C0DEA329CD@gmail.com> <837clybds3.fsf@gnu.org> <83wmtx83io.fsf@gnu.org> <906A480A-85B4-4AB0-B2E3-1533A48C228D@gmail.com> <835y1g8z7v.fsf@gnu.org> <8334wk8kd1.fsf@gnu.org> <8672011B-4C83-4983-9DEA-43ED009042F8@gmail.com> <616C9D31-F265-4735-B73E-C0574D79F7F1@gmail.com> <83r0k3782q.fsf@gnu.org> <83jzpv707n.fsf@gnu.org> <83h6kz6yeh.fsf@gnu.org> <663EEC8D-2D83-422A-8EAA-262B2E9A4097@gmail.com> <834jgy7iks.fsf@gnu.org> <86427BDB-8992-4C6B-8D8C-3A50B5CD7155@gmail.com> <83v89e5d06.fsf@gnu.org> <831qbmo5l8.fsf@gnu.org> <3906BCD4-364C-4EF8-B9CB-40D9DA3AB504@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67533-done Cc: 67533-done@debbugs.gnu.org, contact@karthinks.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: JD Smith > Date: Sat, 16 Dec 2023 10:07:33 -0500 > Cc: 67533@debbugs.gnu.org, > contact@karthinks.com > > On Dec 16, 2023, at 4:32 AM, Eli Zaretskii wrote: > > Great, I just recompiled and it’s fixed here too. Will keep an eye out for any other > image-display issues. Thanks for your work on this. > > Any further issues, or can this be closed now? > > I haven’t encountered any, other than the possibly related motion issue with inline images in > bug#67604. I believe it can be closed. Done. > Given the unexpected issue that cropped up with org-indent and displayed wide images, it may be > worth stress-testing this fix in buffers with other unusual/wide images (copying Karthik since I know he > often works on latex/org image preview). Any issues with stuff other than window-text-pixel-size should be submitted as separate bugs. If there are still issues with window-text-pixel-size, we can reopen this bug, or start a new one. Thanks. From unknown Thu Aug 14 21:46:36 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sun, 14 Jan 2024 12:24:05 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator