comparison lisp/doc-view.el @ 112126:afc7f5e3ff12

* doc-view.el (doc-view-image-width): New variable. (doc-view-enlarge, doc-view-insert-image): Prefer imagemagick backend for PNG images, and do dynamic rescaling instead of reconverting the whole doc.
author Tassilo Horn <tassilo@member.fsf.org>
date Wed, 05 Jan 2011 22:17:51 +0100
parents 2fef20daac2b
children 25ff862568d0
comparison
equal deleted inserted replaced
112125:4dbda0e7c8bf 112126:afc7f5e3ff12
163 :group 'doc-view) 163 :group 'doc-view)
164 164
165 (defcustom doc-view-resolution 100 165 (defcustom doc-view-resolution 100
166 "Dots per inch resolution used to render the documents. 166 "Dots per inch resolution used to render the documents.
167 Higher values result in larger images." 167 Higher values result in larger images."
168 :type 'number
169 :group 'doc-view)
170
171 (defcustom doc-view-image-width 850
172 "Default image width.
173 Has only an effect if imagemagick support is compiled into emacs."
168 :type 'number 174 :type 'number
169 :group 'doc-view) 175 :group 'doc-view)
170 176
171 (defcustom doc-view-dvipdfm-program (executable-find "dvipdfm") 177 (defcustom doc-view-dvipdfm-program (executable-find "dvipdfm")
172 "Program to convert DVI files to PDF. 178 "Program to convert DVI files to PDF.
639 (defvar doc-view-shrink-factor 1.125) 645 (defvar doc-view-shrink-factor 1.125)
640 646
641 (defun doc-view-enlarge (factor) 647 (defun doc-view-enlarge (factor)
642 "Enlarge the document." 648 "Enlarge the document."
643 (interactive (list doc-view-shrink-factor)) 649 (interactive (list doc-view-shrink-factor))
644 (set (make-local-variable 'doc-view-resolution) 650 (if (eq (plist-get (cdr (doc-view-current-image)) :type)
645 (* factor doc-view-resolution)) 651 'imagemagick)
646 (doc-view-reconvert-doc)) 652 ;; ImageMagick supports on-the-fly-rescaling
653 (progn
654 (set (make-local-variable 'doc-view-image-width)
655 (ceiling (* factor doc-view-image-width)))
656 (doc-view-insert-image (plist-get (cdr (doc-view-current-image)) :file)
657 :width doc-view-resolution))
658 (set (make-local-variable 'doc-view-resolution)
659 (ceiling (* factor doc-view-resolution)))
660 (doc-view-reconvert-doc)))
647 661
648 (defun doc-view-shrink (factor) 662 (defun doc-view-shrink (factor)
649 "Shrink the document." 663 "Shrink the document."
650 (interactive (list doc-view-shrink-factor)) 664 (interactive (list doc-view-shrink-factor))
651 (doc-view-enlarge (/ 1.0 factor))) 665 (doc-view-enlarge (/ 1.0 factor)))
947 (when doc-view-pending-cache-flush 961 (when doc-view-pending-cache-flush
948 (clear-image-cache) 962 (clear-image-cache)
949 (setq doc-view-pending-cache-flush nil)) 963 (setq doc-view-pending-cache-flush nil))
950 (let ((ol (doc-view-current-overlay)) 964 (let ((ol (doc-view-current-overlay))
951 (image (if (and file (file-readable-p file)) 965 (image (if (and file (file-readable-p file))
952 (apply 'create-image file 'png nil args))) 966 (if (not (fboundp 'imagemagick-types))
967 (apply 'create-image file 'png nil args)
968 (unless (member :width args)
969 (setq args (append args (list :width doc-view-image-width))))
970 (apply 'create-image file 'imagemagick nil args))))
953 (slice (doc-view-current-slice))) 971 (slice (doc-view-current-slice)))
954 (setf (doc-view-current-image) image) 972 (setf (doc-view-current-image) image)
955 (move-overlay ol (point-min) (point-max)) 973 (move-overlay ol (point-min) (point-max))
956 (overlay-put ol 'display 974 (overlay-put ol 'display
957 (cond 975 (cond