# HG changeset patch # User Tassilo Horn # Date 1294262271 -3600 # Node ID afc7f5e3ff1251d0440d7f847a461fd598db708e # Parent 4dbda0e7c8bf863a1353ffeab6f1688601ec10d7 * 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. diff -r 4dbda0e7c8bf -r afc7f5e3ff12 lisp/ChangeLog --- a/lisp/ChangeLog Wed Jan 05 14:09:07 2011 +0100 +++ b/lisp/ChangeLog Wed Jan 05 22:17:51 2011 +0100 @@ -1,3 +1,10 @@ +2011-01-05 Tassilo Horn + + * 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. + 2011-01-05 Glenn Morris * emacs-lisp/rx.el (rx-repeat): Replace CL function. diff -r 4dbda0e7c8bf -r afc7f5e3ff12 lisp/doc-view.el --- a/lisp/doc-view.el Wed Jan 05 14:09:07 2011 +0100 +++ b/lisp/doc-view.el Wed Jan 05 22:17:51 2011 +0100 @@ -168,6 +168,12 @@ :type 'number :group 'doc-view) +(defcustom doc-view-image-width 850 + "Default image width. +Has only an effect if imagemagick support is compiled into emacs." + :type 'number + :group 'doc-view) + (defcustom doc-view-dvipdfm-program (executable-find "dvipdfm") "Program to convert DVI files to PDF. @@ -641,9 +647,17 @@ (defun doc-view-enlarge (factor) "Enlarge the document." (interactive (list doc-view-shrink-factor)) - (set (make-local-variable 'doc-view-resolution) - (* factor doc-view-resolution)) - (doc-view-reconvert-doc)) + (if (eq (plist-get (cdr (doc-view-current-image)) :type) + 'imagemagick) + ;; ImageMagick supports on-the-fly-rescaling + (progn + (set (make-local-variable 'doc-view-image-width) + (ceiling (* factor doc-view-image-width))) + (doc-view-insert-image (plist-get (cdr (doc-view-current-image)) :file) + :width doc-view-resolution)) + (set (make-local-variable 'doc-view-resolution) + (ceiling (* factor doc-view-resolution))) + (doc-view-reconvert-doc))) (defun doc-view-shrink (factor) "Shrink the document." @@ -949,7 +963,11 @@ (setq doc-view-pending-cache-flush nil)) (let ((ol (doc-view-current-overlay)) (image (if (and file (file-readable-p file)) - (apply 'create-image file 'png nil args))) + (if (not (fboundp 'imagemagick-types)) + (apply 'create-image file 'png nil args) + (unless (member :width args) + (setq args (append args (list :width doc-view-image-width)))) + (apply 'create-image file 'imagemagick nil args)))) (slice (doc-view-current-slice))) (setf (doc-view-current-image) image) (move-overlay ol (point-min) (point-max))