anchor.diff:     (integer? :accessor integer? :initarg :integer? :initform nil)
      (finished-fn :accessor finished-fn :initarg :finished-fn :initform nil)))
   
  -(defun animation (&key target property from to easing-fn (start-time 0) (duration 0) (toplevel? t) integer? finished-fn)
  +(defun animation (&key target property from to (easing-fn 'easing:linear) (start-time 0) (duration 0) (toplevel? t) integer? finished-fn)
     (make-instance 'animation
   		 :target target
   		 :property property
  
positive.code: |#
  
  ;; Improvement: maybe we should be able to pass &rest rest parameters to finished-fn
  (defmethod start-animation ((animation animation) &key (time (get-internal-real-time)) finished-fn (toplevel t))
    (setf (start-time animation) time)
    (setf (toplevel? animation) toplevel)
  
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)
  