summaryrefslogtreecommitdiff
path: root/nvim/undo/%home%coast%Projects%cvox%window_x11.c
blob: a218b1f7fa88c8a05e704d035be8537447a05381 (plain)
ofshex dumpascii
0000 56 69 6d 9f 55 6e 44 6f e5 00 03 8e cd a1 49 9b 32 26 02 6d 70 46 9e e9 5d eb f6 f1 d1 fc 6b 96 Vim.UnDo......I.2&.mpF..].....k.
0020 fd 99 cf 63 79 ee 0a 53 b4 7e 79 00 00 00 96 00 00 00 1c 20 20 20 20 20 20 20 20 20 20 20 20 20 ...cy..S.~y.....................
0040 20 20 20 20 20 20 20 58 57 61 72 70 50 6f 69 00 00 00 74 00 00 00 1c 00 00 00 01 00 00 00 0a 00 .......XWarpPoi...t.............
0060 00 00 00 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 00 6a 63 47 7f 04 01 00 00 00 05 00 5f d0 ...................jcG........_.
0080 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 ................................
00a0 ff ff ff ff 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0200 00 00 6a 63 46 e1 04 01 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 96 00 ..jcF...........................
0220 00 00 15 23 69 6e 63 6c 75 64 65 20 22 70 6c 61 74 66 6f 72 6d 2e 68 22 00 00 00 15 23 69 6e 63 ...#include."platform.h"....#inc
0240 6c 75 64 65 20 3c 58 31 31 2f 58 6c 69 62 2e 68 3e 00 00 00 17 23 69 6e 63 6c 75 64 65 20 3c 58 lude.<X11/Xlib.h>....#include.<X
0260 31 31 2f 6b 65 79 73 79 6d 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 47 4c 2f 67 6c 78 11/keysym.h>....#include.<GL/glx
0280 2e 68 3e 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 47 4c 2f 67 6c 2e 68 3e 00 00 00 13 23 69 6e .h>....#include.<GL/gl.h>....#in
02a0 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 clude.<stdlib.h>....#include.<st
02c0 72 69 6e 67 2e 68 3e 00 00 00 00 00 00 00 10 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 00 ring.h>........typedef.struct.{.
02e0 00 00 11 20 20 20 20 44 69 73 70 6c 61 79 20 2a 64 70 79 3b 00 00 00 0f 20 20 20 20 57 69 6e 64 .......Display.*dpy;........Wind
0300 6f 77 20 77 69 6e 3b 00 00 00 13 20 20 20 20 47 4c 58 43 6f 6e 74 65 78 74 20 63 74 78 3b 00 00 ow.win;........GLXContext.ctx;..
0320 00 13 20 20 20 20 41 74 6f 6d 20 77 6d 5f 64 65 6c 65 74 65 3b 00 00 00 1b 20 20 20 20 69 6e 74 ......Atom.wm_delete;........int
0340 20 63 65 6e 74 65 72 5f 78 2c 20 63 65 6e 74 65 72 5f 79 3b 00 00 00 0f 20 20 20 20 69 6e 74 20 .center_x,.center_y;........int.
0360 77 61 72 70 65 64 3b 00 00 00 0d 7d 20 58 31 31 42 61 63 6b 65 6e 64 3b 00 00 00 00 00 00 00 25 warped;....}.X11Backend;.......%
0380 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 73 79 6d 5f 74 6f 5f 6b 65 79 28 4b 65 79 53 79 6d 20 static.int.keysym_to_key(KeySym.
03a0 6b 73 29 20 7b 00 00 00 11 20 20 20 20 73 77 69 74 63 68 20 28 6b 73 29 20 7b 00 00 00 2b 20 20 ks).{........switch.(ks).{...+..
03c0 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 77 3a 20 63 61 73 65 20 58 4b 5f 57 3a 20 72 65 74 75 ......case.XK_w:.case.XK_W:.retu
03e0 72 6e 20 4b 45 59 5f 57 3b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 61 3a 20 rn.KEY_W;...+........case.XK_a:.
0400 63 61 73 65 20 58 4b 5f 41 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 41 3b 00 00 00 2b 20 20 20 20 case.XK_A:.return.KEY_A;...+....
0420 20 20 20 20 63 61 73 65 20 58 4b 5f 73 3a 20 63 61 73 65 20 58 4b 5f 53 3a 20 72 65 74 75 72 6e ....case.XK_s:.case.XK_S:.return
0440 20 4b 45 59 5f 53 3b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 64 3a 20 63 61 .KEY_S;...+........case.XK_d:.ca
0460 73 65 20 58 4b 5f 44 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 44 3b 00 00 00 28 20 20 20 20 20 20 se.XK_D:.return.KEY_D;...(......
0480 20 20 63 61 73 65 20 58 4b 5f 73 70 61 63 65 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 53 50 41 43 ..case.XK_space:.return.KEY_SPAC
04a0 45 3b 00 00 00 27 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 45 73 63 61 70 65 3a 20 72 65 E;...'........case.XK_Escape:.re
04c0 74 75 72 6e 20 4b 45 59 5f 45 53 43 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b turn.KEY_ESC;............case.XK
04e0 5f 31 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 31 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 73 _1:.return.KEY_1;............cas
0500 65 20 58 4b 5f 32 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 32 3b 00 00 00 20 20 20 20 20 20 20 20 e.XK_2:.return.KEY_2;...........
0520 20 63 61 73 65 20 58 4b 5f 33 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 33 3b 00 00 00 1b 20 20 20 .case.XK_3:.return.KEY_3;.......
0540 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 72 65 74 75 72 6e 20 2d 31 3b 00 00 00 05 20 20 20 20 .....default:.return.-1;........
0560 7d 00 00 00 01 7d 00 00 00 00 00 00 00 45 69 6e 74 20 70 6c 61 74 66 6f 72 6d 5f 78 31 31 5f 69 }....}.......Eint.platform_x11_i
0580 6e 69 74 28 50 6c 61 74 66 6f 72 6d 20 2a 70 2c 20 69 6e 74 20 77 2c 20 69 6e 74 20 68 2c 20 63 nit(Platform.*p,.int.w,.int.h,.c
05a0 6f 6e 73 74 20 63 68 61 72 20 2a 74 69 74 6c 65 29 20 7b 00 00 00 32 20 20 20 20 58 31 31 42 61 onst.char.*title).{...2....X11Ba
05c0 63 6b 65 6e 64 20 2a 62 20 3d 20 63 61 6c 6c 6f 63 28 31 2c 20 73 69 7a 65 6f 66 28 58 31 31 42 ckend.*b.=.calloc(1,.sizeof(X11B
05e0 61 63 6b 65 6e 64 29 29 3b 00 00 00 13 20 20 20 20 70 2d 3e 62 61 63 6b 65 6e 64 20 3d 20 62 3b ackend));........p->backend.=.b;
0600 00 00 00 00 00 00 00 20 20 20 20 20 62 2d 3e 64 70 79 20 3d 20 58 4f 70 65 6e 44 69 73 70 6c 61 ............b->dpy.=.XOpenDispla
0620 79 28 4e 55 4c 4c 29 3b 00 00 00 27 20 20 20 20 69 66 20 28 21 62 2d 3e 64 70 79 29 20 7b 20 66 y(NULL);...'....if.(!b->dpy).{.f
0640 72 65 65 28 62 29 3b 20 72 65 74 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 27 20 20 20 20 69 ree(b);.return.0;.}.......'....i
0660 6e 74 20 73 63 72 65 65 6e 20 3d 20 44 65 66 61 75 6c 74 53 63 72 65 65 6e 28 62 2d 3e 64 70 79 nt.screen.=.DefaultScreen(b->dpy
0680 29 3b 00 00 00 4d 20 20 20 20 69 6e 74 20 61 74 74 72 69 62 73 5b 5d 20 3d 20 7b 20 47 4c 58 5f );...M....int.attribs[].=.{.GLX_
06a0 52 47 42 41 2c 20 47 4c 58 5f 44 45 50 54 48 5f 53 49 5a 45 2c 20 32 34 2c 20 47 4c 58 5f 44 4f RGBA,.GLX_DEPTH_SIZE,.24,.GLX_DO
06c0 55 42 4c 45 42 55 46 46 45 52 2c 20 4e 6f 6e 65 20 7d 3b 00 00 00 3f 20 20 20 20 58 56 69 73 75 UBLEBUFFER,.None.};...?....XVisu
06e0 61 6c 49 6e 66 6f 20 2a 76 69 20 3d 20 67 6c 58 43 68 6f 6f 73 65 56 69 73 75 61 6c 28 62 2d 3e alInfo.*vi.=.glXChooseVisual(b->
0700 64 70 79 2c 20 73 63 72 65 65 6e 2c 20 61 74 74 72 69 62 73 29 3b 00 00 00 3a 20 20 20 20 69 66 dpy,.screen,.attribs);...:....if
0720 20 28 21 76 69 29 20 7b 20 58 43 6c 6f 73 65 44 69 73 70 6c 61 79 28 62 2d 3e 64 70 79 29 3b 20 .(!vi).{.XCloseDisplay(b->dpy);.
0740 66 72 65 65 28 62 29 3b 20 72 65 74 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 2d 20 20 20 20 free(b);.return.0;.}.......-....
0760 57 69 6e 64 6f 77 20 72 6f 6f 74 20 3d 20 52 6f 6f 74 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c Window.root.=.RootWindow(b->dpy,
0780 20 73 63 72 65 65 6e 29 3b 00 00 00 49 20 20 20 20 43 6f 6c 6f 72 6d 61 70 20 63 6d 61 70 20 3d .screen);...I....Colormap.cmap.=
07a0 20 58 43 72 65 61 74 65 43 6f 6c 6f 72 6d 61 70 28 62 2d 3e 64 70 79 2c 20 72 6f 6f 74 2c 20 76 .XCreateColormap(b->dpy,.root,.v
07c0 69 2d 3e 76 69 73 75 61 6c 2c 20 41 6c 6c 6f 63 4e 6f 6e 65 29 3b 00 00 00 1d 20 20 20 20 58 53 i->visual,.AllocNone);........XS
07e0 65 74 57 69 6e 64 6f 77 41 74 74 72 69 62 75 74 65 73 20 73 77 61 3b 00 00 00 18 20 20 20 20 73 etWindowAttributes.swa;........s
0800 77 61 2e 63 6f 6c 6f 72 6d 61 70 20 3d 20 63 6d 61 70 3b 00 00 00 46 20 20 20 20 73 77 61 2e 65 wa.colormap.=.cmap;...F....swa.e
0820 76 65 6e 74 5f 6d 61 73 6b 20 3d 20 4b 65 79 50 72 65 73 73 4d 61 73 6b 20 7c 20 4b 65 79 52 65 vent_mask.=.KeyPressMask.|.KeyRe
0840 6c 65 61 73 65 4d 61 73 6b 20 7c 20 42 75 74 74 6f 6e 50 72 65 73 73 4d 61 73 6b 20 7c 00 00 00 leaseMask.|.ButtonPressMask.|...
0860 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 74 6f 6e 52 65 6c R......................ButtonRel
0880 65 61 73 65 4d 61 73 6b 20 7c 20 50 6f 69 6e 74 65 72 4d 6f 74 69 6f 6e 4d 61 73 6b 20 7c 20 53 easeMask.|.PointerMotionMask.|.S
08a0 74 72 75 63 74 75 72 65 4e 6f 74 69 66 79 4d 61 73 6b 3b 00 00 00 00 00 00 00 56 20 20 20 20 62 tructureNotifyMask;.......V....b
08c0 2d 3e 77 69 6e 20 3d 20 58 43 72 65 61 74 65 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 72 6f ->win.=.XCreateWindow(b->dpy,.ro
08e0 6f 74 2c 20 30 2c 20 30 2c 20 28 75 6e 73 69 67 6e 65 64 29 77 2c 20 28 75 6e 73 69 67 6e 65 64 ot,.0,.0,.(unsigned)w,.(unsigned
0900 29 68 2c 20 30 2c 20 76 69 2d 3e 64 65 70 74 68 2c 00 00 00 55 20 20 20 20 20 20 20 20 20 20 20 )h,.0,.vi->depth,...U...........
0920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 70 75 74 4f 75 74 70 75 74 2c 20 76 69 .................InputOutput,.vi
0940 2d 3e 76 69 73 75 61 6c 2c 20 43 57 43 6f 6c 6f 72 6d 61 70 20 7c 20 43 57 45 76 65 6e 74 4d 61 ->visual,.CWColormap.|.CWEventMa
0960 73 6b 2c 20 26 73 77 61 29 3b 00 00 00 26 20 20 20 20 58 53 74 6f 72 65 4e 61 6d 65 28 62 2d 3e sk,.&swa);...&....XStoreName(b->
0980 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 74 69 74 6c 65 29 3b 00 00 00 42 20 20 20 20 62 2d 3e 77 dpy,.b->win,.title);...B....b->w
09a0 6d 5f 64 65 6c 65 74 65 20 3d 20 58 49 6e 74 65 72 6e 41 74 6f 6d 28 62 2d 3e 64 70 79 2c 20 22 m_delete.=.XInternAtom(b->dpy,."
09c0 57 4d 5f 44 45 4c 45 54 45 5f 57 49 4e 44 4f 57 22 2c 20 46 61 6c 73 65 29 3b 00 00 00 36 20 20 WM_DELETE_WINDOW",.False);...6..
09e0 20 20 58 53 65 74 57 4d 50 72 6f 74 6f 63 6f 6c 73 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e ..XSetWMProtocols(b->dpy,.b->win
0a00 2c 20 26 62 2d 3e 77 6d 5f 64 65 6c 65 74 65 2c 20 31 29 3b 00 00 00 1f 20 20 20 20 58 4d 61 70 ,.&b->wm_delete,.1);........XMap
0a20 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 29 3b 00 00 00 00 00 00 00 36 20 Window(b->dpy,.b->win);.......6.
0a40 20 20 20 62 2d 3e 63 74 78 20 3d 20 67 6c 58 43 72 65 61 74 65 43 6f 6e 74 65 78 74 28 62 2d 3e ...b->ctx.=.glXCreateContext(b->
0a60 64 70 79 2c 20 76 69 2c 20 4e 55 4c 4c 2c 20 54 72 75 65 29 3b 00 00 00 2b 20 20 20 20 67 6c 58 dpy,.vi,.NULL,.True);...+....glX
0a80 4d 61 6b 65 43 75 72 72 65 6e 74 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 62 2d 3e 63 MakeCurrent(b->dpy,.b->win,.b->c
0aa0 74 78 29 3b 00 00 00 0e 20 20 20 20 58 46 72 65 65 28 76 69 29 3b 00 00 00 00 00 00 00 17 20 20 tx);........XFree(vi);..........
0ac0 20 20 63 68 61 72 20 64 61 74 61 5b 38 5d 20 3d 20 7b 30 7d 3b 00 00 00 45 20 20 20 20 50 69 78 ..char.data[8].=.{0};...E....Pix
0ae0 6d 61 70 20 62 6c 61 6e 6b 20 3d 20 58 43 72 65 61 74 65 42 69 74 6d 61 70 46 72 6f 6d 44 61 74 map.blank.=.XCreateBitmapFromDat
0b00 61 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 64 61 74 61 2c 20 31 2c 20 31 29 3b 00 00 a(b->dpy,.b->win,.data,.1,.1);..
0b20 00 11 20 20 20 20 58 43 6f 6c 6f 72 20 64 75 6d 6d 79 3b 00 00 00 25 20 20 20 20 6d 65 6d 73 65 ......XColor.dummy;...%....memse
0b40 74 28 26 64 75 6d 6d 79 2c 20 30 2c 20 73 69 7a 65 6f 66 28 64 75 6d 6d 79 29 29 3b 00 00 00 54 t(&dummy,.0,.sizeof(dummy));...T
0b60 20 20 20 20 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 58 43 72 65 61 74 65 50 69 78 6d 61 ....Cursor.cursor.=.XCreatePixma
0b80 70 43 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c 20 62 6c 61 6e 6b 2c 20 62 6c 61 6e 6b 2c 20 26 64 pCursor(b->dpy,.blank,.blank,.&d
0ba0 75 6d 6d 79 2c 20 26 64 75 6d 6d 79 2c 20 30 2c 20 30 29 3b 00 00 00 2a 20 20 20 20 58 44 65 66 ummy,.&dummy,.0,.0);...*....XDef
0bc0 69 6e 65 43 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 63 75 72 73 6f 72 ineCursor(b->dpy,.b->win,.cursor
0be0 29 3b 00 00 00 1f 20 20 20 20 58 46 72 65 65 50 69 78 6d 61 70 28 62 2d 3e 64 70 79 2c 20 62 6c );........XFreePixmap(b->dpy,.bl
0c00 61 6e 6b 29 3b 00 00 00 20 20 20 20 20 58 46 72 65 65 43 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c ank);........XFreeCursor(b->dpy,
0c20 20 63 75 72 73 6f 72 29 3b 00 00 00 00 00 00 00 19 20 20 20 20 58 53 79 6e 63 28 62 2d 3e 64 70 .cursor);............XSync(b->dp
0c40 79 2c 20 46 61 6c 73 65 29 3b 00 00 00 47 20 20 20 20 58 47 72 61 62 50 6f 69 6e 74 65 72 28 62 y,.False);...G....XGrabPointer(b
0c60 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 54 72 75 65 2c 20 30 2c 20 47 72 61 62 4d 6f 64 65 ->dpy,.b->win,.True,.0,.GrabMode
0c80 41 73 79 6e 63 2c 20 47 72 61 62 4d 6f 64 65 41 73 79 6e 63 2c 00 00 00 2c 20 20 20 20 20 20 20 Async,.GrabModeAsync,...,.......
0ca0 20 20 20 20 20 20 20 20 20 20 62 2d 3e 77 69 6e 2c 20 4e 6f 6e 65 2c 20 43 75 72 72 65 6e 74 54 ..........b->win,.None,.CurrentT
0cc0 69 6d 65 29 3b 00 00 00 00 00 00 00 17 20 20 20 20 70 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 ime);............p->state.width.
0ce0 3d 20 77 3b 00 00 00 18 20 20 20 20 70 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 3d 20 68 3b =.w;........p->state.height.=.h;
0d00 00 00 00 18 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 78 20 3d 20 77 20 2f 20 32 3b 00 00 00 18 ........b->center_x.=.w./.2;....
0d20 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 79 20 3d 20 68 20 2f 20 32 3b 00 00 00 4d 20 20 20 20 ....b->center_y.=.h./.2;...M....
0d40 58 57 61 72 70 50 6f 69 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 62 2d 3e 77 69 XWarpPointer(b->dpy,.None,.b->wi
0d60 6e 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 78 2c 20 62 2d 3e 63 n,.0,.0,.0,.0,.b->center_x,.b->c
0d80 65 6e 74 65 72 5f 79 29 3b 00 00 00 12 20 20 20 20 62 2d 3e 77 61 72 70 65 64 20 3d 20 31 3b 00 enter_y);........b->warped.=.1;.
0da0 00 00 19 20 20 20 20 58 53 79 6e 63 28 62 2d 3e 64 70 79 2c 20 46 61 6c 73 65 29 3b 00 00 00 00 .......XSync(b->dpy,.False);....
0dc0 00 00 00 0d 20 20 20 20 72 65 74 75 72 6e 20 31 3b 00 00 00 01 7d 00 00 00 00 00 00 00 25 76 6f ........return.1;....}.......%vo
0de0 69 64 20 70 6c 61 74 66 6f 72 6d 5f 78 31 31 5f 70 6f 6c 6c 28 50 6c 61 74 66 6f 72 6d 20 2a 70 id.platform_x11_poll(Platform.*p
0e00 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 70 2d 3e 62 61 ).{........X11Backend.*b.=.p->ba
0e20 63 6b 65 6e 64 3b 00 00 00 1a 20 20 20 20 70 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 ckend;........p->state.mouse_dx.
0e40 3d 20 30 3b 00 00 00 1a 20 20 20 20 70 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 79 20 3d 20 =.0;........p->state.mouse_dy.=.
0e60 30 3b 00 00 00 00 00 00 00 1e 20 20 20 20 77 68 69 6c 65 20 28 58 50 65 6e 64 69 6e 67 28 62 2d 0;............while.(XPending(b-
0e80 3e 64 70 79 29 29 20 7b 00 00 00 11 20 20 20 20 20 20 20 20 58 45 76 65 6e 74 20 65 3b 00 00 00 >dpy)).{............XEvent.e;...
0ea0 1f 20 20 20 20 20 20 20 20 58 4e 65 78 74 45 76 65 6e 74 28 62 2d 3e 64 70 79 2c 20 26 65 29 3b .........XNextEvent(b->dpy,.&e);
0ec0 00 00 00 19 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 2e 74 79 70 65 29 20 7b 00 00 00 ............switch.(e.type).{...
0ee0 2d 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 4b 65 79 50 72 65 73 73 3a 20 63 61 73 65 -............case.KeyPress:.case
0f00 20 4b 65 79 52 65 6c 65 61 73 65 3a 20 7b 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .KeyRelease:.{...6..............
0f20 20 20 4b 65 79 53 79 6d 20 6b 73 20 3d 20 58 4c 6f 6f 6b 75 70 4b 65 79 73 79 6d 28 26 65 2e 78 ..KeySym.ks.=.XLookupKeysym(&e.x
0f40 6b 65 79 2c 20 30 29 3b 00 00 00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 key,.0);...*................int.
0f60 6b 20 3d 20 6b 65 79 73 79 6d 5f 74 6f 5f 6b 65 79 28 6b 73 29 3b 00 00 00 44 20 20 20 20 20 20 k.=.keysym_to_key(ks);...D......
0f80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 20 3e 3d 20 30 29 20 70 2d 3e 73 74 61 74 65 2e 6b ..........if.(k.>=.0).p->state.k
0fa0 65 79 73 5b 6b 5d 20 3d 20 28 65 2e 74 79 70 65 20 3d 3d 20 4b 65 79 50 72 65 73 73 29 3b 00 00 eys[k].=.(e.type.==.KeyPress);..
0fc0 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 ..................break;........
0fe0 20 20 20 20 20 20 20 20 7d 00 00 00 33 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 42 75 ........}...3............case.Bu
1000 74 74 6f 6e 50 72 65 73 73 3a 20 63 61 73 65 20 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3a 20 7b ttonPress:.case.ButtonRelease:.{
1020 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 65 73 73 65 64 20 ...6................int.pressed.
1040 3d 20 28 65 2e 74 79 70 65 20 3d 3d 20 42 75 74 74 6f 6e 50 72 65 73 73 29 3b 00 00 00 4f 20 20 =.(e.type.==.ButtonPress);...O..
1060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 2e 78 62 75 74 74 6f 6e 2e 62 75 74 74 ..............if.(e.xbutton.butt
1080 6f 6e 20 3d 3d 20 42 75 74 74 6f 6e 31 29 20 70 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 6c 65 on.==.Button1).p->state.mouse_le
10a0 66 74 20 3d 20 70 72 65 73 73 65 64 3b 00 00 00 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ft.=.pressed;...P...............
10c0 20 69 66 20 28 65 2e 78 62 75 74 74 6f 6e 2e 62 75 74 74 6f 6e 20 3d 3d 20 42 75 74 74 6f 6e 33 .if.(e.xbutton.button.==.Button3
10e0 29 20 70 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 72 69 67 68 74 20 3d 20 70 72 65 73 73 65 64 ).p->state.mouse_right.=.pressed
1100 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 ;....................break;.....
1120 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 ...........}................case
1140 20 4d 6f 74 69 6f 6e 4e 6f 74 69 66 79 3a 20 7b 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 .MotionNotify:.{................
1160 20 20 20 20 69 66 20 28 62 2d 3e 77 61 72 70 65 64 29 20 7b 00 00 00 22 20 20 20 20 20 20 20 20 ....if.(b->warped).{..."........
1180 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 77 61 72 70 65 64 20 3d 20 30 3b 00 00 00 18 20 20 ............b->warped.=.0;......
11a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 00 00 00 43 20 20 20 20 20 20 ..............}.else.{...C......
11c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 ..............p->state.mouse_dx.
11e0 2b 3d 20 65 2e 78 6d 6f 74 69 6f 6e 2e 78 20 2d 20 62 2d 3e 63 65 6e 74 65 72 5f 78 3b 00 00 00 +=.e.xmotion.x.-.b->center_x;...
1200 43 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 2e 6d 6f C....................p->state.mo
1220 75 73 65 5f 64 79 20 2b 3d 20 65 2e 78 6d 6f 74 69 6f 6e 2e 79 20 2d 20 62 2d 3e 63 65 6e 74 65 use_dy.+=.e.xmotion.y.-.b->cente
1240 72 5f 79 3b 00 00 00 11 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 4f 20 20 20 r_y;....................}...O...
1260 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 2e 78 6d 6f 74 69 6f 6e 2e 78 20 21 3d 20 .............if.(e.xmotion.x.!=.
1280 62 2d 3e 63 65 6e 74 65 72 5f 78 20 7c 7c 20 65 2e 78 6d 6f 74 69 6f 6e 2e 79 20 21 3d 20 62 2d b->center_x.||.e.xmotion.y.!=.b-
12a0 3e 63 65 6e 74 65 72 5f 79 29 20 7b 00 00 00 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 >center_y).{...]................
12c0 20 20 20 20 58 57 61 72 70 50 6f 69 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 62 ....XWarpPointer(b->dpy,.None,.b
12e0 2d 3e 77 69 6e 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 78 2c 20 ->win,.0,.0,.0,.0,.b->center_x,.
1300 62 2d 3e 63 65 6e 74 65 72 5f 79 29 3b 00 00 00 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b->center_y);..."...............
1320 20 20 20 20 20 62 2d 3e 77 61 72 70 65 64 20 3d 20 31 3b 00 00 00 11 20 20 20 20 20 20 20 20 20 .....b->warped.=.1;.............
1340 20 20 20 20 20 20 20 7d 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 .......}....................brea
1360 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 23 20 20 20 20 20 20 20 20 20 k;................}...#.........
1380 20 20 20 63 61 73 65 20 43 6f 6e 66 69 67 75 72 65 4e 6f 74 69 66 79 3a 20 7b 00 00 00 34 20 20 ...case.ConfigureNotify:.{...4..
13a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 3d 20 65 ..............p->state.width.=.e
13c0 2e 78 63 6f 6e 66 69 67 75 72 65 2e 77 69 64 74 68 3b 00 00 00 36 20 20 20 20 20 20 20 20 20 20 .xconfigure.width;...6..........
13e0 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 3d 20 65 2e 78 63 6f 6e 66 69 ......p->state.height.=.e.xconfi
1400 67 75 72 65 2e 68 65 69 67 68 74 3b 00 00 00 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 gure.height;...1................
1420 62 2d 3e 63 65 6e 74 65 72 5f 78 20 3d 20 70 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 2f 20 32 b->center_x.=.p->state.width./.2
1440 3b 00 00 00 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 79 ;...2................b->center_y
1460 20 3d 20 70 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 2f 20 32 3b 00 00 00 16 20 20 20 20 20 .=.p->state.height./.2;.........
1480 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 ...........break;...............
14a0 20 7d 00 00 00 21 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6c 69 65 6e 74 4d 65 73 .}...!............case.ClientMes
14c0 73 61 67 65 3a 20 7b 00 00 00 3e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 sage:.{...>................if.((
14e0 41 74 6f 6d 29 65 2e 78 63 6c 69 65 6e 74 2e 64 61 74 61 2e 6c 5b 30 5d 20 3d 3d 20 62 2d 3e 77 Atom)e.xclient.data.l[0].==.b->w
1500 6d 5f 64 65 6c 65 74 65 29 00 00 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 m_delete).......................
1520 20 70 2d 3e 73 74 61 74 65 2e 73 68 6f 75 6c 64 5f 63 6c 6f 73 65 20 3d 20 31 3b 00 00 00 16 20 .p->state.should_close.=.1;.....
1540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 ...............break;...........
1560 20 20 20 20 20 7d 00 00 00 1b 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 62 .....}................default:.b
1580 72 65 61 6b 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d reak;............}........}....}
15a0 00 00 00 00 00 00 00 25 76 6f 69 64 20 70 6c 61 74 66 6f 72 6d 5f 78 31 31 5f 73 77 61 70 28 50 .......%void.platform_x11_swap(P
15c0 6c 61 74 66 6f 72 6d 20 2a 70 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 42 61 63 6b 65 6e 64 20 latform.*p).{........X11Backend.
15e0 2a 62 20 3d 20 70 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 23 20 20 20 20 67 6c 58 53 77 61 70 42 *b.=.p->backend;...#....glXSwapB
1600 75 66 66 65 72 73 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 29 3b 00 00 00 01 7d 00 00 00 00 uffers(b->dpy,.b->win);....}....
1620 00 00 00 28 76 6f 69 64 20 70 6c 61 74 66 6f 72 6d 5f 78 31 31 5f 64 65 73 74 72 6f 79 28 50 6c ...(void.platform_x11_destroy(Pl
1640 61 74 66 6f 72 6d 20 2a 70 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 42 61 63 6b 65 6e 64 20 2a atform.*p).{........X11Backend.*
1660 62 20 3d 20 70 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 27 20 20 20 20 67 6c 58 4d 61 6b 65 43 75 b.=.p->backend;...'....glXMakeCu
1680 72 72 65 6e 74 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 4e 55 4c 4c 29 3b 00 00 00 26 20 20 rrent(b->dpy,.None,.NULL);...&..
16a0 20 20 67 6c 58 44 65 73 74 72 6f 79 43 6f 6e 74 65 78 74 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 63 ..glXDestroyContext(b->dpy,.b->c
16c0 74 78 29 3b 00 00 00 23 20 20 20 20 58 44 65 73 74 72 6f 79 57 69 6e 64 6f 77 28 62 2d 3e 64 70 tx);...#....XDestroyWindow(b->dp
16e0 79 2c 20 62 2d 3e 77 69 6e 29 3b 00 00 00 1a 20 20 20 20 58 43 6c 6f 73 65 44 69 73 70 6c 61 79 y,.b->win);........XCloseDisplay
1700 28 62 2d 3e 64 70 79 29 3b 00 00 00 0c 20 20 20 20 66 72 65 65 28 62 29 3b 00 00 00 01 7d 35 81 (b->dpy);........free(b);....}5.
1720 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 ................................
1740 00 00 00 00 00 00 3d 13 00 00 00 00 00 00 01 00 00 00 00 00 00 00 35 81 5f d0 00 00 00 01 00 00 ......=...............5._.......
1760 00 03 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 03 ................................
1780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
18a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
18c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 63 46 e1 ............................jcF.
18e0 04 01 00 00 00 01 00 f5 18 00 00 00 76 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 16 20 20 20 ............v...................
1900 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b f5 18 00 00 00 77 00 00 00 00 00 00 00 .............break;.....w.......
1920 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 00 ................................
1940 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .............5..................
1960 00 00 00 00 00 76 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 0f 00 .....v..........................
1980 00 00 00 00 00 f5 18 00 00 00 00 76 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 1f 00 00 00 01 ...........v....................
19a0 00 00 00 f9 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 57 03 00 00 00 00 00 00 35 81 5f d0 00 ...................W.......5._..
19c0 00 00 02 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 01 00 00 00 00 00 00 00 00 ff ................................
19e0 ff ff ff 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b40 00 6a 63 47 0b 04 01 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 96 00 00 .jcG............................
1b60 00 13 23 69 6e 63 6c 75 64 65 20 22 77 69 6e 64 6f 77 2e 68 22 00 00 00 15 23 69 6e 63 6c 75 64 ..#include."window.h"....#includ
1b80 65 20 3c 58 31 31 2f 58 6c 69 62 2e 68 3e 00 00 00 17 23 69 6e 63 6c 75 64 65 20 3c 58 31 31 2f e.<X11/Xlib.h>....#include.<X11/
1ba0 6b 65 79 73 79 6d 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 47 4c 2f 67 6c 78 2e 68 3e keysym.h>....#include.<GL/glx.h>
1bc0 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 47 4c 2f 67 6c 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 ....#include.<GL/gl.h>....#inclu
1be0 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e de.<stdlib.h>....#include.<strin
1c00 67 2e 68 3e 00 00 00 00 00 00 00 10 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 00 00 00 11 g.h>........typedef.struct.{....
1c20 20 20 20 20 44 69 73 70 6c 61 79 20 2a 64 70 79 3b 00 00 00 0f 20 20 20 20 57 69 6e 64 6f 77 20 ....Display.*dpy;........Window.
1c40 77 69 6e 3b 00 00 00 13 20 20 20 20 47 4c 58 43 6f 6e 74 65 78 74 20 63 74 78 3b 00 00 00 13 20 win;........GLXContext.ctx;.....
1c60 20 20 20 41 74 6f 6d 20 77 6d 5f 64 65 6c 65 74 65 3b 00 00 00 1b 20 20 20 20 69 6e 74 20 63 65 ...Atom.wm_delete;........int.ce
1c80 6e 74 65 72 5f 78 2c 20 63 65 6e 74 65 72 5f 79 3b 00 00 00 0f 20 20 20 20 69 6e 74 20 77 61 72 nter_x,.center_y;........int.war
1ca0 70 65 64 3b 00 00 00 0d 7d 20 58 31 31 42 61 63 6b 65 6e 64 3b 00 00 00 00 00 00 00 25 73 74 61 ped;....}.X11Backend;.......%sta
1cc0 74 69 63 20 69 6e 74 20 6b 65 79 73 79 6d 5f 74 6f 5f 6b 65 79 28 4b 65 79 53 79 6d 20 6b 73 29 tic.int.keysym_to_key(KeySym.ks)
1ce0 20 7b 00 00 00 11 20 20 20 20 73 77 69 74 63 68 20 28 6b 73 29 20 7b 00 00 00 2b 20 20 20 20 20 .{........switch.(ks).{...+.....
1d00 20 20 20 63 61 73 65 20 58 4b 5f 77 3a 20 63 61 73 65 20 58 4b 5f 57 3a 20 72 65 74 75 72 6e 20 ...case.XK_w:.case.XK_W:.return.
1d20 4b 45 59 5f 57 3b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 61 3a 20 63 61 73 KEY_W;...+........case.XK_a:.cas
1d40 65 20 58 4b 5f 41 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 41 3b 00 00 00 2b 20 20 20 20 20 20 20 e.XK_A:.return.KEY_A;...+.......
1d60 20 63 61 73 65 20 58 4b 5f 73 3a 20 63 61 73 65 20 58 4b 5f 53 3a 20 72 65 74 75 72 6e 20 4b 45 .case.XK_s:.case.XK_S:.return.KE
1d80 59 5f 53 3b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 64 3a 20 63 61 73 65 20 Y_S;...+........case.XK_d:.case.
1da0 58 4b 5f 44 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 44 3b 00 00 00 28 20 20 20 20 20 20 20 20 63 XK_D:.return.KEY_D;...(........c
1dc0 61 73 65 20 58 4b 5f 73 70 61 63 65 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 53 50 41 43 45 3b 00 ase.XK_space:.return.KEY_SPACE;.
1de0 00 00 27 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 45 73 63 61 70 65 3a 20 72 65 74 75 72 ..'........case.XK_Escape:.retur
1e00 6e 20 4b 45 59 5f 45 53 43 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 31 3a n.KEY_ESC;............case.XK_1:
1e20 20 72 65 74 75 72 6e 20 4b 45 59 5f 31 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 .return.KEY_1;............case.X
1e40 4b 5f 32 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 32 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 K_2:.return.KEY_2;............ca
1e60 73 65 20 58 4b 5f 33 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 33 3b 00 00 00 1b 20 20 20 20 20 20 se.XK_3:.return.KEY_3;..........
1e80 20 20 64 65 66 61 75 6c 74 3a 20 72 65 74 75 72 6e 20 2d 31 3b 00 00 00 05 20 20 20 20 7d 00 00 ..default:.return.-1;........}..
1ea0 00 01 7d 00 00 00 00 00 00 00 4a 69 6e 74 20 77 69 6e 64 6f 77 5f 78 31 31 5f 69 6e 69 74 28 57 ..}.......Jint.window_x11_init(W
1ec0 69 6e 64 6f 77 20 2a 77 2c 20 69 6e 74 20 77 69 64 74 68 2c 20 69 6e 74 20 68 65 69 67 68 74 2c indow.*w,.int.width,.int.height,
1ee0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 74 69 74 6c 65 29 20 7b 00 00 00 32 20 20 20 20 58 31 31 .const.char.*title).{...2....X11
1f00 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 63 61 6c 6c 6f 63 28 31 2c 20 73 69 7a 65 6f 66 28 58 31 Backend.*b.=.calloc(1,.sizeof(X1
1f20 31 42 61 63 6b 65 6e 64 29 29 3b 00 00 00 13 20 20 20 20 77 2d 3e 62 61 63 6b 65 6e 64 20 3d 20 1Backend));........w->backend.=.
1f40 62 3b 00 00 00 00 00 00 00 20 20 20 20 20 62 2d 3e 64 70 79 20 3d 20 58 4f 70 65 6e 44 69 73 70 b;............b->dpy.=.XOpenDisp
1f60 6c 61 79 28 4e 55 4c 4c 29 3b 00 00 00 27 20 20 20 20 69 66 20 28 21 62 2d 3e 64 70 79 29 20 7b lay(NULL);...'....if.(!b->dpy).{
1f80 20 66 72 65 65 28 62 29 3b 20 72 65 74 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 27 20 20 20 .free(b);.return.0;.}.......'...
1fa0 20 69 6e 74 20 73 63 72 65 65 6e 20 3d 20 44 65 66 61 75 6c 74 53 63 72 65 65 6e 28 62 2d 3e 64 .int.screen.=.DefaultScreen(b->d
1fc0 70 79 29 3b 00 00 00 4d 20 20 20 20 69 6e 74 20 61 74 74 72 69 62 73 5b 5d 20 3d 20 7b 20 47 4c py);...M....int.attribs[].=.{.GL
1fe0 58 5f 52 47 42 41 2c 20 47 4c 58 5f 44 45 50 54 48 5f 53 49 5a 45 2c 20 32 34 2c 20 47 4c 58 5f X_RGBA,.GLX_DEPTH_SIZE,.24,.GLX_
2000 44 4f 55 42 4c 45 42 55 46 46 45 52 2c 20 4e 6f 6e 65 20 7d 3b 00 00 00 3f 20 20 20 20 58 56 69 DOUBLEBUFFER,.None.};...?....XVi
2020 73 75 61 6c 49 6e 66 6f 20 2a 76 69 20 3d 20 67 6c 58 43 68 6f 6f 73 65 56 69 73 75 61 6c 28 62 sualInfo.*vi.=.glXChooseVisual(b
2040 2d 3e 64 70 79 2c 20 73 63 72 65 65 6e 2c 20 61 74 74 72 69 62 73 29 3b 00 00 00 3a 20 20 20 20 ->dpy,.screen,.attribs);...:....
2060 69 66 20 28 21 76 69 29 20 7b 20 58 43 6c 6f 73 65 44 69 73 70 6c 61 79 28 62 2d 3e 64 70 79 29 if.(!vi).{.XCloseDisplay(b->dpy)
2080 3b 20 66 72 65 65 28 62 29 3b 20 72 65 74 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 2f 20 20 ;.free(b);.return.0;.}......./..
20a0 20 20 3a 3a 57 69 6e 64 6f 77 20 72 6f 6f 74 20 3d 20 52 6f 6f 74 57 69 6e 64 6f 77 28 62 2d 3e ..::Window.root.=.RootWindow(b->
20c0 64 70 79 2c 20 73 63 72 65 65 6e 29 3b 00 00 00 49 20 20 20 20 43 6f 6c 6f 72 6d 61 70 20 63 6d dpy,.screen);...I....Colormap.cm
20e0 61 70 20 3d 20 58 43 72 65 61 74 65 43 6f 6c 6f 72 6d 61 70 28 62 2d 3e 64 70 79 2c 20 72 6f 6f ap.=.XCreateColormap(b->dpy,.roo
2100 74 2c 20 76 69 2d 3e 76 69 73 75 61 6c 2c 20 41 6c 6c 6f 63 4e 6f 6e 65 29 3b 00 00 00 1d 20 20 t,.vi->visual,.AllocNone);......
2120 20 20 58 53 65 74 57 69 6e 64 6f 77 41 74 74 72 69 62 75 74 65 73 20 73 77 61 3b 00 00 00 18 20 ..XSetWindowAttributes.swa;.....
2140 20 20 20 73 77 61 2e 63 6f 6c 6f 72 6d 61 70 20 3d 20 63 6d 61 70 3b 00 00 00 46 20 20 20 20 73 ...swa.colormap.=.cmap;...F....s
2160 77 61 2e 65 76 65 6e 74 5f 6d 61 73 6b 20 3d 20 4b 65 79 50 72 65 73 73 4d 61 73 6b 20 7c 20 4b wa.event_mask.=.KeyPressMask.|.K
2180 65 79 52 65 6c 65 61 73 65 4d 61 73 6b 20 7c 20 42 75 74 74 6f 6e 50 72 65 73 73 4d 61 73 6b 20 eyReleaseMask.|.ButtonPressMask.
21a0 7c 00 00 00 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 74 6f |...R......................Butto
21c0 6e 52 65 6c 65 61 73 65 4d 61 73 6b 20 7c 20 50 6f 69 6e 74 65 72 4d 6f 74 69 6f 6e 4d 61 73 6b nReleaseMask.|.PointerMotionMask
21e0 20 7c 20 53 74 72 75 63 74 75 72 65 4e 6f 74 69 66 79 4d 61 73 6b 3b 00 00 00 00 00 00 00 5f 20 .|.StructureNotifyMask;......._.
2200 20 20 20 62 2d 3e 77 69 6e 20 3d 20 58 43 72 65 61 74 65 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 ...b->win.=.XCreateWindow(b->dpy
2220 2c 20 72 6f 6f 74 2c 20 30 2c 20 30 2c 20 28 75 6e 73 69 67 6e 65 64 29 77 69 64 74 68 2c 20 28 ,.root,.0,.0,.(unsigned)width,.(
2240 75 6e 73 69 67 6e 65 64 29 68 65 69 67 68 74 2c 20 30 2c 20 76 69 2d 3e 64 65 70 74 68 2c 00 00 unsigned)height,.0,.vi->depth,..
2260 00 55 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e .U............................In
2280 70 75 74 4f 75 74 70 75 74 2c 20 76 69 2d 3e 76 69 73 75 61 6c 2c 20 43 57 43 6f 6c 6f 72 6d 61 putOutput,.vi->visual,.CWColorma
22a0 70 20 7c 20 43 57 45 76 65 6e 74 4d 61 73 6b 2c 20 26 73 77 61 29 3b 00 00 00 26 20 20 20 20 58 p.|.CWEventMask,.&swa);...&....X
22c0 53 74 6f 72 65 4e 61 6d 65 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 74 69 74 6c 65 29 StoreName(b->dpy,.b->win,.title)
22e0 3b 00 00 00 42 20 20 20 20 62 2d 3e 77 6d 5f 64 65 6c 65 74 65 20 3d 20 58 49 6e 74 65 72 6e 41 ;...B....b->wm_delete.=.XInternA
2300 74 6f 6d 28 62 2d 3e 64 70 79 2c 20 22 57 4d 5f 44 45 4c 45 54 45 5f 57 49 4e 44 4f 57 22 2c 20 tom(b->dpy,."WM_DELETE_WINDOW",.
2320 46 61 6c 73 65 29 3b 00 00 00 36 20 20 20 20 58 53 65 74 57 4d 50 72 6f 74 6f 63 6f 6c 73 28 62 False);...6....XSetWMProtocols(b
2340 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 26 62 2d 3e 77 6d 5f 64 65 6c 65 74 65 2c 20 31 29 ->dpy,.b->win,.&b->wm_delete,.1)
2360 3b 00 00 00 1f 20 20 20 20 58 4d 61 70 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 ;........XMapWindow(b->dpy,.b->w
2380 69 6e 29 3b 00 00 00 00 00 00 00 36 20 20 20 20 62 2d 3e 63 74 78 20 3d 20 67 6c 58 43 72 65 61 in);.......6....b->ctx.=.glXCrea
23a0 74 65 43 6f 6e 74 65 78 74 28 62 2d 3e 64 70 79 2c 20 76 69 2c 20 4e 55 4c 4c 2c 20 54 72 75 65 teContext(b->dpy,.vi,.NULL,.True
23c0 29 3b 00 00 00 2b 20 20 20 20 67 6c 58 4d 61 6b 65 43 75 72 72 65 6e 74 28 62 2d 3e 64 70 79 2c );...+....glXMakeCurrent(b->dpy,
23e0 20 62 2d 3e 77 69 6e 2c 20 62 2d 3e 63 74 78 29 3b 00 00 00 0e 20 20 20 20 58 46 72 65 65 28 76 .b->win,.b->ctx);........XFree(v
2400 69 29 3b 00 00 00 00 00 00 00 17 20 20 20 20 63 68 61 72 20 64 61 74 61 5b 38 5d 20 3d 20 7b 30 i);............char.data[8].=.{0
2420 7d 3b 00 00 00 45 20 20 20 20 50 69 78 6d 61 70 20 62 6c 61 6e 6b 20 3d 20 58 43 72 65 61 74 65 };...E....Pixmap.blank.=.XCreate
2440 42 69 74 6d 61 70 46 72 6f 6d 44 61 74 61 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 64 BitmapFromData(b->dpy,.b->win,.d
2460 61 74 61 2c 20 31 2c 20 31 29 3b 00 00 00 11 20 20 20 20 58 43 6f 6c 6f 72 20 64 75 6d 6d 79 3b ata,.1,.1);........XColor.dummy;
2480 00 00 00 25 20 20 20 20 6d 65 6d 73 65 74 28 26 64 75 6d 6d 79 2c 20 30 2c 20 73 69 7a 65 6f 66 ...%....memset(&dummy,.0,.sizeof
24a0 28 64 75 6d 6d 79 29 29 3b 00 00 00 54 20 20 20 20 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 3d (dummy));...T....Cursor.cursor.=
24c0 20 58 43 72 65 61 74 65 50 69 78 6d 61 70 43 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c 20 62 6c 61 .XCreatePixmapCursor(b->dpy,.bla
24e0 6e 6b 2c 20 62 6c 61 6e 6b 2c 20 26 64 75 6d 6d 79 2c 20 26 64 75 6d 6d 79 2c 20 30 2c 20 30 29 nk,.blank,.&dummy,.&dummy,.0,.0)
2500 3b 00 00 00 2a 20 20 20 20 58 44 65 66 69 6e 65 43 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c 20 62 ;...*....XDefineCursor(b->dpy,.b
2520 2d 3e 77 69 6e 2c 20 63 75 72 73 6f 72 29 3b 00 00 00 1f 20 20 20 20 58 46 72 65 65 50 69 78 6d ->win,.cursor);........XFreePixm
2540 61 70 28 62 2d 3e 64 70 79 2c 20 62 6c 61 6e 6b 29 3b 00 00 00 20 20 20 20 20 58 46 72 65 65 43 ap(b->dpy,.blank);........XFreeC
2560 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c 20 63 75 72 73 6f 72 29 3b 00 00 00 00 00 00 00 19 20 20 ursor(b->dpy,.cursor);..........
2580 20 20 58 53 79 6e 63 28 62 2d 3e 64 70 79 2c 20 46 61 6c 73 65 29 3b 00 00 00 47 20 20 20 20 58 ..XSync(b->dpy,.False);...G....X
25a0 47 72 61 62 50 6f 69 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 54 72 75 65 GrabPointer(b->dpy,.b->win,.True
25c0 2c 20 30 2c 20 47 72 61 62 4d 6f 64 65 41 73 79 6e 63 2c 20 47 72 61 62 4d 6f 64 65 41 73 79 6e ,.0,.GrabModeAsync,.GrabModeAsyn
25e0 63 2c 00 00 00 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 77 69 6e 2c 20 4e c,...,.................b->win,.N
2600 6f 6e 65 2c 20 43 75 72 72 65 6e 74 54 69 6d 65 29 3b 00 00 00 00 00 00 00 1b 20 20 20 20 77 2d one,.CurrentTime);............w-
2620 3e 73 74 61 74 65 2e 77 69 64 74 68 20 3d 20 77 69 64 74 68 3b 00 00 00 1d 20 20 20 20 77 2d 3e >state.width.=.width;........w->
2640 73 74 61 74 65 2e 68 65 69 67 68 74 20 3d 20 68 65 69 67 68 74 3b 00 00 00 1c 20 20 20 20 62 2d state.height.=.height;........b-
2660 3e 63 65 6e 74 65 72 5f 78 20 3d 20 77 69 64 74 68 20 2f 20 32 3b 00 00 00 1d 20 20 20 20 62 2d >center_x.=.width./.2;........b-
2680 3e 63 65 6e 74 65 72 5f 79 20 3d 20 68 65 69 67 68 74 20 2f 20 32 3b 00 00 00 4d 20 20 20 20 58 >center_y.=.height./.2;...M....X
26a0 57 61 72 70 50 6f 69 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 62 2d 3e 77 69 6e WarpPointer(b->dpy,.None,.b->win
26c0 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 78 2c 20 62 2d 3e 63 65 ,.0,.0,.0,.0,.b->center_x,.b->ce
26e0 6e 74 65 72 5f 79 29 3b 00 00 00 12 20 20 20 20 62 2d 3e 77 61 72 70 65 64 20 3d 20 31 3b 00 00 nter_y);........b->warped.=.1;..
2700 00 19 20 20 20 20 58 53 79 6e 63 28 62 2d 3e 64 70 79 2c 20 46 61 6c 73 65 29 3b 00 00 00 00 00 ......XSync(b->dpy,.False);.....
2720 00 00 0d 20 20 20 20 72 65 74 75 72 6e 20 31 3b 00 00 00 01 7d 00 00 00 00 00 00 00 21 76 6f 69 .......return.1;....}.......!voi
2740 64 20 77 69 6e 64 6f 77 5f 78 31 31 5f 70 6f 6c 6c 28 57 69 6e 64 6f 77 20 2a 77 29 20 7b 00 00 d.window_x11_poll(Window.*w).{..
2760 00 1f 20 20 20 20 58 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 61 63 6b 65 6e 64 ......X11Backend.*b.=.w->backend
2780 3b 00 00 00 1a 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 3d 20 30 3b 00 ;........w->state.mouse_dx.=.0;.
27a0 00 00 1a 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 79 20 3d 20 30 3b 00 00 00 .......w->state.mouse_dy.=.0;...
27c0 00 00 00 00 1e 20 20 20 20 77 68 69 6c 65 20 28 58 50 65 6e 64 69 6e 67 28 62 2d 3e 64 70 79 29 .........while.(XPending(b->dpy)
27e0 29 20 7b 00 00 00 11 20 20 20 20 20 20 20 20 58 45 76 65 6e 74 20 65 3b 00 00 00 1f 20 20 20 20 ).{............XEvent.e;........
2800 20 20 20 20 58 4e 65 78 74 45 76 65 6e 74 28 62 2d 3e 64 70 79 2c 20 26 65 29 3b 00 00 00 19 20 ....XNextEvent(b->dpy,.&e);.....
2820 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 2e 74 79 70 65 29 20 7b 00 00 00 2d 20 20 20 20 .......switch.(e.type).{...-....
2840 20 20 20 20 20 20 20 20 63 61 73 65 20 4b 65 79 50 72 65 73 73 3a 20 63 61 73 65 20 4b 65 79 52 ........case.KeyPress:.case.KeyR
2860 65 6c 65 61 73 65 3a 20 7b 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4b 65 79 elease:.{...6................Key
2880 53 79 6d 20 6b 73 20 3d 20 58 4c 6f 6f 6b 75 70 4b 65 79 73 79 6d 28 26 65 2e 78 6b 65 79 2c 20 Sym.ks.=.XLookupKeysym(&e.xkey,.
28a0 30 29 3b 00 00 00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b 20 3d 20 6b 0);...*................int.k.=.k
28c0 65 79 73 79 6d 5f 74 6f 5f 6b 65 79 28 6b 73 29 3b 00 00 00 44 20 20 20 20 20 20 20 20 20 20 20 eysym_to_key(ks);...D...........
28e0 20 20 20 20 20 69 66 20 28 6b 20 3e 3d 20 30 29 20 77 2d 3e 73 74 61 74 65 2e 6b 65 79 73 5b 6b .....if.(k.>=.0).w->state.keys[k
2900 5d 20 3d 20 28 65 2e 74 79 70 65 20 3d 3d 20 4b 65 79 50 72 65 73 73 29 3b 00 00 00 16 20 20 20 ].=.(e.type.==.KeyPress);.......
2920 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 .............break;.............
2940 20 20 20 7d 00 00 00 33 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 42 75 74 74 6f 6e 50 ...}...3............case.ButtonP
2960 72 65 73 73 3a 20 63 61 73 65 20 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3a 20 7b 00 00 00 36 20 ress:.case.ButtonRelease:.{...6.
2980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 65 73 73 65 64 20 3d 20 28 65 2e ...............int.pressed.=.(e.
29a0 74 79 70 65 20 3d 3d 20 42 75 74 74 6f 6e 50 72 65 73 73 29 3b 00 00 00 4f 20 20 20 20 20 20 20 type.==.ButtonPress);...O.......
29c0 20 20 20 20 20 20 20 20 20 69 66 20 28 65 2e 78 62 75 74 74 6f 6e 2e 62 75 74 74 6f 6e 20 3d 3d .........if.(e.xbutton.button.==
29e0 20 42 75 74 74 6f 6e 31 29 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 6c 65 66 74 20 3d 20 .Button1).w->state.mouse_left.=.
2a00 70 72 65 73 73 65 64 3b 00 00 00 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 pressed;...P................if.(
2a20 65 2e 78 62 75 74 74 6f 6e 2e 62 75 74 74 6f 6e 20 3d 3d 20 42 75 74 74 6f 6e 33 29 20 77 2d 3e e.xbutton.button.==.Button3).w->
2a40 73 74 61 74 65 2e 6d 6f 75 73 65 5f 72 69 67 68 74 20 3d 20 70 72 65 73 73 65 64 3b 00 00 00 16 state.mouse_right.=.pressed;....
2a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 ................break;..........
2a80 20 20 20 20 20 20 7d 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 4d 6f 74 69 ......}................case.Moti
2aa0 6f 6e 4e 6f 74 69 66 79 3a 20 7b 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 onNotify:.{....................i
2ac0 66 20 28 62 2d 3e 77 61 72 70 65 64 29 20 7b 00 00 00 22 20 20 20 20 20 20 20 20 20 20 20 20 20 f.(b->warped).{...".............
2ae0 20 20 20 20 20 20 20 62 2d 3e 77 61 72 70 65 64 20 3d 20 30 3b 00 00 00 18 20 20 20 20 20 20 20 .......b->warped.=.0;...........
2b00 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 00 00 00 43 20 20 20 20 20 20 20 20 20 20 20 .........}.else.{...C...........
2b20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 2b 3d 20 65 2e .........w->state.mouse_dx.+=.e.
2b40 78 6d 6f 74 69 6f 6e 2e 78 20 2d 20 62 2d 3e 63 65 6e 74 65 72 5f 78 3b 00 00 00 43 20 20 20 20 xmotion.x.-.b->center_x;...C....
2b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 ................w->state.mouse_d
2b80 79 20 2b 3d 20 65 2e 78 6d 6f 74 69 6f 6e 2e 79 20 2d 20 62 2d 3e 63 65 6e 74 65 72 5f 79 3b 00 y.+=.e.xmotion.y.-.b->center_y;.
2ba0 00 00 11 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 4f 20 20 20 20 20 20 20 20 ...................}...O........
2bc0 20 20 20 20 20 20 20 20 69 66 20 28 65 2e 78 6d 6f 74 69 6f 6e 2e 78 20 21 3d 20 62 2d 3e 63 65 ........if.(e.xmotion.x.!=.b->ce
2be0 6e 74 65 72 5f 78 20 7c 7c 20 65 2e 78 6d 6f 74 69 6f 6e 2e 79 20 21 3d 20 62 2d 3e 63 65 6e 74 nter_x.||.e.xmotion.y.!=.b->cent
2c00 65 72 5f 79 29 20 7b 00 00 00 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 er_y).{...]....................X
2c20 57 61 72 70 50 6f 69 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 62 2d 3e 77 69 6e WarpPointer(b->dpy,.None,.b->win
2c40 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 78 2c 20 62 2d 3e 63 65 ,.0,.0,.0,.0,.b->center_x,.b->ce
2c60 6e 74 65 72 5f 79 29 3b 00 00 00 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 nter_y);..."....................
2c80 62 2d 3e 77 61 72 70 65 64 20 3d 20 31 3b 00 00 00 11 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b->warped.=.1;..................
2ca0 20 20 7d 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 ..}....................break;...
2cc0 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 23 20 20 20 20 20 20 20 20 20 20 20 20 63 61 .............}...#............ca
2ce0 73 65 20 43 6f 6e 66 69 67 75 72 65 4e 6f 74 69 66 79 3a 20 7b 00 00 00 34 20 20 20 20 20 20 20 se.ConfigureNotify:.{...4.......
2d00 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 3d 20 65 2e 78 63 6f 6e .........w->state.width.=.e.xcon
2d20 66 69 67 75 72 65 2e 77 69 64 74 68 3b 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 figure.width;...6...............
2d40 20 77 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 3d 20 65 2e 78 63 6f 6e 66 69 67 75 72 65 2e .w->state.height.=.e.xconfigure.
2d60 68 65 69 67 68 74 3b 00 00 00 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 63 65 height;...1................b->ce
2d80 6e 74 65 72 5f 78 20 3d 20 77 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 2f 20 32 3b 00 00 00 32 nter_x.=.w->state.width./.2;...2
2da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 79 20 3d 20 77 2d ................b->center_y.=.w-
2dc0 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 2f 20 32 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 >state.height./.2;..............
2de0 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 ......break;................}...
2e00 21 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6c 69 65 6e 74 4d 65 73 73 61 67 65 3a !............case.ClientMessage:
2e20 20 7b 00 00 00 3e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 41 74 6f 6d 29 .{...>................if.((Atom)
2e40 65 2e 78 63 6c 69 65 6e 74 2e 64 61 74 61 2e 6c 5b 30 5d 20 3d 3d 20 62 2d 3e 77 6d 5f 64 65 6c e.xclient.data.l[0].==.b->wm_del
2e60 65 74 65 29 00 00 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 ete)........................w->s
2e80 74 61 74 65 2e 73 68 6f 75 6c 64 5f 63 6c 6f 73 65 20 3d 20 31 3b 00 00 00 16 20 20 20 20 20 20 tate.should_close.=.1;..........
2ea0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 ..........break;................
2ec0 7d 00 00 00 1b 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 62 72 65 61 6b 3b }................default:.break;
2ee0 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 ............}........}....}.....
2f00 00 00 21 76 6f 69 64 20 77 69 6e 64 6f 77 5f 78 31 31 5f 73 77 61 70 28 57 69 6e 64 6f 77 20 2a ..!void.window_x11_swap(Window.*
2f20 77 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 w).{........X11Backend.*b.=.w->b
2f40 61 63 6b 65 6e 64 3b 00 00 00 23 20 20 20 20 67 6c 58 53 77 61 70 42 75 66 66 65 72 73 28 62 2d ackend;...#....glXSwapBuffers(b-
2f60 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 29 3b 00 00 00 01 7d 00 00 00 00 00 00 00 24 76 6f 69 64 20 >dpy,.b->win);....}.......$void.
2f80 77 69 6e 64 6f 77 5f 78 31 31 5f 64 65 73 74 72 6f 79 28 57 69 6e 64 6f 77 20 2a 77 29 20 7b 00 window_x11_destroy(Window.*w).{.
2fa0 00 00 1f 20 20 20 20 58 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 61 63 6b 65 6e .......X11Backend.*b.=.w->backen
2fc0 64 3b 00 00 00 27 20 20 20 20 67 6c 58 4d 61 6b 65 43 75 72 72 65 6e 74 28 62 2d 3e 64 70 79 2c d;...'....glXMakeCurrent(b->dpy,
2fe0 20 4e 6f 6e 65 2c 20 4e 55 4c 4c 29 3b 00 00 00 26 20 20 20 20 67 6c 58 44 65 73 74 72 6f 79 43 .None,.NULL);...&....glXDestroyC
3000 6f 6e 74 65 78 74 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 63 74 78 29 3b 00 00 00 23 20 20 20 20 58 ontext(b->dpy,.b->ctx);...#....X
3020 44 65 73 74 72 6f 79 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 29 3b 00 00 DestroyWindow(b->dpy,.b->win);..
3040 00 1a 20 20 20 20 58 43 6c 6f 73 65 44 69 73 70 6c 61 79 28 62 2d 3e 64 70 79 29 3b 00 00 00 0c ......XCloseDisplay(b->dpy);....
3060 20 20 20 20 66 72 65 65 28 62 29 3b 00 00 00 01 7d 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 ....free(b);....}5..............
3080 00 96 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 51 13 00 00 00 00 00 .........................Q......
30a0 00 01 00 00 00 00 00 00 00 35 81 5f d0 00 00 00 03 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 .........5._....................
30c0 04 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
30e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 63 47 0b 04 01 00 00 00 02 00 f5 18 00 00 00 76 ...............jcG.............v
3240 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 14 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
3260 62 72 65 61 f5 18 00 00 00 77 00 00 00 00 00 00 00 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 00 brea.....w......................
3280 00 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 ..............................5.
32a0 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 00 00 00 14 00 00 00 00 00 ......................v.........
32c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 0f 00 00 00 00 00 00 f5 18 00 00 00 00 76 00 00 00 ............................v...
32e0 14 00 00 00 00 00 00 00 00 00 00 00 1f 00 00 00 01 00 00 00 f9 0f 00 00 00 00 00 00 00 00 00 00 ................................
3300 00 00 00 00 59 03 00 00 00 00 00 00 35 81 5f d0 00 00 00 04 00 00 00 06 00 00 00 00 00 00 00 00 ....Y.......5._.................
3320 00 00 00 05 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 01 00 00 00 00 00 00 00 00 00 00 ................................
3340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
33a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
33c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
33e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 63 47 35 04 01 00 00 00 00 00 f5 18 00 ..................jcG5..........
34a0 00 00 00 00 00 00 02 00 00 00 00 00 00 00 96 00 00 00 13 23 69 6e 63 6c 75 64 65 20 22 77 69 6e ...................#include."win
34c0 64 6f 77 2e 68 22 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 58 31 31 2f 58 6c 69 62 2e 68 3e 00 dow.h"....#include.<X11/Xlib.h>.
34e0 00 00 17 23 69 6e 63 6c 75 64 65 20 3c 58 31 31 2f 6b 65 79 73 79 6d 2e 68 3e 00 00 00 13 23 69 ...#include.<X11/keysym.h>....#i
3500 6e 63 6c 75 64 65 20 3c 47 4c 2f 67 6c 78 2e 68 3e 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 47 nclude.<GL/glx.h>....#include.<G
3520 4c 2f 67 6c 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 00 00 L/gl.h>....#include.<stdlib.h>..
3540 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 00 00 00 00 00 00 00 10 74 79 70 ..#include.<string.h>........typ
3560 65 64 65 66 20 73 74 72 75 63 74 20 7b 00 00 00 11 20 20 20 20 44 69 73 70 6c 61 79 20 2a 64 70 edef.struct.{........Display.*dp
3580 79 3b 00 00 00 11 20 20 20 20 3a 3a 57 69 6e 64 6f 77 20 77 69 6e 3b 00 00 00 13 20 20 20 20 47 y;........::Window.win;........G
35a0 4c 58 43 6f 6e 74 65 78 74 20 63 74 78 3b 00 00 00 13 20 20 20 20 41 74 6f 6d 20 77 6d 5f 64 65 LXContext.ctx;........Atom.wm_de
35c0 6c 65 74 65 3b 00 00 00 1b 20 20 20 20 69 6e 74 20 63 65 6e 74 65 72 5f 78 2c 20 63 65 6e 74 65 lete;........int.center_x,.cente
35e0 72 5f 79 3b 00 00 00 0f 20 20 20 20 69 6e 74 20 77 61 72 70 65 64 3b 00 00 00 0d 7d 20 58 31 31 r_y;........int.warped;....}.X11
3600 42 61 63 6b 65 6e 64 3b 00 00 00 00 00 00 00 25 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 73 79 Backend;.......%static.int.keysy
3620 6d 5f 74 6f 5f 6b 65 79 28 4b 65 79 53 79 6d 20 6b 73 29 20 7b 00 00 00 11 20 20 20 20 73 77 69 m_to_key(KeySym.ks).{........swi
3640 74 63 68 20 28 6b 73 29 20 7b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 77 3a tch.(ks).{...+........case.XK_w:
3660 20 63 61 73 65 20 58 4b 5f 57 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 57 3b 00 00 00 2b 20 20 20 .case.XK_W:.return.KEY_W;...+...
3680 20 20 20 20 20 63 61 73 65 20 58 4b 5f 61 3a 20 63 61 73 65 20 58 4b 5f 41 3a 20 72 65 74 75 72 .....case.XK_a:.case.XK_A:.retur
36a0 6e 20 4b 45 59 5f 41 3b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 73 3a 20 63 n.KEY_A;...+........case.XK_s:.c
36c0 61 73 65 20 58 4b 5f 53 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 53 3b 00 00 00 2b 20 20 20 20 20 ase.XK_S:.return.KEY_S;...+.....
36e0 20 20 20 63 61 73 65 20 58 4b 5f 64 3a 20 63 61 73 65 20 58 4b 5f 44 3a 20 72 65 74 75 72 6e 20 ...case.XK_d:.case.XK_D:.return.
3700 4b 45 59 5f 44 3b 00 00 00 28 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 73 70 61 63 65 3a KEY_D;...(........case.XK_space:
3720 20 72 65 74 75 72 6e 20 4b 45 59 5f 53 50 41 43 45 3b 00 00 00 27 20 20 20 20 20 20 20 20 63 61 .return.KEY_SPACE;...'........ca
3740 73 65 20 58 4b 5f 45 73 63 61 70 65 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 45 53 43 3b 00 00 00 se.XK_Escape:.return.KEY_ESC;...
3760 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 31 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 31 .........case.XK_1:.return.KEY_1
3780 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 32 3a 20 72 65 74 75 72 6e 20 4b ;............case.XK_2:.return.K
37a0 45 59 5f 32 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 33 3a 20 72 65 74 75 EY_2;............case.XK_3:.retu
37c0 72 6e 20 4b 45 59 5f 33 3b 00 00 00 1b 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 72 65 rn.KEY_3;............default:.re
37e0 74 75 72 6e 20 2d 31 3b 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 4a 69 6e turn.-1;........}....}.......Jin
3800 74 20 77 69 6e 64 6f 77 5f 78 31 31 5f 69 6e 69 74 28 57 69 6e 64 6f 77 20 2a 77 2c 20 69 6e 74 t.window_x11_init(Window.*w,.int
3820 20 77 69 64 74 68 2c 20 69 6e 74 20 68 65 69 67 68 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a .width,.int.height,.const.char.*
3840 74 69 74 6c 65 29 20 7b 00 00 00 32 20 20 20 20 58 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 title).{...2....X11Backend.*b.=.
3860 63 61 6c 6c 6f 63 28 31 2c 20 73 69 7a 65 6f 66 28 58 31 31 42 61 63 6b 65 6e 64 29 29 3b 00 00 calloc(1,.sizeof(X11Backend));..
3880 00 13 20 20 20 20 77 2d 3e 62 61 63 6b 65 6e 64 20 3d 20 62 3b 00 00 00 00 00 00 00 20 20 20 20 ......w->backend.=.b;...........
38a0 20 62 2d 3e 64 70 79 20 3d 20 58 4f 70 65 6e 44 69 73 70 6c 61 79 28 4e 55 4c 4c 29 3b 00 00 00 .b->dpy.=.XOpenDisplay(NULL);...
38c0 27 20 20 20 20 69 66 20 28 21 62 2d 3e 64 70 79 29 20 7b 20 66 72 65 65 28 62 29 3b 20 72 65 74 '....if.(!b->dpy).{.free(b);.ret
38e0 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 27 20 20 20 20 69 6e 74 20 73 63 72 65 65 6e 20 3d urn.0;.}.......'....int.screen.=
3900 20 44 65 66 61 75 6c 74 53 63 72 65 65 6e 28 62 2d 3e 64 70 79 29 3b 00 00 00 4d 20 20 20 20 69 .DefaultScreen(b->dpy);...M....i
3920 6e 74 20 61 74 74 72 69 62 73 5b 5d 20 3d 20 7b 20 47 4c 58 5f 52 47 42 41 2c 20 47 4c 58 5f 44 nt.attribs[].=.{.GLX_RGBA,.GLX_D
3940 45 50 54 48 5f 53 49 5a 45 2c 20 32 34 2c 20 47 4c 58 5f 44 4f 55 42 4c 45 42 55 46 46 45 52 2c EPTH_SIZE,.24,.GLX_DOUBLEBUFFER,
3960 20 4e 6f 6e 65 20 7d 3b 00 00 00 3f 20 20 20 20 58 56 69 73 75 61 6c 49 6e 66 6f 20 2a 76 69 20 .None.};...?....XVisualInfo.*vi.
3980 3d 20 67 6c 58 43 68 6f 6f 73 65 56 69 73 75 61 6c 28 62 2d 3e 64 70 79 2c 20 73 63 72 65 65 6e =.glXChooseVisual(b->dpy,.screen
39a0 2c 20 61 74 74 72 69 62 73 29 3b 00 00 00 3a 20 20 20 20 69 66 20 28 21 76 69 29 20 7b 20 58 43 ,.attribs);...:....if.(!vi).{.XC
39c0 6c 6f 73 65 44 69 73 70 6c 61 79 28 62 2d 3e 64 70 79 29 3b 20 66 72 65 65 28 62 29 3b 20 72 65 loseDisplay(b->dpy);.free(b);.re
39e0 74 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 2f 20 20 20 20 3a 3a 57 69 6e 64 6f 77 20 72 6f turn.0;.}......./....::Window.ro
3a00 6f 74 20 3d 20 52 6f 6f 74 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 73 63 72 65 65 6e 29 3b ot.=.RootWindow(b->dpy,.screen);
3a20 00 00 00 49 20 20 20 20 43 6f 6c 6f 72 6d 61 70 20 63 6d 61 70 20 3d 20 58 43 72 65 61 74 65 43 ...I....Colormap.cmap.=.XCreateC
3a40 6f 6c 6f 72 6d 61 70 28 62 2d 3e 64 70 79 2c 20 72 6f 6f 74 2c 20 76 69 2d 3e 76 69 73 75 61 6c olormap(b->dpy,.root,.vi->visual
3a60 2c 20 41 6c 6c 6f 63 4e 6f 6e 65 29 3b 00 00 00 1d 20 20 20 20 58 53 65 74 57 69 6e 64 6f 77 41 ,.AllocNone);........XSetWindowA
3a80 74 74 72 69 62 75 74 65 73 20 73 77 61 3b 00 00 00 18 20 20 20 20 73 77 61 2e 63 6f 6c 6f 72 6d ttributes.swa;........swa.colorm
3aa0 61 70 20 3d 20 63 6d 61 70 3b 00 00 00 46 20 20 20 20 73 77 61 2e 65 76 65 6e 74 5f 6d 61 73 6b ap.=.cmap;...F....swa.event_mask
3ac0 20 3d 20 4b 65 79 50 72 65 73 73 4d 61 73 6b 20 7c 20 4b 65 79 52 65 6c 65 61 73 65 4d 61 73 6b .=.KeyPressMask.|.KeyReleaseMask
3ae0 20 7c 20 42 75 74 74 6f 6e 50 72 65 73 73 4d 61 73 6b 20 7c 00 00 00 52 20 20 20 20 20 20 20 20 .|.ButtonPressMask.|...R........
3b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 4d 61 73 6b 20 ..............ButtonReleaseMask.
3b20 7c 20 50 6f 69 6e 74 65 72 4d 6f 74 69 6f 6e 4d 61 73 6b 20 7c 20 53 74 72 75 63 74 75 72 65 4e |.PointerMotionMask.|.StructureN
3b40 6f 74 69 66 79 4d 61 73 6b 3b 00 00 00 00 00 00 00 5f 20 20 20 20 62 2d 3e 77 69 6e 20 3d 20 58 otifyMask;......._....b->win.=.X
3b60 43 72 65 61 74 65 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 72 6f 6f 74 2c 20 30 2c 20 30 2c CreateWindow(b->dpy,.root,.0,.0,
3b80 20 28 75 6e 73 69 67 6e 65 64 29 77 69 64 74 68 2c 20 28 75 6e 73 69 67 6e 65 64 29 68 65 69 67 .(unsigned)width,.(unsigned)heig
3ba0 68 74 2c 20 30 2c 20 76 69 2d 3e 64 65 70 74 68 2c 00 00 00 55 20 20 20 20 20 20 20 20 20 20 20 ht,.0,.vi->depth,...U...........
3bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 70 75 74 4f 75 74 70 75 74 2c 20 76 69 .................InputOutput,.vi
3be0 2d 3e 76 69 73 75 61 6c 2c 20 43 57 43 6f 6c 6f 72 6d 61 70 20 7c 20 43 57 45 76 65 6e 74 4d 61 ->visual,.CWColormap.|.CWEventMa
3c00 73 6b 2c 20 26 73 77 61 29 3b 00 00 00 26 20 20 20 20 58 53 74 6f 72 65 4e 61 6d 65 28 62 2d 3e sk,.&swa);...&....XStoreName(b->
3c20 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 74 69 74 6c 65 29 3b 00 00 00 42 20 20 20 20 62 2d 3e 77 dpy,.b->win,.title);...B....b->w
3c40 6d 5f 64 65 6c 65 74 65 20 3d 20 58 49 6e 74 65 72 6e 41 74 6f 6d 28 62 2d 3e 64 70 79 2c 20 22 m_delete.=.XInternAtom(b->dpy,."
3c60 57 4d 5f 44 45 4c 45 54 45 5f 57 49 4e 44 4f 57 22 2c 20 46 61 6c 73 65 29 3b 00 00 00 36 20 20 WM_DELETE_WINDOW",.False);...6..
3c80 20 20 58 53 65 74 57 4d 50 72 6f 74 6f 63 6f 6c 73 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e ..XSetWMProtocols(b->dpy,.b->win
3ca0 2c 20 26 62 2d 3e 77 6d 5f 64 65 6c 65 74 65 2c 20 31 29 3b 00 00 00 1f 20 20 20 20 58 4d 61 70 ,.&b->wm_delete,.1);........XMap
3cc0 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 29 3b 00 00 00 00 00 00 00 36 20 Window(b->dpy,.b->win);.......6.
3ce0 20 20 20 62 2d 3e 63 74 78 20 3d 20 67 6c 58 43 72 65 61 74 65 43 6f 6e 74 65 78 74 28 62 2d 3e ...b->ctx.=.glXCreateContext(b->
3d00 64 70 79 2c 20 76 69 2c 20 4e 55 4c 4c 2c 20 54 72 75 65 29 3b 00 00 00 2b 20 20 20 20 67 6c 58 dpy,.vi,.NULL,.True);...+....glX
3d20 4d 61 6b 65 43 75 72 72 65 6e 74 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 62 2d 3e 63 MakeCurrent(b->dpy,.b->win,.b->c
3d40 74 78 29 3b 00 00 00 0e 20 20 20 20 58 46 72 65 65 28 76 69 29 3b 00 00 00 00 00 00 00 17 20 20 tx);........XFree(vi);..........
3d60 20 20 63 68 61 72 20 64 61 74 61 5b 38 5d 20 3d 20 7b 30 7d 3b 00 00 00 45 20 20 20 20 50 69 78 ..char.data[8].=.{0};...E....Pix
3d80 6d 61 70 20 62 6c 61 6e 6b 20 3d 20 58 43 72 65 61 74 65 42 69 74 6d 61 70 46 72 6f 6d 44 61 74 map.blank.=.XCreateBitmapFromDat
3da0 61 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 64 61 74 61 2c 20 31 2c 20 31 29 3b 00 00 a(b->dpy,.b->win,.data,.1,.1);..
3dc0 00 11 20 20 20 20 58 43 6f 6c 6f 72 20 64 75 6d 6d 79 3b 00 00 00 25 20 20 20 20 6d 65 6d 73 65 ......XColor.dummy;...%....memse
3de0 74 28 26 64 75 6d 6d 79 2c 20 30 2c 20 73 69 7a 65 6f 66 28 64 75 6d 6d 79 29 29 3b 00 00 00 54 t(&dummy,.0,.sizeof(dummy));...T
3e00 20 20 20 20 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 58 43 72 65 61 74 65 50 69 78 6d 61 ....Cursor.cursor.=.XCreatePixma
3e20 70 43 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c 20 62 6c 61 6e 6b 2c 20 62 6c 61 6e 6b 2c 20 26 64 pCursor(b->dpy,.blank,.blank,.&d
3e40 75 6d 6d 79 2c 20 26 64 75 6d 6d 79 2c 20 30 2c 20 30 29 3b 00 00 00 2a 20 20 20 20 58 44 65 66 ummy,.&dummy,.0,.0);...*....XDef
3e60 69 6e 65 43 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 63 75 72 73 6f 72 ineCursor(b->dpy,.b->win,.cursor
3e80 29 3b 00 00 00 1f 20 20 20 20 58 46 72 65 65 50 69 78 6d 61 70 28 62 2d 3e 64 70 79 2c 20 62 6c );........XFreePixmap(b->dpy,.bl
3ea0 61 6e 6b 29 3b 00 00 00 20 20 20 20 20 58 46 72 65 65 43 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c ank);........XFreeCursor(b->dpy,
3ec0 20 63 75 72 73 6f 72 29 3b 00 00 00 00 00 00 00 19 20 20 20 20 58 53 79 6e 63 28 62 2d 3e 64 70 .cursor);............XSync(b->dp
3ee0 79 2c 20 46 61 6c 73 65 29 3b 00 00 00 47 20 20 20 20 58 47 72 61 62 50 6f 69 6e 74 65 72 28 62 y,.False);...G....XGrabPointer(b
3f00 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 2c 20 54 72 75 65 2c 20 30 2c 20 47 72 61 62 4d 6f 64 65 ->dpy,.b->win,.True,.0,.GrabMode
3f20 41 73 79 6e 63 2c 20 47 72 61 62 4d 6f 64 65 41 73 79 6e 63 2c 00 00 00 2c 20 20 20 20 20 20 20 Async,.GrabModeAsync,...,.......
3f40 20 20 20 20 20 20 20 20 20 20 62 2d 3e 77 69 6e 2c 20 4e 6f 6e 65 2c 20 43 75 72 72 65 6e 74 54 ..........b->win,.None,.CurrentT
3f60 69 6d 65 29 3b 00 00 00 00 00 00 00 1b 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 ime);............w->state.width.
3f80 3d 20 77 69 64 74 68 3b 00 00 00 1d 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 =.width;........w->state.height.
3fa0 3d 20 68 65 69 67 68 74 3b 00 00 00 1c 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 78 20 3d 20 77 =.height;........b->center_x.=.w
3fc0 69 64 74 68 20 2f 20 32 3b 00 00 00 1d 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 79 20 3d 20 68 idth./.2;........b->center_y.=.h
3fe0 65 69 67 68 74 20 2f 20 32 3b 00 00 00 4d 20 20 20 20 58 57 61 72 70 50 6f 69 6e 74 65 72 28 62 eight./.2;...M....XWarpPointer(b
4000 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 62 2d 3e 77 69 6e 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c ->dpy,.None,.b->win,.0,.0,.0,.0,
4020 20 62 2d 3e 63 65 6e 74 65 72 5f 78 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 79 29 3b 00 00 00 12 20 .b->center_x,.b->center_y);.....
4040 20 20 20 62 2d 3e 77 61 72 70 65 64 20 3d 20 31 3b 00 00 00 19 20 20 20 20 58 53 79 6e 63 28 62 ...b->warped.=.1;........XSync(b
4060 2d 3e 64 70 79 2c 20 46 61 6c 73 65 29 3b 00 00 00 00 00 00 00 0d 20 20 20 20 72 65 74 75 72 6e ->dpy,.False);............return
4080 20 31 3b 00 00 00 01 7d 00 00 00 00 00 00 00 21 76 6f 69 64 20 77 69 6e 64 6f 77 5f 78 31 31 5f .1;....}.......!void.window_x11_
40a0 70 6f 6c 6c 28 57 69 6e 64 6f 77 20 2a 77 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 42 61 63 6b poll(Window.*w).{........X11Back
40c0 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 1a 20 20 20 20 77 2d 3e 73 end.*b.=.w->backend;........w->s
40e0 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 3d 20 30 3b 00 00 00 1a 20 20 20 20 77 2d 3e 73 74 61 tate.mouse_dx.=.0;........w->sta
4100 74 65 2e 6d 6f 75 73 65 5f 64 79 20 3d 20 30 3b 00 00 00 00 00 00 00 1e 20 20 20 20 77 68 69 6c te.mouse_dy.=.0;............whil
4120 65 20 28 58 50 65 6e 64 69 6e 67 28 62 2d 3e 64 70 79 29 29 20 7b 00 00 00 11 20 20 20 20 20 20 e.(XPending(b->dpy)).{..........
4140 20 20 58 45 76 65 6e 74 20 65 3b 00 00 00 1f 20 20 20 20 20 20 20 20 58 4e 65 78 74 45 76 65 6e ..XEvent.e;............XNextEven
4160 74 28 62 2d 3e 64 70 79 2c 20 26 65 29 3b 00 00 00 19 20 20 20 20 20 20 20 20 73 77 69 74 63 68 t(b->dpy,.&e);............switch
4180 20 28 65 2e 74 79 70 65 29 20 7b 00 00 00 2d 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 .(e.type).{...-............case.
41a0 4b 65 79 50 72 65 73 73 3a 20 63 61 73 65 20 4b 65 79 52 65 6c 65 61 73 65 3a 20 7b 00 00 00 36 KeyPress:.case.KeyRelease:.{...6
41c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4b 65 79 53 79 6d 20 6b 73 20 3d 20 58 4c 6f 6f ................KeySym.ks.=.XLoo
41e0 6b 75 70 4b 65 79 73 79 6d 28 26 65 2e 78 6b 65 79 2c 20 30 29 3b 00 00 00 2a 20 20 20 20 20 20 kupKeysym(&e.xkey,.0);...*......
4200 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b 20 3d 20 6b 65 79 73 79 6d 5f 74 6f 5f 6b 65 79 28 ..........int.k.=.keysym_to_key(
4220 6b 73 29 3b 00 00 00 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 20 3e 3d ks);...D................if.(k.>=
4240 20 30 29 20 77 2d 3e 73 74 61 74 65 2e 6b 65 79 73 5b 6b 5d 20 3d 20 28 65 2e 74 79 70 65 20 3d .0).w->state.keys[k].=.(e.type.=
4260 3d 20 4b 65 79 50 72 65 73 73 29 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 =.KeyPress);....................
4280 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 33 20 20 20 20 20 break;................}...3.....
42a0 20 20 20 20 20 20 20 63 61 73 65 20 42 75 74 74 6f 6e 50 72 65 73 73 3a 20 63 61 73 65 20 42 75 .......case.ButtonPress:.case.Bu
42c0 74 74 6f 6e 52 65 6c 65 61 73 65 3a 20 7b 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ttonRelease:.{...6..............
42e0 20 20 69 6e 74 20 70 72 65 73 73 65 64 20 3d 20 28 65 2e 74 79 70 65 20 3d 3d 20 42 75 74 74 6f ..int.pressed.=.(e.type.==.Butto
4300 6e 50 72 65 73 73 29 3b 00 00 00 4f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 nPress);...O................if.(
4320 65 2e 78 62 75 74 74 6f 6e 2e 62 75 74 74 6f 6e 20 3d 3d 20 42 75 74 74 6f 6e 31 29 20 77 2d 3e e.xbutton.button.==.Button1).w->
4340 73 74 61 74 65 2e 6d 6f 75 73 65 5f 6c 65 66 74 20 3d 20 70 72 65 73 73 65 64 3b 00 00 00 50 20 state.mouse_left.=.pressed;...P.
4360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 2e 78 62 75 74 74 6f 6e 2e 62 75 74 ...............if.(e.xbutton.but
4380 74 6f 6e 20 3d 3d 20 42 75 74 74 6f 6e 33 29 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 72 ton.==.Button3).w->state.mouse_r
43a0 69 67 68 74 20 3d 20 70 72 65 73 73 65 64 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 ight.=.pressed;.................
43c0 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 20 20 20 ...break;................}......
43e0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 4d 6f 74 69 6f 6e 4e 6f 74 69 66 79 3a 20 7b 00 00 ..........case.MotionNotify:.{..
4400 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 2d 3e 77 61 72 70 65 64 29 ..................if.(b->warped)
4420 20 7b 00 00 00 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 77 61 72 .{..."....................b->war
4440 70 65 64 20 3d 20 30 3b 00 00 00 18 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c ped.=.0;....................}.el
4460 73 65 20 7b 00 00 00 43 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 se.{...C....................w->s
4480 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 2b 3d 20 65 2e 78 6d 6f 74 69 6f 6e 2e 78 20 2d 20 62 tate.mouse_dx.+=.e.xmotion.x.-.b
44a0 2d 3e 63 65 6e 74 65 72 5f 78 3b 00 00 00 43 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ->center_x;...C.................
44c0 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 79 20 2b 3d 20 65 2e 78 6d 6f 74 69 6f ...w->state.mouse_dy.+=.e.xmotio
44e0 6e 2e 79 20 2d 20 62 2d 3e 63 65 6e 74 65 72 5f 79 3b 00 00 00 11 20 20 20 20 20 20 20 20 20 20 n.y.-.b->center_y;..............
4500 20 20 20 20 20 20 7d 00 00 00 4f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 ......}...O................if.(e
4520 2e 78 6d 6f 74 69 6f 6e 2e 78 20 21 3d 20 62 2d 3e 63 65 6e 74 65 72 5f 78 20 7c 7c 20 65 2e 78 .xmotion.x.!=.b->center_x.||.e.x
4540 6d 6f 74 69 6f 6e 2e 79 20 21 3d 20 62 2d 3e 63 65 6e 74 65 72 5f 79 29 20 7b 00 00 00 5d 20 20 motion.y.!=.b->center_y).{...]..
4560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 57 61 72 70 50 6f 69 6e 74 65 72 28 62 ..................XWarpPointer(b
4580 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 62 2d 3e 77 69 6e 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c ->dpy,.None,.b->win,.0,.0,.0,.0,
45a0 20 62 2d 3e 63 65 6e 74 65 72 5f 78 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 79 29 3b 00 00 00 22 20 .b->center_x,.b->center_y);...".
45c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 77 61 72 70 65 64 20 3d 20 31 ...................b->warped.=.1
45e0 3b 00 00 00 11 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 16 20 20 20 20 20 20 ;....................}..........
4600 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 ..........break;................
4620 7d 00 00 00 23 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6e 66 69 67 75 72 65 4e }...#............case.ConfigureN
4640 6f 74 69 66 79 3a 20 7b 00 00 00 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 otify:.{...4................w->s
4660 74 61 74 65 2e 77 69 64 74 68 20 3d 20 65 2e 78 63 6f 6e 66 69 67 75 72 65 2e 77 69 64 74 68 3b tate.width.=.e.xconfigure.width;
4680 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 68 65 69 ...6................w->state.hei
46a0 67 68 74 20 3d 20 65 2e 78 63 6f 6e 66 69 67 75 72 65 2e 68 65 69 67 68 74 3b 00 00 00 31 20 20 ght.=.e.xconfigure.height;...1..
46c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 78 20 3d 20 77 2d 3e 73 ..............b->center_x.=.w->s
46e0 74 61 74 65 2e 77 69 64 74 68 20 2f 20 32 3b 00 00 00 32 20 20 20 20 20 20 20 20 20 20 20 20 20 tate.width./.2;...2.............
4700 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 79 20 3d 20 77 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 ...b->center_y.=.w->state.height
4720 20 2f 20 32 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 ./.2;....................break;.
4740 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 21 20 20 20 20 20 20 20 20 20 20 20 20 ...............}...!............
4760 63 61 73 65 20 43 6c 69 65 6e 74 4d 65 73 73 61 67 65 3a 20 7b 00 00 00 3e 20 20 20 20 20 20 20 case.ClientMessage:.{...>.......
4780 20 20 20 20 20 20 20 20 20 69 66 20 28 28 41 74 6f 6d 29 65 2e 78 63 6c 69 65 6e 74 2e 64 61 74 .........if.((Atom)e.xclient.dat
47a0 61 2e 6c 5b 30 5d 20 3d 3d 20 62 2d 3e 77 6d 5f 64 65 6c 65 74 65 29 00 00 00 2e 20 20 20 20 20 a.l[0].==.b->wm_delete).........
47c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 73 68 6f 75 6c 64 5f 63 ...............w->state.should_c
47e0 6c 6f 73 65 20 3d 20 31 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 lose.=.1;....................bre
4800 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 1b 20 20 20 20 20 20 20 20 ak;................}............
4820 20 20 20 20 64 65 66 61 75 6c 74 3a 20 62 72 65 61 6b 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d ....default:.break;............}
4840 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 21 76 6f 69 64 20 77 69 6e 64 6f ........}....}.......!void.windo
4860 77 5f 78 31 31 5f 73 77 61 70 28 57 69 6e 64 6f 77 20 2a 77 29 20 7b 00 00 00 1f 20 20 20 20 58 w_x11_swap(Window.*w).{........X
4880 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 23 20 20 11Backend.*b.=.w->backend;...#..
48a0 20 20 67 6c 58 53 77 61 70 42 75 66 66 65 72 73 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 29 ..glXSwapBuffers(b->dpy,.b->win)
48c0 3b 00 00 00 01 7d 00 00 00 00 00 00 00 24 76 6f 69 64 20 77 69 6e 64 6f 77 5f 78 31 31 5f 64 65 ;....}.......$void.window_x11_de
48e0 73 74 72 6f 79 28 57 69 6e 64 6f 77 20 2a 77 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 42 61 63 stroy(Window.*w).{........X11Bac
4900 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 27 20 20 20 20 67 6c 58 kend.*b.=.w->backend;...'....glX
4920 4d 61 6b 65 43 75 72 72 65 6e 74 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 4e 55 4c 4c 29 3b MakeCurrent(b->dpy,.None,.NULL);
4940 00 00 00 26 20 20 20 20 67 6c 58 44 65 73 74 72 6f 79 43 6f 6e 74 65 78 74 28 62 2d 3e 64 70 79 ...&....glXDestroyContext(b->dpy
4960 2c 20 62 2d 3e 63 74 78 29 3b 00 00 00 23 20 20 20 20 58 44 65 73 74 72 6f 79 57 69 6e 64 6f 77 ,.b->ctx);...#....XDestroyWindow
4980 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 77 69 6e 29 3b 00 00 00 1a 20 20 20 20 58 43 6c 6f 73 65 44 (b->dpy,.b->win);........XCloseD
49a0 69 73 70 6c 61 79 28 62 2d 3e 64 70 79 29 3b 00 00 00 0c 20 20 20 20 66 72 65 65 28 62 29 3b 00 isplay(b->dpy);........free(b);.
49c0 00 00 01 7d 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 00 00 00 00 01 00 00 00 ...}5...........................
49e0 00 00 00 00 00 00 00 00 00 00 00 00 53 13 00 00 00 00 00 00 01 00 00 00 00 00 00 00 35 81 5f d0 ............S...............5._.
4a00 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 01 00 00 00 00 00 00 00 00 ................................
4a20 ff ff ff ff 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b80 00 00 6a 63 47 36 04 01 00 00 00 03 00 f5 18 00 00 00 73 00 00 00 00 00 00 00 00 00 00 00 01 00 ..jcG6............s.............
4ba0 00 00 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 57 61 72 70 50 6f 69 6e ..)....................XWarpPoin
4bc0 74 65 72 28 62 2d 3e 64 70 79 2c 20 f5 18 00 00 00 74 00 00 00 00 00 00 00 00 00 00 00 00 f5 18 ter(b->dpy,......t..............
4be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 00 01 00 00 00 00 00 00 ................................
4c00 00 00 00 00 00 00 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 73 00 ......5.......................s.
4c20 00 00 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 0f 00 00 00 00 00 00 f5 18 ..).............................
4c40 00 00 00 00 73 00 00 00 29 00 00 00 00 00 00 00 00 00 00 00 22 00 00 00 01 00 00 00 f9 0f 00 00 ....s...)..........."...........
4c60 00 00 00 00 00 00 00 00 00 00 00 00 f4 03 00 00 00 00 00 00 35 81 5f d0 00 00 00 06 00 00 00 08 ....................5._.........
4c80 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 01 00 00 ................................
4ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 63 47 55 04 01 ..........................jcGU..
4e00 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 96 00 00 00 13 23 69 6e 63 6c ...........................#incl
4e20 75 64 65 20 22 77 69 6e 64 6f 77 2e 68 22 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 58 31 31 2f ude."window.h"....#include.<X11/
4e40 58 6c 69 62 2e 68 3e 00 00 00 17 23 69 6e 63 6c 75 64 65 20 3c 58 31 31 2f 6b 65 79 73 79 6d 2e Xlib.h>....#include.<X11/keysym.
4e60 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 47 4c 2f 67 6c 78 2e 68 3e 00 00 00 12 23 69 6e h>....#include.<GL/glx.h>....#in
4e80 63 6c 75 64 65 20 3c 47 4c 2f 67 6c 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 clude.<GL/gl.h>....#include.<std
4ea0 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 00 00 00 lib.h>....#include.<string.h>...
4ec0 00 00 00 00 10 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 00 00 00 11 20 20 20 20 44 69 73 .....typedef.struct.{........Dis
4ee0 70 6c 61 79 20 2a 64 70 79 3b 00 00 00 6b 20 20 20 20 3a 3a 57 69 6e 64 6f 77 20 78 77 69 6e 3b play.*dpy;...k....::Window.xwin;
4f00 20 2f 2f 20 55 73 65 20 65 78 70 6c 69 63 69 74 20 67 6c 6f 62 61 6c 20 73 63 6f 70 65 20 72 65 .//.Use.explicit.global.scope.re
4f20 73 6f 6c 75 74 69 6f 6e 20 6f 72 20 72 65 6e 61 6d 65 20 74 6f 20 61 76 6f 69 64 20 63 6f 6c 6c solution.or.rename.to.avoid.coll
4f40 69 73 69 6f 6e 20 77 69 74 68 20 58 31 31 27 73 20 27 57 69 6e 64 6f 77 27 00 00 00 13 20 20 20 ision.with.X11's.'Window'.......
4f60 20 47 4c 58 43 6f 6e 74 65 78 74 20 63 74 78 3b 00 00 00 13 20 20 20 20 41 74 6f 6d 20 77 6d 5f .GLXContext.ctx;........Atom.wm_
4f80 64 65 6c 65 74 65 3b 00 00 00 1b 20 20 20 20 69 6e 74 20 63 65 6e 74 65 72 5f 78 2c 20 63 65 6e delete;........int.center_x,.cen
4fa0 74 65 72 5f 79 3b 00 00 00 0f 20 20 20 20 69 6e 74 20 77 61 72 70 65 64 3b 00 00 00 0d 7d 20 58 ter_y;........int.warped;....}.X
4fc0 31 31 42 61 63 6b 65 6e 64 3b 00 00 00 00 00 00 00 25 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 11Backend;.......%static.int.key
4fe0 73 79 6d 5f 74 6f 5f 6b 65 79 28 4b 65 79 53 79 6d 20 6b 73 29 20 7b 00 00 00 11 20 20 20 20 73 sym_to_key(KeySym.ks).{........s
5000 77 69 74 63 68 20 28 6b 73 29 20 7b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f witch.(ks).{...+........case.XK_
5020 77 3a 20 63 61 73 65 20 58 4b 5f 57 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 57 3b 00 00 00 2b 20 w:.case.XK_W:.return.KEY_W;...+.
5040 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 61 3a 20 63 61 73 65 20 58 4b 5f 41 3a 20 72 65 74 .......case.XK_a:.case.XK_A:.ret
5060 75 72 6e 20 4b 45 59 5f 41 3b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 73 3a urn.KEY_A;...+........case.XK_s:
5080 20 63 61 73 65 20 58 4b 5f 53 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 53 3b 00 00 00 2b 20 20 20 .case.XK_S:.return.KEY_S;...+...
50a0 20 20 20 20 20 63 61 73 65 20 58 4b 5f 64 3a 20 63 61 73 65 20 58 4b 5f 44 3a 20 72 65 74 75 72 .....case.XK_d:.case.XK_D:.retur
50c0 6e 20 4b 45 59 5f 44 3b 00 00 00 28 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 73 70 61 63 n.KEY_D;...(........case.XK_spac
50e0 65 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 53 50 41 43 45 3b 00 00 00 27 20 20 20 20 20 20 20 20 e:.return.KEY_SPACE;...'........
5100 63 61 73 65 20 58 4b 5f 45 73 63 61 70 65 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 45 53 43 3b 00 case.XK_Escape:.return.KEY_ESC;.
5120 00 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 31 3a 20 72 65 74 75 72 6e 20 4b 45 59 ...........case.XK_1:.return.KEY
5140 5f 31 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 32 3a 20 72 65 74 75 72 6e _1;............case.XK_2:.return
5160 20 4b 45 59 5f 32 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 33 3a 20 72 65 .KEY_2;............case.XK_3:.re
5180 74 75 72 6e 20 4b 45 59 5f 33 3b 00 00 00 1b 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 turn.KEY_3;............default:.
51a0 72 65 74 75 72 6e 20 2d 31 3b 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 57 return.-1;........}....}.......W
51c0 69 6e 74 20 77 69 6e 64 6f 77 5f 78 31 31 5f 69 6e 69 74 28 73 74 72 75 63 74 20 4e 61 74 69 76 int.window_x11_init(struct.Nativ
51e0 65 57 69 6e 64 6f 77 20 2a 77 2c 20 69 6e 74 20 77 69 64 74 68 2c 20 69 6e 74 20 68 65 69 67 68 eWindow.*w,.int.width,.int.heigh
5200 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 74 69 74 6c 65 29 20 7b 00 00 00 32 20 20 20 20 58 t,.const.char.*title).{...2....X
5220 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 63 61 6c 6c 6f 63 28 31 2c 20 73 69 7a 65 6f 66 28 11Backend.*b.=.calloc(1,.sizeof(
5240 58 31 31 42 61 63 6b 65 6e 64 29 29 3b 00 00 00 13 20 20 20 20 77 2d 3e 62 61 63 6b 65 6e 64 20 X11Backend));........w->backend.
5260 3d 20 62 3b 00 00 00 00 00 00 00 20 20 20 20 20 62 2d 3e 64 70 79 20 3d 20 58 4f 70 65 6e 44 69 =.b;............b->dpy.=.XOpenDi
5280 73 70 6c 61 79 28 4e 55 4c 4c 29 3b 00 00 00 27 20 20 20 20 69 66 20 28 21 62 2d 3e 64 70 79 29 splay(NULL);...'....if.(!b->dpy)
52a0 20 7b 20 66 72 65 65 28 62 29 3b 20 72 65 74 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 27 20 .{.free(b);.return.0;.}.......'.
52c0 20 20 20 69 6e 74 20 73 63 72 65 65 6e 20 3d 20 44 65 66 61 75 6c 74 53 63 72 65 65 6e 28 62 2d ...int.screen.=.DefaultScreen(b-
52e0 3e 64 70 79 29 3b 00 00 00 4d 20 20 20 20 69 6e 74 20 61 74 74 72 69 62 73 5b 5d 20 3d 20 7b 20 >dpy);...M....int.attribs[].=.{.
5300 47 4c 58 5f 52 47 42 41 2c 20 47 4c 58 5f 44 45 50 54 48 5f 53 49 5a 45 2c 20 32 34 2c 20 47 4c GLX_RGBA,.GLX_DEPTH_SIZE,.24,.GL
5320 58 5f 44 4f 55 42 4c 45 42 55 46 46 45 52 2c 20 4e 6f 6e 65 20 7d 3b 00 00 00 3f 20 20 20 20 58 X_DOUBLEBUFFER,.None.};...?....X
5340 56 69 73 75 61 6c 49 6e 66 6f 20 2a 76 69 20 3d 20 67 6c 58 43 68 6f 6f 73 65 56 69 73 75 61 6c VisualInfo.*vi.=.glXChooseVisual
5360 28 62 2d 3e 64 70 79 2c 20 73 63 72 65 65 6e 2c 20 61 74 74 72 69 62 73 29 3b 00 00 00 3a 20 20 (b->dpy,.screen,.attribs);...:..
5380 20 20 69 66 20 28 21 76 69 29 20 7b 20 58 43 6c 6f 73 65 44 69 73 70 6c 61 79 28 62 2d 3e 64 70 ..if.(!vi).{.XCloseDisplay(b->dp
53a0 79 29 3b 20 66 72 65 65 28 62 29 3b 20 72 65 74 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 2f y);.free(b);.return.0;.}......./
53c0 20 20 20 20 3a 3a 57 69 6e 64 6f 77 20 72 6f 6f 74 20 3d 20 52 6f 6f 74 57 69 6e 64 6f 77 28 62 ....::Window.root.=.RootWindow(b
53e0 2d 3e 64 70 79 2c 20 73 63 72 65 65 6e 29 3b 00 00 00 49 20 20 20 20 43 6f 6c 6f 72 6d 61 70 20 ->dpy,.screen);...I....Colormap.
5400 63 6d 61 70 20 3d 20 58 43 72 65 61 74 65 43 6f 6c 6f 72 6d 61 70 28 62 2d 3e 64 70 79 2c 20 72 cmap.=.XCreateColormap(b->dpy,.r
5420 6f 6f 74 2c 20 76 69 2d 3e 76 69 73 75 61 6c 2c 20 41 6c 6c 6f 63 4e 6f 6e 65 29 3b 00 00 00 1d oot,.vi->visual,.AllocNone);....
5440 20 20 20 20 58 53 65 74 57 69 6e 64 6f 77 41 74 74 72 69 62 75 74 65 73 20 73 77 61 3b 00 00 00 ....XSetWindowAttributes.swa;...
5460 18 20 20 20 20 73 77 61 2e 63 6f 6c 6f 72 6d 61 70 20 3d 20 63 6d 61 70 3b 00 00 00 46 20 20 20 .....swa.colormap.=.cmap;...F...
5480 20 73 77 61 2e 65 76 65 6e 74 5f 6d 61 73 6b 20 3d 20 4b 65 79 50 72 65 73 73 4d 61 73 6b 20 7c .swa.event_mask.=.KeyPressMask.|
54a0 20 4b 65 79 52 65 6c 65 61 73 65 4d 61 73 6b 20 7c 20 42 75 74 74 6f 6e 50 72 65 73 73 4d 61 73 .KeyReleaseMask.|.ButtonPressMas
54c0 6b 20 7c 00 00 00 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 k.|...R......................But
54e0 74 6f 6e 52 65 6c 65 61 73 65 4d 61 73 6b 20 7c 20 50 6f 69 6e 74 65 72 4d 6f 74 69 6f 6e 4d 61 tonReleaseMask.|.PointerMotionMa
5500 73 6b 20 7c 20 53 74 72 75 63 74 75 72 65 4e 6f 74 69 66 79 4d 61 73 6b 3b 00 00 00 00 00 00 00 sk.|.StructureNotifyMask;.......
5520 60 20 20 20 20 62 2d 3e 78 77 69 6e 20 3d 20 58 43 72 65 61 74 65 57 69 6e 64 6f 77 28 62 2d 3e `....b->xwin.=.XCreateWindow(b->
5540 64 70 79 2c 20 72 6f 6f 74 2c 20 30 2c 20 30 2c 20 28 75 6e 73 69 67 6e 65 64 29 77 69 64 74 68 dpy,.root,.0,.0,.(unsigned)width
5560 2c 20 28 75 6e 73 69 67 6e 65 64 29 68 65 69 67 68 74 2c 20 30 2c 20 76 69 2d 3e 64 65 70 74 68 ,.(unsigned)height,.0,.vi->depth
5580 2c 00 00 00 55 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,...U...........................
55a0 20 49 6e 70 75 74 4f 75 74 70 75 74 2c 20 76 69 2d 3e 76 69 73 75 61 6c 2c 20 43 57 43 6f 6c 6f .InputOutput,.vi->visual,.CWColo
55c0 72 6d 61 70 20 7c 20 43 57 45 76 65 6e 74 4d 61 73 6b 2c 20 26 73 77 61 29 3b 00 00 00 27 20 20 rmap.|.CWEventMask,.&swa);...'..
55e0 20 20 58 53 74 6f 72 65 4e 61 6d 65 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 77 69 6e 2c 20 74 69 ..XStoreName(b->dpy,.b->xwin,.ti
5600 74 6c 65 29 3b 00 00 00 42 20 20 20 20 62 2d 3e 77 6d 5f 64 65 6c 65 74 65 20 3d 20 58 49 6e 74 tle);...B....b->wm_delete.=.XInt
5620 65 72 6e 41 74 6f 6d 28 62 2d 3e 64 70 79 2c 20 22 57 4d 5f 44 45 4c 45 54 45 5f 57 49 4e 44 4f ernAtom(b->dpy,."WM_DELETE_WINDO
5640 57 22 2c 20 46 61 6c 73 65 29 3b 00 00 00 37 20 20 20 20 58 53 65 74 57 4d 50 72 6f 74 6f 63 6f W",.False);...7....XSetWMProtoco
5660 6c 73 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 77 69 6e 2c 20 26 62 2d 3e 77 6d 5f 64 65 6c 65 74 ls(b->dpy,.b->xwin,.&b->wm_delet
5680 65 2c 20 31 29 3b 00 00 00 20 20 20 20 20 58 4d 61 70 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c e,.1);........XMapWindow(b->dpy,
56a0 20 62 2d 3e 78 77 69 6e 29 3b 00 00 00 00 00 00 00 36 20 20 20 20 62 2d 3e 63 74 78 20 3d 20 67 .b->xwin);.......6....b->ctx.=.g
56c0 6c 58 43 72 65 61 74 65 43 6f 6e 74 65 78 74 28 62 2d 3e 64 70 79 2c 20 76 69 2c 20 4e 55 4c 4c lXCreateContext(b->dpy,.vi,.NULL
56e0 2c 20 54 72 75 65 29 3b 00 00 00 2c 20 20 20 20 67 6c 58 4d 61 6b 65 43 75 72 72 65 6e 74 28 62 ,.True);...,....glXMakeCurrent(b
5700 2d 3e 64 70 79 2c 20 62 2d 3e 78 77 69 6e 2c 20 62 2d 3e 63 74 78 29 3b 00 00 00 0e 20 20 20 20 ->dpy,.b->xwin,.b->ctx);........
5720 58 46 72 65 65 28 76 69 29 3b 00 00 00 00 00 00 00 17 20 20 20 20 63 68 61 72 20 64 61 74 61 5b XFree(vi);............char.data[
5740 38 5d 20 3d 20 7b 30 7d 3b 00 00 00 46 20 20 20 20 50 69 78 6d 61 70 20 62 6c 61 6e 6b 20 3d 20 8].=.{0};...F....Pixmap.blank.=.
5760 58 43 72 65 61 74 65 42 69 74 6d 61 70 46 72 6f 6d 44 61 74 61 28 62 2d 3e 64 70 79 2c 20 62 2d XCreateBitmapFromData(b->dpy,.b-
5780 3e 78 77 69 6e 2c 20 64 61 74 61 2c 20 31 2c 20 31 29 3b 00 00 00 11 20 20 20 20 58 43 6f 6c 6f >xwin,.data,.1,.1);........XColo
57a0 72 20 64 75 6d 6d 79 3b 00 00 00 25 20 20 20 20 6d 65 6d 73 65 74 28 26 64 75 6d 6d 79 2c 20 30 r.dummy;...%....memset(&dummy,.0
57c0 2c 20 73 69 7a 65 6f 66 28 64 75 6d 6d 79 29 29 3b 00 00 00 54 20 20 20 20 43 75 72 73 6f 72 20 ,.sizeof(dummy));...T....Cursor.
57e0 63 75 72 73 6f 72 20 3d 20 58 43 72 65 61 74 65 50 69 78 6d 61 70 43 75 72 73 6f 72 28 62 2d 3e cursor.=.XCreatePixmapCursor(b->
5800 64 70 79 2c 20 62 6c 61 6e 6b 2c 20 62 6c 61 6e 6b 2c 20 26 64 75 6d 6d 79 2c 20 26 64 75 6d 6d dpy,.blank,.blank,.&dummy,.&dumm
5820 79 2c 20 30 2c 20 30 29 3b 00 00 00 2b 20 20 20 20 58 44 65 66 69 6e 65 43 75 72 73 6f 72 28 62 y,.0,.0);...+....XDefineCursor(b
5840 2d 3e 64 70 79 2c 20 62 2d 3e 78 77 69 6e 2c 20 63 75 72 73 6f 72 29 3b 00 00 00 1f 20 20 20 20 ->dpy,.b->xwin,.cursor);........
5860 58 46 72 65 65 50 69 78 6d 61 70 28 62 2d 3e 64 70 79 2c 20 62 6c 61 6e 6b 29 3b 00 00 00 20 20 XFreePixmap(b->dpy,.blank);.....
5880 20 20 20 58 46 72 65 65 43 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c 20 63 75 72 73 6f 72 29 3b 00 ...XFreeCursor(b->dpy,.cursor);.
58a0 00 00 00 00 00 00 19 20 20 20 20 58 53 79 6e 63 28 62 2d 3e 64 70 79 2c 20 46 61 6c 73 65 29 3b ...........XSync(b->dpy,.False);
58c0 00 00 00 48 20 20 20 20 58 47 72 61 62 50 6f 69 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 62 2d 3e ...H....XGrabPointer(b->dpy,.b->
58e0 78 77 69 6e 2c 20 54 72 75 65 2c 20 30 2c 20 47 72 61 62 4d 6f 64 65 41 73 79 6e 63 2c 20 47 72 xwin,.True,.0,.GrabModeAsync,.Gr
5900 61 62 4d 6f 64 65 41 73 79 6e 63 2c 00 00 00 2d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 abModeAsync,...-................
5920 20 62 2d 3e 78 77 69 6e 2c 20 4e 6f 6e 65 2c 20 43 75 72 72 65 6e 74 54 69 6d 65 29 3b 00 00 00 .b->xwin,.None,.CurrentTime);...
5940 00 00 00 00 1b 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 3d 20 77 69 64 74 68 3b .........w->state.width.=.width;
5960 00 00 00 1d 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 3d 20 68 65 69 67 68 74 ........w->state.height.=.height
5980 3b 00 00 00 1c 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 78 20 3d 20 77 69 64 74 68 20 2f 20 32 ;........b->center_x.=.width./.2
59a0 3b 00 00 00 1d 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 79 20 3d 20 68 65 69 67 68 74 20 2f 20 ;........b->center_y.=.height./.
59c0 32 3b 00 00 00 4e 20 20 20 20 58 57 61 72 70 50 6f 69 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 4e 2;...N....XWarpPointer(b->dpy,.N
59e0 6f 6e 65 2c 20 62 2d 3e 78 77 69 6e 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 62 2d 3e 63 65 6e one,.b->xwin,.0,.0,.0,.0,.b->cen
5a00 74 65 72 5f 78 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 79 29 3b 00 00 00 12 20 20 20 20 62 2d 3e 77 ter_x,.b->center_y);........b->w
5a20 61 72 70 65 64 20 3d 20 31 3b 00 00 00 19 20 20 20 20 58 53 79 6e 63 28 62 2d 3e 64 70 79 2c 20 arped.=.1;........XSync(b->dpy,.
5a40 46 61 6c 73 65 29 3b 00 00 00 00 00 00 00 0d 20 20 20 20 72 65 74 75 72 6e 20 31 3b 00 00 00 01 False);............return.1;....
5a60 7d 00 00 00 00 00 00 00 2e 76 6f 69 64 20 77 69 6e 64 6f 77 5f 78 31 31 5f 70 6f 6c 6c 28 73 74 }........void.window_x11_poll(st
5a80 72 75 63 74 20 4e 61 74 69 76 65 57 69 6e 64 6f 77 20 2a 77 29 20 7b 00 00 00 1f 20 20 20 20 58 ruct.NativeWindow.*w).{........X
5aa0 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 1a 20 20 11Backend.*b.=.w->backend;......
5ac0 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 3d 20 30 3b 00 00 00 1a 20 20 20 20 ..w->state.mouse_dx.=.0;........
5ae0 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 79 20 3d 20 30 3b 00 00 00 00 00 00 00 1e 20 20 w->state.mouse_dy.=.0;..........
5b00 20 20 77 68 69 6c 65 20 28 58 50 65 6e 64 69 6e 67 28 62 2d 3e 64 70 79 29 29 20 7b 00 00 00 11 ..while.(XPending(b->dpy)).{....
5b20 20 20 20 20 20 20 20 20 58 45 76 65 6e 74 20 65 3b 00 00 00 1f 20 20 20 20 20 20 20 20 58 4e 65 ........XEvent.e;............XNe
5b40 78 74 45 76 65 6e 74 28 62 2d 3e 64 70 79 2c 20 26 65 29 3b 00 00 00 19 20 20 20 20 20 20 20 20 xtEvent(b->dpy,.&e);............
5b60 73 77 69 74 63 68 20 28 65 2e 74 79 70 65 29 20 7b 00 00 00 2d 20 20 20 20 20 20 20 20 20 20 20 switch.(e.type).{...-...........
5b80 20 63 61 73 65 20 4b 65 79 50 72 65 73 73 3a 20 63 61 73 65 20 4b 65 79 52 65 6c 65 61 73 65 3a .case.KeyPress:.case.KeyRelease:
5ba0 20 7b 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4b 65 79 53 79 6d 20 6b 73 20 .{...6................KeySym.ks.
5bc0 3d 20 58 4c 6f 6f 6b 75 70 4b 65 79 73 79 6d 28 26 65 2e 78 6b 65 79 2c 20 30 29 3b 00 00 00 2a =.XLookupKeysym(&e.xkey,.0);...*
5be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b 20 3d 20 6b 65 79 73 79 6d 5f 74 ................int.k.=.keysym_t
5c00 6f 5f 6b 65 79 28 6b 73 29 3b 00 00 00 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 o_key(ks);...D................if
5c20 20 28 6b 20 3e 3d 20 30 29 20 77 2d 3e 73 74 61 74 65 2e 6b 65 79 73 5b 6b 5d 20 3d 20 28 65 2e .(k.>=.0).w->state.keys[k].=.(e.
5c40 74 79 70 65 20 3d 3d 20 4b 65 79 50 72 65 73 73 29 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 type.==.KeyPress);..............
5c60 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 ......break;................}...
5c80 33 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 42 75 74 74 6f 6e 50 72 65 73 73 3a 20 63 3............case.ButtonPress:.c
5ca0 61 73 65 20 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3a 20 7b 00 00 00 36 20 20 20 20 20 20 20 20 ase.ButtonRelease:.{...6........
5cc0 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 65 73 73 65 64 20 3d 20 28 65 2e 74 79 70 65 20 3d 3d ........int.pressed.=.(e.type.==
5ce0 20 42 75 74 74 6f 6e 50 72 65 73 73 29 3b 00 00 00 4f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .ButtonPress);...O..............
5d00 20 20 69 66 20 28 65 2e 78 62 75 74 74 6f 6e 2e 62 75 74 74 6f 6e 20 3d 3d 20 42 75 74 74 6f 6e ..if.(e.xbutton.button.==.Button
5d20 31 29 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 6c 65 66 74 20 3d 20 70 72 65 73 73 65 64 1).w->state.mouse_left.=.pressed
5d40 3b 00 00 00 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 2e 78 62 75 74 74 ;...P................if.(e.xbutt
5d60 6f 6e 2e 62 75 74 74 6f 6e 20 3d 3d 20 42 75 74 74 6f 6e 33 29 20 77 2d 3e 73 74 61 74 65 2e 6d on.button.==.Button3).w->state.m
5d80 6f 75 73 65 5f 72 69 67 68 74 20 3d 20 70 72 65 73 73 65 64 3b 00 00 00 16 20 20 20 20 20 20 20 ouse_right.=.pressed;...........
5da0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d .........break;................}
5dc0 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 4d 6f 74 69 6f 6e 4e 6f 74 69 66 ................case.MotionNotif
5de0 79 3a 20 7b 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 2d 3e 77 y:.{....................if.(b->w
5e00 61 72 70 65 64 29 20 7b 00 00 00 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 arped).{..."....................
5e20 62 2d 3e 77 61 72 70 65 64 20 3d 20 30 3b 00 00 00 18 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b->warped.=.0;..................
5e40 20 20 7d 20 65 6c 73 65 20 7b 00 00 00 43 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..}.else.{...C..................
5e60 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 2b 3d 20 65 2e 78 6d 6f 74 69 6f 6e ..w->state.mouse_dx.+=.e.xmotion
5e80 2e 78 20 2d 20 62 2d 3e 63 65 6e 74 65 72 5f 78 3b 00 00 00 43 20 20 20 20 20 20 20 20 20 20 20 .x.-.b->center_x;...C...........
5ea0 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 79 20 2b 3d 20 65 2e .........w->state.mouse_dy.+=.e.
5ec0 78 6d 6f 74 69 6f 6e 2e 79 20 2d 20 62 2d 3e 63 65 6e 74 65 72 5f 79 3b 00 00 00 11 20 20 20 20 xmotion.y.-.b->center_y;........
5ee0 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 4f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ............}...O...............
5f00 20 69 66 20 28 65 2e 78 6d 6f 74 69 6f 6e 2e 78 20 21 3d 20 62 2d 3e 63 65 6e 74 65 72 5f 78 20 .if.(e.xmotion.x.!=.b->center_x.
5f20 7c 7c 20 65 2e 78 6d 6f 74 69 6f 6e 2e 79 20 21 3d 20 62 2d 3e 63 65 6e 74 65 72 5f 79 29 20 7b ||.e.xmotion.y.!=.b->center_y).{
5f40 00 00 00 5e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 57 61 72 70 50 6f 69 ...^....................XWarpPoi
5f60 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 62 2d 3e 78 77 69 6e 2c 20 30 2c 20 30 nter(b->dpy,.None,.b->xwin,.0,.0
5f80 2c 20 30 2c 20 30 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 78 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 79 ,.0,.0,.b->center_x,.b->center_y
5fa0 29 3b 00 00 00 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 77 61 72 );..."....................b->war
5fc0 70 65 64 20 3d 20 31 3b 00 00 00 11 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 ped.=.1;....................}...
5fe0 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 .................break;.........
6000 20 20 20 20 20 20 20 7d 00 00 00 23 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6e .......}...#............case.Con
6020 66 69 67 75 72 65 4e 6f 74 69 66 79 3a 20 7b 00 00 00 34 20 20 20 20 20 20 20 20 20 20 20 20 20 figureNotify:.{...4.............
6040 20 20 20 77 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 3d 20 65 2e 78 63 6f 6e 66 69 67 75 72 65 ...w->state.width.=.e.xconfigure
6060 2e 77 69 64 74 68 3b 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 .width;...6................w->st
6080 61 74 65 2e 68 65 69 67 68 74 20 3d 20 65 2e 78 63 6f 6e 66 69 67 75 72 65 2e 68 65 69 67 68 74 ate.height.=.e.xconfigure.height
60a0 3b 00 00 00 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 78 ;...1................b->center_x
60c0 20 3d 20 77 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 2f 20 32 3b 00 00 00 32 20 20 20 20 20 20 .=.w->state.width./.2;...2......
60e0 20 20 20 20 20 20 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 79 20 3d 20 77 2d 3e 73 74 61 74 65 ..........b->center_y.=.w->state
6100 2e 68 65 69 67 68 74 20 2f 20 32 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .height./.2;....................
6120 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 21 20 20 20 20 20 break;................}...!.....
6140 20 20 20 20 20 20 20 63 61 73 65 20 43 6c 69 65 6e 74 4d 65 73 73 61 67 65 3a 20 7b 00 00 00 3e .......case.ClientMessage:.{...>
6160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 41 74 6f 6d 29 65 2e 78 63 6c 69 ................if.((Atom)e.xcli
6180 65 6e 74 2e 64 61 74 61 2e 6c 5b 30 5d 20 3d 3d 20 62 2d 3e 77 6d 5f 64 65 6c 65 74 65 29 00 00 ent.data.l[0].==.b->wm_delete)..
61a0 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 73 ......................w->state.s
61c0 68 6f 75 6c 64 5f 63 6c 6f 73 65 20 3d 20 31 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 hould_close.=.1;................
61e0 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 1b 20 ....break;................}.....
6200 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 62 72 65 61 6b 3b 00 00 00 09 20 20 ...........default:.break;......
6220 20 20 20 20 20 20 7d 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 2e 76 6f 69 ......}........}....}........voi
6240 64 20 77 69 6e 64 6f 77 5f 78 31 31 5f 73 77 61 70 28 73 74 72 75 63 74 20 4e 61 74 69 76 65 57 d.window_x11_swap(struct.NativeW
6260 69 6e 64 6f 77 20 2a 77 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 42 61 63 6b 65 6e 64 20 2a 62 indow.*w).{........X11Backend.*b
6280 20 3d 20 77 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 24 20 20 20 20 67 6c 58 53 77 61 70 42 75 66 .=.w->backend;...$....glXSwapBuf
62a0 66 65 72 73 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 77 69 6e 29 3b 00 00 00 01 7d 00 00 00 00 00 fers(b->dpy,.b->xwin);....}.....
62c0 00 00 31 76 6f 69 64 20 77 69 6e 64 6f 77 5f 78 31 31 5f 64 65 73 74 72 6f 79 28 73 74 72 75 63 ..1void.window_x11_destroy(struc
62e0 74 20 4e 61 74 69 76 65 57 69 6e 64 6f 77 20 2a 77 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 42 t.NativeWindow.*w).{........X11B
6300 61 63 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 27 20 20 20 20 67 ackend.*b.=.w->backend;...'....g
6320 6c 58 4d 61 6b 65 43 75 72 72 65 6e 74 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 4e 55 4c 4c lXMakeCurrent(b->dpy,.None,.NULL
6340 29 3b 00 00 00 26 20 20 20 20 67 6c 58 44 65 73 74 72 6f 79 43 6f 6e 74 65 78 74 28 62 2d 3e 64 );...&....glXDestroyContext(b->d
6360 70 79 2c 20 62 2d 3e 63 74 78 29 3b 00 00 00 24 20 20 20 20 58 44 65 73 74 72 6f 79 57 69 6e 64 py,.b->ctx);...$....XDestroyWind
6380 6f 77 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 77 69 6e 29 3b 00 00 00 1a 20 20 20 20 58 43 6c 6f ow(b->dpy,.b->xwin);........XClo
63a0 73 65 44 69 73 70 6c 61 79 28 62 2d 3e 64 70 79 29 3b 00 00 00 0c 20 20 20 20 66 72 65 65 28 62 seDisplay(b->dpy);........free(b
63c0 29 3b 00 00 00 01 7d 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 00 00 00 00 01 );....}5........................
63e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ee 13 00 00 00 00 00 00 01 00 00 00 00 00 00 00 35 ...............................5
6400 81 5f d0 00 00 00 07 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 01 00 00 00 00 00 ._..............................
6420 00 00 00 ff ff ff ff 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
64a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
64c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
64e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6580 00 00 00 00 00 6a 63 47 56 04 01 00 00 00 04 00 f5 18 00 00 00 73 00 00 00 00 00 00 00 00 00 00 .....jcGV............s..........
65a0 00 01 00 00 00 0e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f5 18 00 00 00 74 00 00 00 00 00 00 .........................t......
65c0 00 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 ................................
65e0 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..............5.................
6600 00 00 00 00 00 00 73 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 0f ......s.........................
6620 00 00 00 00 00 00 f5 18 00 00 00 00 73 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 22 00 00 00 ............s..............."...
6640 01 00 00 00 f9 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 04 00 00 00 00 00 00 35 81 5f d0 ....................$.......5._.
6660 00 00 00 08 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 09 00 00 00 01 00 00 00 12 00 00 00 00 ................................
6680 ff ff ff ff 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
66a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
66c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
66e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
67a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
67c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
67e0 00 00 6a 63 47 7d 04 01 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 96 00 ..jcG}..........................
6800 00 00 13 23 69 6e 63 6c 75 64 65 20 22 77 69 6e 64 6f 77 2e 68 22 00 00 00 15 23 69 6e 63 6c 75 ...#include."window.h"....#inclu
6820 64 65 20 3c 58 31 31 2f 58 6c 69 62 2e 68 3e 00 00 00 17 23 69 6e 63 6c 75 64 65 20 3c 58 31 31 de.<X11/Xlib.h>....#include.<X11
6840 2f 6b 65 79 73 79 6d 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 47 4c 2f 67 6c 78 2e 68 /keysym.h>....#include.<GL/glx.h
6860 3e 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 47 4c 2f 67 6c 2e 68 3e 00 00 00 13 23 69 6e 63 6c >....#include.<GL/gl.h>....#incl
6880 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 ude.<stdlib.h>....#include.<stri
68a0 6e 67 2e 68 3e 00 00 00 00 00 00 00 10 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 00 00 00 ng.h>........typedef.struct.{...
68c0 11 20 20 20 20 44 69 73 70 6c 61 79 20 2a 64 70 79 3b 00 00 00 1e 20 20 20 20 75 6e 73 69 67 6e .....Display.*dpy;........unsign
68e0 65 64 20 6c 6f 6e 67 20 78 5f 77 69 6e 64 6f 77 5f 69 64 3b 00 00 00 13 20 20 20 20 47 4c 58 43 ed.long.x_window_id;........GLXC
6900 6f 6e 74 65 78 74 20 63 74 78 3b 00 00 00 13 20 20 20 20 41 74 6f 6d 20 77 6d 5f 64 65 6c 65 74 ontext.ctx;........Atom.wm_delet
6920 65 3b 00 00 00 1b 20 20 20 20 69 6e 74 20 63 65 6e 74 65 72 5f 78 2c 20 63 65 6e 74 65 72 5f 79 e;........int.center_x,.center_y
6940 3b 00 00 00 0f 20 20 20 20 69 6e 74 20 77 61 72 70 65 64 3b 00 00 00 0d 7d 20 58 31 31 42 61 63 ;........int.warped;....}.X11Bac
6960 6b 65 6e 64 3b 00 00 00 00 00 00 00 25 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 73 79 6d 5f 74 kend;.......%static.int.keysym_t
6980 6f 5f 6b 65 79 28 4b 65 79 53 79 6d 20 6b 73 29 20 7b 00 00 00 11 20 20 20 20 73 77 69 74 63 68 o_key(KeySym.ks).{........switch
69a0 20 28 6b 73 29 20 7b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 77 3a 20 63 61 .(ks).{...+........case.XK_w:.ca
69c0 73 65 20 58 4b 5f 57 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 57 3b 00 00 00 2b 20 20 20 20 20 20 se.XK_W:.return.KEY_W;...+......
69e0 20 20 63 61 73 65 20 58 4b 5f 61 3a 20 63 61 73 65 20 58 4b 5f 41 3a 20 72 65 74 75 72 6e 20 4b ..case.XK_a:.case.XK_A:.return.K
6a00 45 59 5f 41 3b 00 00 00 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 73 3a 20 63 61 73 65 EY_A;...+........case.XK_s:.case
6a20 20 58 4b 5f 53 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 53 3b 00 00 00 2b 20 20 20 20 20 20 20 20 .XK_S:.return.KEY_S;...+........
6a40 63 61 73 65 20 58 4b 5f 64 3a 20 63 61 73 65 20 58 4b 5f 44 3a 20 72 65 74 75 72 6e 20 4b 45 59 case.XK_d:.case.XK_D:.return.KEY
6a60 5f 44 3b 00 00 00 28 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 73 70 61 63 65 3a 20 72 65 _D;...(........case.XK_space:.re
6a80 74 75 72 6e 20 4b 45 59 5f 53 50 41 43 45 3b 00 00 00 27 20 20 20 20 20 20 20 20 63 61 73 65 20 turn.KEY_SPACE;...'........case.
6aa0 58 4b 5f 45 73 63 61 70 65 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 45 53 43 3b 00 00 00 20 20 20 XK_Escape:.return.KEY_ESC;......
6ac0 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 31 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f 31 3b 00 00 ......case.XK_1:.return.KEY_1;..
6ae0 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 32 3a 20 72 65 74 75 72 6e 20 4b 45 59 5f ..........case.XK_2:.return.KEY_
6b00 32 3b 00 00 00 20 20 20 20 20 20 20 20 20 63 61 73 65 20 58 4b 5f 33 3a 20 72 65 74 75 72 6e 20 2;............case.XK_3:.return.
6b20 4b 45 59 5f 33 3b 00 00 00 1b 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 72 65 74 75 72 KEY_3;............default:.retur
6b40 6e 20 2d 31 3b 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 57 69 6e 74 20 77 n.-1;........}....}.......Wint.w
6b60 69 6e 64 6f 77 5f 78 31 31 5f 69 6e 69 74 28 73 74 72 75 63 74 20 4e 61 74 69 76 65 57 69 6e 64 indow_x11_init(struct.NativeWind
6b80 6f 77 20 2a 77 2c 20 69 6e 74 20 77 69 64 74 68 2c 20 69 6e 74 20 68 65 69 67 68 74 2c 20 63 6f ow.*w,.int.width,.int.height,.co
6ba0 6e 73 74 20 63 68 61 72 20 2a 74 69 74 6c 65 29 20 7b 00 00 00 32 20 20 20 20 58 31 31 42 61 63 nst.char.*title).{...2....X11Bac
6bc0 6b 65 6e 64 20 2a 62 20 3d 20 63 61 6c 6c 6f 63 28 31 2c 20 73 69 7a 65 6f 66 28 58 31 31 42 61 kend.*b.=.calloc(1,.sizeof(X11Ba
6be0 63 6b 65 6e 64 29 29 3b 00 00 00 13 20 20 20 20 77 2d 3e 62 61 63 6b 65 6e 64 20 3d 20 62 3b 00 ckend));........w->backend.=.b;.
6c00 00 00 00 00 00 00 20 20 20 20 20 62 2d 3e 64 70 79 20 3d 20 58 4f 70 65 6e 44 69 73 70 6c 61 79 ...........b->dpy.=.XOpenDisplay
6c20 28 4e 55 4c 4c 29 3b 00 00 00 27 20 20 20 20 69 66 20 28 21 62 2d 3e 64 70 79 29 20 7b 20 66 72 (NULL);...'....if.(!b->dpy).{.fr
6c40 65 65 28 62 29 3b 20 72 65 74 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 27 20 20 20 20 69 6e ee(b);.return.0;.}.......'....in
6c60 74 20 73 63 72 65 65 6e 20 3d 20 44 65 66 61 75 6c 74 53 63 72 65 65 6e 28 62 2d 3e 64 70 79 29 t.screen.=.DefaultScreen(b->dpy)
6c80 3b 00 00 00 4d 20 20 20 20 69 6e 74 20 61 74 74 72 69 62 73 5b 5d 20 3d 20 7b 20 47 4c 58 5f 52 ;...M....int.attribs[].=.{.GLX_R
6ca0 47 42 41 2c 20 47 4c 58 5f 44 45 50 54 48 5f 53 49 5a 45 2c 20 32 34 2c 20 47 4c 58 5f 44 4f 55 GBA,.GLX_DEPTH_SIZE,.24,.GLX_DOU
6cc0 42 4c 45 42 55 46 46 45 52 2c 20 4e 6f 6e 65 20 7d 3b 00 00 00 3f 20 20 20 20 58 56 69 73 75 61 BLEBUFFER,.None.};...?....XVisua
6ce0 6c 49 6e 66 6f 20 2a 76 69 20 3d 20 67 6c 58 43 68 6f 6f 73 65 56 69 73 75 61 6c 28 62 2d 3e 64 lInfo.*vi.=.glXChooseVisual(b->d
6d00 70 79 2c 20 73 63 72 65 65 6e 2c 20 61 74 74 72 69 62 73 29 3b 00 00 00 3a 20 20 20 20 69 66 20 py,.screen,.attribs);...:....if.
6d20 28 21 76 69 29 20 7b 20 58 43 6c 6f 73 65 44 69 73 70 6c 61 79 28 62 2d 3e 64 70 79 29 3b 20 66 (!vi).{.XCloseDisplay(b->dpy);.f
6d40 72 65 65 28 62 29 3b 20 72 65 74 75 72 6e 20 30 3b 20 7d 00 00 00 00 00 00 00 3b 20 20 20 20 75 ree(b);.return.0;.}.......;....u
6d60 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 72 6f 6f 74 5f 77 69 6e 64 6f 77 20 3d 20 52 6f 6f 74 57 nsigned.long.root_window.=.RootW
6d80 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 73 63 72 65 65 6e 29 3b 00 00 00 50 20 20 20 20 43 6f indow(b->dpy,.screen);...P....Co
6da0 6c 6f 72 6d 61 70 20 63 6d 61 70 20 3d 20 58 43 72 65 61 74 65 43 6f 6c 6f 72 6d 61 70 28 62 2d lormap.cmap.=.XCreateColormap(b-
6dc0 3e 64 70 79 2c 20 72 6f 6f 74 5f 77 69 6e 64 6f 77 2c 20 76 69 2d 3e 76 69 73 75 61 6c 2c 20 41 >dpy,.root_window,.vi->visual,.A
6de0 6c 6c 6f 63 4e 6f 6e 65 29 3b 00 00 00 1d 20 20 20 20 58 53 65 74 57 69 6e 64 6f 77 41 74 74 72 llocNone);........XSetWindowAttr
6e00 69 62 75 74 65 73 20 73 77 61 3b 00 00 00 18 20 20 20 20 73 77 61 2e 63 6f 6c 6f 72 6d 61 70 20 ibutes.swa;........swa.colormap.
6e20 3d 20 63 6d 61 70 3b 00 00 00 46 20 20 20 20 73 77 61 2e 65 76 65 6e 74 5f 6d 61 73 6b 20 3d 20 =.cmap;...F....swa.event_mask.=.
6e40 4b 65 79 50 72 65 73 73 4d 61 73 6b 20 7c 20 4b 65 79 52 65 6c 65 61 73 65 4d 61 73 6b 20 7c 20 KeyPressMask.|.KeyReleaseMask.|.
6e60 42 75 74 74 6f 6e 50 72 65 73 73 4d 61 73 6b 20 7c 00 00 00 52 20 20 20 20 20 20 20 20 20 20 20 ButtonPressMask.|...R...........
6e80 20 20 20 20 20 20 20 20 20 20 20 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 4d 61 73 6b 20 7c 20 50 ...........ButtonReleaseMask.|.P
6ea0 6f 69 6e 74 65 72 4d 6f 74 69 6f 6e 4d 61 73 6b 20 7c 20 53 74 72 75 63 74 75 72 65 4e 6f 74 69 ointerMotionMask.|.StructureNoti
6ec0 66 79 4d 61 73 6b 3b 00 00 00 00 00 00 00 6e 20 20 20 20 62 2d 3e 78 5f 77 69 6e 64 6f 77 5f 69 fyMask;.......n....b->x_window_i
6ee0 64 20 3d 20 58 43 72 65 61 74 65 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 72 6f 6f 74 5f 77 d.=.XCreateWindow(b->dpy,.root_w
6f00 69 6e 64 6f 77 2c 20 30 2c 20 30 2c 20 28 75 6e 73 69 67 6e 65 64 29 77 69 64 74 68 2c 20 28 75 indow,.0,.0,.(unsigned)width,.(u
6f20 6e 73 69 67 6e 65 64 29 68 65 69 67 68 74 2c 20 30 2c 20 76 69 2d 3e 64 65 70 74 68 2c 00 00 00 nsigned)height,.0,.vi->depth,...
6f40 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ]...............................
6f60 20 20 20 20 20 49 6e 70 75 74 4f 75 74 70 75 74 2c 20 76 69 2d 3e 76 69 73 75 61 6c 2c 20 43 57 .....InputOutput,.vi->visual,.CW
6f80 43 6f 6c 6f 72 6d 61 70 20 7c 20 43 57 45 76 65 6e 74 4d 61 73 6b 2c 20 26 73 77 61 29 3b 00 00 Colormap.|.CWEventMask,.&swa);..
6fa0 00 2e 20 20 20 20 58 53 74 6f 72 65 4e 61 6d 65 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 5f 77 69 ......XStoreName(b->dpy,.b->x_wi
6fc0 6e 64 6f 77 5f 69 64 2c 20 74 69 74 6c 65 29 3b 00 00 00 42 20 20 20 20 62 2d 3e 77 6d 5f 64 65 ndow_id,.title);...B....b->wm_de
6fe0 6c 65 74 65 20 3d 20 58 49 6e 74 65 72 6e 41 74 6f 6d 28 62 2d 3e 64 70 79 2c 20 22 57 4d 5f 44 lete.=.XInternAtom(b->dpy,."WM_D
7000 45 4c 45 54 45 5f 57 49 4e 44 4f 57 22 2c 20 46 61 6c 73 65 29 3b 00 00 00 3e 20 20 20 20 58 53 ELETE_WINDOW",.False);...>....XS
7020 65 74 57 4d 50 72 6f 74 6f 63 6f 6c 73 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 5f 77 69 6e 64 6f etWMProtocols(b->dpy,.b->x_windo
7040 77 5f 69 64 2c 20 26 62 2d 3e 77 6d 5f 64 65 6c 65 74 65 2c 20 31 29 3b 00 00 00 27 20 20 20 20 w_id,.&b->wm_delete,.1);...'....
7060 58 4d 61 70 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 5f 77 69 6e 64 6f 77 5f 69 XMapWindow(b->dpy,.b->x_window_i
7080 64 29 3b 00 00 00 00 00 00 00 36 20 20 20 20 62 2d 3e 63 74 78 20 3d 20 67 6c 58 43 72 65 61 74 d);.......6....b->ctx.=.glXCreat
70a0 65 43 6f 6e 74 65 78 74 28 62 2d 3e 64 70 79 2c 20 76 69 2c 20 4e 55 4c 4c 2c 20 54 72 75 65 29 eContext(b->dpy,.vi,.NULL,.True)
70c0 3b 00 00 00 33 20 20 20 20 67 6c 58 4d 61 6b 65 43 75 72 72 65 6e 74 28 62 2d 3e 64 70 79 2c 20 ;...3....glXMakeCurrent(b->dpy,.
70e0 62 2d 3e 78 5f 77 69 6e 64 6f 77 5f 69 64 2c 20 62 2d 3e 63 74 78 29 3b 00 00 00 0e 20 20 20 20 b->x_window_id,.b->ctx);........
7100 58 46 72 65 65 28 76 69 29 3b 00 00 00 00 00 00 00 17 20 20 20 20 63 68 61 72 20 64 61 74 61 5b XFree(vi);............char.data[
7120 38 5d 20 3d 20 7b 30 7d 3b 00 00 00 4d 20 20 20 20 50 69 78 6d 61 70 20 62 6c 61 6e 6b 20 3d 20 8].=.{0};...M....Pixmap.blank.=.
7140 58 43 72 65 61 74 65 42 69 74 6d 61 70 46 72 6f 6d 44 61 74 61 28 62 2d 3e 64 70 79 2c 20 62 2d XCreateBitmapFromData(b->dpy,.b-
7160 3e 78 5f 77 69 6e 64 6f 77 5f 69 64 2c 20 64 61 74 61 2c 20 31 2c 20 31 29 3b 00 00 00 11 20 20 >x_window_id,.data,.1,.1);......
7180 20 20 58 43 6f 6c 6f 72 20 64 75 6d 6d 79 3b 00 00 00 25 20 20 20 20 6d 65 6d 73 65 74 28 26 64 ..XColor.dummy;...%....memset(&d
71a0 75 6d 6d 79 2c 20 30 2c 20 73 69 7a 65 6f 66 28 64 75 6d 6d 79 29 29 3b 00 00 00 54 20 20 20 20 ummy,.0,.sizeof(dummy));...T....
71c0 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 58 43 72 65 61 74 65 50 69 78 6d 61 70 43 75 72 Cursor.cursor.=.XCreatePixmapCur
71e0 73 6f 72 28 62 2d 3e 64 70 79 2c 20 62 6c 61 6e 6b 2c 20 62 6c 61 6e 6b 2c 20 26 64 75 6d 6d 79 sor(b->dpy,.blank,.blank,.&dummy
7200 2c 20 26 64 75 6d 6d 79 2c 20 30 2c 20 30 29 3b 00 00 00 32 20 20 20 20 58 44 65 66 69 6e 65 43 ,.&dummy,.0,.0);...2....XDefineC
7220 75 72 73 6f 72 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 5f 77 69 6e 64 6f 77 5f 69 64 2c 20 63 75 ursor(b->dpy,.b->x_window_id,.cu
7240 72 73 6f 72 29 3b 00 00 00 1f 20 20 20 20 58 46 72 65 65 50 69 78 6d 61 70 28 62 2d 3e 64 70 79 rsor);........XFreePixmap(b->dpy
7260 2c 20 62 6c 61 6e 6b 29 3b 00 00 00 20 20 20 20 20 58 46 72 65 65 43 75 72 73 6f 72 28 62 2d 3e ,.blank);........XFreeCursor(b->
7280 64 70 79 2c 20 63 75 72 73 6f 72 29 3b 00 00 00 00 00 00 00 19 20 20 20 20 58 53 79 6e 63 28 62 dpy,.cursor);............XSync(b
72a0 2d 3e 64 70 79 2c 20 46 61 6c 73 65 29 3b 00 00 00 4f 20 20 20 20 58 47 72 61 62 50 6f 69 6e 74 ->dpy,.False);...O....XGrabPoint
72c0 65 72 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 5f 77 69 6e 64 6f 77 5f 69 64 2c 20 54 72 75 65 2c er(b->dpy,.b->x_window_id,.True,
72e0 20 30 2c 20 47 72 61 62 4d 6f 64 65 41 73 79 6e 63 2c 20 47 72 61 62 4d 6f 64 65 41 73 79 6e 63 .0,.GrabModeAsync,.GrabModeAsync
7300 2c 00 00 00 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 78 5f 77 69 6e 64 6f ,...4.................b->x_windo
7320 77 5f 69 64 2c 20 4e 6f 6e 65 2c 20 43 75 72 72 65 6e 74 54 69 6d 65 29 3b 00 00 00 00 00 00 00 w_id,.None,.CurrentTime);.......
7340 1b 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 3d 20 77 69 64 74 68 3b 00 00 00 1d .....w->state.width.=.width;....
7360 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 3d 20 68 65 69 67 68 74 3b 00 00 00 ....w->state.height.=.height;...
7380 1c 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 78 20 3d 20 77 69 64 74 68 20 2f 20 32 3b 00 00 00 .....b->center_x.=.width./.2;...
73a0 1d 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 79 20 3d 20 68 65 69 67 68 74 20 2f 20 32 3b 00 00 .....b->center_y.=.height./.2;..
73c0 00 55 20 20 20 20 58 57 61 72 70 50 6f 69 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c .U....XWarpPointer(b->dpy,.None,
73e0 20 62 2d 3e 78 5f 77 69 6e 64 6f 77 5f 69 64 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 62 2d 3e .b->x_window_id,.0,.0,.0,.0,.b->
7400 63 65 6e 74 65 72 5f 78 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 79 29 3b 00 00 00 12 20 20 20 20 62 center_x,.b->center_y);........b
7420 2d 3e 77 61 72 70 65 64 20 3d 20 31 3b 00 00 00 19 20 20 20 20 58 53 79 6e 63 28 62 2d 3e 64 70 ->warped.=.1;........XSync(b->dp
7440 79 2c 20 46 61 6c 73 65 29 3b 00 00 00 00 00 00 00 0d 20 20 20 20 72 65 74 75 72 6e 20 31 3b 00 y,.False);............return.1;.
7460 00 00 01 7d 00 00 00 00 00 00 00 2e 76 6f 69 64 20 77 69 6e 64 6f 77 5f 78 31 31 5f 70 6f 6c 6c ...}........void.window_x11_poll
7480 28 73 74 72 75 63 74 20 4e 61 74 69 76 65 57 69 6e 64 6f 77 20 2a 77 29 20 7b 00 00 00 1f 20 20 (struct.NativeWindow.*w).{......
74a0 20 20 58 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 ..X11Backend.*b.=.w->backend;...
74c0 1a 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 3d 20 30 3b 00 00 00 1a 20 .....w->state.mouse_dx.=.0;.....
74e0 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 79 20 3d 20 30 3b 00 00 00 00 00 00 00 ...w->state.mouse_dy.=.0;.......
7500 1e 20 20 20 20 77 68 69 6c 65 20 28 58 50 65 6e 64 69 6e 67 28 62 2d 3e 64 70 79 29 29 20 7b 00 .....while.(XPending(b->dpy)).{.
7520 00 00 11 20 20 20 20 20 20 20 20 58 45 76 65 6e 74 20 65 3b 00 00 00 1f 20 20 20 20 20 20 20 20 ...........XEvent.e;............
7540 58 4e 65 78 74 45 76 65 6e 74 28 62 2d 3e 64 70 79 2c 20 26 65 29 3b 00 00 00 19 20 20 20 20 20 XNextEvent(b->dpy,.&e);.........
7560 20 20 20 73 77 69 74 63 68 20 28 65 2e 74 79 70 65 29 20 7b 00 00 00 2d 20 20 20 20 20 20 20 20 ...switch.(e.type).{...-........
7580 20 20 20 20 63 61 73 65 20 4b 65 79 50 72 65 73 73 3a 20 63 61 73 65 20 4b 65 79 52 65 6c 65 61 ....case.KeyPress:.case.KeyRelea
75a0 73 65 3a 20 7b 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4b 65 79 53 79 6d 20 se:.{...6................KeySym.
75c0 6b 73 20 3d 20 58 4c 6f 6f 6b 75 70 4b 65 79 73 79 6d 28 26 65 2e 78 6b 65 79 2c 20 30 29 3b 00 ks.=.XLookupKeysym(&e.xkey,.0);.
75e0 00 00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b 20 3d 20 6b 65 79 73 79 ..*................int.k.=.keysy
7600 6d 5f 74 6f 5f 6b 65 79 28 6b 73 29 3b 00 00 00 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 m_to_key(ks);...D...............
7620 20 69 66 20 28 6b 20 3e 3d 20 30 29 20 77 2d 3e 73 74 61 74 65 2e 6b 65 79 73 5b 6b 5d 20 3d 20 .if.(k.>=.0).w->state.keys[k].=.
7640 28 65 2e 74 79 70 65 20 3d 3d 20 4b 65 79 50 72 65 73 73 29 3b 00 00 00 16 20 20 20 20 20 20 20 (e.type.==.KeyPress);...........
7660 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d .........break;................}
7680 00 00 00 33 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 42 75 74 74 6f 6e 50 72 65 73 73 ...3............case.ButtonPress
76a0 3a 20 63 61 73 65 20 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3a 20 7b 00 00 00 36 20 20 20 20 20 :.case.ButtonRelease:.{...6.....
76c0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 65 73 73 65 64 20 3d 20 28 65 2e 74 79 70 65 ...........int.pressed.=.(e.type
76e0 20 3d 3d 20 42 75 74 74 6f 6e 50 72 65 73 73 29 3b 00 00 00 4f 20 20 20 20 20 20 20 20 20 20 20 .==.ButtonPress);...O...........
7700 20 20 20 20 20 69 66 20 28 65 2e 78 62 75 74 74 6f 6e 2e 62 75 74 74 6f 6e 20 3d 3d 20 42 75 74 .....if.(e.xbutton.button.==.But
7720 74 6f 6e 31 29 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 6c 65 66 74 20 3d 20 70 72 65 73 ton1).w->state.mouse_left.=.pres
7740 73 65 64 3b 00 00 00 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 2e 78 62 sed;...P................if.(e.xb
7760 75 74 74 6f 6e 2e 62 75 74 74 6f 6e 20 3d 3d 20 42 75 74 74 6f 6e 33 29 20 77 2d 3e 73 74 61 74 utton.button.==.Button3).w->stat
7780 65 2e 6d 6f 75 73 65 5f 72 69 67 68 74 20 3d 20 70 72 65 73 73 65 64 3b 00 00 00 16 20 20 20 20 e.mouse_right.=.pressed;........
77a0 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 ............break;..............
77c0 20 20 7d 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 4d 6f 74 69 6f 6e 4e 6f ..}................case.MotionNo
77e0 74 69 66 79 3a 20 7b 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 tify:.{....................if.(b
7800 2d 3e 77 61 72 70 65 64 29 20 7b 00 00 00 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ->warped).{...".................
7820 20 20 20 62 2d 3e 77 61 72 70 65 64 20 3d 20 30 3b 00 00 00 18 20 20 20 20 20 20 20 20 20 20 20 ...b->warped.=.0;...............
7840 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 00 00 00 43 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .....}.else.{...C...............
7860 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 78 20 2b 3d 20 65 2e 78 6d 6f 74 .....w->state.mouse_dx.+=.e.xmot
7880 69 6f 6e 2e 78 20 2d 20 62 2d 3e 63 65 6e 74 65 72 5f 78 3b 00 00 00 43 20 20 20 20 20 20 20 20 ion.x.-.b->center_x;...C........
78a0 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 6d 6f 75 73 65 5f 64 79 20 2b 3d ............w->state.mouse_dy.+=
78c0 20 65 2e 78 6d 6f 74 69 6f 6e 2e 79 20 2d 20 62 2d 3e 63 65 6e 74 65 72 5f 79 3b 00 00 00 11 20 .e.xmotion.y.-.b->center_y;.....
78e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 4f 20 20 20 20 20 20 20 20 20 20 20 20 ...............}...O............
7900 20 20 20 20 69 66 20 28 65 2e 78 6d 6f 74 69 6f 6e 2e 78 20 21 3d 20 62 2d 3e 63 65 6e 74 65 72 ....if.(e.xmotion.x.!=.b->center
7920 5f 78 20 7c 7c 20 65 2e 78 6d 6f 74 69 6f 6e 2e 79 20 21 3d 20 62 2d 3e 63 65 6e 74 65 72 5f 79 _x.||.e.xmotion.y.!=.b->center_y
7940 29 20 7b 00 00 00 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 57 61 72 70 ).{...e....................XWarp
7960 50 6f 69 6e 74 65 72 28 62 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 62 2d 3e 78 5f 77 69 6e 64 6f Pointer(b->dpy,.None,.b->x_windo
7980 77 5f 69 64 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 62 2d 3e 63 65 6e 74 65 72 5f 78 2c 20 62 w_id,.0,.0,.0,.0,.b->center_x,.b
79a0 2d 3e 63 65 6e 74 65 72 5f 79 29 3b 00 00 00 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ->center_y);..."................
79c0 20 20 20 20 62 2d 3e 77 61 72 70 65 64 20 3d 20 31 3b 00 00 00 11 20 20 20 20 20 20 20 20 20 20 ....b->warped.=.1;..............
79e0 20 20 20 20 20 20 7d 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b ......}....................break
7a00 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 23 20 20 20 20 20 20 20 20 20 20 ;................}...#..........
7a20 20 20 63 61 73 65 20 43 6f 6e 66 69 67 75 72 65 4e 6f 74 69 66 79 3a 20 7b 00 00 00 34 20 20 20 ..case.ConfigureNotify:.{...4...
7a40 20 20 20 20 20 20 20 20 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 3d 20 65 2e .............w->state.width.=.e.
7a60 78 63 6f 6e 66 69 67 75 72 65 2e 77 69 64 74 68 3b 00 00 00 36 20 20 20 20 20 20 20 20 20 20 20 xconfigure.width;...6...........
7a80 20 20 20 20 20 77 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 3d 20 65 2e 78 63 6f 6e 66 69 67 .....w->state.height.=.e.xconfig
7aa0 75 72 65 2e 68 65 69 67 68 74 3b 00 00 00 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 ure.height;...1................b
7ac0 2d 3e 63 65 6e 74 65 72 5f 78 20 3d 20 77 2d 3e 73 74 61 74 65 2e 77 69 64 74 68 20 2f 20 32 3b ->center_x.=.w->state.width./.2;
7ae0 00 00 00 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 2d 3e 63 65 6e 74 65 72 5f 79 20 ...2................b->center_y.
7b00 3d 20 77 2d 3e 73 74 61 74 65 2e 68 65 69 67 68 74 20 2f 20 32 3b 00 00 00 16 20 20 20 20 20 20 =.w->state.height./.2;..........
7b20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 ..........break;................
7b40 7d 00 00 00 21 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6c 69 65 6e 74 4d 65 73 73 }...!............case.ClientMess
7b60 61 67 65 3a 20 7b 00 00 00 3e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 41 age:.{...>................if.((A
7b80 74 6f 6d 29 65 2e 78 63 6c 69 65 6e 74 2e 64 61 74 61 2e 6c 5b 30 5d 20 3d 3d 20 62 2d 3e 77 6d tom)e.xclient.data.l[0].==.b->wm
7ba0 5f 64 65 6c 65 74 65 29 00 00 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 _delete)........................
7bc0 77 2d 3e 73 74 61 74 65 2e 73 68 6f 75 6c 64 5f 63 6c 6f 73 65 20 3d 20 31 3b 00 00 00 16 20 20 w->state.should_close.=.1;......
7be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 00 00 00 0d 20 20 20 20 20 20 20 20 ..............break;............
7c00 20 20 20 20 7d 00 00 00 1b 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 62 72 ....}................default:.br
7c20 65 61 6b 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 eak;............}........}....}.
7c40 00 00 00 00 00 00 2e 76 6f 69 64 20 77 69 6e 64 6f 77 5f 78 31 31 5f 73 77 61 70 28 73 74 72 75 .......void.window_x11_swap(stru
7c60 63 74 20 4e 61 74 69 76 65 57 69 6e 64 6f 77 20 2a 77 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 ct.NativeWindow.*w).{........X11
7c80 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e 62 61 63 6b 65 6e 64 3b 00 00 00 2b 20 20 20 20 Backend.*b.=.w->backend;...+....
7ca0 67 6c 58 53 77 61 70 42 75 66 66 65 72 73 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 5f 77 69 6e 64 glXSwapBuffers(b->dpy,.b->x_wind
7cc0 6f 77 5f 69 64 29 3b 00 00 00 01 7d 00 00 00 00 00 00 00 31 76 6f 69 64 20 77 69 6e 64 6f 77 5f ow_id);....}.......1void.window_
7ce0 78 31 31 5f 64 65 73 74 72 6f 79 28 73 74 72 75 63 74 20 4e 61 74 69 76 65 57 69 6e 64 6f 77 20 x11_destroy(struct.NativeWindow.
7d00 2a 77 29 20 7b 00 00 00 1f 20 20 20 20 58 31 31 42 61 63 6b 65 6e 64 20 2a 62 20 3d 20 77 2d 3e *w).{........X11Backend.*b.=.w->
7d20 62 61 63 6b 65 6e 64 3b 00 00 00 27 20 20 20 20 67 6c 58 4d 61 6b 65 43 75 72 72 65 6e 74 28 62 backend;...'....glXMakeCurrent(b
7d40 2d 3e 64 70 79 2c 20 4e 6f 6e 65 2c 20 4e 55 4c 4c 29 3b 00 00 00 26 20 20 20 20 67 6c 58 44 65 ->dpy,.None,.NULL);...&....glXDe
7d60 73 74 72 6f 79 43 6f 6e 74 65 78 74 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 63 74 78 29 3b 00 00 00 stroyContext(b->dpy,.b->ctx);...
7d80 2b 20 20 20 20 58 44 65 73 74 72 6f 79 57 69 6e 64 6f 77 28 62 2d 3e 64 70 79 2c 20 62 2d 3e 78 +....XDestroyWindow(b->dpy,.b->x
7da0 5f 77 69 6e 64 6f 77 5f 69 64 29 3b 00 00 00 1a 20 20 20 20 58 43 6c 6f 73 65 44 69 73 70 6c 61 _window_id);........XCloseDispla
7dc0 79 28 62 2d 3e 64 70 79 29 3b 00 00 00 0c 20 20 20 20 66 72 65 65 28 62 29 3b 00 00 00 01 7d 35 y(b->dpy);........free(b);....}5
7de0 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 ................................
7e00 00 00 00 00 00 00 00 1e 14 00 00 00 00 00 00 01 00 00 00 00 00 00 00 35 81 5f d0 00 00 00 09 00 .......................5._......
7e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0a 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 ................................
7e40 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 63 47 .............................jcG
7fa0 7e 04 01 00 00 00 05 00 f5 18 00 00 00 73 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 1c 20 20 ~............s..................
7fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 57 61 72 70 50 6f 69 f5 18 00 00 00 74 ..................XWarpPoi.....t
7fe0 00 00 00 00 00 00 00 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 ................................
8000 00 00 f5 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 00 00 00 00 00 ....................5...........
8020 00 00 00 00 00 00 00 00 00 00 00 00 73 00 00 00 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............s...................
8040 00 00 00 00 f9 0f 00 00 00 00 00 00 f5 18 00 00 00 00 73 00 00 00 1c 00 00 00 00 00 00 00 00 00 ..................s.............
8060 00 00 22 00 00 00 01 00 00 00 f9 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 04 00 00 00 00 ..".............................
8080 00 00 35 81 e7 aa ..5...