chiark / gitweb /
Changed arguments to SPIN-BUTTON-SPIN
[clg] / gdk / gdkevents.lisp
CommitLineData
5d462688 1;; Common Lisp bindings for GTK+ v2.0
2;; Copyright (C) 1999-2001 Espen S. Johnsen <esj@stud.cs.uit.no>
3;;
4;; This library is free software; you can redistribute it and/or
5;; modify it under the terms of the GNU Lesser General Public
6;; License as published by the Free Software Foundation; either
7;; version 2 of the License, or (at your option) any later version.
8;;
9;; This library is distributed in the hope that it will be useful,
10;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12;; Lesser General Public License for more details.
13;;
14;; You should have received a copy of the GNU Lesser General Public
15;; License along with this library; if not, write to the Free Software
16;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
c07660b3 18;; $Id: gdkevents.lisp,v 1.6 2004-12-20 00:09:57 espen Exp $
5d462688 19
20(in-package "GDK")
21
22
23(defvar *event-classes* (make-hash-table))
24
5d462688 25
26;;;; Metaclass for event classes
27
28(eval-when (:compile-toplevel :load-toplevel :execute)
9adccb27 29 (defclass event-class (boxed-class)
e2696f46 30 ((event-type :reader event-class-type)))
5d462688 31
9adccb27 32 (defmethod validate-superclass ((class event-class) (super standard-class))
c07660b3 33 ;(subtypep (class-name super) 'event)
34 t))
9adccb27 35
36
37(defmethod shared-initialize ((class event-class) names &key name type)
38 (call-next-method)
39 (setf (slot-value class 'event-type) (first type))
40 (setf (gethash (first type) *event-classes*) class)
41 (let ((class-name (or name (class-name class))))
42 (register-type class-name 'event)))
e2696f46 43
9adccb27 44(let ((reader (reader-function 'event-type)))
45 (defun %event-class (location)
46 (gethash (funcall reader location 0) *event-classes*)))
5d462688 47
9adccb27 48(defmethod ensure-proxy-instance ((class event-class) location)
49 (declare (ignore class))
50 (let ((class (%event-class location)))
51 (make-instance class :location location)))
5d462688 52
53
54;;;;
55
c07660b3 56(eval-when (:compile-toplevel :load-toplevel :execute)
57 (defclass event (boxed)
58 ((%type
59 :allocation :alien
60 :type event-type)
61 (window
62 :allocation :alien
63 :accessor event-window
64 :initarg :window
65 :type window)
66 (send-event
67 :allocation :alien
68 :accessor event-send-event
69 :initarg :send-event
70 :type (boolean 8)))
71 (:metaclass event-class)))
72
73
74(defmethod initialize-instance ((event event) &rest initargs)
75 (declare (ignore initargs))
76 (call-next-method)
77 (setf (slot-value event '%type) (event-class-type (class-of event))))
78
79
5d462688 80(defclass timed-event (event)
81 ((time
82 :allocation :alien
83 :accessor event-time
84 :initarg :time
85 :type (unsigned 32)))
9adccb27 86 (:metaclass event-class))
5d462688 87
88(defclass delete-event (event)
89 ()
90 (:metaclass event-class)
91 (:type :delete))
92
9adccb27 93
5d462688 94(defclass destroy-event (event)
95 ()
96 (:metaclass event-class)
97 (:type :destroy))
98
99(defclass expose-event (event)
100 ((x
101 :allocation :alien
102 :accessor event-x
103 :initarg :x
104 :type int)
105 (y
106 :allocation :alien
107 :accessor event-y
108 :initarg :y
109 :type int)
110 (width
111 :allocation :alien
112 :accessor event-width
113 :initarg :width
114 :type int)
115 (height
116 :allocation :alien
117 :accessor event-height
118 :initarg :height
119 :type int)
c07660b3 120 (region
121 :allocation :alien
122 :accessor event-region
123 :initarg :region
124 :type pointer)
5d462688 125 (count
126 :allocation :alien
127 :accessor event-count
128 :initarg :count
129 :type int))
130 (:metaclass event-class)
131 (:type :expose))
132
c07660b3 133(defclass input-event (timed-event)
5d462688 134 ((x
135 :allocation :alien
136 :accessor event-x
137 :initarg :x
138 :type double-float)
139 (y
140 :allocation :alien
141 :accessor event-y
142 :initarg :y
143 :type double-float)
c07660b3 144 (axes
145 :allocation :alien
146 :accessor event-axes
147 :initarg :axes
148 :type pointer) ;double-float)
5d462688 149 (state
150 :allocation :alien
5d462688 151 :accessor event-state
152 :initarg :state
c07660b3 153 :type modifier-type))
154 (:metaclass event-class))
155
156
157(defclass motion-notify-event (input-event)
158 ((is-hint
5d462688 159 :allocation :alien
160 :accessor event-is-hint
161 :initarg :is-hint
162 :type (signed 16) ; should it be (boolean 16)?
163 )
164 (device
165 :allocation :alien
166 :offset 2
167 :accessor event-device
168 :initarg :device
169 :type device)
170 (root-x
171 :allocation :alien
172 :accessor event-root-x
173 :initarg :root-x
174 :type double-float)
175 (root-y
176 :allocation :alien
177 :accessor event-root-y
178 :initarg :root-y
179 :type double-float))
180 (:metaclass event-class)
181 (:type :motion-notify))
182
c07660b3 183(defclass button-event (input-event)
184 ((button
5d462688 185 :allocation :alien
186 :accessor event-button
187 :initarg :button
188 :type unsigned-int)
189 (device
190 :allocation :alien
191 :accessor event-device
192 :initarg :device
193 :type device)
194 (root-x
195 :allocation :alien
196 :accessor event-root-x
197 :initarg :root-x
198 :type double-float)
199 (root-y
200 :allocation :alien
201 :accessor event-root-y
202 :initarg :root-y
203 :type double-float))
c07660b3 204 (:metaclass event-class))
205
206(defclass button-press-event (button-event)
207 ()
5d462688 208 (:metaclass event-class)
209 (:type :button-press))
210
211(defclass 2-button-press-event (button-press-event)
212 ()
213 (:metaclass event-class)
214 (:type :2button-press))
215
216(defclass 3-button-press-event (button-press-event)
217 ()
218 (:metaclass event-class)
219 (:type :3button-press))
220
c07660b3 221(defclass button-release-event (button-event)
5d462688 222 ()
223 (:metaclass event-class)
224 (:type :button-release))
225
c07660b3 226
227(defclass key-event (timed-event)
228 ((state
229 :allocation :alien
230 :accessor event-state
231 :initarg :state
232 :type modifier-type)
233 (keyval
234 :allocation :alien
235 :accessor event-keyval
236 :initarg :keyval
237 :type unsigned-int)
238 (length
239 :allocation :alien
240 :accessor event-length
241 :initarg :length
242 :type unsigned-int)
243 (string
244 :allocation :alien
245 :accessor event-string
246 :initarg :string
247 :type string)
248 (hardware-keycode
249 :allocation :alien
250 :accessor event-hardware-keycode
251 :initarg :hardware-keycode
252 :type (unsigned 16))
253 (group
254 :allocation :alien
255 :accessor event-group
256 :initarg :group
257 :type (unsigned 8)))
258 (:metaclass event-class))
259
260(defclass key-press-event (key-event)
5d462688 261 ()
262 (:metaclass event-class)
263 (:type :key-press))
264
c07660b3 265(defclass key-release-event (key-event)
5d462688 266 ()
267 (:metaclass event-class)
268 (:type :key-release))
269
c07660b3 270
271(defclass crossing-event (event)
272 ((subwindow
273 :allocation :alien
274 :accessor event-subwindow
275 :initarg :subwindow
276 :type window)
277 (time
278 :allocation :alien
279 :accessor event-time
280 :initarg :time
281 :type (unsigned 32))
282 (x
283 :allocation :alien
284 :accessor event-x
285 :initarg :x
286 :type double-float)
287 (y
288 :allocation :alien
289 :accessor event-y
290 :initarg :y
291 :type double-float)
292 (root-x
293 :allocation :alien
294 :accessor event-root-x
295 :initarg :root-x
296 :type double-float)
297 (root-y
298 :allocation :alien
299 :accessor event-root-y
300 :initarg :root-y
301 :type double-float)
302 (mode
303 :allocation :alien
304 :accessor event-mode
305 :initarg :mode
306 :type crossing-mode)
307 (detail
308 :allocation :alien
309 :accessor event-detail
310 :initarg :detail
311 :type notify-type)
312 (focus
313 :allocation :alien
314 :accessor event-focus
315 :initarg :focus
316 :type boolean)
317 (state
318 :allocation :alien
319 :accessor event-state
320 :initarg :state
321 :type unsigned-int))
322 (:metaclass event-class))
323
324
325(defclass enter-notify-event (crossing-event)
5d462688 326 ()
327 (:metaclass event-class)
328 (:type :enter-notify))
329
c07660b3 330(defclass leave-notify-event (crossing-event)
5d462688 331 ()
332 (:metaclass event-class)
333 (:type :leave-notify))
334
335(defclass focus-change-event (event)
c07660b3 336 ((in
337 :allocation :alien
338 :accessor event-in
339 :initarg :in
340 :type (boolean 16)))
5d462688 341 (:metaclass event-class)
342 (:type :focus-change))
343
344(defclass configure-event (event)
345 ((x
346 :allocation :alien
347 :accessor event-x
348 :initarg :x
349 :type int)
350 (y
351 :allocation :alien
352 :accessor event-y
353 :initarg :y
354 :type int)
355 (width
356 :allocation :alien
357 :accessor event-width
358 :initarg :width
359 :type int)
360 (height
361 :allocation :alien
362 :accessor event-height
363 :initarg :height
364 :type int))
365 (:metaclass event-class)
366 (:type :configure))
367
368(defclass map-event (event)
369 ()
370 (:metaclass event-class)
371 (:type :map))
372
373(defclass unmap-event (event)
374 ()
375 (:metaclass event-class)
376 (:type :unmap))
377
378(defclass property-notify-event (event)
379 ()
380 (:metaclass event-class)
381 (:type :property-notify))
382
383(defclass selection-clear-event (event)
384 ()
385 (:metaclass event-class)
386 (:type :selection-clear))
387
388(defclass selection-request-event (event)
389 ()
390 (:metaclass event-class)
391 (:type :selection-request))
392
393(defclass selection-notify-event (event)
394 ()
395 (:metaclass event-class)
396 (:type :selection-notify))
397
c07660b3 398(defclass dnd-event (event)
399 ((context
400 :allocation :alien
401 :accessor event-contex
402 :initarg :context
403 :type drag-context)
404 (time
405 :allocation :alien
406 :accessor event-time
407 :initarg :time
408 :type (unsigned 32))
409 (x-root
410 :allocation :alien
411 :accessor event-x-root
412 :initarg :x-root
413 :type short)
414 (y-root
415 :allocation :alien
416 :accessor event-y-root
417 :initarg :y-root
418 :type short))
419 (:metaclass event-class))
420
421(defclass drag-enter-event (dnd-event)
5d462688 422 ()
423 (:metaclass event-class)
424 (:type :drag-enter))
425
c07660b3 426(defclass drag-leave-event (dnd-event)
5d462688 427 ()
428 (:metaclass event-class)
429 (:type :drag-leave))
430
c07660b3 431(defclass drag-motion-event (dnd-event)
5d462688 432 ()
433 (:metaclass event-class)
434 (:type :drag-motion))
435
c07660b3 436(defclass drag-status-event (dnd-event)
5d462688 437 ()
438 (:metaclass event-class)
439 (:type :drag-status))
440
c07660b3 441(defclass drot-start-event (dnd-event)
5d462688 442 ()
443 (:metaclass event-class)
c07660b3 444 (:type :drop-start))
5d462688 445
c07660b3 446(defclass drop-finished-event (dnd-event)
5d462688 447 ()
448 (:metaclass event-class)
c07660b3 449 (:type :drop-finished))
5d462688 450
451(defclass client-event (event)
452 ()
453 (:metaclass event-class)
c07660b3 454 (:type :client-event))
5d462688 455
456(defclass visibility-notify-event (event)
457 ((state
458 :allocation :alien
459 :accessor event-state
460 :initarg :state
461 :type visibility-state))
462 (:metaclass event-class)
463 (:type :visibility-notify))
464
465(defclass no-expose-event (event)
466 ()
467 (:metaclass event-class)
468 (:type :no-expose))
469
470(defclass scroll-event (timed-event)
c07660b3 471 ((x
472 :allocation :alien
473 :accessor event-x
474 :initarg :x
475 :type double-float)
476 (y
477 :allocation :alien
478 :accessor event-y
479 :initarg :y
480 :type double-float)
481 (state
482 :allocation :alien
483 :accessor event-state
484 :initarg :state
485 :type modifier-type)
486 (direction
487 :allocation :alien
488 :accessor event-direction
489 :initarg :direction
490 :type scroll-direction)
491 (root-x
492 :allocation :alien
493 :accessor event-root-x
494 :initarg :root-x
495 :type double-float)
496 (root-y
497 :allocation :alien
498 :accessor event-root-y
499 :initarg :root-y
500 :type double-float))
5d462688 501 (:metaclass event-class)
502 (:type :scroll))
503
c07660b3 504(defclass setting-event (event)
505 ((action
506 :allocation :alien
507 :accessor event-action
508 :initarg :action
509 :type setting-action)
510 (name
511 :allocation :alien
512 :accessor event-name
513 :initarg :name
514 :type string))
5d462688 515 (:metaclass event-class)
516 (:type :setting))
c07660b3 517
518(defclass proximity-event (timed-event)
519 ((device
520 :allocation :alien
521 :accessor event-device
522 :initarg :device
523 :type device))
524 (:metaclass event-class))
525
526(defclass proximity-in-event (proximity-event)
527 ()
528 (:metaclass event-class)
529 (:type :proximity-in))
530
531(defclass proximity-out-event (proximity-event)
532 ()
533 (:metaclass event-class)
534 (:type :proximity-out))
535
536(defclass window-state-event (event)
537 ((change-mask
538 :allocation :alien
539 :accessor event-change-mask
540 :initarg :change-mask
541 :type window-state)
542 (new-window-state
543 :allocation :alien
544 :accessor event-new-window-state
545 :initarg :new-window-state
546 :type window-state))
547 (:metaclass event-class)
548 (:type :window-state))
549
550(defclass owner-change-event (event)
551 ()
552 (:metaclass event-class)
553 (:type :owner-change))
554