]> gitweb.factorcode.org Git - factor.git/blob - basis/x11/windows/windows.factor
Fix conflict in images vocab
[factor.git] / basis / x11 / windows / windows.factor
1 ! Copyright (C) 2005, 2006 Eduardo Cavazos and Slava Pestov
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types hashtables kernel math math.vectors
4 math.bitwise namespaces sequences x11.xlib x11.constants x11.glx
5 arrays fry ;
6 IN: x11.windows
7
8 : create-window-mask ( -- n )
9     { CWBackPixel CWBorderPixel CWColormap CWEventMask } flags ;
10
11 : create-colormap ( visinfo -- colormap )
12     dpy get root get rot XVisualInfo-visual AllocNone
13     XCreateColormap ;
14
15 : event-mask ( -- n )
16     {
17         ExposureMask
18         StructureNotifyMask
19         KeyPressMask
20         KeyReleaseMask
21         ButtonPressMask
22         ButtonReleaseMask
23         PointerMotionMask
24         FocusChangeMask
25         EnterWindowMask
26         LeaveWindowMask
27         PropertyChangeMask
28     } flags ;
29
30 : window-attributes ( visinfo -- attributes )
31     "XSetWindowAttributes" <c-object>
32     0 over set-XSetWindowAttributes-background_pixel
33     0 over set-XSetWindowAttributes-border_pixel
34     [ [ create-colormap ] dip set-XSetWindowAttributes-colormap ] keep
35     event-mask over set-XSetWindowAttributes-event_mask ;
36
37 : set-size-hints ( window -- )
38     "XSizeHints" <c-object>
39     USPosition over set-XSizeHints-flags
40     [ dpy get ] 2dip XSetWMNormalHints ;
41
42 : auto-position ( window loc -- )
43     { 0 0 } = [ drop ] [ set-size-hints ] if ;
44
45 : >xy ( pair -- x y ) first2 [ >integer ] bi@ ;
46
47 : create-window ( loc dim visinfo -- window )
48     pick [
49         [ [ [ dpy get root get ] dip >xy ] dip { 1 1 } vmax >xy 0 ] dip
50         [ XVisualInfo-depth InputOutput ] keep
51         [ XVisualInfo-visual create-window-mask ] keep
52         window-attributes XCreateWindow
53         dup
54     ] dip auto-position ;
55
56 : glx-window ( loc dim -- window glx )
57     GLX_DOUBLEBUFFER 1array choose-visual
58     [ create-window ] keep
59     [ create-glx ] keep
60     XFree ;
61
62 : create-pixmap ( dim visual -- pixmap )
63     [ [ { 0 0 } swap ] dip create-window ] [
64         drop [ dpy get ] 2dip first2 24 XCreatePixmap
65         [ "Failed to create offscreen pixmap" throw ] unless*
66     ] 2bi ;
67
68 : (create-glx-pixmap) ( pixmap visual -- pixmap glx-pixmap )
69     [ drop ] [
70         [ dpy get ] 2dip swap glXCreateGLXPixmap
71         [ "Failed to create offscreen GLXPixmap" throw ] unless*
72     ] 2bi ;
73
74 : create-glx-pixmap ( dim visual -- pixmap glx-pixmap )
75     [ create-pixmap ] [ (create-glx-pixmap) ] bi ;
76
77 : glx-pixmap ( dim -- glx pixmap glx-pixmap )
78     { } choose-visual
79     [ nip create-glx ] [ create-glx-pixmap ] [ nip XFree ] 2tri ;
80
81 : destroy-window ( win -- )
82     dpy get swap XDestroyWindow drop ;
83
84 : set-closable ( win -- )
85     dpy get swap "WM_DELETE_WINDOW" x-atom <Atom> 1
86     XSetWMProtocols drop ;
87
88 : map-window ( win -- ) dpy get swap XMapWindow drop ;
89
90 : unmap-window ( win -- ) dpy get swap XUnmapWindow drop ;
91
92 : pixmap-bits ( dim pixmap -- alien )
93     swap first2 '[ dpy get _ 0 0 _ _ AllPlanes ZPixmap XGetImage ] call
94     [ XImage-pixels ] [ XDestroyImage drop ] bi ;