Mercurial > MadButterfly
annotate include/mb_types.h @ 949:c9bf47cc621f
Set font size for frame number in frameruler
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Wed, 17 Nov 2010 02:16:32 +0800 |
parents | a17c4e231e54 |
children | 8679b03f72e8 |
rev | line source |
---|---|
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
816
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:
816
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
3 #ifndef __MB_TYPES_H_ |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
4 #define __MB_TYPES_H_ |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
393
diff
changeset
|
6 #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
|
7 #include "mb_tools.h" |
530bb7728546
Move header files to $(top_srcdir)/include/ and prefixed with 'mb_'.
Thinker K.F. Li <thinker@branda.to>
parents:
185
diff
changeset
|
8 #include "mb_observer.h" |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
9 #include "mb_prop.h" |
12 | 10 |
11
128af06c876c
Fix the bug that data of a path end with white spaces would make system down
Thinker K.F. Li <thinker@branda.to>
parents:
10
diff
changeset
|
11 typedef struct _shape shape_t; |
12 | 12 typedef struct _geo geo_t; |
13 | 13 typedef struct _area area_t; |
18
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
14 typedef struct _shnode shnode_t; |
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
15 typedef struct _paint paint_t; |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
16 typedef struct _mb_obj mb_obj_t; |
208 | 17 typedef struct _mb_sprite mb_sprite_t; |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
393
diff
changeset
|
18 /*! \todo Replace mbe_t with canvas_t. */ |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
393
diff
changeset
|
19 typedef mbe_t canvas_t; |
18
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
20 |
159
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
21 struct _redraw_man; |
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
22 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
23 /* \defgroup mb_obj_grp Object type |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
24 * @{ |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
25 */ |
204 | 26 /*! \brief MadButterfly object. |
27 * | |
28 * All objects (coord and shapes) should have mb_obj_t as first member | |
29 * variable. obj_type is used to identify type of an object. Please, | |
30 * use MBO_TYPE() to return this value. MBO_TYPE() will type-casting the | |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
31 * object to mb_obj_t and return obj_type. |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
32 * |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
33 * mb_obj_t should be initialized with mb_obj_init() and destroied with |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
34 * mb_obj_destroy(). |
303
f894b30676e9
Add MBAF object suport. This is still work in progress yet. However, it won't affect other features. Therefore, it is checked in before it become mature.
wycc
parents:
295
diff
changeset
|
35 * |
f894b30676e9
Add MBAF object suport. This is still work in progress yet. However, it won't affect other features. Therefore, it is checked in before it become mature.
wycc
parents:
295
diff
changeset
|
36 * We have defined a set of convienent API which will wrap the coord_t or shape_t API accoridng to its type. |
f894b30676e9
Add MBAF object suport. This is still work in progress yet. However, it won't affect other features. Therefore, it is checked in before it become mature.
wycc
parents:
295
diff
changeset
|
37 * Please refer to http://www.assembla.com/wiki/show/dFrSMOtDer3BZUab7jnrAJ/MBAF_Object for the details. This |
f894b30676e9
Add MBAF object suport. This is still work in progress yet. However, it won't affect other features. Therefore, it is checked in before it become mature.
wycc
parents:
295
diff
changeset
|
38 * API is designed for regular programmers which can be used to change some common properties of objects without |
f894b30676e9
Add MBAF object suport. This is still work in progress yet. However, it won't affect other features. Therefore, it is checked in before it become mature.
wycc
parents:
295
diff
changeset
|
39 * checking its type. |
204 | 40 */ |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
41 struct _mb_obj { |
204 | 42 int obj_type; /*!< \brief Type of a MadButterfly object. */ |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
43 mb_prop_store_t props; /*!< Initialized by rdman. */ |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
44 }; |
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
45 |
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
46 enum { MBO_DUMMY, |
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
47 MBO_COORD, |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
48 MBO_SHAPES=0x1000, /*! \note Don't touch this. */ |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
49 MBO_PATH, |
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
50 MBO_TEXT, |
257
50d253d0fcba
Simple image loader and image shape.
Thinker K.F. Li <thinker@branda.to>
parents:
250
diff
changeset
|
51 MBO_RECT, |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
356
diff
changeset
|
52 MBO_IMAGE, |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
356
diff
changeset
|
53 MBO_STEXT |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
54 }; |
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
55 #define MBO_CLASS_MASK 0xf000 |
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
56 #define MBO_CLASS(x) (((mb_obj_t *)(x))->obj_type & MBO_CLASS_MASK) |
204 | 57 /*! \brief Return type of a MadBufferly object. */ |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
58 #define MBO_TYPE(x) (((mb_obj_t *)(x))->obj_type) |
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
59 #define IS_MBO_SHAPES(obj) (MBO_CLASS(obj) == MBO_SHAPES) |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
60 #define IS_MBO_COORD(obj) (MBO_TYPE(obj) == MBO_COORD) |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
61 #define mb_obj_init(obj, type) \ |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
62 do { \ |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
63 ((mb_obj_t *)(obj))->obj_type = type; \ |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
64 } while(0) |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
65 #define mb_obj_destroy(obj) |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
66 #define mb_obj_prop_store(obj) (&(obj)->props) |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
67 |
232
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
68 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
223
diff
changeset
|
69 /* @} */ |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
70 |
58 | 71 /*! \brief Base of paint types. |
72 * | |
159
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
73 * Paints should be freed by users by calling rdman_paint_free() of |
58 | 74 * the paint. |
75 * | |
260
29acbd8a0dd0
Integrate sh_image with svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
257
diff
changeset
|
76 * To define a foo paint, it should define a rdman_paint_foo_new() |
29acbd8a0dd0
Integrate sh_image with svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
257
diff
changeset
|
77 * function. It return a paint object. |
29acbd8a0dd0
Integrate sh_image with svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
257
diff
changeset
|
78 * |
58 | 79 * \todo move member functions to a seperate structure and setup a |
189
257af0ed5852
When a bullet hits a tank or wall, it shows a bang animation.
Thinker K.F. Li <thinker@branda.to>
parents:
186
diff
changeset
|
80 * singleton for each paint type. |
58 | 81 */ |
18
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
82 struct _paint { |
356
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
322
diff
changeset
|
83 int pnt_type; |
159
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
84 int flags; |
881
a17c4e231e54
Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents:
851
diff
changeset
|
85 void (*prepare)(paint_t *paint, mbe_t *cr, shape_t *sh); |
159
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
86 void (*free)(struct _redraw_man *rdman, paint_t *paint); |
18
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
87 STAILQ(shnode_t) members; |
159
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
88 paint_t *pnt_next; /*!< \brief Collect all paints of a rdman. */ |
18
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
89 }; |
356
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
322
diff
changeset
|
90 enum { MBP_DUMMY, |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
322
diff
changeset
|
91 MBP_COLOR, |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
322
diff
changeset
|
92 MBP_LINEAR, |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
322
diff
changeset
|
93 MBP_RADIAL, |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
322
diff
changeset
|
94 MBP_IMAGE |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
322
diff
changeset
|
95 }; |
18
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
96 |
159
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
97 #define PNTF_FREE 0x1 |
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
98 |
18
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
99 struct _shnode { |
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
100 shape_t *shape; |
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
101 shnode_t *next; |
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
102 }; |
13 | 103 |
104 struct _area { | |
105 co_aix x, y; | |
106 co_aix w, h; | |
107 }; | |
108 | |
109 /*! \brief Geometry data of a shape or a group of shape. | |
110 */ | |
111 struct _geo { | |
16
e17e12b112c4
A simple animation using rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents:
15
diff
changeset
|
112 #ifdef GEO_ORDER |
13 | 113 unsigned int order; |
16
e17e12b112c4
A simple animation using rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents:
15
diff
changeset
|
114 #endif |
13 | 115 unsigned int flags; |
116 shape_t *shape; | |
139
1695a4b02b14
Members of coords are geos instead of shapes, now.
Thinker K.F. Li <thinker@branda.to>
parents:
138
diff
changeset
|
117 geo_t *coord_next; /*!< \brief Link all member geos together. */ |
13 | 118 |
119 area_t *cur_area, *last_area; | |
120 area_t areas[2]; | |
73
9ab15ebc9061
Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents:
58
diff
changeset
|
121 |
9ab15ebc9061
Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents:
58
diff
changeset
|
122 subject_t *mouse_event; |
13 | 123 }; |
124 #define GEF_DIRTY 0x1 | |
160
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
125 #define GEF_HIDDEN 0x2 /*!< The geo is hidden. */ |
158
c1cdd3fcd28f
Postponing rdman_coord_free() and rdman_remove_shape().
Thinker K.F. Li <thinker@branda.to>
parents:
151
diff
changeset
|
126 #define GEF_FREE 0x4 |
232
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
127 #define GEF_OV_DRAW 0x8 /*!< To flag drawed for a overlay testing. */ |
541
f42419c08a65
Swap geo_t::cur_area and geo_t::last_area correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
537
diff
changeset
|
128 #define GEF_SWAP 0x10 |
747
d2f2ed27b84d
Separate GEF_NOT_SHOWED and GEF_HIDDEN flags.
Thinker K.F. Li <thinker@codemud.net>
parents:
570
diff
changeset
|
129 #define GEF_NOT_SHOWED 0x20 /*!< This geo is not showed. |
d2f2ed27b84d
Separate GEF_NOT_SHOWED and GEF_HIDDEN flags.
Thinker K.F. Li <thinker@codemud.net>
parents:
570
diff
changeset
|
130 * |
d2f2ed27b84d
Separate GEF_NOT_SHOWED and GEF_HIDDEN flags.
Thinker K.F. Li <thinker@codemud.net>
parents:
570
diff
changeset
|
131 * A geo is not showed if it is hidden |
d2f2ed27b84d
Separate GEF_NOT_SHOWED and GEF_HIDDEN flags.
Thinker K.F. Li <thinker@codemud.net>
parents:
570
diff
changeset
|
132 * or one of its ancestors is hidden. |
d2f2ed27b84d
Separate GEF_NOT_SHOWED and GEF_HIDDEN flags.
Thinker K.F. Li <thinker@codemud.net>
parents:
570
diff
changeset
|
133 * Redraw manager uses this flag to |
d2f2ed27b84d
Separate GEF_NOT_SHOWED and GEF_HIDDEN flags.
Thinker K.F. Li <thinker@codemud.net>
parents:
570
diff
changeset
|
134 * determine who is not showed. |
d2f2ed27b84d
Separate GEF_NOT_SHOWED and GEF_HIDDEN flags.
Thinker K.F. Li <thinker@codemud.net>
parents:
570
diff
changeset
|
135 */ |
13 | 136 |
235 | 137 extern int areas_are_overlay(area_t *r1, area_t *r2); |
15
c2ce186a5c37
X_main uses rdman_redraw_all()
Thinker K.F. Li <thinker@branda.to>
parents:
14
diff
changeset
|
138 extern void area_init(area_t *area, int n_pos, co_aix pos[][2]); |
250
bd8ea44b421e
Fix bug and finish unit test for collision testing in event.c.
Thinker K.F. Li <thinker@branda.to>
parents:
241
diff
changeset
|
139 #define _in_range(a, s, w) ((a) >= (s) && (a) < ((s) + (w))) |
bd8ea44b421e
Fix bug and finish unit test for collision testing in event.c.
Thinker K.F. Li <thinker@branda.to>
parents:
241
diff
changeset
|
140 #define area_pos_is_in(area, _x, _y) \ |
bd8ea44b421e
Fix bug and finish unit test for collision testing in event.c.
Thinker K.F. Li <thinker@branda.to>
parents:
241
diff
changeset
|
141 (_in_range(_x, (area)->x, (area)->w) && \ |
bd8ea44b421e
Fix bug and finish unit test for collision testing in event.c.
Thinker K.F. Li <thinker@branda.to>
parents:
241
diff
changeset
|
142 _in_range(_y, (area)->y, (area)->h)) |
17
41f0907b27ac
Unittest for rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents:
16
diff
changeset
|
143 extern void geo_init(geo_t *g); |
41f0907b27ac
Unittest for rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents:
16
diff
changeset
|
144 extern void geo_from_positions(geo_t *g, int n_pos, co_aix pos[][2]); |
13 | 145 extern void geo_mark_overlay(geo_t *g, int n_others, geo_t **others, |
146 int *n_overlays, geo_t **overlays); | |
147 #define geo_get_shape(g) ((g)->shape) | |
235 | 148 #define geo_get_shape_safe(g) ((g)? (g)->shape: NULL) |
13 | 149 #define geo_set_shape(g, sh) do {(g)->shape = sh;} while(0) |
250
bd8ea44b421e
Fix bug and finish unit test for collision testing in event.c.
Thinker K.F. Li <thinker@branda.to>
parents:
241
diff
changeset
|
150 #define geo_pos_is_in(g, _x, _y) area_pos_is_in((g)->cur_area, _x, _y) |
232
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
151 #define geo_get_area(g) ((g)->cur_area) |
235 | 152 #define geo_get_flags(g, mask) ((g)->flags & (mask)) |
153 #define geo_set_flags(g, mask) do {(g)->flags |= mask;} while(0) | |
154 #define geo_clear_flags(g, mask) do {(g)->flags &= ~(mask);} while(0) | |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
155 #define geo_get_coord(g) sh_get_coord(geo_get_shape(g)) |
13 | 156 |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
157 /*! \defgroup coord Coordination |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
158 * @{ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
159 */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
160 typedef struct _coord coord_t; |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
161 |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
162 DARRAY(areas, area_t *); |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
163 |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
164 /*! \brief Canvas information for a coord. |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
165 */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
166 typedef struct _coord_canvas_info { |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
167 coord_t *owner; /*!< Cached one or opacity == 1 */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
168 canvas_t *canvas; |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
169 areas_t dirty_areas; /*!< \brief Areas should be updated |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
170 * in canvas. |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
171 */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
172 area_t aggr_dirty_areas[2]; /*!< Used to aggregate updates to parent. */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
173 area_t cached_dirty_area; /*!< Used to dirty an area in cached space. */ |
535
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
174 area_t pcache_areas[2]; /*!< The area in the space of parent |
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
175 * cached. */ |
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
176 area_t *pcache_cur_area; /*!< Current area for parent cached. */ |
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
177 area_t *pcache_last_area; /*!< Last area for parent cached. */ |
850
33fd5fdc8b48
Keep cache to parent device matrix in canvas_info.
Thinker K.F. Li <thinker@codemud.net>
parents:
840
diff
changeset
|
178 co_aix cache_2_pdev[6]; /*!< Transfrom matrix from space of |
33fd5fdc8b48
Keep cache to parent device matrix in canvas_info.
Thinker K.F. Li <thinker@codemud.net>
parents:
840
diff
changeset
|
179 * cached one to its parent. */ |
33fd5fdc8b48
Keep cache to parent device matrix in canvas_info.
Thinker K.F. Li <thinker@codemud.net>
parents:
840
diff
changeset
|
180 co_aix cache_2_pdev_rev[6]; /*!< Reverse of cache_2_pdev. */ |
851
85f22a771e4a
Compute aggregated cache_2_pdev and reversed one
Thinker K.F. Li <thinker@codemud.net>
parents:
850
diff
changeset
|
181 co_aix aggr_2_pdev[6]; /*!< Aggregation of cache_2_pdev from root */ |
85f22a771e4a
Compute aggregated cache_2_pdev and reversed one
Thinker K.F. Li <thinker@codemud.net>
parents:
850
diff
changeset
|
182 co_aix aggr_2_pdev_rev[6]; /*!< Aggregation of cache_2_pdev_rev |
85f22a771e4a
Compute aggregated cache_2_pdev and reversed one
Thinker K.F. Li <thinker@codemud.net>
parents:
850
diff
changeset
|
183 * from root */ |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
184 } coord_canvas_info_t; |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
185 |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
186 /*! \brief A coordination system. |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
187 * |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
188 * It have a transform function defined by matrix to transform |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
189 * coordination from source space to target space. |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
190 * Source space is where the contained is drawed, and target space |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
191 * is where the coordination of parent container of the element |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
192 * represented by this coord object. |
12 | 193 * |
194 * \dot | |
195 * digraph G { | |
196 * graph [rankdir=LR]; | |
197 * root -> child00 -> child10 -> child20 [label="children" color="blue"]; | |
198 * child00 -> child01 -> child02 [label="sibling"]; | |
199 * child10 -> child11 [label="sibling"]; | |
200 * } | |
201 * \enddot | |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
202 */ |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
203 struct _coord { |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
204 mb_obj_t obj; |
13 | 205 unsigned int order; |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
206 unsigned int flags; /*!< \sa \ref coord_flags */ |
138
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
207 co_aix opacity; |
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
208 /*! Own one or inherit from an ancestor. |
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
209 * Setup it when clean coords. |
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
210 * \sa |
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
211 * - \ref COF_OWN_CANVAS |
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
212 * - \ref redraw |
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
213 */ |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
214 coord_canvas_info_t *canvas_info; |
13 | 215 area_t *cur_area, *last_area; |
15
c2ce186a5c37
X_main uses rdman_redraw_all()
Thinker K.F. Li <thinker@branda.to>
parents:
14
diff
changeset
|
216 area_t areas[2]; |
13 | 217 |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
218 co_aix matrix[6]; |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
219 co_aix aggr_matrix[6]; |
13 | 220 |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
221 struct _coord *parent; |
12 | 222 STAILQ(struct _coord) children; |
223 struct _coord *sibling; | |
138
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
224 unsigned int before_pmem; /*!< \brief The coord is before nth member |
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
225 * of parent. */ |
13 | 226 |
139
1695a4b02b14
Members of coords are geos instead of shapes, now.
Thinker K.F. Li <thinker@branda.to>
parents:
138
diff
changeset
|
227 int num_members; |
159
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
228 STAILQ(geo_t) members; /*!< \brief All geo_t members in this coord. */ |
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
229 |
73
9ab15ebc9061
Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents:
58
diff
changeset
|
230 subject_t *mouse_event; |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
231 }; |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
232 /*! \defgroup coord_flags Coord Flags |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
233 * @{ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
234 */ |
13 | 235 #define COF_DIRTY 0x1 |
160
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
236 #define COF_HIDDEN 0x2 /*!< A coord is hidden. */ |
138
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
237 #define COF_OWN_CANVAS 0x4 /*!< A coord owns a canvas or inherit it |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
816
diff
changeset
|
238 * from an ancestor. |
138
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
239 */ |
160
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
240 #define COF_SKIP_TRIVAL 0x8 /*!< temporary skip descendants |
151
d11aa8fc06c7
Fix bug of tanks do not show at right places.
Thinker K.F. Li <thinker@branda.to>
parents:
140
diff
changeset
|
241 * when trivaling. |
d11aa8fc06c7
Fix bug of tanks do not show at right places.
Thinker K.F. Li <thinker@branda.to>
parents:
140
diff
changeset
|
242 */ |
158
c1cdd3fcd28f
Postponing rdman_coord_free() and rdman_remove_shape().
Thinker K.F. Li <thinker@branda.to>
parents:
151
diff
changeset
|
243 #define COF_FREE 0x10 |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
244 #define COF_FAST_CACHE 0x20 /*!< \brief Cache raster image in fast way. |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
245 * \sa \ref img_cache |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
246 */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
247 #define COF_PRECISE_CACHE 0x40 /*!< \brief Cache raster image in |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
248 * precise way. |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
249 * \sa \ref img_cache |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
250 */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
251 #define COF_CACHE_MASK 0x60 |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
252 #define COF_ANCESTOR_CACHE 0x80 /*!< \brief One ancestor is cached. |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
253 * \sa \ref img_cache |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
254 */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
255 #define COF_MUST_ZEROING 0x100 /*!< \sa \ref cache_imp */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
256 #define COF_JUST_CLEAN 0x200 /*!< \brief This coord is just cleaned by |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
257 * last clean. |
322
c1afd14caa85
Remove out-of-date comments and refactor code and fix a small bug.
Thinker K.F. Li <thinker@branda.to>
parents:
314
diff
changeset
|
258 * It is used by clean_rdman_dirties(). |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
259 */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
260 #define COF_TEMP_MARK 0x400 /*!< \brief Temporary mark a coord. */ |
536
b6b3dbeaedf3
[mq]: pcached_area1.diff
Thinker K.F. Li <thinker@branda.to>
parents:
535
diff
changeset
|
261 #define COF_JUST_ZERO 0x800 /*!< \brief The coord is real peformed zeroing. |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
816
diff
changeset
|
262 * |
536
b6b3dbeaedf3
[mq]: pcached_area1.diff
Thinker K.F. Li <thinker@branda.to>
parents:
535
diff
changeset
|
263 * It's canvas is changed by zeroing. |
b6b3dbeaedf3
[mq]: pcached_area1.diff
Thinker K.F. Li <thinker@branda.to>
parents:
535
diff
changeset
|
264 */ |
837
0b66b585b364
Since it is COF_DIRTY_PCACHE_AREA, donot add it again
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
265 /*! \brief pcache_area shoud be updated. |
0b66b585b364
Since it is COF_DIRTY_PCACHE_AREA, donot add it again
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
266 * |
840
048cc704bef7
Merge dirty_pcache_area_coords and zeroing_coords.
Thinker K.F. Li <thinker@codemud.net>
parents:
838
diff
changeset
|
267 * A coord is marked with COF_DIRTY_PCACHE_AREA means its pcache_area |
048cc704bef7
Merge dirty_pcache_area_coords and zeroing_coords.
Thinker K.F. Li <thinker@codemud.net>
parents:
838
diff
changeset
|
268 * must be re-computed when zeroing. |
837
0b66b585b364
Since it is COF_DIRTY_PCACHE_AREA, donot add it again
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
269 */ |
0b66b585b364
Since it is COF_DIRTY_PCACHE_AREA, donot add it again
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
270 #define COF_DIRTY_PCACHE_AREA 0x1000 |
537
3a7e3c1cd6e6
[mq]: propagate_areas.diff
Thinker K.F. Li <thinker@branda.to>
parents:
536
diff
changeset
|
271 #define COF_SKIP_ZERO 0x2000 /*!< \brief The coord just skip zeroing. |
3a7e3c1cd6e6
[mq]: propagate_areas.diff
Thinker K.F. Li <thinker@branda.to>
parents:
536
diff
changeset
|
272 * No real zeroing was performed. |
3a7e3c1cd6e6
[mq]: propagate_areas.diff
Thinker K.F. Li <thinker@branda.to>
parents:
536
diff
changeset
|
273 */ |
816
0e56a1ca19b2
Testcases for caching coords
Thinker K.F. Li <thinker@codemud.net>
parents:
753
diff
changeset
|
274 #define COF_ALWAYS_CACHE 0x4000 /*!< \brief The coord always own a canvas */ |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
275 /* @} */ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
276 |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
277 extern void matrix_mul(co_aix *m1, co_aix *m2, co_aix *dst); |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
278 extern void matrix_trans_pos(co_aix *matrix, co_aix *x, co_aix *y); |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
279 |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
280 extern void coord_init(coord_t *co, coord_t *parent); |
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
281 extern void coord_trans_pos(coord_t *co, co_aix *x, co_aix *y); |
31
da770188a44d
resize font size for changige of coord.
Thinker K.F. Li <thinker@branda.to>
parents:
30
diff
changeset
|
282 extern co_aix coord_trans_size(coord_t *co, co_aix size); |
16
e17e12b112c4
A simple animation using rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents:
15
diff
changeset
|
283 extern void compute_aggr_of_coord(coord_t *coord); |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
284 extern void compute_aggr_of_cached_coord(coord_t *coord); |
535
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
285 extern void compute_aggr(coord_t *coord); |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
286 extern void compute_reverse(co_aix *orig, co_aix *reverse); |
10 | 287 extern void update_aggr_matrix(coord_t *start); |
13 | 288 extern coord_t *preorder_coord_subtree(coord_t *root, coord_t *last); |
138
9f4fc9ecfd1f
Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
289 extern coord_t *postorder_coord_subtree(coord_t *root, coord_t *last); |
151
d11aa8fc06c7
Fix bug of tanks do not show at right places.
Thinker K.F. Li <thinker@branda.to>
parents:
140
diff
changeset
|
290 #define preorder_coord_skip_subtree(sub) \ |
d11aa8fc06c7
Fix bug of tanks do not show at right places.
Thinker K.F. Li <thinker@branda.to>
parents:
140
diff
changeset
|
291 do { (sub)->flags |= COF_SKIP_TRIVAL; } while(0) |
160
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
292 #define coord_hide(co) \ |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
293 do { \ |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
294 (co)->flags |= COF_HIDDEN; \ |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
295 } while(0) |
57
ab028c9f0930
Ability to hidden shapes and action of visibility.
Thinker K.F. Li <thinker@branda.to>
parents:
35
diff
changeset
|
296 #define coord_show(co) do { co->flags &= ~COF_HIDDEN; } while(0) |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
297 #define coord_fast_cache(co) \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
298 do { \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
299 (co)->flags = \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
300 ((co)->flags & ~COF_CACHE_MASK) | COF_FAST_CACHE; \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
301 } while(0) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
302 #define coord_precise_cache(co) \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
303 do { \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
304 (co)->flags = \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
305 ((co)->flags & ~COF_CACHE_MASK) | COF_PRECISE_CACHE; \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
306 } while(0) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
307 #define coord_nocache(co) \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
308 do { \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
309 (co)->flags &= ~COF_CACHE_MASK; \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
310 } while(0) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
311 #define coord_is_root(co) ((co)->parent == NULL) |
536
b6b3dbeaedf3
[mq]: pcached_area1.diff
Thinker K.F. Li <thinker@branda.to>
parents:
535
diff
changeset
|
312 #define coord_is_cached(co) ((co)->flags & COF_OWN_CANVAS) |
816
0e56a1ca19b2
Testcases for caching coords
Thinker K.F. Li <thinker@codemud.net>
parents:
753
diff
changeset
|
313 #define coord_is_always_cached(co) ((co)->flags & COF_ALWAYS_CACHE) |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
314 #define coord_is_fast_cached(co) ((co)->flags & COF_FAST_MASK) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
315 #define coord_is_precise_cached(co) ((co)->flags & COF_PRECISE_MASK) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
316 #define coord_is_zeroing(co) ((co)->flags & COF_MUST_ZEROING) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
317 #define coord_set_zeroing(co) \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
318 do { (co)->flags |= COF_MUST_ZEROING; } while(0) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
319 #define coord_clear_zeroing(co) \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
320 do { (co)->flags &= ~COF_MUST_ZEROING; } while(0) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
321 #define coord_set_flags(co, _flags) \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
322 do { (co)->flags |= (_flags); } while(0) |
535
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
323 #define coord_get_parent(co) ((co)->parent) |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
324 #define coord_get_flags(co, _flags) ((co)->flags & (_flags)) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
325 #define coord_clear_flags(co, _flags) \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
326 do { (co)->flags &= ~(_flags); } while(0) |
83 | 327 #define coord_get_mouse_event(coord) ((coord)->mouse_event) |
753
cedfe4966fd6
Clear unused local variables
Thinker K.F. Li <thinker@codemud.net>
parents:
747
diff
changeset
|
328 #define coord_get_opacity(coord) ((coord)->opacity) |
cedfe4966fd6
Clear unused local variables
Thinker K.F. Li <thinker@codemud.net>
parents:
747
diff
changeset
|
329 #define coord_set_opacity(coord, v) do { (coord)->opacity = v; } while(0) |
257
50d253d0fcba
Simple image loader and image shape.
Thinker K.F. Li <thinker@branda.to>
parents:
250
diff
changeset
|
330 #define coord_get_aggr_matrix(coord) ((coord)->aggr_matrix) |
521
fa2ccf39ba53
imported patch more_comment.diff
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
331 #define coord_get_matrix(coord) ((coord)->matrix) |
232
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
332 #define FOR_COORDS_POSTORDER(coord, cur) \ |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
333 for((cur) = postorder_coord_subtree((coord), NULL); \ |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
334 (cur) != NULL; \ |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
335 (cur) = postorder_coord_subtree((coord), (cur))) |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
336 #define FOR_COORDS_PREORDER(coord, cur) \ |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
337 for((cur) = (coord); \ |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
338 (cur) != NULL; \ |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
339 (cur) = preorder_coord_subtree((coord), (cur))) |
12 | 340 |
222
f7057177abbb
Add functions to move and scale the coord_t like the actionscript. Users should use these functions instead of the matrix directly.
wycc
parents:
211
diff
changeset
|
341 /*! \brief Coord operation function |
f7057177abbb
Add functions to move and scale the coord_t like the actionscript. Users should use these functions instead of the matrix directly.
wycc
parents:
211
diff
changeset
|
342 * These functions are used to move and scale the coord_t. Programmers should use these functions instead of using the matrix directly. |
f7057177abbb
Add functions to move and scale the coord_t like the actionscript. Users should use these functions instead of the matrix directly.
wycc
parents:
211
diff
changeset
|
343 * The x,y,sx,sy are all in co_aix type. |
f7057177abbb
Add functions to move and scale the coord_t like the actionscript. Users should use these functions instead of the matrix directly.
wycc
parents:
211
diff
changeset
|
344 * |
f7057177abbb
Add functions to move and scale the coord_t like the actionscript. Users should use these functions instead of the matrix directly.
wycc
parents:
211
diff
changeset
|
345 */ |
f7057177abbb
Add functions to move and scale the coord_t like the actionscript. Users should use these functions instead of the matrix directly.
wycc
parents:
211
diff
changeset
|
346 #define coord_move(co,x,y) do {(co)->matrix[2] = (x); (co)->matrix[5] = (y);} while(0) |
295 | 347 #define coord_set_scalex(co,sx) do {(co)->matrix[0] = sx;} while(0) |
303
f894b30676e9
Add MBAF object suport. This is still work in progress yet. However, it won't affect other features. Therefore, it is checked in before it become mature.
wycc
parents:
295
diff
changeset
|
348 #define coord_set_scaley(co,sy) do {(co)->matrix[3] = sy;} while(0) |
295 | 349 #define coord_scalex(co) ((co)->matrix[0]) |
350 #define coord_scaley(co) ((co)->matrix[3]) | |
351 #define coord_x(co) ((co)->matrix[2]) | |
352 #define coord_y(co) ((co)->matrix[5]) | |
232
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
353 #define FOR_COORD_MEMBERS(coord, geo) \ |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
354 for(geo = STAILQ_HEAD((coord)->members); \ |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
355 geo != NULL; \ |
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
356 geo = STAILQ_NEXT(geo_t, coord_next, geo)) |
235 | 357 #define FOR_COORD_SHAPES(coord, shape) \ |
358 for(shape = geo_get_shape_safe(STAILQ_HEAD((coord)->members)); \ | |
359 shape != NULL; \ | |
360 shape = geo_get_shape_safe(STAILQ_NEXT(geo_t, coord_next, \ | |
361 sh_get_geo(shape)))) | |
232
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
362 #define coord_get_area(coord) ((coord)->cur_area) |
535
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
363 #define coord_get_last_area(coord) ((coord)->last_area) |
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
364 #define coord_get_pcache_area(coord) ((coord)->canvas_info->pcache_cur_area) |
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
365 #define coord_get_pcache_last_area(coord) \ |
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
366 ((coord)->canvas_info->pcache_last_area) |
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
367 #define coord_get_cached(coord) ((coord)->canvas_info->owner) |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
368 #define _coord_get_canvas(coord) ((coord)->canvas_info->canvas) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
369 #define _coord_set_canvas(coord, _canvas) \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
370 do { \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
371 (coord)->canvas_info->canvas = _canvas; \ |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
372 } while(0) |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
373 #define _coord_get_dirty_areas(coord) (&(coord)->canvas_info->dirty_areas) |
535
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
374 #define _coord_get_aggr_dirty_areas(coord) \ |
a545f126d2bf
pcached_area replaces owner_mems_area
Thinker K.F. Li <thinker@branda.to>
parents:
521
diff
changeset
|
375 ((coord)->canvas_info->aggr_dirty_areas) |
850
33fd5fdc8b48
Keep cache to parent device matrix in canvas_info.
Thinker K.F. Li <thinker@codemud.net>
parents:
840
diff
changeset
|
376 #define coord_get_2pdev(coord) ((coord)->canvas_info->cache_2_pdev) |
33fd5fdc8b48
Keep cache to parent device matrix in canvas_info.
Thinker K.F. Li <thinker@codemud.net>
parents:
840
diff
changeset
|
377 #define coord_get_2pdev_rev(coord) ((coord)->canvas_info->cache_2_pdev_rev) |
851
85f22a771e4a
Compute aggregated cache_2_pdev and reversed one
Thinker K.F. Li <thinker@codemud.net>
parents:
850
diff
changeset
|
378 #define coord_get_aggr2pdev(coord) ((coord)->canvas_info->aggr_2_pdev) |
85f22a771e4a
Compute aggregated cache_2_pdev and reversed one
Thinker K.F. Li <thinker@codemud.net>
parents:
850
diff
changeset
|
379 #define coord_get_aggr2pdev_rev(coord) ((coord)->canvas_info->aggr_2_pdev_rev) |
314
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
380 |
6c350fc92ae3
Cache rednering result is now workable.
Thinker K.F. Li <thinker@branda.to>
parents:
303
diff
changeset
|
381 /* @} */ |
12 | 382 |
383 /*! \brief A grahpic shape. | |
384 * | |
385 * \dot | |
386 * digraph G { | |
387 * "shape" -> "coord"; | |
388 * "shape" -> "geo"; | |
389 * "geo" -> "shape"; | |
390 * "coord" -> "shape" [label="members"] | |
391 * "shape" -> "shape" [label="sibling"]; | |
392 * } | |
393 * \enddot | |
394 */ | |
395 struct _shape { | |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
396 mb_obj_t obj; |
12 | 397 geo_t *geo; |
398 coord_t *coord; | |
18
0f3baa488a62
Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents:
17
diff
changeset
|
399 paint_t *fill, *stroke; |
26
d50f33040de6
Set line width for path.
Thinker K.F. Li <thinker@branda.to>
parents:
18
diff
changeset
|
400 co_aix stroke_width; |
73
9ab15ebc9061
Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents:
58
diff
changeset
|
401 int stroke_linecap:2; |
9ab15ebc9061
Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents:
58
diff
changeset
|
402 int stroke_linejoin:2; |
159
b90abd31a281
Postponse free of coords, shapes, and paints when the rdman is dirty.
Thinker K.F. Li <thinker@branda.to>
parents:
158
diff
changeset
|
403 struct _shape *sh_next; /*!< Link all shapes of a rdman together. */ |
73
9ab15ebc9061
Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents:
58
diff
changeset
|
404 void (*free)(shape_t *shape); |
12 | 405 }; |
196
c234ee745ceb
Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents:
189
diff
changeset
|
406 /* enum { SHT_UNKNOW, SHT_PATH, SHT_TEXT, SHT_RECT }; */ |
12 | 407 |
77 | 408 #define sh_get_mouse_event_subject(sh) ((sh)->geo->mouse_event) |
160
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
409 #define sh_hide(sh) \ |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
410 do { \ |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
411 (sh)->geo->flags |= GEF_HIDDEN; \ |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
412 } while(0) |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
413 #define sh_show(sh) \ |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
414 do { \ |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
415 (sh)->geo->flags &= ~GEF_HIDDEN; \ |
147c93163ef0
Fix bug of tank that bullet is not hidden when go out the map.
Thinker K.F. Li <thinker@branda.to>
parents:
159
diff
changeset
|
416 } while(0) |
232
527894c2ad39
Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents:
224
diff
changeset
|
417 #define sh_get_geo(sh) ((sh)->geo) |
235 | 418 #define sh_get_geo_safe(sh) ((sh)? (sh)->geo: NULL) |
419 #define sh_get_flags(sh, mask) geo_get_flags(sh_get_geo(sh), mask) | |
420 #define sh_set_flags(sh, mask) geo_set_flags(sh_get_geo(sh), mask) | |
421 #define sh_clear_flags(sh, mask) geo_clear_flags(sh_get_geo(sh), mask) | |
422 #define sh_pos_is_in(sh, x, y) geo_pos_is_in(sh_get_geo(sh), x, y) | |
423 #define sh_get_area(sh) geo_get_area(sh_get_geo(sh)) | |
257
50d253d0fcba
Simple image loader and image shape.
Thinker K.F. Li <thinker@branda.to>
parents:
250
diff
changeset
|
424 #define sh_get_coord(sh) ((sh)->coord) |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
356
diff
changeset
|
425 #define sh_get_aggr_matrix(sh) (coord_get_aggr_matrix(sh_get_coord(sh))) |
260
29acbd8a0dd0
Integrate sh_image with svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
257
diff
changeset
|
426 #define sh_get_fill(sh) ((sh)->fill) |
29acbd8a0dd0
Integrate sh_image with svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
257
diff
changeset
|
427 #define sh_get_stroke(sh) ((sh)->stroke) |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
458
diff
changeset
|
428 #define sh_set_stroke_width(sh, v) do { (sh)->stroke_width = (v); } while(0) |
570
49e79253b6d3
Functions of setting/getting stroke width of a shape
Thinker K.F. Li <thinker@branda.to>
parents:
541
diff
changeset
|
429 #define sh_get_stroke_width(sh) (sh)->stroke_width |
140
0de8fd11271e
Use macro to simplify the code.
Thinker K.F. Li <thinker@branda.to>
parents:
139
diff
changeset
|
430 |
12 | 431 |
208 | 432 /*! \brief A sprite is a set of graphics that being an object in animation. |
433 * | |
434 * A sprite include graphics comprise an object. For example, a tank, in | |
435 * example tank, is comprised a set of graphics that is represented as a | |
436 * sprite. | |
437 */ | |
438 struct _mb_sprite { | |
209
6f63aa67ed83
Define types for sprite shared object.
Thinker K.F. Li <thinker@branda.to>
parents:
208
diff
changeset
|
439 void (*free)(mb_sprite_t *); |
6f63aa67ed83
Define types for sprite shared object.
Thinker K.F. Li <thinker@branda.to>
parents:
208
diff
changeset
|
440 mb_obj_t *(*get_obj_with_name)(mb_sprite_t *sprite, const char *id); |
241
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
235
diff
changeset
|
441 /*! Return non-zero for error. */ |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
235
diff
changeset
|
442 int (*goto_scene)(mb_sprite_t *sprite, int scene_no); |
208 | 443 }; |
444 | |
211
41eab0a10651
Define convenience macros for sprite.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
445 #define MB_SPRITE_FREE(sprite) ((mb_sprite_t *)(sprite))->free(sprite) |
241
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
235
diff
changeset
|
446 #define MB_SPRITE_GET_OBJ(sprite, name) \ |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
235
diff
changeset
|
447 ((mb_sprite_t *)(sprite))->get_obj_with_name((mb_sprite_t *)(sprite), \ |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
235
diff
changeset
|
448 (name)) |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
235
diff
changeset
|
449 #define MB_SPRITE_GOTO_SCENE(sprite, scene_no) \ |
104d83378582
Add scene support in svg2code.py.
Thinker K.F. Li <thinker@branda.to>
parents:
235
diff
changeset
|
450 ((mb_sprite_t *)(sprite))->goto_scene((mb_sprite_t *)(sprite), scene_no) |
211
41eab0a10651
Define convenience macros for sprite.
Thinker K.F. Li <thinker@branda.to>
parents:
210
diff
changeset
|
451 |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
452 |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
453 /*! \defgroup mb_sprite_lsym Sprite with linear symbol table. |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
454 * @{ |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
816
diff
changeset
|
455 */ |
210
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
456 struct _mb_sprite_lsym_entry { |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
457 const char *sym; |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
458 const int offset; |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
459 }; |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
460 typedef struct _mb_sprite_lsym_entry mb_sprite_lsym_entry_t; |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
461 |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
462 /*! \brief A sub-type of mb_sprite_t with linear symbol table. |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
463 * |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
464 * This type of sprite search symbols with linear/or binary searching. |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
465 */ |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
466 struct _mb_sprite_lsym { |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
467 mb_sprite_t sprite; |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
468 int num_entries; |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
469 mb_sprite_lsym_entry_t *entries; |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
470 }; |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
471 typedef struct _mb_sprite_lsym mb_sprite_lsym_t; |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
472 |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
473 /* @} */ |
3fadd2f2742e
M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents:
209
diff
changeset
|
474 |
5
9c331ec9e210
SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
475 #endif /* __MB_TYPES_H_ */ |