]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix image-mode-fit-frame resizing
authorLars Ingebrigtsen <larsi@gnus.org>
Wed, 23 Mar 2022 13:17:58 +0000 (14:17 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 23 Mar 2022 13:19:22 +0000 (14:19 +0100)
* 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

index 38a5e7cdfdcbf131a57d69b28433b5dafe4f86a3..863d014cdc42a2239ee949c2819e9dd159ab46a5 100644 (file)
@@ -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