emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master e5e5d85369: Fix image-mode-fit-frame resizing


From: Lars Ingebrigtsen
Subject: master e5e5d85369: Fix image-mode-fit-frame resizing
Date: Wed, 23 Mar 2022 09:19:29 -0400 (EDT)

branch: master
commit e5e5d85369cdae669af78feb22a924a2a493c48f
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Fix image-mode-fit-frame resizing
    
    * lisp/image-mode.el (image-mode-fit-frame): Use pixel sizes
    instead of lines/columns to get more accurate resizing (bug#37630).
---
 lisp/image-mode.el | 32 +++++++++++++++++---------------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index 38a5e7cdfd..863d014cdc 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -420,37 +420,39 @@ call."
   (interactive (list nil t))
   (let* ((buffer (current-buffer))
          (display (image-get-display-property))
-         (size (image-display-size display))
+         (size (image-display-size display t))
         (saved (frame-parameter frame 'image-mode-saved-params))
         (window-configuration (current-window-configuration frame))
-        (width  (frame-width  frame))
-        (height (frame-height frame)))
+        (frame-width (frame-pixel-width frame))
+        (frame-height (frame-pixel-height frame)))
     (with-selected-frame (or frame (selected-frame))
       (if (and toggle saved
-              (= (caar saved) width)
-              (= (cdar saved) height))
+              (= (caar saved) frame-width)
+              (= (cdar saved) frame-height))
          (progn
-           (set-frame-width  frame (car (nth 1 saved)))
-           (set-frame-height frame (cdr (nth 1 saved)))
+           (set-frame-width frame (car (nth 1 saved)) nil t)
+           (set-frame-height frame (cdr (nth 1 saved)) nil t)
            (set-window-configuration (nth 2 saved))
            (set-frame-parameter frame 'image-mode-saved-params nil))
        (delete-other-windows)
        (switch-to-buffer buffer t t)
-       (let* ((edges (window-inside-edges))
-              (inner-width  (- (nth 2 edges) (nth 0 edges)))
+       (let* ((edges (window-inside-pixel-edges))
+              (inner-width (- (nth 2 edges) (nth 0 edges)))
               (inner-height (- (nth 3 edges) (nth 1 edges))))
-         (set-frame-width  frame (+ (ceiling (car size))
-                                    width (- inner-width)))
+         (set-frame-width frame (+ (ceiling (car size))
+                                   (- frame-width inner-width))
+                           nil t)
          (set-frame-height frame (+ (ceiling (cdr size))
-                                    height (- inner-height)))
+                                    (- frame-height inner-height))
+                            nil t)
          ;; The frame size after the above `set-frame-*' calls may
          ;; differ from what we specified, due to window manager
          ;; interference.  We have to call `frame-width' and
          ;; `frame-height' to get the actual results.
          (set-frame-parameter frame 'image-mode-saved-params
-                              (list (cons (frame-width)
-                                          (frame-height))
-                                    (cons width height)
+                              (list (cons (frame-pixel-width frame)
+                                          (frame-pixel-height frame))
+                                    (cons frame-width frame-height)
                                     window-configuration)))))))
 
 ;;; Image Mode setup



reply via email to

[Prev in Thread] Current Thread [Next in Thread]