From: Lars Ingebrigtsen Date: Mon, 22 Feb 2016 01:50:40 +0000 (+1100) Subject: Rework the image property getter/setters X-Git-Url: https://code.delx.au/gnu-emacs/commitdiff_plain/3007b422b69f7b1660379b5d8e6713e8b823c098 Rework the image property getter/setters * doc/lispref/display.texi (Defining Images): Document the renamed `image-get/set-property' functions. * lisp/image.el (image--set-property): Rename from image-set-property. (image-property): Declare a setf form. (image-property): Rename from `image-get-property'. --- diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 3758ddf72f..c49cca2f9f 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -5444,19 +5444,17 @@ If none of the alternatives will work, then @var{symbol} is defined as @code{nil}. @end defmac -@defun image-set-property image property value -Set the value of @var{property} in @var{image} to @var{value}. If -@var{value} is @code{nil}, the property is removed completely. +@defun image-property image property +Return the value of @var{property} in @var{image}. Properties can be +set by using @code{setf}. Setting a property to @code{nil} will +remove the property from the image. +@end defun @lisp (image-set-property image :height 300) @end lisp @end defun -@defun image-get-property image property -Return the value of @var{property} in @var{image}. -@end defun - @defun find-image specs This function provides a convenient way to find an image satisfying one of a list of image specifications @var{specs}. diff --git a/etc/NEWS b/etc/NEWS index 9a3799a62a..4532a18b44 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -865,8 +865,8 @@ added. See the "SVG Images" section in the lispref manual for details. +++ -*** New functions to access and set image parameters are provided: -`image-get-property' and `image-set-property'. +*** New setf-able function to access and set image parameters is +provided: `image-property'. ** Lisp mode diff --git a/lisp/image.el b/lisp/image.el index 3522c5bc75..96afa98bb3 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -435,10 +435,9 @@ Image file names that are not absolute are searched for in the (image-compute-scaling-factor image-scaling-factor))) props))) -(defun image-set-property (image property value) +(defun image--set-property (image property value) "Set PROPERTY in IMAGE to VALUE. -If VALUE is nil, PROPERTY is removed from IMAGE. IMAGE is -returned." +Internal use only." (if (null value) (while (cdr image) ;; IMAGE starts with the symbol `image', and the rest is a @@ -451,8 +450,13 @@ returned." (plist-put (cdr image) property value)) image) -(defun image-get-property (image property) - "Return the value of PROPERTY in IMAGE." +(defun image-property (image property) + "Return the value of PROPERTY in IMAGE. +Properties can be set with + + (setf (image-property IMAGE PROPERTY) VALUE) +If VALUE is nil, PROPERTY is removed from IMAGE." + (declare (gv-setter image--set-property)) (plist-get (cdr image) property)) (defun image-compute-scaling-factor (scaling) diff --git a/lisp/net/shr.el b/lisp/net/shr.el index 6352d38418..4c3dfc4fde 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -1536,7 +1536,7 @@ The preference is a float determined from `shr-prefer-media-type'." (- (nth 2 edges) (nth 0 edges)))))) (max-height (and edges (truncate (* shr-max-image-proportion - (- (nth 3 edges) (nth 1 edges)))))) + (- (nth 3 edges) (nth 1 edges)))))) svg image) (when (and max-width (> width max-width)) @@ -1551,7 +1551,8 @@ The preference is a float determined from `shr-prefer-media-type'." (svg-rectangle svg 0 0 width height :gradient "background" :stroke-width 2 :stroke-color "black") (let ((image (svg-image svg))) - (image-set-property image :ascent 100)))) + (setf (image-property image :ascent) 100) + image))) (defun shr-tag-pre (dom) (let ((shr-folding-mode 'none)