1 ! Copyright (C) 2005, 2006 Eduardo Cavazos and Slava Pestov
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays classes.struct combinators kernel
4 math.order namespaces x11 x11.xlib ;
7 GENERIC: expose-event ( event window -- )
9 GENERIC: configure-event ( event window -- )
11 GENERIC: button-down-event ( event window -- )
13 GENERIC: button-up-event ( event window -- )
15 GENERIC: enter-event ( event window -- )
17 GENERIC: leave-event ( event window -- )
19 GENERIC: wheel-event ( event window -- )
21 GENERIC: motion-event ( event window -- )
23 GENERIC: key-down-event ( event window -- )
25 GENERIC: key-up-event ( event window -- )
27 GENERIC: focus-in-event ( event window -- )
29 GENERIC: focus-out-event ( event window -- )
31 GENERIC: selection-notify-event ( event window -- )
33 GENERIC: selection-request-event ( event window -- )
35 GENERIC: client-event ( event window -- )
37 : next-event ( -- event )
38 dpy get XEvent <struct> [ XNextEvent drop ] keep ;
40 : mask-event ( mask -- event )
41 [ dpy get ] dip XEvent <struct> [ XMaskEvent drop ] keep ;
43 : events-queued ( mode -- n ) [ dpy get ] dip XEventsQueued ;
45 : wheel? ( event -- ? ) button>> 4 7 between? ;
47 : button-down-event$ ( event window -- )
48 over wheel? [ wheel-event ] [ button-down-event ] if ;
50 : button-up-event$ ( event window -- )
51 over wheel? [ 2drop ] [ button-up-event ] if ;
53 : handle-event ( event window -- )
54 swap dup XAnyEvent>> type>> {
55 { Expose [ XExposeEvent>> swap expose-event ] }
56 { ConfigureNotify [ XConfigureEvent>> swap configure-event ] }
57 { ButtonPress [ XButtonEvent>> swap button-down-event$ ] }
58 { ButtonRelease [ XButtonEvent>> swap button-up-event$ ] }
59 { EnterNotify [ XCrossingEvent>> swap enter-event ] }
60 { LeaveNotify [ XCrossingEvent>> swap leave-event ] }
61 { MotionNotify [ XMotionEvent>> swap motion-event ] }
62 { KeyPress [ XKeyEvent>> swap key-down-event ] }
63 { KeyRelease [ XKeyEvent>> swap key-up-event ] }
64 { FocusIn [ XFocusChangeEvent>> swap focus-in-event ] }
65 { FocusOut [ XFocusChangeEvent>> swap focus-out-event ] }
66 { SelectionNotify [ XSelectionEvent>> swap selection-notify-event ] }
67 { SelectionRequest [ XSelectionRequestEvent>> swap selection-request-event ] }
68 { ClientMessage [ XClientMessageEvent>> swap client-event ] }
72 : event-loc ( event -- loc )
73 [ x>> ] [ y>> ] bi 2array ;
75 : event-dim ( event -- dim )
76 [ width>> ] [ height>> ] bi 2array ;
78 : close-box? ( event -- ? )
79 [ message_type>> "WM_PROTOCOLS" x-atom = ]
80 [ data0>> "WM_DELETE_WINDOW" x-atom = ]