Mercurial > MadButterfly
annotate src/X_supp.c @ 1395:a768d74e5f49
Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
Ad center object when the bbox-x is not available.
author | wycc |
---|---|
date | Sat, 02 Apr 2011 05:36:36 +0800 |
parents | 673978a8bc4b |
children | 84368f4bc988 |
rev | line source |
---|---|
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- |
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
77 | 3 #include <stdio.h> |
78 | 4 #include <stdlib.h> |
5 #include <string.h> | |
77 | 6 #include <X11/Xlib.h> |
7 #include <X11/Xutil.h> | |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
8 #include "mb_graph_engine.h" |
186
530bb7728546
Move header files to $(top_srcdir)/include/ and prefixed with 'mb_'.
Thinker K.F. Li <thinker@branda.to>
parents:
185
diff
changeset
|
9 #include "mb_redraw_man.h" |
530bb7728546
Move header files to $(top_srcdir)/include/ and prefixed with 'mb_'.
Thinker K.F. Li <thinker@branda.to>
parents:
185
diff
changeset
|
10 #include "mb_timer.h" |
530bb7728546
Move header files to $(top_srcdir)/include/ and prefixed with 'mb_'.
Thinker K.F. Li <thinker@branda.to>
parents:
185
diff
changeset
|
11 #include "mb_X_supp.h" |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
12 #include "mb_backend.h" |
1018
7ccc094bdbe5
Move the timer manager based on mb_tman_t to timer.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1016
diff
changeset
|
13 #include "mb_backend_utils.h" |
694
7e64e0f70cb6
Switch XSHM with autoconf
Thinker K.F. Li <thinker@branda.to>
parents:
693
diff
changeset
|
14 #include "config.h" |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
15 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
16 #ifdef XSHM |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
17 /* \sa http://www.xfree86.org/current/mit-shm.html */ |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
18 #include <sys/ipc.h> |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
19 #include <sys/shm.h> |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
20 #include <X11/extensions/XShm.h> |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
21 #endif |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
22 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
23 #define ERR -1 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
24 #define OK 0 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
25 |
1015
c4a567112d29
Mark out functions supprting nodejs in X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1014
diff
changeset
|
26 #define ASSERT(x) |
c4a567112d29
Mark out functions supprting nodejs in X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1014
diff
changeset
|
27 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
28 #define ONLY_MOUSE_MOVE_RAW 1 |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
29 |
1018
7ccc094bdbe5
Move the timer manager based on mb_tman_t to timer.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1016
diff
changeset
|
30 static mb_timer_factory_t *_timer_factory = &tman_timer_factory; |
7ccc094bdbe5
Move the timer manager based on mb_tman_t to timer.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1016
diff
changeset
|
31 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
32 /*! \ingroup xkb |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
33 * @{ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
34 */ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
35 struct _X_kb_info { |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
36 int keycode_min, keycode_max; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
37 int ksym_per_code; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
38 KeySym *syms; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
39 subject_t *kbevents; |
1060
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
40 observer_factory_t *observer_factory; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
41 }; |
1112
1993e5ae60aa
Rename X_kb_event_t to mb_kb_event_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1110
diff
changeset
|
42 typedef struct _X_kb_info X_kb_info_t; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
43 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
44 /* @} */ |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
45 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
46 struct _X_supp_runtime { |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
47 Display *display; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
48 Window win; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
49 Visual *visual; |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
50 mbe_surface_t *surface, *backend_surface; |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
51 mbe_t *cr, *backend_cr; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
52 redraw_man_t *rdman; |
259
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
53 mb_img_ldr_t *img_ldr; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
54 int w, h; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
55 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
56 X_kb_info_t kbinfo; |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
57 mb_IO_man_t *io_man; |
1003
4b1bef7e5516
Change _X_MB_runtime and fix _x_mb_event_loop()
Thinker K.F. Li <thinker@codemud.net>
parents:
1002
diff
changeset
|
58 mb_timer_man_t *timer_man; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
59 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
60 #ifndef ONLY_MOUSE_MOVE_RAW |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
61 /* States */ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
62 shape_t *last; |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
63 #endif |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
64 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
65 #ifdef XSHM |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
66 XImage *ximage; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
67 XShmSegmentInfo shminfo; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
68 #endif |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
69 |
1014
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
70 /* For handle connection */ |
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
71 int io_hdl; |
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
72 |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
73 /* |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
74 * Following variables are used by handle_single_x_event() |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
75 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
76 int last_evt_type; /* Type of last event */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
77 int eflag; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
78 int ex1, ey1, ex2, ey2; /* Aggregate expose events */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
79 int mflag; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
80 int mx, my; /* Position of last motion event */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
81 int mbut_state; /* Button state of last motion event */ |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
82 }; |
1112
1993e5ae60aa
Rename X_kb_event_t to mb_kb_event_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1110
diff
changeset
|
83 typedef struct _X_supp_runtime X_supp_runtime_t; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
84 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
85 static void _x_supp_handle_x_event(X_supp_runtime_t *rt); |
1005
714169f33f13
Fix X_init_connection() to match modification of mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1004
diff
changeset
|
86 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
87 /*! \defgroup x_supp_io IO manager for X. |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
88 * @{ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
89 */ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
90 #define MAX_MONITORS 200 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
91 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
92 typedef struct { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
93 int type; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
94 int fd; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
95 mb_IO_cb_t cb; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
96 void *data; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
97 } monitor_t; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
98 |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
99 struct _X_supp_IO_man { |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
100 mb_IO_man_t io_man; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
101 monitor_t monitors[MAX_MONITORS]; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
102 int n_monitor; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
103 }; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
104 |
1000
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
105 static int _x_supp_io_man_reg(struct _mb_IO_man *io_man, |
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
106 int fd, MB_IO_TYPE type, |
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
107 mb_IO_cb_t cb, void *data); |
1001
b462b9e213e8
Fix typo for the name of _mb_IO_man
Thinker K.F. Li <thinker@codemud.net>
parents:
1000
diff
changeset
|
108 static void _x_supp_io_man_unreg(struct _mb_IO_man *io_man, int io_hdl); |
1000
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
109 static mb_IO_man_t *_x_supp_io_man_new(void); |
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
110 static void _x_supp_io_man_free(mb_IO_man_t *io_man); |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
111 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
112 static mb_IO_factory_t _X_supp_default_io_factory = { |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
113 _x_supp_io_man_new, |
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
114 _x_supp_io_man_free |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
115 }; |
999
d975a59d4504
Fix typo on variable reference
Thinker K.F. Li <thinker@codemud.net>
parents:
998
diff
changeset
|
116 static mb_IO_factory_t *_io_factory = &_X_supp_default_io_factory; |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
117 |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
118 static struct _X_supp_IO_man _default_io_man = { |
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
119 {_x_supp_io_man_reg, _x_supp_io_man_unreg}, |
987
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
120 {}, /* monitors */ |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
121 0 /* n_monitor */ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
122 }; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
123 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
124 static mb_IO_man_t * |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
125 _x_supp_io_man_new(void) { |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
126 return (mb_IO_man_t *)&_default_io_man; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
127 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
128 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
129 static void |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
130 _x_supp_io_man_free(mb_IO_man_t *io_man) { |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
131 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
132 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
133 static int |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
134 _x_supp_io_man_reg(struct _mb_IO_man *io_man, |
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
135 int fd, MB_IO_TYPE type, mb_IO_cb_t cb, void *data) { |
1002
aa0583e0a96b
Fix typo for the naem of struct _X_supp_IO_man
Thinker K.F. Li <thinker@codemud.net>
parents:
1001
diff
changeset
|
136 struct _X_supp_IO_man *xmb_io_man = (struct _X_supp_IO_man *)io_man; |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
137 int i; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
138 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
139 for(i = 0; i < xmb_io_man->n_monitor; i++) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
140 if (xmb_io_man->monitors[i].type == MB_IO_DUMMY) |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
141 break; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
142 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
143 if (i == MAX_MONITORS) |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
144 return ERR; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
145 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
146 xmb_io_man->monitors[i].type = type; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
147 xmb_io_man->monitors[i].fd = fd; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
148 xmb_io_man->monitors[i].cb = cb; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
149 xmb_io_man->monitors[i].data = data; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
150 i++; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
151 if(i > xmb_io_man->n_monitor) |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
152 xmb_io_man->n_monitor = i; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
153 return i - 1; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
154 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
155 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
156 static void |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
157 _x_supp_io_man_unreg(struct _mb_IO_man *io_man, int io_hdl) { |
1002
aa0583e0a96b
Fix typo for the naem of struct _X_supp_IO_man
Thinker K.F. Li <thinker@codemud.net>
parents:
1001
diff
changeset
|
158 struct _X_supp_IO_man *xmb_io_man = (struct _X_supp_IO_man *)io_man; |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
159 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
160 ASSERT(io_hdl < xmb_io_man->n_monitor); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
161 xmb_io_man->monitors[io_hdl].type = MB_IO_DUMMY; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
162 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
163 |
1112
1993e5ae60aa
Rename X_kb_event_t to mb_kb_event_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1110
diff
changeset
|
164 #ifdef XSHM |
1993e5ae60aa
Rename X_kb_event_t to mb_kb_event_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1110
diff
changeset
|
165 static void XSHM_update(X_supp_runtime_t *xmb_rt); |
1993e5ae60aa
Rename X_kb_event_t to mb_kb_event_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1110
diff
changeset
|
166 #endif |
1993e5ae60aa
Rename X_kb_event_t to mb_kb_event_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1110
diff
changeset
|
167 |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
168 /*! \brief Handle connection coming data and timeout of timers. |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
169 * |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
170 * \param display is a Display returned by XOpenDisplay(). |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
171 * \param rdman is a redraw manager. |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
172 * \param tman is a timer manager. |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
173 * |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
174 * The display is managed by specified rdman and tman. rdman draws |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
175 * on the display, and tman trigger actions according timers. |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
176 */ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
177 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
178 _x_supp_event_loop(mb_rt_t *rt) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
179 struct _X_supp_runtime *xmb_rt = (struct _X_supp_runtime *)rt; |
1006
3ee2e30b260f
Rename xmbrt to xmb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1005
diff
changeset
|
180 struct _X_supp_IO_man *io_man = (struct _X_supp_IO_man *)xmb_rt->io_man; |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
181 mb_timer_man_t *timer_man = (mb_timer_man_t *)xmb_rt->timer_man; |
1026
407932b8a160
Redraw changed after handling timeout for X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1022
diff
changeset
|
182 redraw_man_t *rdman; |
1018
7ccc094bdbe5
Move the timer manager based on mb_tman_t to timer.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1016
diff
changeset
|
183 mb_tman_t *tman = tman_timer_man_get_tman(timer_man); |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
184 mb_timeval_t now, tmo; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
185 struct timeval tv; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
186 fd_set rfds, wfds; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
187 int nfds = 0; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
188 int r, r1,i; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
189 |
1026
407932b8a160
Redraw changed after handling timeout for X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1022
diff
changeset
|
190 rdman = mb_runtime_rdman(rt); |
407932b8a160
Redraw changed after handling timeout for X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1022
diff
changeset
|
191 |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
192 _x_supp_handle_x_event(xmb_rt); |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
193 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
194 while(1) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
195 FD_ZERO(&rfds); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
196 FD_ZERO(&wfds); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
197 for(i = 0; i < io_man->n_monitor; i++) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
198 if(io_man->monitors[i].type == MB_IO_R || |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
199 io_man->monitors[i].type == MB_IO_RW) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
200 FD_SET(io_man->monitors[i].fd, &rfds); |
1004 | 201 nfds = MB_MAX(nfds, io_man->monitors[i].fd + 1); |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
202 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
203 if(io_man->monitors[i].type == MB_IO_W || |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
204 io_man->monitors[i].type == MB_IO_RW) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
205 FD_SET(io_man->monitors[i].fd, &wfds); |
1004 | 206 nfds = MB_MAX(nfds, io_man->monitors[i].fd + 1); |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
207 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
208 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
209 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
210 get_now(&now); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
211 r = mb_tman_next_timeout(tman, &now, &tmo); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
212 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
213 if(r == 0) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
214 tv.tv_sec = MB_TIMEVAL_SEC(&tmo); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
215 tv.tv_usec = MB_TIMEVAL_USEC(&tmo); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
216 r1 = select(nfds, &rfds, NULL, NULL, &tv); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
217 } else |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
218 r1 = select(nfds, &rfds, NULL, NULL, NULL); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
219 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
220 if(r1 == -1) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
221 perror("select"); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
222 break; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
223 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
224 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
225 if(r1 == 0) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
226 get_now(&now); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
227 mb_tman_handle_timeout(tman, &now); |
1026
407932b8a160
Redraw changed after handling timeout for X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1022
diff
changeset
|
228 rdman_redraw_changed(rdman); |
407932b8a160
Redraw changed after handling timeout for X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1022
diff
changeset
|
229 #ifdef XSHM |
407932b8a160
Redraw changed after handling timeout for X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1022
diff
changeset
|
230 XSHM_update(xmb_rt); |
407932b8a160
Redraw changed after handling timeout for X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1022
diff
changeset
|
231 #endif |
407932b8a160
Redraw changed after handling timeout for X_supp.c
Thinker K.F. Li <thinker@codemud.net>
parents:
1022
diff
changeset
|
232 XFlush(xmb_rt->display); |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
233 } else { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
234 for(i = 0; i < io_man->n_monitor; i++) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
235 if(io_man->monitors[i].type == MB_IO_R || |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
236 io_man->monitors[i].type == MB_IO_RW) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
237 if(FD_ISSET(io_man->monitors[i].fd, &rfds)) |
1003
4b1bef7e5516
Change _X_MB_runtime and fix _x_mb_event_loop()
Thinker K.F. Li <thinker@codemud.net>
parents:
1002
diff
changeset
|
238 io_man->monitors[i].cb(i, io_man->monitors[i].fd, |
4b1bef7e5516
Change _X_MB_runtime and fix _x_mb_event_loop()
Thinker K.F. Li <thinker@codemud.net>
parents:
1002
diff
changeset
|
239 MB_IO_R, |
4b1bef7e5516
Change _X_MB_runtime and fix _x_mb_event_loop()
Thinker K.F. Li <thinker@codemud.net>
parents:
1002
diff
changeset
|
240 io_man->monitors[i].data); |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
241 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
242 if(io_man->monitors[i].type == MB_IO_W || |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
243 io_man->monitors[i].type == MB_IO_RW) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
244 if(FD_ISSET(io_man->monitors[i].fd, &wfds)) |
990
8dd42310dd79
Change signature of callback for IO and timer manager
Thinker K.F. Li <thinker@codemud.net>
parents:
989
diff
changeset
|
245 io_man->monitors[i].cb(i, io_man->monitors[i].fd, |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
246 MB_IO_W, |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
247 io_man->monitors[i].data); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
248 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
249 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
250 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
251 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
252 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
253 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
254 /* @} */ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
255 |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
256 #ifdef XSHM |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
257 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
258 XSHM_update(X_supp_runtime_t *xmb_rt) { |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
259 GC gc; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
260 |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
261 gc = DefaultGC(xmb_rt->display, DefaultScreen(xmb_rt->display)); |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
262 if(xmb_rt->ximage) { /* support XSHM */ |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
263 XShmPutImage(xmb_rt->display, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
264 xmb_rt->win, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
265 gc, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
266 xmb_rt->ximage, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
267 0, 0, 0, 0, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
268 xmb_rt->w, xmb_rt->h, 0); |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
269 } |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
270 } |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
271 #endif |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
272 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
273 /*! \defgroup xkb X Keyboard Handling |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
274 * |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
275 * Accept keyboard events from X server and delivery it to |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
276 * application through observer pattern. There is a subject, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
277 * per X-connection, for that. |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
278 * @{ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
279 */ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
280 static int keycode2sym(X_kb_info_t *kbinfo, unsigned int keycode) { |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
281 int sym_idx; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
282 int sym; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
283 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
284 sym_idx = kbinfo->ksym_per_code * (keycode - kbinfo->keycode_min); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
285 sym = kbinfo->syms[sym_idx]; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
286 return sym; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
287 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
288 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
289 static int X_kb_init(X_kb_info_t *kbinfo, Display *display, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
290 redraw_man_t *rdman) { |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
291 int n_syms; |
1060
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
292 observer_factory_t *factory; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
293 int r; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
294 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
295 r = XDisplayKeycodes(display, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
296 &kbinfo->keycode_min, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
297 &kbinfo->keycode_max); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
298 if(r == 0) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
299 return ERR; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
300 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
301 n_syms = kbinfo->keycode_max - kbinfo->keycode_min + 1; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
302 kbinfo->syms = XGetKeyboardMapping(display, kbinfo->keycode_min, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
303 n_syms, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
304 &kbinfo->ksym_per_code); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
305 if(kbinfo->syms == NULL) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
306 return ERR; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
307 |
1060
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
308 factory = rdman_get_observer_factory(rdman); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
309 kbinfo->kbevents = subject_new(factory, kbinfo, OBJT_KB); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
310 if(kbinfo->kbevents == NULL) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
311 return ERR; |
1060
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
312 /*! \todo Make sure observer_factory is still need. */ |
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
313 kbinfo->observer_factory = factory; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
314 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
315 return OK; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
316 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
317 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
318 static void X_kb_destroy(X_kb_info_t *kbinfo) { |
192
54fdc2a65242
Remove factory from observer APIs.
Thinker K.F. Li <thinker@branda.to>
parents:
186
diff
changeset
|
319 subject_free(kbinfo->kbevents); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
320 XFree(kbinfo->syms); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
321 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
322 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
323 /*! \brief Accept X keyboard events from _x_supp_handle_x_event() and |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
324 * dispatch it. |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
325 */ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
326 static void X_kb_handle_event(X_kb_info_t *kbinfo, XKeyEvent *xkey) { |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
327 unsigned int code; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
328 int sym; |
1112
1993e5ae60aa
Rename X_kb_event_t to mb_kb_event_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1110
diff
changeset
|
329 mb_kb_event_t event; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
330 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
331 code = xkey->keycode; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
332 sym = keycode2sym(kbinfo, code); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
333 if(xkey->type == KeyPress) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
334 event.event.type = EVT_KB_PRESS; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
335 else if(xkey->type == KeyRelease) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
336 event.event.type = EVT_KB_RELEASE; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
337 event.event.tgt = event.event.cur_tgt = kbinfo->kbevents; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
338 event.keycode = code; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
339 event.sym = sym; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
340 |
192
54fdc2a65242
Remove factory from observer APIs.
Thinker K.F. Li <thinker@branda.to>
parents:
186
diff
changeset
|
341 subject_notify(kbinfo->kbevents, &event.event); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
342 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
343 /* @} */ |
77 | 344 |
78 | 345 static unsigned int get_button_state(unsigned int state) { |
346 unsigned int but = 0; | |
347 | |
348 if(state & Button1Mask) | |
349 but |= MOUSE_BUT1; | |
350 if(state & Button2Mask) | |
351 but |= MOUSE_BUT2; | |
352 if(state & Button3Mask) | |
353 but |= MOUSE_BUT3; | |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
354 |
78 | 355 return but; |
356 } | |
357 | |
358 static unsigned int get_button(unsigned int button) { | |
359 switch(button) { | |
360 case Button1: | |
361 return MOUSE_BUT1; | |
362 case Button2: | |
363 return MOUSE_BUT2; | |
364 case Button3: | |
365 return MOUSE_BUT3; | |
366 } | |
367 return 0; | |
368 } | |
369 | |
370 /*! \brief Notify observers of the shape at specified | |
371 * position for mouse event. | |
372 * | |
373 * Observers of parent shapes may be called if the subject is not | |
374 * with SUBF_STOP_PROPAGATE flag. The subject of mouse event | |
375 * for a shape is returned by sh_get_mouse_event_subject(). | |
376 */ | |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
377 static void notify_coord_or_shape(redraw_man_t *rdman, |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
378 mb_obj_t *obj, |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
379 co_aix x, co_aix y, int etype, |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
380 unsigned int state, |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
381 unsigned int button) { |
78 | 382 mouse_event_t mouse_event; |
383 subject_t *subject; | |
384 | |
385 mouse_event.event.type = etype; | |
386 mouse_event.x = x; | |
387 mouse_event.y = y; | |
388 mouse_event.but_state = state; | |
389 mouse_event.button = button; | |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
390 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
391 if(IS_MBO_SHAPES(obj)) |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
392 subject = sh_get_mouse_event_subject((shape_t *)obj); |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
393 else |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
394 subject = coord_get_mouse_event((coord_t *)obj); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
395 |
192
54fdc2a65242
Remove factory from observer APIs.
Thinker K.F. Li <thinker@branda.to>
parents:
186
diff
changeset
|
396 subject_notify(subject, (event_t *)&mouse_event); |
78 | 397 } |
398 | |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
399 /*! \brief Handle motion event. |
77 | 400 */ |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
401 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
402 handle_motion_event(X_supp_runtime_t *rt) { |
83 | 403 redraw_man_t *rdman = rt->rdman; |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
404 int x, y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
405 int state; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
406 shape_t *shape; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
407 coord_t *root; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
408 int in_stroke; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
409 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
410 x = rt->mx; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
411 y = rt->my; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
412 state = rt->mbut_state; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
413 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
414 shape = find_shape_at_pos(rdman, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
415 &in_stroke); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
416 #ifdef ONLY_MOUSE_MOVE_RAW |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
417 if(shape != NULL) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
418 notify_coord_or_shape(rdman, (mb_obj_t *)shape, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
419 x, y, EVT_MOUSE_MOVE_RAW, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
420 } else { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
421 root = rdman_get_root(rdman); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
422 notify_coord_or_shape(rdman, (mb_obj_t *)root, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
423 x, y, EVT_MOUSE_MOVE_RAW, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
424 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
425 #else |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
426 if(shape != NULL) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
427 if(rt->last != shape) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
428 if(rt->last) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
429 notify_coord_or_shape(rdman, rt->last, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
430 EVT_MOUSE_OUT, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
431 notify_coord_or_shape(rdman, shape, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
432 EVT_MOUSE_OVER, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
433 rt->last = shape; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
434 } else |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
435 notify_coord_or_shape(rdman, shape, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
436 EVT_MOUSE_MOVE, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
437 } else { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
438 if(rt->last) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
439 notify_coord_or_shape(rdman, rt->last, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
440 EVT_MOUSE_OUT, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
441 rt->last = NULL; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
442 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
443 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
444 #endif |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
445 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
446 rt->mflag = 0; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
447 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
448 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
449 /*! \brief Redraw exposed area. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
450 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
451 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
452 handle_expose_event(X_supp_runtime_t *rt) { |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
453 redraw_man_t *rdman = rt->rdman; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
454 int ex1, ey1, ex2, ey2; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
455 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
456 ex1 = rt->ex1; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
457 ey1 = rt->ey1; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
458 ex2 = rt->ex2; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
459 ey2 = rt->ey2; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
460 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
461 rdman_redraw_area(rdman, ex1, ey1, (ex2 - ex1), (ey2 - ey1)); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
462 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
463 rt->eflag = 0; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
464 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
465 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
466 /*! \brief Handle single X event and maintain internal states. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
467 * |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
468 * It keeps internal state in rt to improve performance. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
469 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
470 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
471 handle_single_x_event(X_supp_runtime_t *rt, XEvent *evt) { |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
472 redraw_man_t *rdman = rt->rdman; |
77 | 473 XMotionEvent *mevt; |
78 | 474 XButtonEvent *bevt; |
81 | 475 XExposeEvent *eevt; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
476 XKeyEvent *xkey; |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
477 int x, y, w, h; |
81 | 478 |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
479 shape_t *shape; |
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
480 |
78 | 481 unsigned int state, button; |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
482 int in_stroke; |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
483 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
484 if(evt->type != MotionNotify && rt->mflag) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
485 handle_motion_event(rt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
486 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
487 switch(evt->type) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
488 case ButtonPress: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
489 bevt = (XButtonEvent *)evt; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
490 x = bevt->x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
491 y = bevt->y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
492 state = get_button_state(bevt->state); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
493 button = get_button(bevt->button); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
494 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
495 shape = find_shape_at_pos(rdman, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
496 &in_stroke); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
497 if(shape) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
498 notify_coord_or_shape(rdman, (mb_obj_t *)shape, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
499 x, y, EVT_MOUSE_BUT_PRESS, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
500 state, button); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
501 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
502 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
503 case ButtonRelease: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
504 bevt = (XButtonEvent *)evt; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
505 x = bevt->x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
506 y = bevt->y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
507 state = get_button_state(bevt->state); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
508 button = get_button(bevt->button); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
509 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
510 shape = find_shape_at_pos(rdman, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
511 &in_stroke); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
512 if(shape) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
513 notify_coord_or_shape(rdman, (mb_obj_t *)shape, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
514 x, y, EVT_MOUSE_BUT_RELEASE, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
515 state, button); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
516 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
517 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
518 case MotionNotify: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
519 mevt = (XMotionEvent *)evt; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
520 rt->mx = mevt->x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
521 rt->my = mevt->y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
522 rt->mbut_state = get_button_state(mevt->state); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
523 rt->mflag = 1; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
524 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
525 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
526 case KeyPress: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
527 case KeyRelease: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
528 xkey = &evt->xkey; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
529 X_kb_handle_event(&rt->kbinfo, xkey); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
530 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
531 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
532 case Expose: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
533 eevt = &evt->xexpose; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
534 x = eevt->x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
535 y = eevt->y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
536 w = eevt->width; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
537 h = eevt->height; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
538 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
539 if(rt->eflag) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
540 if(x < rt->ex1) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
541 rt->ex1 = x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
542 if(y < rt->ey1) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
543 rt->ey1 = y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
544 if((x + w) > rt->ex2) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
545 rt->ex2 = x + w; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
546 if((y + h) > rt->ey2) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
547 rt->ey2 = y + h; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
548 } else { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
549 rt->ex1 = x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
550 rt->ey1 = y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
551 rt->ex2 = x + w; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
552 rt->ey2 = y + h; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
553 rt->eflag = 1; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
554 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
555 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
556 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
557 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
558 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
559 /*! \brief Call when no more event in an event iteration. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
560 * |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
561 * No more event means event queue is emplty. This function will |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
562 * perform some actions according current internal state. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
563 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
564 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
565 no_more_event(X_supp_runtime_t *rt) { |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
566 if(rt->mflag) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
567 handle_motion_event(rt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
568 if(rt->eflag) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
569 handle_expose_event(rt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
570 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
571 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
572 /*! \brief Dispatch all X events in the queue. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
573 */ |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
574 static void _x_supp_handle_x_event(X_supp_runtime_t *rt) { |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
575 Display *display = rt->display; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
576 XEvent evt; |
77 | 577 int r; |
578 | |
529 | 579 /* XXX: For some unknown reason, it causes a segmentation fault to |
580 * called XEventsQueued() after receiving first Expose event | |
581 * and before redraw for the event. | |
582 */ | |
77 | 583 while(XEventsQueued(display, QueuedAfterReading) > 0) { |
584 r = XNextEvent(display, &evt); | |
585 if(r == -1) | |
586 break; | |
587 | |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
588 handle_single_x_event(rt, &evt); |
77 | 589 } |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
590 no_more_event(rt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
591 |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
592 #ifdef XSHM |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
593 XSHM_update(rt); |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
594 #endif |
77 | 595 XFlush(display); |
596 } | |
597 | |
1014
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
598 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
599 _x_supp_handle_connection(int hdl, int fd, MB_IO_TYPE type, void *data) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
600 X_supp_runtime_t *xmb_rt = (X_supp_runtime_t *)data; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
601 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
602 _x_supp_handle_x_event(xmb_rt); |
77 | 603 } |
78 | 604 |
605 static int X_init_connection(const char *display_name, | |
606 int w, int h, | |
607 Display **displayp, | |
608 Visual **visualp, | |
609 Window *winp) { | |
610 Display *display; | |
611 Window root, win; | |
612 Visual *visual; | |
613 int screen; | |
614 XSetWindowAttributes wattr; | |
615 int depth; | |
616 int x, y; | |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
617 int draw_root = 0; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
618 const char *disp_name; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
619 char disp_buf[32]; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
620 int cp; |
78 | 621 int r; |
622 | |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
623 /* |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
624 * Support drawing on the root window. |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
625 */ |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
626 disp_name = display_name; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
627 if(strstr(display_name, ":root") != NULL) { |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
628 draw_root = 1; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
629 cp = strlen(display_name) - 5; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
630 if(cp >= 32) |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
631 cp = 31; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
632 memcpy(disp_buf, display_name, cp); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
633 disp_buf[cp] = 0; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
634 disp_name = disp_buf; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
635 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
636 |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
637 display = XOpenDisplay(disp_name); |
78 | 638 if(display == NULL) |
639 return ERR; | |
640 | |
641 screen = DefaultScreen(display); | |
642 root = DefaultRootWindow(display); | |
643 visual = DefaultVisual(display, screen); | |
644 depth = DefaultDepth(display, screen); | |
645 wattr.override_redirect = False; | |
646 x = 10; | |
647 y = 10; | |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
648 if(draw_root) |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
649 win = RootWindowOfScreen(ScreenOfDisplay(display, screen)); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
650 else { |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
651 win = XCreateWindow(display, root, |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
652 x, y, |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
653 w, h, |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
654 1, depth, InputOutput, visual, |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
655 CWOverrideRedirect, &wattr); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
656 r = XMapWindow(display, win); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
657 if(r == -1) { |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
658 XCloseDisplay(display); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
659 return ERR; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
660 } |
78 | 661 } |
662 | |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
663 XSelectInput(display, win, PointerMotionMask | ExposureMask | |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
664 ButtonPressMask | ButtonReleaseMask | |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
665 KeyPressMask | KeyReleaseMask); |
78 | 666 XFlush(display); |
667 | |
668 *displayp = display; | |
669 *visualp = visual; | |
670 *winp = win; | |
671 | |
672 return OK; | |
673 } | |
674 | |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
675 #ifdef XSHM |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
676 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
677 xshm_destroy(X_supp_runtime_t *xmb_rt) { |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
678 XShmSegmentInfo *shminfo; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
679 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
680 shminfo = &xmb_rt->shminfo; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
681 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
682 if(xmb_rt->shminfo.shmaddr) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
683 XShmDetach(xmb_rt->display, shminfo); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
684 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
685 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
686 if(xmb_rt->ximage) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
687 XDestroyImage(xmb_rt->ximage); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
688 xmb_rt->ximage = NULL; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
689 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
690 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
691 if(shminfo->shmaddr) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
692 shmdt(shminfo->shmaddr); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
693 shminfo->shmaddr = NULL; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
694 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
695 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
696 if(shminfo->shmid) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
697 shmctl(shminfo->shmid, IPC_RMID, 0); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
698 shminfo->shmid = 0; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
699 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
700 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
701 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
702 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
703 xshm_init(X_supp_runtime_t *xmb_rt) { |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
704 Display *display; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
705 Visual *visual; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
706 XImage *ximage; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
707 int screen; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
708 int depth; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
709 int support_shm; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
710 int mem_sz; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
711 XShmSegmentInfo *shminfo; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
712 int surf_fmt; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
713 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
714 display = xmb_rt->display; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
715 visual = xmb_rt->visual; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
716 shminfo = &xmb_rt->shminfo; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
717 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
718 support_shm = XShmQueryExtension(display); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
719 if(!support_shm) |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
720 return; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
721 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
722 screen = DefaultScreen(display); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
723 depth = DefaultDepth(display, screen); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
724 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
725 if(depth != 24 && depth != 32) |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
726 return; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
727 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
728 xmb_rt->ximage = XShmCreateImage(display, visual, depth, |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
729 ZPixmap, NULL, shminfo, |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
730 xmb_rt->w, xmb_rt->h); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
731 ximage = xmb_rt->ximage; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
732 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
733 mem_sz = ximage->bytes_per_line * ximage->height; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
734 shminfo->shmid = shmget(IPC_PRIVATE, mem_sz, IPC_CREAT | 0777); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
735 if(shminfo->shmid == -1) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
736 xshm_destroy(xmb_rt); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
737 return; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
738 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
739 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
740 shminfo->shmaddr = shmat(shminfo->shmid, 0, 0); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
741 ximage->data = shminfo->shmaddr; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
742 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
743 shminfo->readOnly = 0; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
744 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
745 XShmAttach(display, shminfo); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
746 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
747 switch(depth) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
748 case 24: surf_fmt = CAIRO_FORMAT_RGB24; break; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
749 case 32: surf_fmt = CAIRO_FORMAT_ARGB32; break; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
750 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
751 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
752 xmb_rt->backend_surface = |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
753 mbe_image_surface_create_for_data((unsigned char *)ximage->data, |
755
82836f1290b6
Remove cairo_* and use mbe_*
Thinker K.F. Li <thinker@codemud.net>
parents:
694
diff
changeset
|
754 surf_fmt, |
82836f1290b6
Remove cairo_* and use mbe_*
Thinker K.F. Li <thinker@codemud.net>
parents:
694
diff
changeset
|
755 xmb_rt->w, |
82836f1290b6
Remove cairo_* and use mbe_*
Thinker K.F. Li <thinker@codemud.net>
parents:
694
diff
changeset
|
756 xmb_rt->h, |
82836f1290b6
Remove cairo_* and use mbe_*
Thinker K.F. Li <thinker@codemud.net>
parents:
694
diff
changeset
|
757 ximage->bytes_per_line); |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
758 if(xmb_rt->backend_surface == NULL) |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
759 xshm_destroy(xmb_rt); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
760 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
761 #endif /* XSHM */ |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
762 |
1110
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
763 #include <X11/Xlib.h> |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
764 #include <X11/Xutil.h> |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
765 |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
766 static int |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
767 _get_img_fmt_from_xvisual(Display *display, Visual *visual) { |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
768 VisualID visual_id; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
769 XVisualInfo temp; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
770 XVisualInfo *infos; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
771 int n; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
772 int fmt = -1; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
773 |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
774 visual_id = XVisualIDFromVisual(visual); |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
775 temp.visualid = visual_id; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
776 infos = XGetVisualInfo(display, VisualIDMask, &temp, &n); |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
777 if(n != 1) |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
778 return -1; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
779 |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
780 switch(infos->depth) { |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
781 case 32: |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
782 fmt = MB_IFMT_ARGB32; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
783 break; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
784 |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
785 case 24: |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
786 fmt = MB_IFMT_RGB24; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
787 break; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
788 |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
789 case 16: |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
790 fmt = MB_IFMT_RGB16_565; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
791 break; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
792 |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
793 case 8: |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
794 fmt = MB_IFMT_A8; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
795 break; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
796 |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
797 case 1: |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
798 fmt = MB_IFMT_A1; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
799 break; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
800 } |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
801 |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
802 return fmt; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
803 } |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
804 |
78 | 805 /*! \brief Initialize a MadButterfy runtime for Xlib. |
806 * | |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
807 * This one is very like _x_supp_init(), except it accepts a |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
808 * X_supp_runtime_t object initialized with a display connected to a X |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
809 * server and an opened window. |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
810 * |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
811 * Following field of the X_supp_runtime_t object should be initialized. |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
812 * - w, h |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
813 * - win |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
814 * - display |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
815 * - visual |
78 | 816 */ |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
817 static int |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
818 _x_supp_init_with_win_internal(X_supp_runtime_t *xmb_rt) { |
265
b42ee279669e
Change function name and add comments.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
819 mb_img_ldr_t *img_ldr; |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
820 int w, h; |
1014
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
821 int disp_fd; |
1110
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
822 int fmt; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
823 |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
824 w = xmb_rt->w; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
825 h = xmb_rt->h; |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
826 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
827 #ifdef XSHM |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
828 xshm_init(xmb_rt); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
829 #endif |
1073
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
830 |
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
831 mbe_init(); |
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
832 |
78 | 833 xmb_rt->surface = |
450
a417fd980228
Replace cairo_format_t with mb_img_fmt_t.
Thinker K.F. Li <thinker@branda.to>
parents:
448
diff
changeset
|
834 mbe_image_surface_create(MB_IFMT_ARGB32, w, h); |
471
e98ae1407ca2
Remove mbe_set_source_surface() from graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
462
diff
changeset
|
835 |
1110
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
836 if(xmb_rt->backend_surface == NULL) { /* xshm_init() may create one */ |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
837 fmt = _get_img_fmt_from_xvisual(xmb_rt->display, xmb_rt->visual); |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
838 if(fmt == -1) |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
839 return ERR; |
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
840 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
841 xmb_rt->backend_surface = |
1073
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
842 mbe_win_surface_create(xmb_rt->display, |
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
843 xmb_rt->win, |
1110
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
844 fmt, |
1073
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
845 w, h); |
1110
851a062368bd
Change signature of mbe_win_surface_create() by using format argument
Thinker K.F. Li <thinker@codemud.net>
parents:
1079
diff
changeset
|
846 } |
78 | 847 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
848 xmb_rt->cr = mbe_create(xmb_rt->surface); |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
849 xmb_rt->backend_cr = mbe_create(xmb_rt->backend_surface); |
1079
c5255cc77143
Remove X_supp_runtime_t::surface_ptn
Thinker K.F. Li <thinker@codemud.net>
parents:
1078
diff
changeset
|
850 |
78 | 851 xmb_rt->rdman = (redraw_man_t *)malloc(sizeof(redraw_man_t)); |
1115
673978a8bc4b
Assign width and height of a rdman for X backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1112
diff
changeset
|
852 xmb_rt->rdman->w = w; |
673978a8bc4b
Assign width and height of a rdman for X backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1112
diff
changeset
|
853 xmb_rt->rdman->h = h; |
78 | 854 redraw_man_init(xmb_rt->rdman, xmb_rt->cr, xmb_rt->backend_cr); |
1073
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
855 /* FIXME: This is a wired loopback reference. This is inly |
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
856 * required when we need to get the xmb_rt->tman for the |
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
857 * animation. We should relocate the tman to the |
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
858 * redraw_man_t instead. |
d09f603438d8
Merge the work of improvement for graphic engine of openvg branch
Thinker K.F. Li <thinker@codemud.net>
parents:
1067
diff
changeset
|
859 */ |
249
ab8284c8dcee
* Add loopback reference from rdman to the backend. This is only required when we need to acquire the tman for the animation. This is not a reasonable arrangement since the animation should be backend transparent. We should not touch the backend directly from the animation. We should relocate the tman to the rdman.
wycc
parents:
224
diff
changeset
|
860 xmb_rt->rdman->rt = xmb_rt; |
78 | 861 |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
862 xmb_rt->io_man = mb_io_man_new(_io_factory); |
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
863 xmb_rt->timer_man = mb_timer_man_new(_timer_factory); |
78 | 864 |
346
b391722bf20e
sh_image_t::img_data is managed by paint_image_t.
Thinker K.F. Li <thinker@branda.to>
parents:
270
diff
changeset
|
865 img_ldr = simple_mb_img_ldr_new(""); |
265
b42ee279669e
Change function name and add comments.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
866 xmb_rt->img_ldr = img_ldr; |
1005
714169f33f13
Fix X_init_connection() to match modification of mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1004
diff
changeset
|
867 /*! \todo Remove rdman_set_img_ldr() */ |
714169f33f13
Fix X_init_connection() to match modification of mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1004
diff
changeset
|
868 rdman_set_img_ldr(xmb_rt->rdman, img_ldr); /* this is ncessary? */ |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
869 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
870 #ifndef ONLY_MOUSE_MOVE_RAW |
83 | 871 xmb_rt->last = NULL; |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
872 #endif |
83 | 873 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
874 X_kb_init(&xmb_rt->kbinfo, xmb_rt->display, xmb_rt->rdman); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
875 |
1014
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
876 disp_fd = XConnectionNumber(xmb_rt->display); |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
877 xmb_rt->io_hdl = mb_io_man_reg(xmb_rt->io_man, disp_fd, |
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
878 MB_IO_R, |
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
879 _x_supp_handle_connection, |
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
880 xmb_rt); |
1014
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
881 |
78 | 882 return OK; |
883 } | |
884 | |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
885 /*! \brief Initialize a MadButterfy runtime for Xlib. |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
886 * |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
887 * It setups a runtime environment to run MadButterfly with Xlib. |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
888 * Users should specify width and height of the opening window. |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
889 */ |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
890 static int _x_supp_init(X_supp_runtime_t *xmb_rt, const char *display_name, |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
891 int w, int h) { |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
892 int r; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
893 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
894 memset(xmb_rt, 0, sizeof(X_supp_runtime_t)); |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
895 |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
896 xmb_rt->w = w; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
897 xmb_rt->h = h; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
898 r = X_init_connection(display_name, w, h, &xmb_rt->display, |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
899 &xmb_rt->visual, &xmb_rt->win); |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
900 if(r != OK) |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
901 return ERR; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
902 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
903 r = _x_supp_init_with_win_internal(xmb_rt); |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
904 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
905 return r; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
906 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
907 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
908 /*! \brief Initialize a MadButterfly runtime for a window of X. |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
909 * |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
910 * Runtimes initialized with this function should be destroyed with |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
911 * x_supp_destroy_keep_win(). |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
912 */ |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
913 static int |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
914 _x_supp_init_with_win(X_supp_runtime_t *xmb_rt, |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
915 Display *display, Window win) { |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
916 XWindowAttributes attrs; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
917 int r; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
918 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
919 r = XGetWindowAttributes(display, win, &attrs); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
920 if(r == 0) |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
921 return ERR; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
922 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
923 memset(xmb_rt, 0, sizeof(X_supp_runtime_t)); |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
924 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
925 xmb_rt->display = display; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
926 xmb_rt->win = win; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
927 xmb_rt->visual = attrs.visual; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
928 xmb_rt->w = attrs.width; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
929 xmb_rt->h = attrs.height; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
930 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
931 r = _x_supp_init_with_win_internal(xmb_rt); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
932 |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
933 return r; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
934 } |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
935 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
936 static void x_supp_destroy(X_supp_runtime_t *xmb_rt) { |
78 | 937 if(xmb_rt->rdman) { |
938 redraw_man_destroy(xmb_rt->rdman); | |
939 free(xmb_rt->rdman); | |
940 } | |
941 | |
1014
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
942 if(xmb_rt->io_hdl) |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
943 mb_io_man_unreg(xmb_rt->io_man, xmb_rt->io_hdl); |
1014
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
944 |
1007
4d724f248365
Free IO manager and timer manager when free a X supp runtime
Thinker K.F. Li <thinker@codemud.net>
parents:
1006
diff
changeset
|
945 if(xmb_rt->io_man) |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
946 mb_io_man_free(_io_factory, xmb_rt->io_man); |
1007
4d724f248365
Free IO manager and timer manager when free a X supp runtime
Thinker K.F. Li <thinker@codemud.net>
parents:
1006
diff
changeset
|
947 if(xmb_rt->timer_man) |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
948 mb_timer_man_free(_timer_factory, xmb_rt->timer_man); |
78 | 949 |
259
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
950 if(xmb_rt->img_ldr) |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
951 MB_IMG_LDR_FREE(xmb_rt->img_ldr); |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
952 |
78 | 953 if(xmb_rt->cr) |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
954 mbe_destroy(xmb_rt->cr); |
78 | 955 if(xmb_rt->backend_cr) |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
956 mbe_destroy(xmb_rt->backend_cr); |
78 | 957 |
958 if(xmb_rt->surface) | |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
959 mbe_surface_destroy(xmb_rt->surface); |
78 | 960 if(xmb_rt->backend_surface) |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
961 mbe_surface_destroy(xmb_rt->backend_surface); |
78 | 962 |
963 if(xmb_rt->display) | |
964 XCloseDisplay(xmb_rt->display); | |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
965 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
966 X_kb_destroy(&xmb_rt->kbinfo); |
78 | 967 } |
968 | |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
969 /*! \brief Destroy a MadButterfly runtime initialized with |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
970 * _x_supp_init_with_win(). |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
971 * |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
972 * Destroying a runtime with this function prevent the window and |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
973 * display associated with the runtime being closed. |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
974 */ |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
975 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
976 x_supp_destroy_keep_win(X_supp_runtime_t *xmb_rt) { |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
977 Display *display; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
978 Window win; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
979 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
980 display = xmb_rt->display; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
981 xmb_rt->display = NULL; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
982 win = xmb_rt->win; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
983 xmb_rt->win = 0; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
984 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
985 x_supp_destroy(xmb_rt); |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
986 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
987 xmb_rt->display = display; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
988 xmb_rt->win = win; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
989 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
990 |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
991 static mb_rt_t * |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
992 _x_supp_new(const char *display_name, int w, int h) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
993 X_supp_runtime_t *rt; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
994 int r; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
995 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
996 rt = O_ALLOC(X_supp_runtime_t); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
997 if(rt == NULL) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
998 return NULL; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
999 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1000 r = _x_supp_init(rt, display_name, w, h); |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1001 if(r != OK) { |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1002 free(rt); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1003 return NULL; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1004 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1005 |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
1006 return (mb_rt_t *)rt; |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1007 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1008 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1009 /*! \brief Create a new runtime for existed window for X. |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1010 * |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1011 * The object returned by this function must be free with |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1012 * _x_supp_free_keep_win() to prevent the window from closed. |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1013 */ |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1014 static mb_rt_t * |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1015 _x_supp_new_with_win(MB_DISPLAY display, MB_WINDOW win) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1016 X_supp_runtime_t *rt; |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1017 int r; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1018 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1019 rt = O_ALLOC(X_supp_runtime_t); |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1020 if(rt == NULL) |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1021 return NULL; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1022 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1023 r = _x_supp_init_with_win(rt, display, win); |
528
d687d3395264
Clear variables and draw root coord.
Thinker K.F. Li <thinker@branda.to>
parents:
471
diff
changeset
|
1024 if(r != OK) { |
d687d3395264
Clear variables and draw root coord.
Thinker K.F. Li <thinker@branda.to>
parents:
471
diff
changeset
|
1025 free(rt); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1026 return NULL; |
528
d687d3395264
Clear variables and draw root coord.
Thinker K.F. Li <thinker@branda.to>
parents:
471
diff
changeset
|
1027 } |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1028 |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
1029 return (mb_rt_t *)rt; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1030 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1031 |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1032 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1033 _x_supp_free(mb_rt_t *rt) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1034 x_supp_destroy((X_supp_runtime_t *) rt); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1035 free(rt); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1036 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1037 |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1038 /*! \brief Free runtime created with _x_supp_new_with_win(). |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1039 */ |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1040 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1041 _x_supp_free_keep_win(mb_rt_t *rt) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1042 x_supp_destroy_keep_win((X_supp_runtime_t *) rt); |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1043 free(rt); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1044 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1045 |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1046 static subject_t * |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1047 _x_supp_kbevents(mb_rt_t *rt) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1048 X_supp_runtime_t *xmb_rt = (X_supp_runtime_t *) rt; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1049 return xmb_rt->kbinfo.kbevents; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1050 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1051 |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1052 static redraw_man_t * |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1053 _x_supp_rdman(mb_rt_t *rt) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1054 X_supp_runtime_t *xmb_rt = (X_supp_runtime_t *) rt; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1055 return xmb_rt->rdman; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1056 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1057 |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1058 static mb_timer_man_t * |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1059 _x_supp_timer_man(mb_rt_t *rt) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1060 X_supp_runtime_t *xmb_rt = (X_supp_runtime_t *) rt; |
1008
789f67288e1c
Rename X_MB_tman() to X_MB_timer_man()
Thinker K.F. Li <thinker@codemud.net>
parents:
1007
diff
changeset
|
1061 return xmb_rt->timer_man; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1062 } |
131
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1063 |
1060
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
1064 static observer_factory_t * |
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
1065 _x_supp_observer_factory(mb_rt_t *rt) { |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1066 X_supp_runtime_t *xmb_rt = (X_supp_runtime_t *) rt; |
1060
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
1067 observer_factory_t *factory; |
131
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1068 |
1060
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
1069 factory = rdman_get_observer_factory(xmb_rt->rdman); |
131
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1070 return factory; |
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1071 } |
259
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1072 |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1073 static mb_img_ldr_t * |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1074 _x_supp_img_ldr(mb_rt_t *rt) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1075 X_supp_runtime_t *xmb_rt = (X_supp_runtime_t *) rt; |
692
201cc86720a3
Fix compiling time warning about cairo xlib
Thinker K.F. Li <thinker@branda.to>
parents:
691
diff
changeset
|
1076 mb_img_ldr_t *img_ldr; |
259
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1077 |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1078 img_ldr = xmb_rt->img_ldr; |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1079 |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1080 return img_ldr; |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1081 } |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1082 |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1083 static int |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1084 _x_supp_add_event(mb_rt_t *rt, int fd, MB_IO_TYPE type, |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1085 mb_IO_cb_t cb, void *data) |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1086 { |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1087 X_supp_runtime_t *xmb_rt = (X_supp_runtime_t *) rt; |
1009
595a06fc0157
Change X_MB_add/remove_event() to match new mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1008
diff
changeset
|
1088 mb_IO_man_t *io_man = xmb_rt->io_man; |
595a06fc0157
Change X_MB_add/remove_event() to match new mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1008
diff
changeset
|
1089 int hdl; |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1090 |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
1091 hdl = mb_io_man_reg(io_man, fd, type, cb, data); |
1009
595a06fc0157
Change X_MB_add/remove_event() to match new mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1008
diff
changeset
|
1092 return hdl; |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1093 } |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1094 |
1011
02d52058d352
Make functions of X_supp.c static and fill fields of backend.
Thinker K.F. Li <thinker@codemud.net>
parents:
1010
diff
changeset
|
1095 static void |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1096 _x_supp_remove_event(mb_rt_t *rt, int hdl) |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1097 { |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1098 X_supp_runtime_t *xmb_rt = (X_supp_runtime_t *) rt; |
1009
595a06fc0157
Change X_MB_add/remove_event() to match new mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1008
diff
changeset
|
1099 mb_IO_man_t *io_man = xmb_rt->io_man; |
595a06fc0157
Change X_MB_add/remove_event() to match new mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1008
diff
changeset
|
1100 |
1034
e9a134d75c99
To make backend compatible with C++
Thinker K.F. Li <thinker@codemud.net>
parents:
1026
diff
changeset
|
1101 mb_io_man_unreg(io_man, hdl); |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1102 } |
1009
595a06fc0157
Change X_MB_add/remove_event() to match new mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1008
diff
changeset
|
1103 |
1013
d5b8853767e7
Add flush function to mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1012
diff
changeset
|
1104 static int |
1016
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1105 _x_supp_flush(mb_rt_t *rt) { |
7b503c7ed46f
Change naming convention from X_MB to X_supp or x_supp
Thinker K.F. Li <thinker@codemud.net>
parents:
1015
diff
changeset
|
1106 X_supp_runtime_t *xmb_rt = (X_supp_runtime_t *) rt; |
1013
d5b8853767e7
Add flush function to mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1012
diff
changeset
|
1107 int r; |
d5b8853767e7
Add flush function to mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1012
diff
changeset
|
1108 |
1014
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
1109 #ifdef XSHM |
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
1110 XSHM_update(xmb_rt); |
f7bf372a85a3
Register _x_mb_handle_connection() with IO manager
Thinker K.F. Li <thinker@codemud.net>
parents:
1013
diff
changeset
|
1111 #endif |
1013
d5b8853767e7
Add flush function to mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1012
diff
changeset
|
1112 r = XFlush(xmb_rt->display); |
d5b8853767e7
Add flush function to mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1012
diff
changeset
|
1113 return r == 0? ERR: OK; |
d5b8853767e7
Add flush function to mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1012
diff
changeset
|
1114 } |
d5b8853767e7
Add flush function to mb_backend_t
Thinker K.F. Li <thinker@codemud.net>
parents:
1012
diff
changeset
|
1115 |
1043
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1116 static void |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1117 _x_supp_reg_IO_factory(mb_IO_factory_t *io_factory) { |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1118 _io_factory = io_factory; |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1119 } |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1120 |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1121 static void |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1122 _x_supp_reg_timer_factory(mb_timer_factory_t *timer_factory) { |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1123 _timer_factory = timer_factory; |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1124 } |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1125 |
1022
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1126 mb_backend_t mb_dfl_backend = { _x_supp_new, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1127 _x_supp_new_with_win, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1128 |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1129 _x_supp_free, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1130 _x_supp_free_keep_win, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1131 _x_supp_add_event, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1132 _x_supp_remove_event, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1133 _x_supp_event_loop, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1134 _x_supp_flush, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1135 |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1136 _x_supp_kbevents, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1137 _x_supp_rdman, |
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1138 _x_supp_timer_man, |
1060
e415c55b4a0d
Stop using ob as acronym observer
Thinker K.F. Li <thinker@codemud.net>
parents:
1049
diff
changeset
|
1139 _x_supp_observer_factory, |
1043
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1140 _x_supp_img_ldr, |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1141 |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1142 _x_supp_reg_IO_factory, |
769921baf111
Add missed functions: _x_supp_reg_IO_factory and _x_supp_reg_timer_factory
Thinker K.F. Li <thinker@codemud.net>
parents:
1034
diff
changeset
|
1143 _x_supp_reg_timer_factory, |
1022
84006acab6af
Use macros to hide the default backend
Thinker K.F. Li <thinker@codemud.net>
parents:
1018
diff
changeset
|
1144 }; |