anchor.diff:  |#
   
   ;; Improvement: maybe we should be able to pass &rest rest parameters to finished-fn
  +
  +(defmethod start-animation :before ((animation animation) &key)
  +  (when (not *timer*)
  +    (start-timer)))
  +
   (defmethod start-animation ((animation animation) &key (time (get-internal-real-time)) finished-fn (toplevel t))
     (setf (start-time animation) time)
     (setf (toplevel? animation) toplevel)
  
positive.code: 
  (defpackage :animation
    (:use :common-lisp :easing)
    (:export
     animation
     sequential-animation
     parallel-animation
  
negative.code: 
  (in-package :animation)
  
  (defparameter *animations* nil)  ;; List of active animations
  (defparameter *event-loop* nil)  ;; Wayland event loop
  (defparameter *timer* nil)       ;; Wayland timer
  
  (defun initialize-animation (event-loop)
    (setf *event-loop* event-loop)
    (defcallback timer-callback :int ()
  	       (when *timer*
  		 (wl-event-source-timer-update *timer* 5))
  	       1))
  
  (defun start-timer ()
    "Start the 60-FPS timer"
    (when (not *timer*)
      (setf *timer*
  	  (wl-event-loop-add-timer *event-loop*
  				   (callback timer-callback)
  				   (null-pointer))))
    (wl-event-source-timer-update *timer* 5))
  
  (defclass animation ()
    ((target :accessor target :initarg :target :initform nil)
  