]> git.eshelyaron.com Git - emacs.git/commitdiff
copy-tree just image map, not entire image
authorJoseph Turner <joseph@breatheoutbreathe.in>
Sat, 23 Mar 2024 20:29:17 +0000 (13:29 -0700)
committerEshel Yaron <me@eshelyaron.com>
Thu, 28 Mar 2024 10:29:07 +0000 (11:29 +0100)
* lisp/image.el (image--compute-original-map): Copy only
the image map.  (Bug#69602)

(cherry picked from commit a4da3971f2580c90fb3c6957eea2d0dbfb695879)

lisp/image.el

index 55340ea03dc318b6a0c55d8877bd6c035e10e4b0..d7496485acad0853b1cabf1154437c2cd7b22ad0 100644 (file)
@@ -1455,24 +1455,23 @@ When :rotation is not a multiple of 90, return copy of :original-map."
 If IMAGE lacks :map property, return nil.
 When :rotation is not a multiple of 90, return copy of :map."
   (when (image-property image :map)
-    (let* ((image-copy (copy-tree image t))
-           (map (image-property image-copy :map))
-           (scale (or (image-property image-copy :scale) 1))
-           (rotation (or (image-property image-copy :rotation) 0))
-           (flip (image-property image-copy :flip))
-           (size (image-size image-copy t)))
+    (let* ((original-map (copy-tree (image-property image :map) t))
+           (scale (or (image-property image :scale) 1))
+           (rotation (or (image-property image :rotation) 0))
+           (flip (image-property image :flip))
+           (size (image-size image t)))
       (when (and ; Handle only 90-degree rotations
              (zerop (mod rotation 1))
              (zerop (% (truncate rotation) 90)))
         ;; In rendered images, rotation is always applied before flip.
-        ;; To undo the transformation, flip before rotating.
-        ;; SIZE fits MAP before it is transformed back to ORIGINAL-MAP.
-        ;; Therefore, scale MAP after flip and rotate operations, since
-        ;; both need MAP to fit SIZE.
-        (image--flip-map map flip size)
-        (image--rotate-map map (- rotation) size)
-        (image--scale-map map (/ 1.0 scale)))
-      map)))
+        ;; To undo the transformation, flip before rotating.  SIZE fits
+        ;; ORIGINAL-MAP before transformations are applied.  Therefore,
+        ;; scale ORIGINAL-MAP after flip and rotate operations, since
+        ;; both need ORIGINAL-MAP to fit SIZE.
+        (image--flip-map original-map flip size)
+        (image--rotate-map original-map (- rotation) size)
+        (image--scale-map original-map (/ 1.0 scale)))
+      original-map)))
 
 (defun image--scale-map (map scale)
   "Scale MAP according to SCALE.