Mercurial > MadButterfly
comparison src/mb_types.h @ 151:d11aa8fc06c7
Fix bug of tanks do not show at right places.
Since we avoid to dirty a subtree if root of a subtree have been dirty or
hidden, it make children that was added into coord tree after a coord be
dirty do not be marked with COF_DIRTY flag. To fix it, when a new coord
is created, the parent is checked and mark new coord with COF_DIRTY flag
if the parent is dirty. It forces new coords to be cleaned and transformed
to right places.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Fri, 26 Sep 2008 17:42:16 +0800 |
parents | 0de8fd11271e |
children | c1cdd3fcd28f |
comparison
equal
deleted
inserted
replaced
150:0824f4804ee0 | 151:d11aa8fc06c7 |
---|---|
115 #define COF_DIRTY 0x1 | 115 #define COF_DIRTY 0x1 |
116 #define COF_HIDDEN 0x2 | 116 #define COF_HIDDEN 0x2 |
117 #define COF_OWN_CANVAS 0x4 /*!< A coord owns a canvas or inherit it | 117 #define COF_OWN_CANVAS 0x4 /*!< A coord owns a canvas or inherit it |
118 * from an ancestor. | 118 * from an ancestor. |
119 */ | 119 */ |
120 #define COF_SKIP_TRIVAL 0x8 /*!< Temporary skip descendants | |
121 * when trivaling. | |
122 */ | |
120 | 123 |
121 extern void coord_init(coord_t *co, coord_t *parent); | 124 extern void coord_init(coord_t *co, coord_t *parent); |
122 extern void coord_trans_pos(coord_t *co, co_aix *x, co_aix *y); | 125 extern void coord_trans_pos(coord_t *co, co_aix *x, co_aix *y); |
123 extern co_aix coord_trans_size(coord_t *co, co_aix size); | 126 extern co_aix coord_trans_size(coord_t *co, co_aix size); |
124 extern void compute_aggr_of_coord(coord_t *coord); | 127 extern void compute_aggr_of_coord(coord_t *coord); |
125 extern void update_aggr_matrix(coord_t *start); | 128 extern void update_aggr_matrix(coord_t *start); |
126 extern coord_t *preorder_coord_subtree(coord_t *root, coord_t *last); | 129 extern coord_t *preorder_coord_subtree(coord_t *root, coord_t *last); |
127 extern coord_t *postorder_coord_subtree(coord_t *root, coord_t *last); | 130 extern coord_t *postorder_coord_subtree(coord_t *root, coord_t *last); |
131 extern void preorder_coord_skip_subtree(coord_t *subroot); | |
132 #define preorder_coord_skip_subtree(sub) \ | |
133 do { (sub)->flags |= COF_SKIP_TRIVAL; } while(0) | |
128 #define coord_hide(co) do { co->flags |= COF_HIDDEN; } while(0) | 134 #define coord_hide(co) do { co->flags |= COF_HIDDEN; } while(0) |
129 #define coord_show(co) do { co->flags &= ~COF_HIDDEN; } while(0) | 135 #define coord_show(co) do { co->flags &= ~COF_HIDDEN; } while(0) |
130 #define coord_get_mouse_event(coord) ((coord)->mouse_event) | 136 #define coord_get_mouse_event(coord) ((coord)->mouse_event) |
131 | 137 |
132 | 138 |