To draw in the foreground color, use the default, or specify :ink +foreground-ink+.
To erase, specify :ink +background-ink+.
To draw in color, specify :ink +green+, :ink (make-rgb-color 0.6 0.0 0.4), and so forth.
To draw an opaque gray, specify :ink (make-gray-color 0.25). This will draw a shade of gray independent of the window's foreground color. On a non-color, non-grayscale display this will generally turn into a stipple.
To draw a stipple of little bricks, specify :ink bricks, where bricks is defined as:
(make-rectangular-tile
(make-pattern #2a(0 0 0 0 1 0 0 0 0)
(0 0 0 1 0 0 0 0)
(0 0 0 1 0 0 0 0)
(1 1 1 1 1 1 1 1)
(0 0 0 0 0 0 0 1)
(0 0 0 0 0 0 0 1)
(0 0 0 0 0 0 0 1)
(1 1 1 1 1 1 1 1))
(list +background+ +foreground+)) 8 8)
To draw a tiled pattern, specify :ink (make-rectangular-tile (make-pattern array colors)).
To draw a pixmap, use (draw-design (make-pattern array colors) medium).
(defun cmd-rubberband ()
(let ((x1 0) ; x1, y1 represents the fix point
(y1 0)
(x2 0) ; x2,y2 represents the point that is changing
(y2 0)
(mouse-button-press nil)
;; press to select pivot
(stream (get-frame-pane *application-frame* 'main)))
(tracking-pointer (stream)
(:pointer-button-press
(event x y )
(setf x1 x y1 y x2 x y2 y)
(draw-line* stream x1 y1 x2 y2
:ink +flipping-ink+)
(setf mouse-button-press t))
(:pointer-motion
(window x y)
(when Mouse-button-press
;;erase
(draw-line* stream x1 y1 x2 y2
:ink +flipping-ink+)
;; draw
(draw-line* stream x1 y1 x y
:ink +flipping-ink+)
(setf x2 x y2 y)))
(:pointer-button-release
(event x y )
(cond
((eq mouse-button-press t)
(return
(list x1 y1 x2 y2))))))))
CLIM 2.0 User Guide - 18 Feb 2025 15:40:10