annotate include/mb_types.h @ 948:518c61784355

Add frameruler to show ruler for framelines
author Thinker K.F. Li <thinker@codemud.net>
date Wed, 17 Nov 2010 01:46:10 +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
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
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
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
12 typedef struct _geo geo_t;
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
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
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
26 /*! \brief MadButterfly object.
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
27 *
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
28 * 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
29 * 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
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
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
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
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
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
eb6ff421da7e Doc about mb_obj_t
Thinker K.F. Li <thinker@branda.to>
parents: 196
diff changeset
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
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
71 /*! \brief Base of paint types.
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
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
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
74 * the paint.
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
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
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
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
Thinker K.F. Li <thinker@branda.to>
parents: 57
diff changeset
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
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 struct _area {
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
105 co_aix x, y;
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
106 co_aix w, h;
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
107 };
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 /*! \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
110 */
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
115 unsigned int flags;
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
118
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
119 area_t *cur_area, *last_area;
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
123 };
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
136
235
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
145 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
146 int *n_overlays, geo_t **overlays);
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
147 #define geo_get_shape(g) ((g)->shape)
235
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
148 #define geo_get_shape_safe(g) ((g)? (g)->shape: NULL)
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
152 #define geo_get_flags(g, mask) ((g)->flags & (mask))
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
153 #define geo_set_flags(g, mask) do {(g)->flags |= mask;} while(0)
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
193 *
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
194 * \dot
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
195 * digraph G {
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
196 * graph [rankdir=LR];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
197 * root -> child00 -> child10 -> child20 [label="children" color="blue"];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
198 * child00 -> child01 -> child02 [label="sibling"];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
199 * child10 -> child11 [label="sibling"];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
200 * }
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
220
5
9c331ec9e210 SVG path is partially supported
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
221 struct _coord *parent;
12
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
222 STAILQ(struct _coord) children;
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
7cfecdce94cc Remove warning messages
Thinker K.F. Li <thinker@branda.to>
parents: 5
diff changeset
287 extern void update_aggr_matrix(coord_t *start);
13
ed55009d96d3 refactory for redrawing
Thinker K.F. Li <thinker@branda.to>
parents: 12
diff changeset
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
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 81
diff changeset
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
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
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
2469f8d23658 Fix the type of ci to co
wycc
parents: 260
diff changeset
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
2469f8d23658 Fix the type of ci to co
wycc
parents: 260
diff changeset
349 #define coord_scalex(co) ((co)->matrix[0])
2469f8d23658 Fix the type of ci to co
wycc
parents: 260
diff changeset
350 #define coord_scaley(co) ((co)->matrix[3])
2469f8d23658 Fix the type of ci to co
wycc
parents: 260
diff changeset
351 #define coord_x(co) ((co)->matrix[2])
2469f8d23658 Fix the type of ci to co
wycc
parents: 260
diff changeset
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
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
357 #define FOR_COORD_SHAPES(coord, shape) \
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
358 for(shape = geo_get_shape_safe(STAILQ_HEAD((coord)->members)); \
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
359 shape != NULL; \
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
360 shape = geo_get_shape_safe(STAILQ_NEXT(geo_t, coord_next, \
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
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
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
382
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
383 /*! \brief A grahpic shape.
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
384 *
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
385 * \dot
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
386 * digraph G {
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
387 * "shape" -> "coord";
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
388 * "shape" -> "geo";
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
389 * "geo" -> "shape";
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
390 * "coord" -> "shape" [label="members"]
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
391 * "shape" -> "shape" [label="sibling"];
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
392 * }
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
393 * \enddot
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
394 */
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
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
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
397 geo_t *geo;
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
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
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
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
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
407
77
Thinker K.F. Li <thinker@branda.to>
parents: 73
diff changeset
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
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
418 #define sh_get_geo_safe(sh) ((sh)? (sh)->geo: NULL)
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
419 #define sh_get_flags(sh, mask) geo_get_flags(sh_get_geo(sh), mask)
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
420 #define sh_set_flags(sh, mask) geo_set_flags(sh_get_geo(sh), mask)
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
421 #define sh_clear_flags(sh, mask) geo_clear_flags(sh_get_geo(sh), mask)
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
422 #define sh_pos_is_in(sh, x, y) geo_pos_is_in(sh_get_geo(sh), x, y)
65cabbdd5284 termporary revision
Thinker K.F. Li <thinker@branda.to>
parents: 232
diff changeset
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
79e9edf4c00a Add redraw manager
Thinker K.F. Li <thinker@branda.to>
parents: 11
diff changeset
431
208
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
432 /*! \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
433 *
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
434 * 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
435 * 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
436 * sprite.
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
437 */
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
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
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
443 };
e01acb80f0e7 Define mb_sprite_t
Thinker K.F. Li <thinker@branda.to>
parents: 204
diff changeset
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_ */