annotate include/mb_types.h @ 234:889cdc5f23c5

When a scene is selected to0 edit, we copy all of its elements out of the scene so that inkscape can edit it directly. All elements add or delete by the inkspcae will be put back when we switch the scene. The svg2code.py must recognize this structure.
author wycc
date Wed, 24 Dec 2008 23:43:39 +0800
parents 527894c2ad39
children 65cabbdd5284
rev   line source
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
1 #ifndef __MB_TYPES_H_
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
2 #define __MB_TYPES_H_
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
3
18
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
4 #include <cairo.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
5 #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
6 #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
7 #include "mb_prop.h"
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
8
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
9 typedef float co_aix;
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
10 typedef struct _shape shape_t;
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
11 typedef struct _geo geo_t;
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
12 typedef struct _area area_t;
18
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
13 typedef struct _shnode shnode_t;
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
14 typedef struct _paint paint_t;
196
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
15 typedef struct _mb_obj mb_obj_t;
208
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
16 typedef struct _mb_sprite mb_sprite_t;
18
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
17
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
18 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
19
224
29e1b2bffe4c X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 223
diff changeset
20 /* \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
21 * @{
29e1b2bffe4c X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 223
diff changeset
22 */
204
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
23 /*! \brief MadButterfly object.
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
24 *
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
25 * All objects (coord and shapes) should have mb_obj_t as first member
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
26 * variable. obj_type is used to identify type of an object. Please,
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
27 * 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
28 * 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
29 *
29e1b2bffe4c X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 223
diff changeset
30 * 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
31 * mb_obj_destroy().
204
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
32 */
196
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
33 struct _mb_obj {
204
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
34 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
35 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
36 };
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
37
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
38 enum { MBO_DUMMY,
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
39 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
40 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
41 MBO_PATH,
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
42 MBO_TEXT,
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
43 MBO_RECT
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 #define MBO_CLASS_MASK 0xf000
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
46 #define MBO_CLASS(x) (((mb_obj_t *)(x))->obj_type & MBO_CLASS_MASK)
204
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
47 /*! \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
48 #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
49 #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
50 #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
51 #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
52 do { \
29e1b2bffe4c X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 223
diff changeset
53 ((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
54 } while(0)
29e1b2bffe4c X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 223
diff changeset
55 #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
56 #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
57
232
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
58
224
29e1b2bffe4c X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 223
diff changeset
59 /* @} */
196
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
60
58
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
61 /*! \brief Base of paint types.
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
62 *
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
63 * Paints should be freed by users by calling rdman_paint_free() of
58
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
64 * the paint.
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
65 *
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
66 * \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
67 * singleton for each paint type.
58
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
68 */
18
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
69 struct _paint {
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
70 int flags;
18
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
71 void (*prepare)(paint_t *paint, cairo_t *cr);
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
72 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
73 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
74 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
75 };
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
76
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
77 #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
78
18
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
79 struct _shnode {
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
80 shape_t *shape;
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
81 shnode_t *next;
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
82 };
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
83
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
84 struct _area {
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
85 co_aix x, y;
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
86 co_aix w, h;
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
87 };
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
88
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
89 /*! \brief Geometry data of a shape or a group of shape.
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
90 */
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
91 struct _geo {
16
e17e12b112c4 A simple animation using rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents: 15
diff changeset
92 #ifdef GEO_ORDER
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
93 unsigned int order;
16
e17e12b112c4 A simple animation using rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents: 15
diff changeset
94 #endif
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
95 unsigned int flags;
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
96 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
97 geo_t *coord_next; /*!< \brief Link all member geos together. */
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
98
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
99 area_t *cur_area, *last_area;
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
100 area_t areas[2];
73
9ab15ebc9061 Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents: 58
diff changeset
101
9ab15ebc9061 Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents: 58
diff changeset
102 subject_t *mouse_event;
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
103 };
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
104 #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
105 #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
106 #define GEF_FREE 0x4
232
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
107 #define GEF_OV_DRAW 0x8 /*!< To flag drawed for a overlay testing. */
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
108
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
109 extern int is_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
110 extern void area_init(area_t *area, int n_pos, co_aix pos[][2]);
17
41f0907b27ac Unittest for rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents: 16
diff changeset
111 extern void geo_init(geo_t *g);
41f0907b27ac Unittest for rdman_redraw_changed().
Thinker K.F. Li <thinker@branda.to>
parents: 16
diff changeset
112 extern void geo_from_positions(geo_t *g, int n_pos, co_aix pos[][2]);
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
113 extern void geo_mark_overlay(geo_t *g, int n_others, geo_t **others,
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
114 int *n_overlays, geo_t **overlays);
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
115 #define geo_get_shape(g) ((g)->shape)
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
116 #define geo_set_shape(g, sh) do {(g)->shape = sh;} while(0)
28
604bc90d509d Refactory
Thinker K.F. Li <thinker@branda.to>
parents: 26
diff changeset
117 #define _geo_is_in(a, s, w) ((a) >= (s) && (a) < ((s) + (w)))
604bc90d509d Refactory
Thinker K.F. Li <thinker@branda.to>
parents: 26
diff changeset
118 #define geo_pos_is_in(g, _x, _y) \
30
e06a4a667ce2 Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents: 28
diff changeset
119 (_geo_is_in(_x, (g)->cur_area->x, (g)->cur_area->w) && \
e06a4a667ce2 Accept mouse/pointer event and hint the shape that the pointer is over.
Thinker K.F. Li <thinker@branda.to>
parents: 28
diff changeset
120 _geo_is_in(_y, (g)->cur_area->y, (g)->cur_area->h))
232
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
121 #define geo_get_area(g) ((g)->cur_area)
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
122
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
123
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
124 /*! \brief A coordination system.
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
125 *
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
126 * 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
127 * coordination from source space to target space.
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
128 * 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
129 * 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
130 * represented by this coord object.
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
131 *
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
132 * \dot
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
133 * digraph G {
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
134 * graph [rankdir=LR];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
135 * root -> child00 -> child10 -> child20 [label="children" color="blue"];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
136 * child00 -> child01 -> child02 [label="sibling"];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
137 * child10 -> child11 [label="sibling"];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
138 * }
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
139 * \enddot
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
140 */
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
141 typedef struct _coord {
196
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
142 mb_obj_t obj;
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
143 unsigned int order;
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
144 unsigned int flags;
138
9f4fc9ecfd1f Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
145 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
146 /*! 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
147 * 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
148 * \sa
9f4fc9ecfd1f Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
149 * - \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
150 * - \ref redraw
9f4fc9ecfd1f Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
151 */
9f4fc9ecfd1f Make shapes and coords drawed in post-order of tree.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
152 cairo_t *canvas;
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
153 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
154 area_t areas[2];
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
155
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
156 co_aix matrix[6];
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
157 co_aix aggr_matrix[6];
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
158
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
159 struct _coord *parent;
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
160 STAILQ(struct _coord) children;
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
161 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
162 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
163 * of parent. */
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
164
139
1695a4b02b14 Members of coords are geos instead of shapes, now.
Thinker K.F. Li <thinker@branda.to>
parents: 138
diff changeset
165 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
166 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
167
73
9ab15ebc9061 Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents: 58
diff changeset
168 subject_t *mouse_event;
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
169 } coord_t;
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
170 #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
171 #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
172 #define COF_OWN_CANVAS 0x4 /*!< A coord owns a canvas or inherit it
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
173 * 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
174 */
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
175 #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
176 * when trivaling.
d11aa8fc06c7 Fix bug of tanks do not show at right places.
Thinker K.F. Li <thinker@branda.to>
parents: 140
diff changeset
177 */
158
c1cdd3fcd28f Postponing rdman_coord_free() and rdman_remove_shape().
Thinker K.F. Li <thinker@branda.to>
parents: 151
diff changeset
178 #define COF_FREE 0x10
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
179
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
180 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
181 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
182 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
183 extern void compute_aggr_of_coord(coord_t *coord);
10
7cfecdce94cc Remove warning messages
Thinker K.F. Li <thinker@branda.to>
parents: 5
diff changeset
184 extern void update_aggr_matrix(coord_t *start);
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
185 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
186 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
187 #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
188 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
189 #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
190 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
191 (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
192 } while(0)
57
ab028c9f0930 Ability to hidden shapes and action of visibility.
Thinker K.F. Li <thinker@branda.to>
parents: 35
diff changeset
193 #define coord_show(co) do { co->flags &= ~COF_HIDDEN; } while(0)
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
194 #define coord_get_mouse_event(coord) ((coord)->mouse_event)
232
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
195 #define FOR_COORDS_POSTORDER(coord, cur) \
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
196 for((cur) = postorder_coord_subtree((coord), NULL); \
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
197 (cur) != NULL; \
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
198 (cur) = postorder_coord_subtree((coord), (cur)))
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
199 #define FOR_COORDS_PREORDER(coord, cur) \
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
200 for((cur) = (coord); \
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
201 (cur) != NULL; \
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
202 (cur) = preorder_coord_subtree((coord), (cur)))
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
203
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
204 /*! \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
205 * 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
206 * 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
207 *
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
208 */
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
209 #define coord_move(co,x,y) do {(co)->matrix[2] = (x); (co)->matrix[5] = (y);} while(0)
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
210 #define coord_set_scalex(ci,sx) do {(co)->matrix[0] = sx;} while(0)
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
211 #define coord_set_scaley(ci,sy) do {(co)->matrux[3] = sy;} while(0)
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
212 #define coord_scalex(ci) ((co)->matrix[0])
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
213 #define coord_scaley(ci) ((co)->matrix[3])
223
8be36a0d4239 Add coord_x(co) and coord_y(co)
wycc
parents: 222
diff changeset
214 #define coord_x(ci) ((co)->matrix[2])
8be36a0d4239 Add coord_x(co) and coord_y(co)
wycc
parents: 222
diff changeset
215 #define coord_y(ci) ((co)->matrix[5])
232
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
216 #define FOR_COORD_MEMBERS(coord, geo) \
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
217 for(geo = STAILQ_HEAD((coord)->members); \
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
218 geo != NULL; \
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
219 geo = STAILQ_NEXT(geo_t, coord_next, geo))
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
220 #define coord_get_area(coord) ((coord)->cur_area)
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
221
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
222 /*! \brief A grahpic shape.
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
223 *
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
224 * \dot
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
225 * digraph G {
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
226 * "shape" -> "coord";
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
227 * "shape" -> "geo";
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
228 * "geo" -> "shape";
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
229 * "coord" -> "shape" [label="members"]
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
230 * "shape" -> "shape" [label="sibling"];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
231 * }
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
232 * \enddot
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
233 */
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
234 struct _shape {
196
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
235 mb_obj_t obj;
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
236 geo_t *geo;
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
237 coord_t *coord;
18
0f3baa488a62 Support solid color paint for fill.
Thinker K.F. Li <thinker@branda.to>
parents: 17
diff changeset
238 paint_t *fill, *stroke;
26
d50f33040de6 Set line width for path.
Thinker K.F. Li <thinker@branda.to>
parents: 18
diff changeset
239 co_aix stroke_width;
73
9ab15ebc9061 Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents: 58
diff changeset
240 int stroke_linecap:2;
9ab15ebc9061 Observer for mouse events
Thinker K.F. Li <thinker@branda.to>
parents: 58
diff changeset
241 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
242 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
243 void (*free)(shape_t *shape);
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
244 };
196
c234ee745ceb Start moving to mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 189
diff changeset
245 /* enum { SHT_UNKNOW, SHT_PATH, SHT_TEXT, SHT_RECT }; */
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
246
77
Thinker K.F. Li <thinker@branda.to>
parents: 73
diff changeset
247 #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
248 #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
249 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
250 (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
251 } 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
252 #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
253 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
254 (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
255 } while(0)
232
527894c2ad39 Add functions for collision test.
Thinker K.F. Li <thinker@branda.to>
parents: 224
diff changeset
256 #define sh_get_geo(sh) ((sh)->geo)
140
0de8fd11271e Use macro to simplify the code.
Thinker K.F. Li <thinker@branda.to>
parents: 139
diff changeset
257
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
258
208
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
259 /*! \brief A sprite is a set of graphics that being an object in animation.
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
260 *
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
261 * A sprite include graphics comprise an object. For example, a tank, in
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
262 * example tank, is comprised a set of graphics that is represented as a
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
263 * sprite.
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
264 */
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
265 struct _mb_sprite {
209
6f63aa67ed83 Define types for sprite shared object.
Thinker K.F. Li <thinker@branda.to>
parents: 208
diff changeset
266 void (*free)(mb_sprite_t *);
6f63aa67ed83 Define types for sprite shared object.
Thinker K.F. Li <thinker@branda.to>
parents: 208
diff changeset
267 mb_obj_t *(*get_obj_with_name)(mb_sprite_t *sprite, const char *id);
208
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
268 };
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
269
211
41eab0a10651 Define convenience macros for sprite.
Thinker K.F. Li <thinker@branda.to>
parents: 210
diff changeset
270 #define MB_SPRITE_FREE(sprite) ((mb_sprite_t *)(sprite))->free(sprite)
41eab0a10651 Define convenience macros for sprite.
Thinker K.F. Li <thinker@branda.to>
parents: 210
diff changeset
271 #define MB_SPRITE_GET_OBJ(sprite, name) \
41eab0a10651 Define convenience macros for sprite.
Thinker K.F. Li <thinker@branda.to>
parents: 210
diff changeset
272 ((mb_sprite_t *)(sprite))->get_obj_with_name((sprite), (name))
41eab0a10651 Define convenience macros for sprite.
Thinker K.F. Li <thinker@branda.to>
parents: 210
diff changeset
273
210
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
274
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
275 /*! \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
276 * @{
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
277 */
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
278 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
279 const char *sym;
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
280 const int offset;
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
281 };
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
282 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
283
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
284 /*! \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
285 *
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
286 * 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
287 */
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
288 struct _mb_sprite_lsym {
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
289 mb_sprite_t sprite;
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
290 int num_entries;
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
291 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
292 };
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
293 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
294
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
295 /* @} */
3fadd2f2742e M4 macros to generate code for dynamic loading.
Thinker K.F. Li <thinker@branda.to>
parents: 209
diff changeset
296
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
297 #endif /* __MB_TYPES_H_ */