-;;; image.el --- image API
+;;; image.el --- image API -*- lexical-binding:t -*-
;; Copyright (C) 1998-2016 Free Software Foundation, Inc.
;;; Code:
-
(defgroup image ()
"Image support."
:group 'multimedia)
Subdirectories are not automatically included in the search."
:type '(repeat (choice directory variable))
- :initialize 'custom-initialize-delay)
+ :initialize #'custom-initialize-delay)
(defcustom image-scaling-factor 'auto
"When displaying images, apply this scaling factor before displaying.
based on the font pixel size."
:type '(choice number
(const :tag "Automatically compute" auto))
- :group 'image
:version "25.2")
;; Map put into text properties on images.
(defun image-compute-scaling-factor (scaling)
(cond
- ((numberp image-scaling-factor)
- image-scaling-factor)
- ((eq image-scaling-factor 'auto)
+ ((numberp scaling) scaling)
+ ((eq scaling 'auto)
(let ((width (/ (float (window-width nil t)) (window-width))))
;; If we assume that a typical character is 10 pixels in width,
;; then we should scale all images according to how wide they
1
(/ (float width) 10))))
(t
- (error "Invalid scaling factor %s" image-scaling-factor))))
+ (error "Invalid scaling factor %s" scaling))))
;;;###autoload
(defun put-image (image pos &optional string area)
(if (setq timer (image-animate-timer image))
(cancel-timer timer))
(plist-put (cdr image) :animate-buffer (current-buffer))
- (run-with-timer 0.2 nil 'image-animate-timeout
+ (run-with-timer 0.2 nil #'image-animate-timeout
image (or index 0) (car animation)
- 0 limit))))
+ 0 limit (+ (float-time) 0.2)))))
(defun image-animate-timer (image)
"Return the animation timer for image IMAGE."
(while tail
(setq timer (car tail)
tail (cdr tail))
- (if (and (eq (timer--function timer) 'image-animate-timeout)
+ (if (and (eq (timer--function timer) #'image-animate-timeout)
(eq (car-safe (timer--args timer)) image))
(setq tail nil)
(setq timer nil)))
;; hence we need to call image-multi-frame-p to return it.
;; But it also returns count, so why do we bother passing that as an
;; argument?
-(defun image-animate-timeout (image n count time-elapsed limit)
+(defun image-animate-timeout (image n count time-elapsed limit target-time)
"Display animation frame N of IMAGE.
N=0 refers to the initial animation frame.
COUNT is the total number of frames in the animation.
If the image has a non-nil :speed property, it acts as a multiplier
for the animation speed. A negative value means to animate in reverse."
- (when (buffer-live-p (plist-get (cdr image) :animate-buffer))
+ (when (and (buffer-live-p (plist-get (cdr image) :animate-buffer))
+ ;; Delayed more than two seconds more than expected.
+ (when (> (- (float-time) target-time) 2)
+ (message "Stopping animation; animation possibly too big")
+ nil))
(image-show-frame image n t)
(let* ((speed (image-animate-get-speed image))
(time (float-time))
(if (numberp limit)
(setq done (>= time-elapsed limit)))
(unless done
- (run-with-timer delay nil 'image-animate-timeout
- image n count time-elapsed limit)))))
+ (run-with-timer delay nil #'image-animate-timeout
+ image n count time-elapsed limit
+ (+ (float-time) delay))))))
\f
(defvar imagemagick-types-inhibit)
:type '(choice (const :tag "Support all ImageMagick types" nil)
(const :tag "Disable all ImageMagick types" t)
(repeat symbol))
- :initialize 'custom-initialize-default
+ :initialize #'custom-initialize-default
:set (lambda (symbol value)
(set-default symbol value)
(imagemagick-register-types))
- :version "24.3"
- :group 'image)
+ :version "24.3")
(defcustom imagemagick-enabled-types
'(3FR ART ARW AVS BMP BMP2 BMP3 CAL CALS CMYK CMYKA CR2 CRW
(repeat :tag "List of types"
(choice (symbol :tag "type")
(regexp :tag "regexp"))))
- :initialize 'custom-initialize-default
+ :initialize #'custom-initialize-default
:set (lambda (symbol value)
(set-default symbol value)
(imagemagick-register-types))
- :version "24.3"
- :group 'image)
+ :version "24.3")
(imagemagick-register-types)
0.8)))
(defun image--get-image ()
- (let ((image (or (get-text-property (point) 'display)
- ;; `put-image' uses overlays, so find an image in
- ;; the overlays.
- (seq-find (lambda (overlay)
- (overlay-get overlay 'display))
- (overlays-at (point))))))
- (when (or (not (consp image))
- (not (eq (car image) 'image)))
+ (let ((image (get-text-property (point) 'display)))
+ (unless (eq (car-safe image) 'image)
(error "No image under point"))
image))