# HG changeset patch # User Katsumi Yamaoka # Date 1283385237 0 # Node ID b9d6d7f1d89f033d060313f7764b49efa360b39c # Parent cb103d02d7f5e4469d499e15bed74b51872408e9 gnus-html.el: Rescale images in article buffers for Emacs versions that support this. This is currently only Emacs 24 compiled with imagemagick support. diff -r cb103d02d7f5 -r b9d6d7f1d89f lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Wed Sep 01 23:46:59 2010 +0000 +++ b/lisp/gnus/ChangeLog Wed Sep 01 23:53:57 2010 +0000 @@ -7,6 +7,9 @@ 2010-09-01 Lars Magne Ingebrigtsen * gnus-html.el (gnus-html-wash-tags): Delete the IMG_ALT region. + (gnus-max-image-proportion): New variable. + (gnus-html-rescale-image): New function. + (gnus-html-put-image): Rescale images. 2010-09-01 Stefan Monnier diff -r cb103d02d7f5 -r b9d6d7f1d89f lisp/gnus/gnus-html.el --- a/lisp/gnus/gnus-html.el Wed Sep 01 23:46:59 2010 +0000 +++ b/lisp/gnus/gnus-html.el Wed Sep 01 23:53:57 2010 +0000 @@ -56,6 +56,16 @@ :group 'gnus-art :type 'regexp) +(defcustom gnus-max-image-proportion 0.7 + "How big pictures displayed are in relation to the window they're in. +A value of 0.7 means that they are allowed to take up 70% of the +width and height of the window. If they are larger than this, +and Emacs supports it, then the images will be rescaled down to +fit these criteria." + :version "24.1" + :group 'gnus-art + :type 'float) + ;;;###autoload (defun gnus-article-html (handle) (let ((article-buffer (current-buffer))) @@ -219,13 +229,33 @@ (= (car (image-size image t)) 30) (= (cdr (image-size image t)) 30)))) (progn - (gnus-put-image image) + (gnus-put-image (gnus-html-rescale-image image)) t) (when (fboundp 'find-image) (gnus-put-image (find-image '((:type xpm :file "lock-broken.xpm"))))) nil))))) +(defun gnus-html-rescale-image (image) + (if (not (fboundp 'imagemagick-types)) + image + (let* ((width (car (image-size image t))) + (height (cdr (image-size image t))) + (edges (window-pixel-edges)) + (window-width (truncate (* gnus-max-image-proportion + (- (nth 2 edges) (nth 0 edges))))) + (window-height (truncate (* gnus-max-image-proportion + (- (nth 3 edges) (nth 1 edges))))) + scaled-image) + (when (> width window-width) + (setq window-height (truncate (* window-height + (/ (* 1.0 window-width) width))))) + (if (> height window-height) + (or (create-image file 'imagemagick nil + :height window-height) + image) + image)))) + (defun gnus-html-prune-cache () (let ((total-size 0) files)