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