factor/basis/x11/events/events.factor

86 lines
2.6 KiB
Factor
Raw Normal View History

2007-09-20 18:09:08 -04:00
! Copyright (C) 2005, 2006 Eduardo Cavazos and Slava Pestov
! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types arrays hashtables io kernel math
2008-04-26 12:03:41 -04:00
math.order namespaces prettyprint sequences strings combinators
x11 x11.xlib ;
2007-09-20 18:09:08 -04:00
IN: x11.events
GENERIC: expose-event ( event window -- )
GENERIC: configure-event ( event window -- )
GENERIC: button-down-event ( event window -- )
GENERIC: button-up-event ( event window -- )
GENERIC: enter-event ( event window -- )
GENERIC: leave-event ( event window -- )
GENERIC: wheel-event ( event window -- )
GENERIC: motion-event ( event window -- )
GENERIC: key-down-event ( event window -- )
GENERIC: key-up-event ( event window -- )
GENERIC: focus-in-event ( event window -- )
GENERIC: focus-out-event ( event window -- )
GENERIC: selection-notify-event ( event window -- )
GENERIC: selection-request-event ( event window -- )
GENERIC: client-event ( event window -- )
: next-event ( -- event )
2008-12-15 21:34:57 -05:00
dpy get "XEvent" <c-object> [ XNextEvent drop ] keep ;
2007-09-20 18:09:08 -04:00
: mask-event ( mask -- event )
2008-12-15 21:34:57 -05:00
[ dpy get ] dip "XEvent" <c-object> [ XMaskEvent drop ] keep ;
2007-09-20 18:09:08 -04:00
2008-12-15 21:34:57 -05:00
: events-queued ( mode -- n ) [ dpy get ] dip XEventsQueued ;
2007-09-20 18:09:08 -04:00
2007-10-10 02:16:42 -04:00
: wheel? ( event -- ? ) XButtonEvent-button 4 7 between? ;
2007-09-20 18:09:08 -04:00
: button-down-event$ ( event window -- )
over wheel? [ wheel-event ] [ button-down-event ] if ;
: button-up-event$ ( event window -- )
over wheel? [ 2drop ] [ button-up-event ] if ;
: handle-event ( event window -- )
over XAnyEvent-type {
2008-04-11 13:58:50 -04:00
{ Expose [ expose-event ] }
{ ConfigureNotify [ configure-event ] }
{ ButtonPress [ button-down-event$ ] }
{ ButtonRelease [ button-up-event$ ] }
{ EnterNotify [ enter-event ] }
{ LeaveNotify [ leave-event ] }
{ MotionNotify [ motion-event ] }
{ KeyPress [ key-down-event ] }
{ KeyRelease [ key-up-event ] }
{ FocusIn [ focus-in-event ] }
{ FocusOut [ focus-out-event ] }
{ SelectionNotify [ selection-notify-event ] }
{ SelectionRequest [ selection-request-event ] }
{ ClientMessage [ client-event ] }
2008-04-11 13:57:43 -04:00
[ 3drop ]
} case ;
2007-09-20 18:09:08 -04:00
: configured-loc ( event -- dim )
2008-12-15 21:34:57 -05:00
[ XConfigureEvent-x ] [ XConfigureEvent-y ] bi 2array ;
2007-09-20 18:09:08 -04:00
: configured-dim ( event -- dim )
2008-12-15 21:34:57 -05:00
[ XConfigureEvent-width ] [ XConfigureEvent-height ] bi 2array ;
2007-09-20 18:09:08 -04:00
: mouse-event-loc ( event -- loc )
2008-12-15 21:34:57 -05:00
[ XButtonEvent-x ] [ XButtonEvent-y ] bi 2array ;
2007-09-20 18:09:08 -04:00
: close-box? ( event -- ? )
2008-12-15 21:34:57 -05:00
[ XClientMessageEvent-message_type "WM_PROTOCOLS" x-atom = ]
[ XClientMessageEvent-data0 "WM_DELETE_WINDOW" x-atom = ]
bi and ;