Function: image-transform-properties

image-transform-properties is a byte-compiled function defined in image-mode.el.gz.

Signature

(image-transform-properties SPEC)

Documentation

Return rescaling/rotation properties for image SPEC.

These properties are determined by the Image mode variables image-transform-resize and image-transform-rotation. The return value is suitable for appending to an image spec.

Source Code

;; Defined in /usr/src/emacs/lisp/image-mode.el.gz
(defun image-transform-properties (spec)
  "Return rescaling/rotation properties for image SPEC.
These properties are determined by the Image mode variables
`image-transform-resize' and `image-transform-rotation'.  The
return value is suitable for appending to an image spec."
  (setq image-transform-scale 1.0)
  (when (or (not (memq image-transform-resize '(nil t)))
	    (/= image-transform-rotation 0.0))
    ;; Note: `image-size' looks up and thus caches the untransformed
    ;; image.  There's no easy way to prevent that.
    (let* ((size (image-size spec t))
           (edges (window-inside-pixel-edges (get-buffer-window)))
	   (resized
	    (cond
	     ((numberp image-transform-resize)
	      (unless (= image-transform-resize 1)
		(setq image-transform-scale image-transform-resize)
		(cons nil (floor (* image-transform-resize (cdr size))))))
	     ((eq image-transform-resize 'fit-width)
	      (image-transform-fit-width
	       (car size) (cdr size)
	       (- (nth 2 edges) (nth 0 edges))))
	     ((eq image-transform-resize 'fit-height)
	      (let ((res (image-transform-fit-width
			  (cdr size) (car size)
			  (- (nth 3 edges) (nth 1 edges)))))
		(cons (cdr res) (car res)))))))
      `(,@(when (car resized)
	    (list :width (car resized)))
	,@(when (cdr resized)
	    (list :height (cdr resized)))
	,@(unless (= 0.0 image-transform-rotation)
	    (list :rotation image-transform-rotation))
        ,@(when image--transform-smoothing
            (list :transform-smoothing
                  (string= image--transform-smoothing "smooth")))))))