summaryrefslogtreecommitdiff
path: root/lisp/image.el
diff options
context:
space:
mode:
authorJuri Linkov <juri@linkov.net>2019-11-30 23:21:00 +0200
committerJuri Linkov <juri@linkov.net>2019-11-30 23:21:00 +0200
commit3c278b4999632621ef9690b319798d4ed752b163 (patch)
treef539919b4c2fbcc3712ea83719e0b71717402838 /lisp/image.el
parentd64ea182fb6e2bf3af8ac8a289e8029ded36407e (diff)
downloademacs-3c278b4999632621ef9690b319798d4ed752b163.tar.gz
* lisp/image.el: Support image scaling with mouse in other buffer.
* lisp/image.el (image-increase-size, image-decrease-size): Add optional arg position. (image-mouse-increase-size, image-mouse-decrease-size): Use '(point-marker)' for arg position. (image--get-image): Use get-char-property from position if non-nil, and its buffer. (image--get-imagemagick-and-warn, image--change-size): Add optional arg position.
Diffstat (limited to 'lisp/image.el')
-rw-r--r--lisp/image.el28
1 files changed, 16 insertions, 12 deletions
diff --git a/lisp/image.el b/lisp/image.el
index f4ed4e79fc0..254e7e58b67 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -1012,7 +1012,7 @@ has no effect."
(imagemagick-register-types)
-(defun image-increase-size (&optional n)
+(defun image-increase-size (&optional n position)
"Increase the image size by a factor of N.
If N is 3, then the image size will be increased by 30%. The
default is 20%."
@@ -1027,9 +1027,10 @@ default is 20%."
#'image--change-size
(if n
(1+ (/ (prefix-numeric-value n) 10.0))
- 1.2)))
+ 1.2)
+ position))
-(defun image-decrease-size (&optional n)
+(defun image-decrease-size (&optional n position)
"Decrease the image size by a factor of N.
If N is 3, then the image size will be decreased by 30%. The
default is 20%."
@@ -1044,7 +1045,8 @@ default is 20%."
#'image--change-size
(if n
(- 1 (/ (prefix-numeric-value n) 10.0))
- 0.8)))
+ 0.8)
+ position))
(defun image-mouse-increase-size (&optional event)
"Increase the image size using the mouse."
@@ -1052,7 +1054,7 @@ default is 20%."
(when (listp event)
(save-window-excursion
(posn-set-point (event-start event))
- (image-increase-size))))
+ (image-increase-size nil (point-marker)))))
(defun image-mouse-decrease-size (&optional event)
"Decrease the image size using the mouse."
@@ -1060,27 +1062,29 @@ default is 20%."
(when (listp event)
(save-window-excursion
(posn-set-point (event-start event))
- (image-decrease-size))))
+ (image-decrease-size nil (point-marker)))))
-(defun image--get-image ()
+(defun image--get-image (&optional position)
"Return the image at point."
- (let ((image (get-char-property (point) 'display)))
+ (let ((image (get-char-property (or position (point)) 'display
+ (when (markerp position)
+ (marker-buffer position)))))
(unless (eq (car-safe image) 'image)
(error "No image under point"))
image))
-(defun image--get-imagemagick-and-warn ()
+(defun image--get-imagemagick-and-warn (&optional position)
(unless (or (fboundp 'imagemagick-types) (image-transforms-p))
(error "Cannot rescale images on this terminal"))
- (let ((image (image--get-image)))
+ (let ((image (image--get-image position)))
(image-flush image)
(when (and (fboundp 'imagemagick-types)
(not (image-transforms-p)))
(plist-put (cdr image) :type 'imagemagick))
image))
-(defun image--change-size (factor)
- (let* ((image (image--get-imagemagick-and-warn))
+(defun image--change-size (factor &optional position)
+ (let* ((image (image--get-imagemagick-and-warn position))
(new-image (image--image-without-parameters image))
(scale (image--current-scaling image new-image)))
(setcdr image (cdr new-image))