[climacs-cvs] CVS climacs

dmurray dmurray at common-lisp.net
Sat May 6 20:40:10 UTC 2006


Update of /project/climacs/cvsroot/climacs
In directory clnet:/tmp/cvs-serv15173

Modified Files:
	pane.lisp 
Log Message:
Generalised region highlighting. There is now a (as yet unexported)
gf in pane.lisp that will highlight between two points (marks or
offsets) in a buffer, with a given ink:
highlight-region pane mark1 offset2 &optional ink


--- /project/climacs/cvsroot/climacs/pane.lisp	2006/05/06 19:51:04	1.39
+++ /project/climacs/cvsroot/climacs/pane.lisp	2006/05/06 20:40:10	1.40
@@ -601,10 +601,19 @@
 (defgeneric display-region (pane syntax))
 
 (defmethod display-region ((pane climacs-pane) (syntax basic-syntax))
+  (highlight-region pane (point pane) (mark pane)))
+
+(defgeneric highlight-region (pane mark1 offset2 &optional ink))
+
+(defmethod highlight-region ((pane climacs-pane) (offset1 integer) (offset2 integer)
+			     &optional (ink (compose-in +green+ (make-opacity .1))))
+  ;; FIXME stream-vertical-spacing between lines
+  ;; FIXME note sure updating output is working properly...
+  ;; we'll call offset1 CURSOR and offset2 MARK
   (multiple-value-bind (cursor-x cursor-y line-height)
-      (offset-to-screen-position (offset (point pane)) pane)
+      (offset-to-screen-position offset1 pane)
     (multiple-value-bind (mark-x mark-y)
-	(offset-to-screen-position (offset (mark pane)) pane)
+	(offset-to-screen-position offset2 pane)
       (cond
 	;; mark is above the top of the screen
 	((and (null mark-y) (null mark-x))
@@ -612,13 +621,11 @@
 	   (draw-rectangle* pane
 			    0 0
 			    (stream-text-margin pane) cursor-y
-			    :ink (compose-in +green+
-					     (make-opacity .1)))
+			    :ink ink)
 	   (draw-rectangle* pane
 			    0 cursor-y 
 			    cursor-x (+ cursor-y line-height)
-			    :ink (compose-in +green+
-					     (make-opacity .1)))))
+			    :ink ink)))
 	;; mark is below the bottom of the screen
 	((and (null mark-y) mark-x)
 	 (updating-output (pane :unique-id -3)
@@ -626,13 +633,11 @@
 			    0 (+ cursor-y line-height)
 			    (stream-text-margin pane) (bounding-rectangle-height
 						       (window-viewport pane))
-			    :ink (compose-in +green+
-					     (make-opacity .1)))
+			    :ink ink)
 	   (draw-rectangle* pane
 			    cursor-x cursor-y
 			    (stream-text-margin pane) (+ cursor-y line-height)
-			    :ink (compose-in +green+
-					     (make-opacity .1)))))
+			    :ink ink)))
 	;; mark is at point
 	((and (= mark-x cursor-x) (= mark-y cursor-y))
 	 nil)
@@ -642,44 +647,49 @@
 	   (draw-rectangle* pane
 			    mark-x mark-y
 			    cursor-x (+ cursor-y line-height)
-			    :ink (compose-in +green+
-					     (make-opacity .1)))))
+			    :ink ink)))
 	;; mark and point are both visible, mark above point
 	((< mark-y cursor-y)
 	 (updating-output (pane :unique-id -3)
 	   (draw-rectangle* pane
 			    mark-x mark-y
 			    (stream-text-margin pane) (+ mark-y line-height)
-			    :ink (compose-in +green+
-					     (make-opacity .1)))
+			    :ink ink)
 	   (draw-rectangle* pane
 			    0 cursor-y
 			    cursor-x (+ cursor-y line-height)
-			    :ink (compose-in +green+
-					     (make-opacity .1)))
+			    :ink ink)
 	   (draw-rectangle* pane
 			    0 (+ mark-y line-height)
 			    (stream-text-margin pane) cursor-y
-			    :ink (compose-in +green+
-					     (make-opacity .1)))))
+			    :ink ink)))
 	;; mark and point are both visible, point above mark
 	(t
 	 (updating-output (pane :unique-id -3)
 	   (draw-rectangle* pane
 			    cursor-x cursor-y
 			    (stream-text-margin pane) (+ cursor-y line-height)
-			    :ink (compose-in +green+
-					     (make-opacity .1)))
+			    :ink ink)
 	   (draw-rectangle* pane
 			    0 mark-y
 			    mark-x (+ mark-y line-height)
-			    :ink (compose-in +green+
-					     (make-opacity .1)))
+			    :ink ink)
 	   (draw-rectangle* pane
 			    0 (+ cursor-y line-height)
 			    (stream-text-margin pane) mark-y
-			    :ink (compose-in +green+
-					     (make-opacity .1)))))))))
+			    :ink ink)))))))
+
+(defmethod highlight-region ((pane climacs-pane) (mark1 mark) (mark2 mark)
+			     &optional (ink (compose-in +green+ (make-opacity .1))))
+  (highlight-region pane (offset mark1) (offset mark2) ink))
+
+(defmethod highlight-region ((pane climacs-pane) (mark1 mark) (offset2 integer)
+			     &optional (ink (compose-in +green+ (make-opacity .1))))
+  (highlight-region pane (offset mark1) offset2 ink))
+
+(defmethod highlight-region ((pane climacs-pane) (offset1 integer) (mark2 mark)
+			     &optional (ink (compose-in +green+ (make-opacity .1))))
+  (highlight-region pane offset1 (offset mark2) ink))
 
 (defun offset-to-screen-position (offset pane)
   "Returns the position of offset as a screen position.




More information about the Climacs-cvs mailing list