]> git.eshelyaron.com Git - emacs.git/commitdiff
Document animated image API
authorGlenn Morris <rgm@gnu.org>
Fri, 3 Feb 2012 08:44:30 +0000 (00:44 -0800)
committerGlenn Morris <rgm@gnu.org>
Fri, 3 Feb 2012 08:44:30 +0000 (00:44 -0800)
* doc/lispref/display.texi (GIF Images): Mention animation.
Remove commented-out old example of animation.
(Animated Images): New subsection.
* doc/lispref/elisp.texi (Top):
* doc/lispref/vol1.texi (Top):
* doc/lispref/vol2.texi (Top): Add Animated Images menu entry.

* lisp/image-mode.el (image-animate-loop, image-toggle-animation): Doc fixes.

* lisp/image.el (image-animated-p): Doc fix.  Use image-animated-types.
(image-animate-timeout): Doc fix.

* etc/NEWS: Markup.

doc/lispref/ChangeLog
doc/lispref/display.texi
doc/lispref/elisp.texi
doc/lispref/vol1.texi
doc/lispref/vol2.texi
etc/NEWS
lisp/ChangeLog
lisp/image-mode.el
lisp/image.el

index 35e7a15ed4662be7131e88483e2ea84686303c49..45dc76732124a4e92870c41d17a849e4f9e20394 100644 (file)
@@ -1,5 +1,12 @@
 2012-02-03  Glenn Morris  <rgm@gnu.org>
 
+       * display.texi (GIF Images): Mention animation.
+       Remove commented-out old example of animation.
+       (Animated Images): New subsection.
+       * elisp.texi (Top):
+       * vol1.texi (Top):
+       * vol2.texi (Top): Add Animated Images menu entry.
+
        * display.texi (Image Formats): Remove oddly specific information
        on versions of image libraries.
        (GIF Images, TIFF Images): Minor rephrasing.
index 39c5da631c8f5d646a38c17940556074c8cab467..e97e6c264a335b02ded3e9a767bf831c7ab3834d 100644 (file)
@@ -4134,6 +4134,7 @@ displayed (@pxref{Display Feature Testing}).
 * Other Image Types::   Various other formats are supported.
 * Defining Images::     Convenient ways to define an image for later use.
 * Showing Images::      Convenient ways to display an image once it is defined.
+* Animated Images::     Some image formats can be animated.
 * Image Cache::         Internal mechanisms of image display.
 @end menu
 
@@ -4472,30 +4473,10 @@ specifies the actual color to use for displaying that name.
 You can use @code{:index} to specify image number @var{index} from a
 GIF file that contains more than one image.  If the GIF file doesn't
 contain an image with the specified index, the image displays as a
-hollow box.
+hollow box.  GIF files with more than one image can be animated,
+@pxref{Animated Images}.
 @end table
 
-@ignore
-This could be used to implement limited support for animated GIFs.
-For example, the following function displays a multi-image GIF file
-at point-min in the current buffer, switching between sub-images
-every 0.1 seconds.
-
-(defun show-anim (file max)
-  "Display multi-image GIF file FILE which contains MAX subimages."
-  (display-anim (current-buffer) file 0 max t))
-
-(defun display-anim (buffer file idx max first-time)
-  (when (= idx max)
-    (setq idx 0))
-  (let ((img (create-image file nil :image idx)))
-    (with-current-buffer buffer
-      (goto-char (point-min))
-      (unless first-time (delete-char 1))
-      (insert-image img))
-    (run-with-timer 0.1 nil 'display-anim buffer file (1+ idx) max nil)))
-@end ignore
-
 @node TIFF Images
 @subsection TIFF Images
 @cindex TIFF
@@ -4855,6 +4836,39 @@ cache, it can always be displayed, even if the value of
 @var{max-image-size} is subsequently changed (@pxref{Image Cache}).
 @end defvar
 
+@node Animated Images
+@subsection Animated Images
+
+@cindex animation
+@cindex image animation
+Some image files can contain more than one image.  This can be used to
+create animation.  Currently, Emacs only supports animated GIF files.
+The following functions related to animated images are available.
+
+@defun image-animated-p image
+This function returns non-nil if @var{image} can be animated.
+The actual return value is a cons @code{(@var{nimages} . @var{delay})}, 
+where @var{nimages} is the number of frames and @var{delay} is the
+delay in seconds between them.
+@end defun
+
+@defun image-animate image &optional index limit
+This function animates @var{image}.  The optional integer @var{index}
+specifies the frame from which to start (default 0).  The optional
+argument @var{limit} controls the length of the animation.  If omitted
+or @code{nil}, the image animates once only; if @code{t} it loops
+forever; if a number animation stops after that many seconds.
+@end defun
+
+@noindent Animation operates by means of a timer.  Note that Emacs imposes a
+minimum frame delay of 0.01 seconds.
+
+@defun image-animate-timer image
+This function returns the timer responsible for animating @var{image},
+if there is one.
+@end defun
+
+
 @node Image Cache
 @subsection Image Cache
 @cindex image cache
index 31e887ea68bed117f1cb9c7de4bf99227f0469e0..b20ac1a9442bb07fbeda7bf2efea3567692caf2d 100644 (file)
@@ -1351,6 +1351,7 @@ Images
 * Defining Images::         Convenient ways to define an image for later use.
 * Showing Images::          Convenient ways to display an image once
                               it is defined.
+* Animated Images::         Some image formats can be animated.
 * Image Cache::             Internal mechanisms of image display.
 
 Buttons
index 95f9f7f4d29714c57f711411676112dc5b39ada4..3a2f4723b057923e6ab82214b5de0999b34fcb53 100644 (file)
@@ -1372,6 +1372,7 @@ Images
 * Defining Images::         Convenient ways to define an image for later use.
 * Showing Images::          Convenient ways to display an image once
                               it is defined.
+* Animated Images::         Some image formats can be animated.
 * Image Cache::             Internal mechanisms of image display.
 
 Buttons
index 08ea022f6a7c9461228274762e7fc72b5c2aebf5..41558549da5546a3363e5903ebd846cf5641c201 100644 (file)
@@ -1371,6 +1371,7 @@ Images
 * Defining Images::         Convenient ways to define an image for later use.
 * Showing Images::          Convenient ways to display an image once
                               it is defined.
+* Animated Images::         Some image formats can be animated.
 * Image Cache::             Internal mechanisms of image display.
 
 Buttons
index 39bc51206b018bd7f6fce92c2b8fbcf38228f2b9..f58ffcdfa598de9e3c684324778f4a2b5bf9c501 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1323,12 +1323,16 @@ i.e. via menu entries of the form `(menu-item "--")'.
 
 ** Image API
 
++++
 *** Animated images support (currently animated gifs only).
 
++++
 **** `image-animated-p' returns non-nil if an image can be animated.
 
++++
 **** `image-animate' animates a supplied image spec.
 
++++
 **** `image-animate-timer' returns the timer object for an image that
 is being animated.
 
index 4497b398db2d2102da4f2ee2f07a55cb44c19043..8a08e3d2a02d8b4fe58fbc883e42ead8e7bf0649 100644 (file)
@@ -1,3 +1,10 @@
+2012-02-03  Glenn Morris  <rgm@gnu.org>
+
+       * image.el (image-animated-p): Doc fix.  Use image-animated-types.
+       (image-animate-timeout): Doc fix.
+
+       * image-mode.el (image-animate-loop, image-toggle-animation): Doc fixes.
+
 2012-02-02  Glenn Morris  <rgm@gnu.org>
 
        * server.el (server-auth-dir): Doc fix.
index 953cb9e94a11daa6a1d32271a53046f2c0bd1cbb..ba1fadf2c1e9cd3d4daf490cf83df9237d8f383b 100644 (file)
@@ -557,13 +557,15 @@ the image by calling `image-mode'."
 ;;; Animated images
 
 (defcustom image-animate-loop nil
-  "Whether to play animated images on a loop in Image mode."
+  "Non-nil means animated images loop forever, rather than playing once."
   :type 'boolean
   :version "24.1"
   :group 'image)
 
 (defun image-toggle-animation ()
-  "Start or stop animating the current image."
+  "Start or stop animating the current image.
+If `image-animate-loop' is non-nil, animation loops forever.
+Otherwise it plays once, then stops."
   (interactive)
   (let ((image (image-get-display-property))
        animation)
index 15b82d12dcd86768ee173bdcafb8b01a6c73b150..24089b0c7c9b923d7d48fe83a610d1b4e887e250 100644 (file)
@@ -595,13 +595,15 @@ Example:
   "List of supported animated image types.")
 
 (defun image-animated-p (image)
-  "Return non-nil if image can be animated.
-Actually, the return value is a cons (NIMAGES . DELAY), where
-NIMAGES is the number of sub-images in the animated image and
-DELAY is the delay in second until the next sub-image shall be
-displayed."
+  "Return non-nil if IMAGE can be animated.
+To be capable of being animated, an image must be of a type
+listed in `image-animated-types', and contain more than one
+sub-image, with a specified animation delay.  The actual return
+value is a cons (NIMAGES . DELAY), where NIMAGES is the number
+of sub-images in the animated image and DELAY is the delay in
+seconds until the next sub-image should be displayed."
   (cond
-   ((eq (plist-get (cdr image) :type) 'gif)
+   ((memq (plist-get (cdr image) :type) image-animated-types)
     (let* ((metadata (image-metadata image))
           (images (plist-get metadata 'count))
           (delay (plist-get metadata 'delay)))
@@ -609,6 +611,7 @@ displayed."
        (if (< delay 0) (setq delay 0.1))
        (cons images delay))))))
 
+;; "Destructively"?
 (defun image-animate (image &optional index limit)
   "Start animating IMAGE.
 Animation occurs by destructively altering the IMAGE spec list.
@@ -639,16 +642,20 @@ number, play until that number of seconds has elapsed."
        (setq timer nil)))
     timer))
 
+;; FIXME? The delay may not be the same for different sub-images,
+;; hence we need to call image-animated-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)
   "Display animation frame N of IMAGE.
 N=0 refers to the initial animation frame.
 COUNT is the total number of frames in the animation.
-DELAY is the time between animation frames, in seconds.
 TIME-ELAPSED is the total time that has elapsed since
 `image-animate-start' was called.
 LIMIT determines when to stop.  If t, loop forever.  If nil, stop
  after displaying the last animation frame.  Otherwise, stop
- after LIMIT seconds have elapsed."
+ after LIMIT seconds have elapsed.
+The minimum delay between successive frames is 0.01s."
   (plist-put (cdr image) :index n)
   (force-window-update)
   (setq n (1+ n))