2006-03-21 23:32:02 -05:00
|
|
|
! Copyright (C) 2005, 2006 Eduardo Cavazos and Slava Pestov
|
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2006-03-20 00:05:04 -05:00
|
|
|
IN: x11
|
2006-03-21 15:17:49 -05:00
|
|
|
USING: arrays errors freetype gadgets gadgets-launchpad
|
2006-03-20 00:05:04 -05:00
|
|
|
gadgets-layouts gadgets-listener hashtables kernel
|
|
|
|
|
kernel-internals math namespaces opengl sequences x11 ;
|
|
|
|
|
|
2006-03-21 23:32:02 -05:00
|
|
|
! In the X11 backend, world-handle is a pair { window context }.
|
|
|
|
|
! The window is an X11 window ID, and the context is a
|
|
|
|
|
! GLX context pointer.
|
|
|
|
|
|
2006-03-21 18:19:06 -05:00
|
|
|
M: world expose-event ( event world -- ) nip draw-world ;
|
2006-03-20 00:05:04 -05:00
|
|
|
|
2006-03-21 18:19:06 -05:00
|
|
|
M: world resize-event ( event world -- )
|
2006-03-20 00:05:04 -05:00
|
|
|
>r
|
|
|
|
|
dup XConfigureEvent-width swap XConfigureEvent-height 0
|
|
|
|
|
3array
|
|
|
|
|
r> set-gadget-dim ;
|
|
|
|
|
|
2006-03-21 18:19:06 -05:00
|
|
|
M: world button-down-event ( event world -- )
|
|
|
|
|
drop XButtonEvent-button send-button-down ;
|
|
|
|
|
|
|
|
|
|
M: world button-up-event ( event world -- )
|
|
|
|
|
drop XButtonEvent-button send-button-up ;
|
|
|
|
|
|
|
|
|
|
M: world motion-event ( event world -- )
|
|
|
|
|
>r dup XMotionEvent-x swap XMotionEvent-y 0 3array r>
|
|
|
|
|
move-hand ;
|
|
|
|
|
|
|
|
|
|
M: world key-event ( event world -- ) 2drop ;
|
|
|
|
|
|
2006-03-21 23:32:02 -05:00
|
|
|
: close-box? ( event -- )
|
|
|
|
|
dup XClientMessageEvent-type "WM_PROTOCOLS" x-atom =
|
|
|
|
|
swap XClientMessageEvent-data "WM_DELETE_WINDOW" x-atom =
|
|
|
|
|
and ;
|
|
|
|
|
|
|
|
|
|
M: world client-event ( event world -- )
|
|
|
|
|
swap close-box? [
|
|
|
|
|
dup close-world world-handle destroy-window*
|
|
|
|
|
] [
|
|
|
|
|
drop
|
|
|
|
|
] if ;
|
|
|
|
|
|
2006-03-20 00:05:04 -05:00
|
|
|
: gadget-window ( world -- window )
|
|
|
|
|
dup rect-dim first2 choose-visual [
|
2006-03-21 23:32:02 -05:00
|
|
|
create-window 2dup map-window*
|
2006-03-20 00:05:04 -05:00
|
|
|
] keep create-context 2array swap set-world-handle ;
|
|
|
|
|
|
|
|
|
|
IN: gadgets
|
|
|
|
|
|
2006-03-21 17:15:53 -05:00
|
|
|
: draw-handle ( handle -- ) first windows get hash draw-world ;
|
2006-03-20 00:05:04 -05:00
|
|
|
|
|
|
|
|
: in-window ( gadget status dim title -- )
|
|
|
|
|
>r <world> r> drop gadget-window ;
|
|
|
|
|
|
2006-03-21 15:17:49 -05:00
|
|
|
: select-gl-context ( handle -- )
|
2006-03-21 17:15:53 -05:00
|
|
|
dpy get swap first2 glXMakeCurrent
|
2006-03-21 15:17:49 -05:00
|
|
|
[ "Failed to set current GLX context" throw ] unless ;
|
|
|
|
|
|
|
|
|
|
: flush-gl-context ( handle -- )
|
|
|
|
|
dpy get swap first glXSwapBuffers ;
|
|
|
|
|
|
2006-03-20 00:05:04 -05:00
|
|
|
IN: shells
|
|
|
|
|
|
|
|
|
|
: ui ( -- )
|
|
|
|
|
[
|
|
|
|
|
f [
|
|
|
|
|
launchpad-window
|
|
|
|
|
listener-window
|
|
|
|
|
event-loop
|
|
|
|
|
] with-x
|
|
|
|
|
] with-freetype ;
|
|
|
|
|
|
|
|
|
|
IN: kernel
|
|
|
|
|
|
2006-03-21 18:19:06 -05:00
|
|
|
! : default-shell "DISPLAY" os-env empty? "tty" "ui" ? ;
|