anchor.diff:        (incf (line-stroke-count line))
         (setf (line-end-offset line) (stroke-end-offset stroke)))))
   
  -(defun record-stroke (stroke x1 y1 x2 y2
  +(defun record-stroke (stroke parts widths x1 y1 x2 y2
                         &optional (center (/ (- y2 y1) 2)))
  -  "Record the fact that `stroke' has been drawn, and that it
  +  "Record the fact that `stroke' has been drawn, that it consists
  +of parts `parts' with the widths `widths', and that it
   covers the specified area on screen. Updates the dirty- and
   modified-bits of `stroke' as well as the dimensions."
     (let ((dimensions (stroke-dimensions stroke)))
       (setf (stroke-dirty stroke) nil
             (stroke-modified stroke) nil
  -          (x1 dimensions) x1
  +	  (stroke-parts stroke) parts
  +          (stroke-widths stroke) widths
  +	  (x1 dimensions) x1
             (y1 dimensions) y1
             (x2 dimensions) x2
             (y2 dimensions) y2
  
positive.code: area taken up by the stroke. If `modified' is true, this stroke
  object might output something different than the last time it was
  redisplayed, and should thus update any caches or similar. When
  `modified' is set, `dirty' probably also should be set."
    (start-offset)
    (end-offset)
    (drawing-options +default-drawing-options+)
    (dirty t)
    (modified t)
    (dimensions (make-dimensions)))
  
  (defstruct (displayed-line (:conc-name line-))
    "A line on display. A line delimits a buffer region (always
  
negative.code:   (with-accessors ((start-offset stroke-start-offset)
                     (end-offset stroke-end-offset)
                     (dimensions stroke-dimensions)
                     (drawing-options stroke-drawing-options)
  		   (widths stroke-widths)
  		   (parts stroke-parts)) stroke
      (let* ((stroke-string (in-place-buffer-substring
                             (buffer view) (cache-string view)
                             start-offset end-offset))
  