Update of /project/mcclim/cvsroot/mcclim/Drei In directory clnet:/tmp/cvs-serv10409/Drei
Modified Files: drei-redisplay.lisp Log Message: Clean and fix some more Drei input-editor related redisplay stuff.
--- /project/mcclim/cvsroot/mcclim/Drei/drei-redisplay.lisp 2008/01/16 18:32:33 1.40 +++ /project/mcclim/cvsroot/mcclim/Drei/drei-redisplay.lisp 2008/01/16 22:40:14 1.41 @@ -954,7 +954,12 @@ (descent (text-style-descent style pane)) (height (+ ascent descent))) (multiple-value-bind (x1 y1 x2 y2) - (call-next-method) + (drei-bounding-rectangle* drei) + (when (= x1 y1 x2 y2 0) + ;; It hasn't been displayed yet, so stuff the position into + ;; it... + (setf x1 (first (input-editor-position drei)) + y1 (second (input-editor-position drei)))) (values x1 y1 (max x2 (+ x1 style-width) (cond ((numberp min-width) @@ -965,6 +970,10 @@ (t 0))) (max y2 (+ y1 height)))))))
+(defmethod bounding-rectangle ((drei drei-area)) + (with-bounding-rectangle* (x1 y1 x2 y2) drei + (make-rectangle* x1 y1 x2 y2))) + ;; XXX: Full redraw for every replay, should probably use the `region' ;; parameter to only invalidate some strokes. (defmethod replay-output-record ((drei drei-area) (stream extended-output-stream) &optional @@ -986,7 +995,12 @@
(defun display-drei-area (drei) (with-accessors ((stream editor-pane) (view view)) drei + (clear-output-record drei) (replay drei stream) + (with-bounding-rectangle* (x1 y1 x2 y2) drei + (letf (((stream-current-output-record stream) drei)) + ;; XXX: This sets the size of the output record. + (draw-rectangle* stream x1 y1 x2 y2 :ink +transparent-ink+))) (when (point-cursor drei) (with-bounding-rectangle* (x1 y1 x2 y2) (point-cursor drei) (when (pane-viewport stream) @@ -1120,10 +1134,9 @@ (if (adjust-pane drei-pane) (display-drei-pane frame drei-pane) ;; Point must be on top of all other cursors. - (progn - (dolist (cursor (cursors drei-pane)) - (display-drei-view-cursor drei-pane view cursor)) - (fix-pane-viewport drei-pane (view drei-pane))))))) + (dolist (cursor (cursors drei-pane) + (fix-pane-viewport drei-pane (view drei-pane))) + (replay cursor drei-pane))))))
(defgeneric full-redisplay (pane) (:documentation "Queue a full redisplay for `pane'."))