GNU bug report logs -
#6639
24.0.50; [PATCH]image-mode: Sliced Images cannot be scrolled up
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
I forgot to look for other calls to image-size. Looking through the
whole emacs code, only image-mode seems to be making calls to
image-size, which can possibly be including slice property.
So Now, I wrote a wrapper over image-size function which calculates size
From slice property if available, or calls image-size if, only image
property is available.
The patch is attached.
Happy Hacking
Shyam K
[image-mode_image-display-size.patch (text/x-patch, inline)]
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: shyam <at> swathanthran.in-20100716100307-6y92sw2p0xmgd7mj
# author: Shyam Karanatt <shyam <at> swathanthran.in>
# testament_sha1: 71e9837d7961814d5fcb0f63955e2485584ea1e7
# timestamp: 2010-07-16 16:32:50 +0530
# base_revision_id: yamaoka <at> jpl.org-20100715005613-1hdb4741v79szq8v
#
# Begin patch
=== modified file 'lisp/image-mode.el'
--- lisp/image-mode.el 2010-07-14 15:57:54 +0000
+++ lisp/image-mode.el 2010-07-16 10:03:07 +0000
@@ -128,6 +128,28 @@
(declare-function image-size "image.c" (spec &optional pixels frame))
+(defun image-display-size (spec &optional pixels frame)
+"Wrapper around image-size to considers \(slice ..\) display property in SPEC.
+If SPEC is an image display property, call `image-size' with arguments.
+If SPEC is list of properties having image and slice properties in it,
+calculate size from slice.
+If slice is not in the list but image is, call `image-size' with image.
+If SPEC is a list without having image display property in it,
+ error about invalid image specification."
+ (if (eq (car spec) 'image)
+ (image-size spec pixels frame)
+ (let ((image (assoc 'image spec))
+ (slice (assoc 'slice spec)))
+ (cond ((and image slice)
+ (if pixels
+ (cons (nth 3 slice) (nth 4 slice))
+ (cons (/ (float (nth 3 slice)) (frame-char-width frame))
+ (/ (float (nth 4 slice)) (frame-char-height frame)))))
+ (image
+ (image-size image pixels frame))
+ (t
+ (error "Invalid image specification: %s" spec))))))
+
(defun image-forward-hscroll (&optional n)
"Scroll image in current window to the left by N character widths.
Stop if the right edge of the image is reached."
@@ -139,7 +161,7 @@
(let* ((image (image-get-display-property))
(edges (window-inside-edges))
(win-width (- (nth 2 edges) (nth 0 edges)))
- (img-width (ceiling (car (image-size image)))))
+ (img-width (ceiling (car (image-display-size image)))))
(image-set-window-hscroll (min (max 0 (- img-width win-width))
(+ n (window-hscroll))))))))
@@ -160,7 +182,7 @@
(let* ((image (image-get-display-property))
(edges (window-inside-edges))
(win-height (- (nth 3 edges) (nth 1 edges)))
- (img-height (ceiling (cdr (image-size image)))))
+ (img-height (ceiling (cdr (image-display-size image)))))
(image-set-window-vscroll (min (max 0 (- img-height win-height))
(+ n (window-vscroll))))))))
@@ -233,7 +255,7 @@
(let* ((image (image-get-display-property))
(edges (window-inside-edges))
(win-width (- (nth 2 edges) (nth 0 edges)))
- (img-width (ceiling (car (image-size image)))))
+ (img-width (ceiling (car (image-display-size image)))))
(image-set-window-hscroll (max 0 (- img-width win-width)))))
(defun image-bob ()
@@ -248,9 +270,9 @@
(let* ((image (image-get-display-property))
(edges (window-inside-edges))
(win-width (- (nth 2 edges) (nth 0 edges)))
- (img-width (ceiling (car (image-size image))))
+ (img-width (ceiling (car (image-display-size image))))
(win-height (- (nth 3 edges) (nth 1 edges)))
- (img-height (ceiling (cdr (image-size image)))))
+ (img-height (ceiling (cdr (image-display-size image)))))
(image-set-window-hscroll (max 0 (- img-width win-width)))
(image-set-window-vscroll (max 0 (- img-height win-height)))))
@@ -264,7 +286,7 @@
(interactive)
(let* ((saved (frame-parameter nil 'image-mode-saved-size))
(display (image-get-display-property))
- (size (image-size display)))
+ (size (image-display-size display)))
(if (and saved
(eq (caar saved) (frame-width))
(eq (cdar saved) (frame-height)))
[Message part 3 (application/pgp-signature, inline)]
This bug report was last modified 14 years and 308 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.