2 (:use
:cl
:gtk
:gdk
:gobject
:iter
)
18 #:test-color-selection
23 #:test-box-child-property
30 #:test-entry-completion
36 (in-package :gtk-demo
)
38 (defparameter *src-location
* (asdf:component-pathname
(asdf:find-system
:cl-gtk2-gtk
)))
41 "A simple test of 'on-expose' event"
43 (let ((window (make-instance 'gtk-window
:type
:toplevel
:app-paintable t
))
45 (g-signal-connect window
"destroy" (lambda (widget)
46 (declare (ignore widget
))
48 (g-signal-connect window
"motion-notify-event" (lambda (widget event
)
49 (declare (ignore widget
))
50 (setf x
(event-motion-x event
)
51 y
(event-motion-y event
))
52 (widget-queue-draw window
)))
53 (g-signal-connect window
"expose-event"
54 (lambda (widget event
)
55 (declare (ignore widget event
))
56 (let* ((gdk-window (widget-window window
))
57 (gc (graphics-context-new gdk-window
))
58 (layout (widget-create-pango-layout window
(format nil
"X: ~F~%Y: ~F" x y
))))
59 (draw-layout gdk-window gc
0 0 layout
)
60 (setf (graphics-context-rgb-fg-color gc
) (make-color :red
65535 :green
0 :blue
0))
61 (multiple-value-bind (x y
) (drawable-get-size gdk-window
)
62 (draw-line gdk-window gc
0 0 x y
)))))
63 (g-signal-connect window
"configure-event"
64 (lambda (widget event
)
65 (declare (ignore widget event
))
66 (widget-queue-draw window
)))
68 (push :pointer-motion-mask
(gdk-window-events (widget-window window
))))))
71 "Testing GtkTextEntry"
73 (let* ((window (make-instance 'gtk-window
:type
:toplevel
:title
"Testing entry" :border-width
10))
74 (box (make-instance 'v-box
))
75 (entry (make-instance 'entry
))
76 (button (make-instance 'button
:label
"OK"))
77 (text-buffer (make-instance 'text-buffer
))
78 (text-view (make-instance 'text-view
:buffer text-buffer
))
79 (button-select (make-instance 'button
:label
"Select"))
80 (button-insert (make-instance 'button
:label
"Insert")))
81 (box-pack-start box
(make-instance 'label
:label
"Enter <b>anything</b> you wish:" :use-markup t
) :expand nil
)
82 (box-pack-start box entry
:expand nil
)
83 (box-pack-start box button
:expand nil
)
84 (box-pack-start box button-select
:expand nil
)
85 (box-pack-start box button-insert
:expand nil
)
86 (let* ((w (make-instance 'scrolled-window
)))
87 (box-pack-start box w
)
88 (container-add w text-view
))
89 (container-add window box
)
90 (g-signal-connect window
"destroy" (lambda (widget) (declare (ignore widget
)) (leave-gtk-main)))
91 (g-signal-connect window
"delete-event" (lambda (widget event
)
92 (declare (ignore widget event
))
93 (let ((dlg (make-instance 'message-dialog
96 (let ((response (dialog-run dlg
)))
98 (not (eq :yes response
))))))
99 (g-signal-connect button
"clicked" (lambda (button)
100 (declare (ignore button
))
101 (setf (text-buffer-text text-buffer
)
102 (format nil
"~A~%~A" (text-buffer-text text-buffer
) (entry-text entry
))
103 (entry-text entry
) "")))
104 (g-signal-connect button-select
"clicked" (lambda (button)
105 (declare (ignore button
))
106 (editable-select-region entry
5 10)))
107 (g-signal-connect button-insert
"clicked" (lambda (button)
108 (declare (ignore button
))
109 (editable-insert-text entry
"hello" 2)))
110 (widget-show window
))))
112 (defun table-packing ()
113 "Simple test of packing widgets into GtkTable"
115 (let* ((window (make-instance 'gtk-window
:type
:toplevel
:title
"Table packing" :border-width
20))
116 (table (make-instance 'table
:n-rows
2 :n-columns
2 :homogeneous t
))
117 (button-1 (make-instance 'button
:label
"Button 1"))
118 (button-2 (make-instance 'button
:label
"Button 2"))
119 (button-q (make-instance 'button
:label
"Quit")))
120 (container-add window table
)
121 (table-attach table button-1
0 1 0 1)
122 (table-attach table button-2
1 2 0 1)
123 (table-attach table button-q
0 2 1 2)
124 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
125 (g-signal-connect button-q
"clicked" (lambda (b) (declare (ignore b
)) (object-destroy window
)))
126 (widget-show window
))))
128 (defun test-pixbuf ()
131 (let* ((window (make-instance 'gtk-window
:title
"Test pixbuf" :request-width
600 :request-height
240))
132 (vbox (make-instance 'v-box
))
133 (eventbox (make-instance 'event-box
))
134 (vbox-1 (make-instance 'v-box
)))
135 (container-add window vbox
)
136 (box-pack-start vbox
(make-instance 'label
:text
"Placing bg image" :font
"Times New Roman Italic 10" :color
"#00f" :request-height
40))
137 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
138 (box-pack-start vbox eventbox
)
139 (container-add eventbox vbox-1
)
140 (box-pack-start vbox-1
(make-instance 'label
:text
"This is the eventbox"))
141 (box-pack-start vbox-1
(make-instance 'label
:text
"The green ball is the bg"))
142 (widget-show window
))))
145 "Using GtkImage with stock icon"
147 (let* ((window (make-instance 'gtk-window
:title
"Test images"))
148 (image (make-instance 'image
:icon-name
"applications-development" :icon-size
6)))
149 (container-add window image
)
150 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
151 (widget-show window
))))
153 (defun test-progress-bar ()
154 "Testing progress-bar"
156 (let* ((window (make-instance 'gtk-window
:title
"Test progress bar"))
157 (v-box (make-instance 'v-box
))
158 (p-bar (make-instance 'progress-bar
:test
"A process"))
159 (button-pulse (make-instance 'button
:label
"Pulse"))
160 (button-set (make-instance 'button
:label
"Set"))
161 (entry (make-instance 'entry
)))
162 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
163 (container-add window v-box
)
164 (box-pack-start v-box p-bar
)
165 (box-pack-start v-box button-pulse
)
166 (box-pack-start v-box button-set
)
167 (box-pack-start v-box entry
)
168 (g-signal-connect button-pulse
"clicked" (lambda (w) (declare (ignore w
)) (progress-bar-pulse p-bar
)))
169 (g-signal-connect button-set
"clicked" (lambda (w)
171 (setf (progress-bar-fraction p-bar
)
172 (coerce (read-from-string (entry-text entry
)) 'real
))))
173 (widget-show window
))))
175 (defun test-statusbar ()
176 "Test of GtkStatusbar"
178 (let* ((window (make-instance 'gtk-window
:title
"Text status bar"))
179 (v-box (make-instance 'v-box
))
180 (h-box (make-instance 'h-box
))
181 (label (make-instance 'label
:label
"Test of status bar" :xalign
0.5 :yalign
0.5))
182 (statusbar (make-instance 'statusbar
:has-resize-grip t
))
183 (button-push (make-instance 'button
:label
"Push"))
184 (button-pop (make-instance 'button
:label
"Pop"))
185 (entry (make-instance 'entry
))
186 (icon (make-instance 'status-icon
:icon-name
"applications-development")))
187 (set-status-icon-tooltip icon
"An icon from lisp program")
188 (g-signal-connect window
"destroy" (lambda (w)
190 #+ (or) (setf (status-icon-visible icon
) nil
)
192 (g-signal-connect button-push
"clicked" (lambda (b)
194 (statusbar-push statusbar
"lisp-prog" (entry-text entry
))))
195 (g-signal-connect button-pop
"clicked" (lambda (b)
197 (statusbar-pop statusbar
"lisp-prog")))
198 (g-signal-connect icon
"activate" (lambda (i)
200 (let ((message-dialog (make-instance 'message-dialog
202 :text
"You clicked on icon!")))
203 (dialog-run message-dialog
)
204 (object-destroy message-dialog
))))
205 (container-add window v-box
)
206 (box-pack-start v-box h-box
:expand nil
)
207 (box-pack-start h-box entry
)
208 (box-pack-start h-box button-push
:expand nil
)
209 (box-pack-start h-box button-pop
:expand nil
)
210 (box-pack-start v-box label
)
211 (box-pack-start v-box statusbar
:expand nil
)
213 (setf (status-icon-screen icon
) (gtk-window-screen window
)))))
215 (defun test-scale-button ()
216 "Test of scale button with icons"
218 (let* ((window (make-instance 'gtk-window
:type
:toplevel
:title
"Testing scale button"))
219 (button (make-instance 'scale-button
:icons
(list "media-seek-backward" "media-seek-forward" "media-playback-stop" "media-playback-start") :adjustment
(make-instance 'adjustment
:lower -
40 :upper
50 :value
20))))
220 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
221 (container-add window button
)
222 (widget-show window
))))
224 (defun test-text-view ()
225 "Test of GtkTextView"
227 (let* ((window (make-instance 'gtk-window
:type
:toplevel
:title
"Testing text view" :width-request
400 :height-request
300))
228 (button (make-instance 'button
:label
"Do"))
229 (button-insert (make-instance 'button
:label
"Insert a button!"))
230 (bold-btn (make-instance 'button
:label
"Bold"))
231 (buffer (make-instance 'text-buffer
:text
"Some text buffer with some text inside"))
232 (v (make-instance 'text-view
:buffer buffer
:wrap-mode
:word
))
233 (box (make-instance 'v-box
))
234 (scrolled (make-instance 'scrolled-window
:hscrollbar-policy
:automatic
:vscrollbar-policy
:automatic
)))
235 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
236 (g-signal-connect button
"clicked" (lambda (b)
238 (multiple-value-bind (i1 i2
) (text-buffer-get-selection-bounds buffer
)
240 (let* ((i1 i1
) (i2 i2
)
241 (dialog (make-instance 'message-dialog
:buttons
:ok
)))
242 (setf (message-dialog-text dialog
)
243 (format nil
"selection: from (~A,~A) to (~A,~A)"
244 (text-iter-line i1
) (text-iter-line-offset i1
)
245 (text-iter-line i2
) (text-iter-line-offset i2
)))
247 (object-destroy dialog
))))))
248 (g-signal-connect bold-btn
"clicked" (Lambda (b)
250 (multiple-value-bind (start end
) (text-buffer-get-selection-bounds buffer
)
251 (when (and start end
)
254 (tag (text-tag-table-lookup (text-buffer-tag-table buffer
) "bold")))
255 (if (text-iter-has-tag start tag
)
256 (text-buffer-remove-tag buffer tag start end
)
257 (text-buffer-apply-tag buffer tag start end
)))))))
258 (g-signal-connect button-insert
"clicked" (lambda (b)
260 (let* ((iter (text-buffer-get-iter-at-mark buffer
(text-buffer-get-mark buffer
"insert")))
261 (anchor (text-buffer-insert-child-anchor buffer iter
))
262 (button (make-instance 'button
:label
"A button!")))
264 (text-view-add-child-at-anchor v button anchor
))))
265 (let ((tag (make-instance 'text-tag
:name
"bold" :weight
700)))
266 (text-tag-table-add (text-buffer-tag-table buffer
) tag
)
267 (g-signal-connect tag
"event"
268 (lambda (tag object event iter
)
269 (declare (ignore tag object iter
))
270 (when (eq (event-type event
) :button-release
)
271 (let ((dlg (make-instance 'message-dialog
:text
"You clicked on bold text." :buttons
:ok
)))
273 (object-destroy dlg
))))))
274 (container-add window box
)
275 (container-add scrolled v
)
276 (box-pack-start box button
:expand nil
)
277 (box-pack-start box button-insert
:expand nil
)
278 (box-pack-start box bold-btn
:expand nil
)
279 (box-pack-start box scrolled
)
280 (widget-show window
))))
282 (defun demo-code-editor ()
285 (let* ((window (make-instance 'gtk-window
:type
:toplevel
:title
"Code editor" :width-request
400 :height-request
400 :window-position
:center
))
286 (scrolled (make-instance 'scrolled-window
:hscrollbar-policy
:automatic
:vscrollbar-policy
:automatic
))
287 (buffer (make-instance 'text-buffer
))
288 (view (make-instance 'text-view
:buffer buffer
)))
289 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
290 (container-add window scrolled
)
291 (container-add scrolled view
)
293 (g-signal-connect buffer
"insert-text" (lambda (buffer location text len
)
294 (let* ((buffer buffer
)
296 (format t
"~A~%" (list buffer location text len
))))))))
298 (defstruct tvi title value
)
300 (defun test-treeview-list ()
301 "Test of treeview with CL-GTK2-GTK:ARRAY-LIST-STORE"
303 (let* ((window (make-instance 'gtk-window
:type
:toplevel
:title
"Treeview (list)"))
304 (model (make-instance 'array-list-store
))
305 (scroll (make-instance 'scrolled-window
:hscrollbar-policy
:automatic
:vscrollbar-policy
:automatic
))
306 (tv (make-instance 'tree-view
:headers-visible t
:width-request
100 :height-request
400 :rules-hint t
))
307 (h-box (make-instance 'h-box
))
308 (v-box (make-instance 'v-box
))
309 (title-entry (make-instance 'entry
))
310 (value-entry (make-instance 'entry
))
311 (button (make-instance 'button
:label
"Add")))
312 (store-add-column model
"gchararray" #'tvi-title
)
313 (store-add-column model
"gint" #'tvi-value
)
314 (store-add-item model
(make-tvi :title
"Monday" :value
1))
315 (store-add-item model
(make-tvi :title
"Tuesday" :value
2))
316 (store-add-item model
(make-tvi :title
"Wednesday" :value
3))
317 (store-add-item model
(make-tvi :title
"Thursday" :value
4))
318 (store-add-item model
(make-tvi :title
"Friday" :value
5))
319 (store-add-item model
(make-tvi :title
"Saturday" :value
6))
320 (store-add-item model
(make-tvi :title
"Sunday" :value
7))
321 (setf (tree-view-model tv
) model
(tree-view-tooltip-column tv
) 0)
322 (gobject:g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
323 (gobject:g-signal-connect button
"clicked" (lambda (b)
325 (store-add-item model
(make-tvi :title
(entry-text title-entry
)
326 :value
(or (parse-integer (entry-text value-entry
)
329 (g-signal-connect tv
"row-activated" (lambda (tv path column
)
330 (declare (ignore tv column
))
331 (format t
"You clicked on row ~A~%" (tree-path-indices path
))))
332 (container-add window v-box
)
333 (box-pack-start v-box h-box
:expand nil
)
334 (box-pack-start h-box title-entry
:expand nil
)
335 (box-pack-start h-box value-entry
:expand nil
)
336 (box-pack-start h-box button
:expand nil
)
337 (box-pack-start v-box scroll
)
338 (container-add scroll tv
)
339 (let ((column (make-instance 'tree-view-column
:title
"Title" :sort-column-id
0))
340 (renderer (make-instance 'cell-renderer-text
:text
"A text")))
341 (tree-view-column-pack-start column renderer
)
342 (tree-view-column-add-attribute column renderer
"text" 0)
343 (tree-view-append-column tv column
)
344 (print (tree-view-column-tree-view column
))
345 (print (tree-view-column-cell-renderers column
)))
346 (let ((column (make-instance 'tree-view-column
:title
"Value"))
347 (renderer (make-instance 'cell-renderer-text
:text
"A text")))
348 (tree-view-column-pack-start column renderer
)
349 (tree-view-column-add-attribute column renderer
"text" 1)
350 (tree-view-append-column tv column
)
351 (print (tree-view-column-tree-view column
))
352 (print (tree-view-column-cell-renderers column
)))
353 (widget-show window
))))
355 (defun test-combo-box ()
356 "Testing GtkComboBox"
358 (let* ((window (make-instance 'gtk-window
:type
:toplevel
:title
"Treeview (list)"))
359 (model (make-instance 'array-list-store
))
360 (combo-box (make-instance 'combo-box
:model model
))
361 (h-box (make-instance 'h-box
))
362 (v-box (make-instance 'v-box
))
363 (title-entry (make-instance 'entry
))
364 (value-entry (make-instance 'entry
))
365 (button (make-instance 'button
:label
"Add")))
366 (store-add-column model
"gchararray" #'tvi-title
)
367 (store-add-column model
"gint" #'tvi-value
)
368 (store-add-item model
(make-tvi :title
"Monday" :value
1))
369 (store-add-item model
(make-tvi :title
"Tuesday" :value
2))
370 (store-add-item model
(make-tvi :title
"Wednesday" :value
3))
371 (store-add-item model
(make-tvi :title
"Thursday" :value
4))
372 (store-add-item model
(make-tvi :title
"Friday" :value
5))
373 (store-add-item model
(make-tvi :title
"Saturday" :value
6))
374 (store-add-item model
(make-tvi :title
"Sunday" :value
7))
375 (gobject:g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
376 (gobject:g-signal-connect button
"clicked" (lambda (b)
378 (store-add-item model
(make-tvi :title
(entry-text title-entry
)
379 :value
(or (parse-integer (entry-text value-entry
)
382 (g-signal-connect combo-box
"changed" (lambda (c)
384 (format t
"You clicked on row ~A~%" (combo-box-active combo-box
))))
385 (container-add window v-box
)
386 (box-pack-start v-box h-box
:expand nil
)
387 (box-pack-start h-box title-entry
:expand nil
)
388 (box-pack-start h-box value-entry
:expand nil
)
389 (box-pack-start h-box button
:expand nil
)
390 (box-pack-start v-box combo-box
)
391 (let ((renderer (make-instance 'cell-renderer-text
:text
"A text")))
392 (cell-layout-pack-start combo-box renderer
:expand t
)
393 (cell-layout-add-attribute combo-box renderer
"text" 0))
394 (let ((renderer (make-instance 'cell-renderer-text
:text
"A number")))
395 (cell-layout-pack-start combo-box renderer
:expand nil
)
396 (cell-layout-add-attribute combo-box renderer
"text" 1))
397 (widget-show window
))))
399 (defun test-ui-manager ()
400 "Testing GtkUIManager"
402 (let* ((window (make-instance 'gtk-window
:type
:toplevel
:title
"UI Manager" :default-width
200 :default-height
100 :window-position
:center
))
403 (ui-manager (make-instance 'ui-manager
))
404 (print-confirmation t
))
405 (ui-manager-add-ui-from-string ui-manager
408 <toolbar action='toolbar1'>
410 <toolitem name='Left' action='justify-left'/>
411 <toolitem name='Center' action='justify-center'/>
412 <toolitem name='Right' action='justify-right'/>
413 <toolitem name='Zoom in' action='zoom-in' />
414 <toolitem name='print-confirm' action='print-confirm' />
418 (gobject:g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
419 (iter (with fn
= (lambda (action) (when print-confirmation
(format t
"Action ~A with name ~A activated~%" action
(action-name action
)))))
420 (with action-group
= (make-instance 'action-group
:name
"Actions"))
421 (finally (let ((a (make-instance 'toggle-action
:name
"print-confirm" :label
"Print" :stock-id
"gtk-print-report" :active t
)))
422 (g-signal-connect a
"toggled" (lambda (action) (setf print-confirmation
(toggle-action-active action
))))
423 (action-group-add-action action-group a
))
424 (ui-manager-insert-action-group ui-manager action-group
0))
425 (for (name stock-id
) in
'(("justify-left" "gtk-justify-left")
426 ("justify-center" "gtk-justify-center")
427 ("justify-right" "gtk-justify-right")
428 ("zoom-in" "gtk-zoom-in")))
429 (for action
= (make-instance 'action
:name name
:stock-id stock-id
))
430 (g-signal-connect action
"activate" fn
)
431 (action-group-add-action action-group action
))
432 (let ((widget (ui-manager-widget ui-manager
"/toolbar1")))
434 (container-add window widget
)))
435 (widget-show window
))))
437 (defun test-color-button ()
438 "Test of GtkColorButton"
440 (let ((window (make-instance 'gtk-window
:title
"Color button" :type
:toplevel
:window-position
:center
:width-request
100 :height-request
100))
441 (button (make-instance 'color-button
:title
"Color button")))
442 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
443 (g-signal-connect button
"color-set" (lambda (b)
445 (format t
"Chose color ~A~%" (color-button-color button
))))
446 (container-add window button
)
447 (widget-show window
))))
449 (defun test-color-selection ()
450 "Test of GtkColorSelection"
452 (let ((window (make-instance 'gtk-window
:title
"Color selection" :type
:toplevel
:window-position
:center
))
453 (selection (make-instance 'color-selection
:has-opacity-control t
)))
454 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
455 (g-signal-connect selection
"color-changed" (lambda (s) (declare (ignore s
)) (unless (color-selection-adjusting-p selection
) (format t
"color: ~A~%" (color-selection-current-color selection
)))))
456 (container-add window selection
)
457 (widget-show window
))))
459 (defun test-file-chooser ()
460 "Test of GtkFileChooser"
462 (let ((window (make-instance 'gtk-window
:title
"file chooser" :type
:toplevel
:window-position
:center
:default-width
100 :default-height
100))
463 (v-box (make-instance 'v-box
))
464 (button (make-instance 'file-chooser-button
:action
:open
))
465 (b (make-instance 'button
:label
"Choose for save" :stock-id
"gtk-save")))
466 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
467 (g-signal-connect button
"file-set" (lambda (b) (declare (ignore b
)) (format t
"File set: ~A~%" (file-chooser-filename button
))))
468 (g-signal-connect b
"clicked" (lambda (b)
470 (let ((d (make-instance 'file-chooser-dialog
:action
:save
:title
"Choose file to save")))
471 (dialog-add-button d
"gtk-save" :accept
)
472 (dialog-add-button d
"gtk-cancel" :cancel
)
473 (when (eq (dialog-run d
) :accept
)
474 (format t
"saved to file ~A~%" (file-chooser-filename d
)))
475 (object-destroy d
))))
476 (container-add window v-box
)
477 (box-pack-start v-box button
)
478 (box-pack-start v-box b
)
479 (widget-show window
))))
481 (defun test-font-chooser ()
484 (let ((window (make-instance 'gtk-window
:title
"fonts" :type
:toplevel
:window-position
:center
:default-width
100 :default-height
100))
485 (v-box (make-instance 'v-box
))
486 (button (make-instance 'font-button
:title
"Choose font" :font-name
"Sans 10")))
487 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
488 (g-signal-connect button
"font-set" (lambda (b) (declare (ignore b
)) (format t
"Chose font ~A~%" (font-button-font-name button
))))
489 (container-add window v-box
)
490 (box-pack-start v-box button
)
491 (widget-show window
))))
493 (defun test-notebook ()
496 (let ((window (make-instance 'gtk-window
:title
"Notebook" :type
:toplevel
:window-position
:center
:default-width
100 :default-height
100))
497 (expander (make-instance 'expander
:expanded t
:label
"notebook"))
498 (notebook (make-instance 'notebook
:enable-popup t
)))
499 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
500 (iter (for i from
0 to
5)
501 (for page
= (make-instance 'label
:label
(format nil
"Label for page ~A" i
)))
502 (for tab-label
= (make-instance 'label
:label
(format nil
"Tab ~A" i
)))
503 (for tab-button
= (make-instance 'button
504 :image
(make-instance 'image
:stock
"gtk-close" :icon-size
1)
506 (g-signal-connect tab-button
"clicked"
509 (declare (ignore button
))
510 (format t
"Removing page ~A~%" page
)
511 (notebook-remove-page notebook page
))))
512 (for tab-hbox
= (make-instance 'h-box
))
513 (box-pack-start tab-hbox tab-label
)
514 (box-pack-start tab-hbox tab-button
)
515 (widget-show tab-hbox
)
516 (notebook-add-page notebook page tab-hbox
))
517 (container-add window expander
)
518 (container-add expander notebook
)
519 (widget-show window
))))
521 (defun calendar-detail (calendar year month day
)
522 (declare (ignore calendar year month
))
526 (defun test-calendar ()
527 "Test of GtkCalendar"
529 (let ((window (make-instance 'gtk-window
:title
"Calendar" :type
:toplevel
:window-position
:center
:default-width
100 :default-height
100))
530 (calendar (make-instance 'calendar
:detail-function
#'calendar-detail
)))
531 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
532 (g-signal-connect calendar
"day-selected" (lambda (c) (declare (ignore c
)) (format t
"selected: year ~A month ~A day ~A~%"
533 (calendar-year calendar
)
534 (calendar-month calendar
)
535 (calendar-day calendar
))))
536 (container-add window calendar
)
537 (widget-show window
))))
539 (defun test-box-child-property ()
540 "Test of child-property usage"
542 (let ((window (make-instance 'gtk-window
:title
"Text box child property" :type
:toplevel
:window-position
:center
:width-request
200 :height-request
200))
543 (box (make-instance 'h-box
))
544 (button (make-instance 'toggle-button
:active t
:label
"Expand")))
545 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
546 (g-signal-connect button
"toggled" (lambda (b) (declare (ignore b
)) (setf (box-child-expand box button
) (toggle-button-active button
))))
547 (container-add window box
)
548 (box-pack-start box button
)
549 (widget-show window
))))
551 (defun test-builder ()
554 (let ((builder (make-instance 'builder
)))
555 (builder-add-from-file builder
(namestring (merge-pathnames "demo/demo1.ui" *src-location
*)))
556 (let ((text-view (builder-get-object builder
"textview1"))
558 (builder-connect-signals-simple builder
`(("toolbutton1_clicked_cb" ,(lambda (b)
560 #+nil
(print (current-event))
561 (setf (text-buffer-text (text-view-buffer text-view
))
562 (format nil
"Clicked ~A times~%" (incf c
)))
563 (statusbar-pop (builder-get-object builder
"statusbar1")
565 (statusbar-push (builder-get-object builder
"statusbar1")
567 (format nil
"~A times" c
))))
568 ("quit_cb" ,(lambda (&rest args
)
570 (object-destroy (builder-get-object builder
"window1"))))
571 ("about_cb" ,(lambda (&rest args
)
573 (let ((d (make-instance 'about-dialog
574 :program-name
"GtkBuilder text"
576 :authors
'("Dmitry Kalyanov")
577 :logo-icon-name
"gtk-apply")))
579 (object-destroy d
)))))))
580 (g-signal-connect (builder-get-object builder
"window1") "destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
581 (statusbar-push (builder-get-object builder
"statusbar1") "times" "0 times")
582 (widget-show (builder-get-object builder
"window1")))))
584 (defun read-text-file (file-name)
585 (with-output-to-string (str)
586 (with-open-file (file file-name
)
588 for line
= (read-line file nil nil
)
591 do
(write-string line str
)))))
593 (defun demo-text-editor ()
594 "More advanced example: text editor with ability to evaluate lisp expressions"
596 (let* ((builder (let ((builder (make-instance 'builder
)))
597 (builder-add-from-file builder
(namestring (merge-pathnames "demo/text-editor.ui" *src-location
*)))
599 (window (builder-get-object builder
"window1"))
600 (text-view (builder-get-object builder
"textview1"))
601 (statusbar (builder-get-object builder
"statusbar1"))
604 (statusbar-push statusbar
"filename" "Untitled *")
605 (labels ((set-properties ()
606 (statusbar-pop statusbar
"filename")
607 (statusbar-push statusbar
"filename" (format nil
"~A~:[~; *~]" (or file-name
"Untitled") modified-p
)))
608 (new (&rest args
) (declare (ignore args
))
611 (text-buffer-text (text-view-buffer text-view
)) "")
613 (cb-open (&rest args
) (declare (ignore args
))
614 (let ((d (make-instance 'file-chooser-dialog
:action
:open
:title
"Open file")))
615 (when file-name
(setf (file-chooser-filename d
) file-name
))
616 (dialog-add-button d
"gtk-open" :accept
)
617 (dialog-add-button d
"gtk-cancel" :cancel
)
618 (when (eq :accept
(dialog-run d
))
619 (setf file-name
(file-chooser-filename d
)
620 (text-buffer-text (text-view-buffer text-view
)) (read-text-file file-name
)
624 (save (&rest args
) (declare (ignore args
))
627 (with-open-file (file file-name
:direction
:output
:if-exists
:supersede
)
628 (write-string (text-buffer-text (text-view-buffer text-view
)) file
))
629 (setf modified-p nil
)
632 (save-as (&rest args
) (declare (ignore args
))
633 (let ((d (make-instance 'file-chooser-dialog
:action
:save
:title
"Save file")))
634 (when file-name
(setf (file-chooser-filename d
) file-name
))
635 (dialog-add-button d
"gtk-save" :accept
)
636 (dialog-add-button d
"gtk-cancel" :cancel
)
637 (if (eq :accept
(dialog-run d
))
639 (setf file-name
(file-chooser-filename d
))
642 (object-destroy d
))))
643 (cut (&rest args
) (declare (ignore args
))
644 (text-buffer-cut-clipboard (text-view-buffer text-view
) (get-clipboard "CLIPBOARD") t
))
645 (copy (&rest args
) (declare (ignore args
))
646 (text-buffer-copy-clipboard (text-view-buffer text-view
) (get-clipboard "CLIPBOARD")))
647 (paste (&rest args
) (declare (ignore args
))
648 (text-buffer-paste-clipboard (text-view-buffer text-view
) (get-clipboard "CLIPBOARD")))
649 (cb-delete (&rest args
) (declare (ignore args
))
650 (let ((buffer (text-view-buffer text-view
)))
651 (multiple-value-bind (i1 i2
) (text-buffer-get-selection-bounds buffer
)
653 (text-buffer-delete buffer i1 i2
)))))
654 (about (&rest args
) (declare (ignore args
))
655 (let ((d (make-instance 'about-dialog
656 :program-name
"Lisp Gtk+ Binding Demo Text Editor"
657 :version
(format nil
"0.0.0.1 ~A" #\GREEK_SMALL_LETTER_ALPHA
)
658 :authors
'("Kalyanov Dmitry")
659 :license
"Public Domain"
660 :logo-icon-name
"accessories-text-editor")))
663 (quit (&rest args
) (declare (ignore args
)) (object-destroy window
))
664 (cb-eval (&rest args
) (declare (ignore args
))
665 (let ((buffer (text-view-buffer text-view
)))
666 (multiple-value-bind (i1 i2
) (text-buffer-get-selection-bounds buffer
)
668 (with-gtk-message-error-handler
669 (let* ((text (text-buffer-slice buffer i1 i2
))
670 (value (eval (read-from-string text
)))
671 (value-str (format nil
"~A" value
))
672 (pos (max (text-iter-offset i1
) (text-iter-offset i2
))))
673 (text-buffer-insert buffer
" => " :position
(text-buffer-get-iter-at-offset buffer pos
))
674 (incf pos
(length " => "))
675 (text-buffer-insert buffer value-str
:position
(text-buffer-get-iter-at-offset buffer pos
)))))))))
676 (builder-connect-signals-simple builder
`(("new" ,#'new
)
679 ("save-as" ,#'save-as
)
683 ("delete" ,#'cb-delete
)
686 ("eval" ,#'cb-eval
)))
687 (g-signal-connect window
"destroy" (lambda (w) (declare (ignore w
)) (leave-gtk-main)))
688 (g-signal-connect (text-view-buffer text-view
) "changed" (lambda (b) (declare (ignore b
)) (setf modified-p t
) (set-properties)))
689 (widget-show window
)))))
691 (defun demo-class-browser ()
692 "Show slots of a given class"
693 (let ((output *standard-output
*))
695 (let* ((window (make-instance 'gtk-window
696 :window-position
:center
697 :title
"Class Browser"
699 :default-height
600))
700 (search-entry (make-instance 'entry
))
701 (search-button (make-instance 'button
:label
"Search"))
702 (scroll (make-instance 'scrolled-window
703 :hscrollbar-policy
:automatic
704 :vscrollbar-policy
:automatic
))
705 (slots-model (make-instance 'array-list-store
))
706 (slots-list (make-instance 'tree-view
:model slots-model
)))
707 (let ((v-box (make-instance 'v-box
))
708 (search-box (make-instance 'h-box
)))
709 (container-add window v-box
)
710 (box-pack-start v-box search-box
:expand nil
)
711 (box-pack-start search-box search-entry
)
712 (box-pack-start search-box search-button
:expand nil
)
713 (box-pack-start v-box scroll
)
714 (container-add scroll slots-list
))
715 (store-add-column slots-model
"gchararray"
717 (format nil
"~S" (closer-mop:slot-definition-name slot
))))
718 (let ((col (make-instance 'tree-view-column
:title
"Slot name"))
719 (cr (make-instance 'cell-renderer-text
)))
720 (tree-view-column-pack-start col cr
)
721 (tree-view-column-add-attribute col cr
"text" 0)
722 (tree-view-append-column slots-list col
))
723 (labels ((display-class-slots (class)
724 (format output
"Displaying ~A~%" class
)
726 repeat
(store-items-count slots-model
)
727 do
(store-remove-item slots-model
(store-item slots-model
0)))
728 (closer-mop:finalize-inheritance class
)
730 for slot in
(closer-mop:class-slots class
)
731 do
(store-add-item slots-model slot
)))
732 (on-search-clicked (button)
733 (declare (ignore button
))
734 (with-gtk-message-error-handler
735 (let* ((class-name (read-from-string (entry-text search-entry
)))
736 (class (find-class class-name
)))
737 (display-class-slots class
)))))
738 (g-signal-connect search-button
"clicked" #'on-search-clicked
))
739 (widget-show window
)))))
741 (defun make-tree-from-sexp (l)
742 (setf l
(if (listp l
) l
(list l
)))
743 (let ((node (make-tree-node :item
(make-tvi :title
(format nil
"~S" (first l
))
744 :value
(format nil
"~S" (class-of (first l
)))))))
745 (iter (for child in
(rest l
))
746 (tree-node-insert-at node
(make-tree-from-sexp child
) (length (tree-node-children node
))))
749 (defun demo-treeview-tree ()
750 "Advanced demo: show s-expression tree structure"
752 (let* ((window (make-instance 'gtk-window
:type
:toplevel
:title
"Treeview (tree)"))
753 (model (make-instance 'tree-lisp-store
))
754 (scroll (make-instance 'scrolled-window
:hscrollbar-policy
:automatic
:vscrollbar-policy
:automatic
))
755 (tree-view (make-instance 'tree-view
:headers-visible t
:width-request
300 :height-request
400 :rules-hint t
))
756 (h-box (make-instance 'h-box
))
757 (v-box (make-instance 'v-box
))
758 (entry (make-instance 'entry
))
759 (button (make-instance 'button
:label
"Display")))
760 (tree-lisp-store-add-column model
"gchararray" #'tvi-title
)
761 (tree-lisp-store-add-column model
"gchararray" #'tvi-value
)
762 (tree-node-insert-at (tree-lisp-store-root model
)
763 (make-tree-from-sexp '(lambda (object &rest initargs
&key
&allow-other-keys
)
767 (setf (tree-view-model tree-view
) model
768 (tree-view-tooltip-column tree-view
) 0)
769 (connect-signal tree-view
"row-activated" (lambda (tv path column
)
770 (declare (ignore tv column
))
771 (format t
"You clicked on row ~A~%" (tree-path-indices path
))))
772 (connect-signal button
"clicked" (lambda (b)
774 (let ((object (read-from-string (entry-text entry
))))
775 (tree-node-remove-at (tree-lisp-store-root model
) 0)
776 (tree-node-insert-at (tree-lisp-store-root model
)
777 (make-tree-from-sexp object
)
779 (container-add window v-box
)
780 (box-pack-start v-box h-box
:expand nil
)
781 (box-pack-start h-box entry
)
782 (box-pack-start h-box button
:expand nil
)
783 (box-pack-start v-box scroll
)
784 (container-add scroll tree-view
)
785 (let ((column (make-instance 'tree-view-column
:title
"Value" :sort-column-id
0))
786 (renderer (make-instance 'cell-renderer-text
:text
"A text")))
787 (tree-view-column-pack-start column renderer
)
788 (tree-view-column-add-attribute column renderer
"text" 0)
789 (tree-view-append-column tree-view column
)
790 (print (tree-view-column-tree-view column
))
791 (print (tree-view-column-cell-renderers column
)))
792 (let ((column (make-instance 'tree-view-column
:title
"Type"))
793 (renderer (make-instance 'cell-renderer-text
:text
"A text")))
794 (tree-view-column-pack-start column renderer
)
795 (tree-view-column-add-attribute column renderer
"text" 1)
796 (tree-view-append-column tree-view column
)
797 (print (tree-view-column-tree-view column
))
798 (print (tree-view-column-cell-renderers column
)))
799 (widget-show window
))))
801 (defclass custom-window
(gtk-window)
802 ((label :initform
(make-instance 'label
:label
"A label text") :reader custom-window-label
)
803 (button :initform
(make-instance 'button
:label
"Click me!") :reader custom-window-button
))
804 (:metaclass gobject-class
)
805 (:default-initargs
:title
"Custom window with default initargs" :default-width
320 :default-height
240))
807 (defun custom-window-label-text (w)
808 (label-label (custom-window-label w
)))
810 (defun (setf custom-window-label-text
) (new-value w
)
811 (setf (label-label (custom-window-label w
)) new-value
))
813 (defmethod initialize-instance :after
((w custom-window
) &key
&allow-other-keys
)
814 (let ((box (make-instance 'v-box
)))
815 (box-pack-start box
(custom-window-label w
))
816 (box-pack-start box
(custom-window-button w
) :expand nil
)
817 (container-add w box
))
818 (connect-signal (custom-window-button w
) "clicked" (lambda (b)
820 (custom-window-button-clicked w
))))
822 (defun custom-window-button-clicked (w)
823 (setf (custom-window-label-text w
)
824 (format nil
"Now is: ~A~%" (get-internal-run-time))))
826 (defun test-custom-window ()
827 "Simple test of non-GObject subclass of GtkWindow"
829 (let ((w (make-instance 'custom-window
)))
832 (defun test-assistant ()
833 "Simple test of GtkAssistant wizard"
834 (let ((output *standard-output
*))
836 (let ((d (make-instance 'assistant
:title
"Username wizard"))
837 (p-1 (make-instance 'h-box
))
838 (entry (make-instance 'entry
))
839 (p-2 (make-instance 'label
:label
"Click Apply to close this wizard")))
840 (box-pack-start p-1
(make-instance 'label
:label
"Enter your name:") :expand nil
)
841 (box-pack-start p-1 entry
)
842 (assistant-append-page d p-1
)
843 (assistant-append-page d p-2
)
844 (setf (assistant-child-title d p-1
) "Username wizard"
845 (assistant-child-title d p-2
) "Username wizard"
846 (assistant-child-complete d p-1
) nil
847 (assistant-child-complete d p-2
) t
848 (assistant-child-page-type d p-1
) :intro
849 (assistant-child-page-type d p-2
) :confirm
850 (assistant-forward-page-function d
) (lambda (i)
851 (format output
"(assistant-forward-page-function ~A)~%" i
)
855 (connect-signal entry
"notify::text" (lambda (object pspec
)
856 (declare (ignore object pspec
))
857 (setf (assistant-child-complete d p-1
)
858 (plusp (length (entry-text entry
))))))
859 (let ((w (make-instance 'label
:label
"A label in action area")))
861 (assistant-add-action-widget d w
))
862 (connect-signal d
"cancel" (lambda (assistant)
863 (declare (ignore assistant
))
865 (format output
"Canceled~%")))
866 (connect-signal d
"close" (lambda (assistant)
867 (declare (ignore assistant
))
869 (format output
"Thank you, ~A~%" (entry-text entry
))))
870 (connect-signal d
"prepare" (lambda (assistant page-widget
)
871 (declare (ignore assistant page-widget
))
872 (format output
"Assistant ~A has ~A pages and is on ~Ath page~%"
873 d
(assistant-n-pages d
) (assistant-current-page d
))))
876 (defun test-entry-completion ()
877 "Not working example of GtkEntryCompletion"
879 (let* ((w (make-instance 'gtk-window
))
880 (model (make-instance 'tree-lisp-store
)))
881 (tree-lisp-store-add-column model
"gchararray" #'identity
)
882 (tree-node-insert-at (tree-lisp-store-root model
) (make-tree-node :item
"Monday") 0)
883 (tree-node-insert-at (tree-lisp-store-root model
) (make-tree-node :item
"Tuesday") 0)
884 (tree-node-insert-at (tree-lisp-store-root model
) (make-tree-node :item
"Wednesday") 0)
885 (tree-node-insert-at (tree-lisp-store-root model
) (make-tree-node :item
"Thursday") 0)
886 (tree-node-insert-at (tree-lisp-store-root model
) (make-tree-node :item
"Friday") 0)
887 (tree-node-insert-at (tree-lisp-store-root model
) (make-tree-node :item
"Saturday") 0)
888 (tree-node-insert-at (tree-lisp-store-root model
) (make-tree-node :item
"Sunday") 0)
889 (let* ((completion (make-instance 'entry-completion
:model model
:text-column
0))
890 (e (make-instance 'entry
:completion completion
)))
891 (setf (entry-completion-text-column completion
) 0)
897 (let* ((window (make-instance 'gtk-window
898 :title
"cl-gtk2-gtk demo"
899 :window-position
:center
901 :default-height
500))
902 (scrolled (make-instance 'scrolled-window
903 :hscrollbar-policy
:automatic
904 :vscrollbar-policy
:automatic
))
905 (viewport (make-instance 'viewport
))
906 (v-box-buttons (make-instance 'v-box
))
907 (v-box-top (make-instance 'v-box
)))
908 (container-add window v-box-top
)
909 (box-pack-start v-box-top
(make-instance 'label
:label
"These are the demos of cl-gtk2-gtk:") :expand nil
)
910 (box-pack-start v-box-top scrolled
)
911 (container-add scrolled viewport
)
912 (container-add viewport v-box-buttons
)
913 (iter (for s in-package
:gtk-demo
:external-only t
)
914 (for fn
= (fdefinition s
))
915 (unless fn
(next-iteration))
916 (when (eq s
'gtk-demo
:demo-all
) (next-iteration))
917 (for docstring
= (documentation fn t
))
918 (for description
= (format nil
"~A~@[~%~A~]" (string-downcase (symbol-name s
)) docstring
))
919 (for label
= (make-instance 'label
:label description
:justify
:center
))
920 (for button
= (make-instance 'button
))
921 (container-add button label
)
922 (connect-signal button
"clicked"
927 (box-pack-start v-box-buttons button
:expand nil
))
928 (widget-show window
))))
930 (defun test-ui-markup ()
932 (let ((label (make-instance 'label
:label
"Hello!")))
933 (let-ui (gtk-window :type
:toplevel
935 :title
"Hello, world!"
940 (:expr label
) :expand nil
942 :hscrollbar-policy
:automatic
943 :vscrollbar-policy
:automatic
944 :shadow-type
:etched-in
947 (label :label
"Insert:") :expand nil
949 (button :label
"gtk-ok" :use-stock t
:var btn
) :expand nil
)
951 (label :label
"Table packing")
956 (label :label
"2 x 1") :left
0 :right
2 :top
0 :bottom
1
957 (label :label
"1 x 1") :left
0 :right
1 :top
1 :bottom
2
958 (label :label
"1 x 1") :left
1 :right
2 :top
1 :bottom
2)))
959 (connect-signal btn
"clicked"
962 (text-buffer-insert (text-view-buffer tv
)
963 (entry-text entry
))))
966 (defun test-list-store ()
967 "Demonstrates usage of list store"
971 :title
"GtkListStore"
976 (label :label
"A GtkListStore") :expand nil
978 :hscrollbar-policy
:automatic
979 :vscrollbar-policy
:automatic
980 (tree-view :var tv
))))
981 (let ((l (make-instance 'list-store
:column-types
'("gint" "gchararray"))))
982 (iter (for i from
0 below
100)
983 (for n
= (random 10000000))
984 (for s
= (format nil
"~R" n
))
985 (list-store-insert-with-values l i n s
))
986 (setf (tree-view-model tv
) l
)
987 (let ((column (make-instance 'tree-view-column
:title
"Number" :sort-column-id
0))
988 (renderer (make-instance 'cell-renderer-text
:text
"A text")))
989 (tree-view-column-pack-start column renderer
)
990 (tree-view-column-add-attribute column renderer
"text" 0)
991 (tree-view-append-column tv column
))
992 (let ((column (make-instance 'tree-view-column
:title
"As string" :sort-column-id
1))
993 (renderer (make-instance 'cell-renderer-text
:text
"A text")))
994 (tree-view-column-pack-start column renderer
)
995 (tree-view-column-add-attribute column renderer
"text" 1)
996 (tree-view-append-column tv column
))
997 (connect-signal tv
"row-activated"
998 (lambda (w path column
)
999 (declare (ignore w column
))
1000 (let* ((iter (tree-model-iter-by-path l path
))
1001 (n (tree-model-value l iter
0))
1002 (dialog (make-instance 'message-dialog
1004 :text
(format nil
"Number ~A was clicked" n
)
1007 (object-destroy dialog
)))))
1010 (defun test-tree-store ()
1011 "Demonstrates usage of tree store"
1015 :title
"GtkListStore"
1020 (label :label
"A GtkListStore") :expand nil
1022 :hscrollbar-policy
:automatic
1023 :vscrollbar-policy
:automatic
1024 (tree-view :var tv
))))
1025 (let ((l (make-instance 'tree-store
:column-types
'("gint" "gchararray"))))
1026 (iter (for i from
0 below
100)
1027 (for n
= (random 10000000))
1028 (for s
= (format nil
"~R" n
))
1029 (for it
= (tree-store-insert-with-values l nil i n s
))
1030 (iter (for j from
0 below
10)
1031 (for n2
= (random 10000000))
1032 (for s2
= (format nil
"~R" n
))
1033 (tree-store-insert-with-values l it j n2 s2
)))
1034 (setf (tree-view-model tv
) l
)
1035 (let ((column (make-instance 'tree-view-column
:title
"Number" :sort-column-id
0))
1036 (renderer (make-instance 'cell-renderer-text
:text
"A text")))
1037 (tree-view-column-pack-start column renderer
)
1038 (tree-view-column-add-attribute column renderer
"text" 0)
1039 (tree-view-append-column tv column
))
1040 (let ((column (make-instance 'tree-view-column
:title
"As string" :sort-column-id
1))
1041 (renderer (make-instance 'cell-renderer-text
:text
"A text")))
1042 (tree-view-column-pack-start column renderer
)
1043 (tree-view-column-add-attribute column renderer
"text" 1)
1044 (tree-view-append-column tv column
))
1045 (connect-signal tv
"row-activated"
1046 (lambda (w path column
)
1047 (declare (ignore w column
))
1048 (let* ((iter (tree-model-iter-by-path l path
))
1049 (n (tree-model-value l iter
0))
1050 (dialog (make-instance 'message-dialog
1052 :text
(format nil
"Number ~A was clicked" n
)
1055 (object-destroy dialog
)))))
1058 (defun test-gdk-expose (gdk-window)
1059 (let* ((gc (graphics-context-new gdk-window
)))
1060 (multiple-value-bind (w h
) (drawable-get-size gdk-window
)
1061 (setf (graphics-context-rgb-bg-color gc
) (make-color :red
0 :green
0 :blue
0))
1062 (draw-polygon gdk-window gc t
(list (make-point :x
0 :y
0)
1063 (make-point :x
(truncate w
2) :y
0)
1064 (make-point :x w
:y
(truncate h
2))
1065 (make-point :x w
:y h
)
1066 (make-point :x
(truncate w
2) :y h
)
1067 (make-point :x
0 :y
(truncate h
2))))
1068 (setf (graphics-context-rgb-fg-color gc
) (make-color :red
65535 :green
0 :blue
0))
1069 (draw-point gdk-window gc
20 10)
1070 (setf (graphics-context-rgb-fg-color gc
) (make-color :red
0 :green
65535 :blue
0))
1071 (draw-points gdk-window gc
(list (make-point :x
15 :y
20) (make-point :x
35 :y
40)))
1072 (setf (graphics-context-rgb-fg-color gc
) (make-color :red
0 :green
0 :blue
65535))
1073 (draw-line gdk-window gc
60 30 40 50)
1074 (setf (graphics-context-rgb-fg-color gc
) (make-color :red
65535 :green
65535 :blue
0))
1075 (draw-lines gdk-window gc
(list (make-point :x
10 :y
30) (make-point :x
15 :y
40)
1076 (make-point :x
15 :y
50) (make-point :x
10 :y
56)))
1077 (setf (graphics-context-rgb-fg-color gc
) (make-color :red
0 :green
65535 :blue
65535))
1078 (draw-segments gdk-window gc
(list (make-segment :x1
35 :y1
35 :x2
55 :y2
35)
1079 (make-segment :x1
65 :y1
35 :x2
43 :y2
17)))
1080 (setf (graphics-context-rgb-fg-color gc
) (make-color :red
65535 :green
0 :blue
65535)
1081 (graphics-context-rgb-bg-color gc
) (make-color :red
32767 :green
0 :blue
32767))
1082 (draw-arc gdk-window gc nil
70 30 75 50 (* 64 75) (* 64 200))
1083 (draw-polygon gdk-window gc nil
(list (make-point :x
20 :y
40)
1084 (make-point :x
30 :y
50)
1085 (make-point :x
40 :y
70)
1086 (make-point :x
30 :y
80)
1087 (make-point :x
10 :y
55)))
1088 (setf (graphics-context-rgb-fg-color gc
) (make-color :red
16384 :green
16384 :blue
65535))
1089 (draw-trapezoids gdk-window gc
(list (make-trapezoid :y1
50.0d0
:y2
70.0d0
1090 :x11
30.0d0
:x12
45.0d0
1091 :x21
70.0d0
:x22
50.0d0
))))))
1094 "Test various gdk primitives"
1096 (let ((window (make-instance 'gtk-window
:type
:toplevel
:app-paintable t
)))
1097 (g-signal-connect window
"destroy" (lambda (widget)
1098 (declare (ignore widget
))
1100 (g-signal-connect window
"destroy" (lambda (widget)
1101 (declare (ignore widget
))
1103 (g-signal-connect window
"expose-event"
1104 (lambda (widget event
)
1105 (declare (ignore widget event
))
1106 (test-gdk-expose (widget-window window
))))
1107 (g-signal-connect window
"configure-event"
1108 (lambda (widget event
)
1109 (declare (ignore widget event
))
1110 (widget-queue-draw window
)))
1111 (widget-show window
)
1112 (push :pointer-motion-mask
(gdk-window-events (widget-window window
))))))