anchor.diff:       %green (%scale-value green)
        %blue (%scale-value blue))))
   
  -(defbinding color-parse (spec &optional (make-instance 'color)) boolean
  +(defbinding %color-parse () boolean
     (spec string)
     (color color :return))
  +
  +(defun color-parse (spec &optional (color (make-instance 'color)))
  +  (multiple-value-bind (succeeded-p color) (%color-parse spec color)
  +    (if succeeded-p
  +	color
  +      (error "Parsing color specification ~S failed." spec))))
   
   (defun ensure-color (color)
     (etypecase color
       (null nil)
       (color color)
  +    (string (color-parse color))
       (vector
        (make-instance 'color 
  -      :red (svref color 0) :green (svref color 1) :blue (svref color 2)))
  -    (string
  -     (multiple-value-bind (succeeded-p color) (parse-color color)
  -       (if succeeded-p
  -	   color
  -	 (error "Parsing color specification ~S failed." color))))))
  -       
  +      :red (svref color 0) :green (svref color 1) :blue (svref color 2)))))
  +
   
     
   ;;; Drawable
  
positive.code:     (float (truncate (* value 65535)))))
  
  (defmethod initialize-instance ((color color) &rest initargs
  				&key red green blue)
    (declare (ignore initargs))
    (call-next-method)
    (with-slots ((%red red) (%green green) (%blue blue)) color
  
negative.code:   ;; Color structs are allocated as memory chunks by gdk, and since
    ;; there is no gdk_color_new we have to use this hack to get a new
    ;; color chunk
    (with-allocated-memory (location #.(foreign-size (find-class 'color)))
      (%color-copy location)))
  
  (defun %scale-value (value)
  