# HG changeset patch # User Thinker K.F. Li # Date 1282731752 -28800 # Node ID d2f2ed27b84db066a358898566293b0ba18e8424 # Parent 1dbc74a14199cf564628020f8ce1b97fe1998885 Separate GEF_NOT_SHOWED and GEF_HIDDEN flags. GEF_HIDDEN mark a geo (shape) can not be showed, GEF_NOT_SHOWED is implied by GEF_HIDDEN or one of ancesters that is hidden. Redraw manager use GEF_NOT_SHOWED to determine who is not showed, actually. GEF_NOT_SHOWED is flaged when clean_shape(). diff -r 1dbc74a14199 -r d2f2ed27b84d include/mb_types.h --- a/include/mb_types.h Wed Aug 25 14:48:39 2010 +0800 +++ b/include/mb_types.h Wed Aug 25 18:22:32 2010 +0800 @@ -124,6 +124,13 @@ #define GEF_FREE 0x4 #define GEF_OV_DRAW 0x8 /*!< To flag drawed for a overlay testing. */ #define GEF_SWAP 0x10 +#define GEF_NOT_SHOWED 0x20 /*!< This geo is not showed. + * + * A geo is not showed if it is hidden + * or one of its ancestors is hidden. + * Redraw manager uses this flag to + * determine who is not showed. + */ extern int areas_are_overlay(area_t *r1, area_t *r2); extern void area_init(area_t *area, int n_pos, co_aix pos[][2]); diff -r 1dbc74a14199 -r d2f2ed27b84d src/event.c --- a/src/event.c Wed Aug 25 14:48:39 2010 +0800 +++ b/src/event.c Wed Aug 25 18:22:32 2010 +0800 @@ -135,7 +135,7 @@ #define MB_OBJ_INIT(obj, type) do { (obj)->obj_type = type; } while(0) #define GEF_OV_DRAW 0x1 -#define GEF_HIDDEN 0x2 +#define GEF_NOT_SHOWED 0x20 struct shape { mb_obj_t obj; @@ -611,7 +611,7 @@ cr = rdman_get_cr(rdman); for(i = rdman_shape_gl_len(rdman) - 1; i >= 0; i--) { shape = rdman_get_shape_gl(rdman, i); - if(sh_get_flags(shape, GEF_HIDDEN)) + if(sh_get_flags(shape, GEF_NOT_SHOWED)) continue; r = _shape_pos_is_in(shape, x, y, in_stroke, cr); if(r) diff -r 1dbc74a14199 -r d2f2ed27b84d src/redraw_man.c --- a/src/redraw_man.c Wed Aug 25 14:48:39 2010 +0800 +++ b/src/redraw_man.c Wed Aug 25 18:22:32 2010 +0800 @@ -1226,10 +1226,11 @@ } shape->geo->flags &= ~GEF_DIRTY; - if(is_coord_subtree_hidden(shape->coord)) - sh_hide(shape); + if(sh_get_flags(shape, GEF_HIDDEN) || + is_coord_subtree_hidden(shape->coord)) + sh_set_flags(shape, GEF_NOT_SHOWED); else - sh_show(shape); + sh_clear_flags(shape, GEF_NOT_SHOWED); } /*! \brief Setup canvas_info for the coord. @@ -2242,7 +2243,7 @@ child = NEXT_CHILD(child); } else { ASSERT(member != NULL); - if((!(member->flags & GEF_HIDDEN)) && + if((!(member->flags & GEF_NOT_SHOWED)) && is_geo_in_areas(member, n_areas, areas)) { draw_shape(rdman, canvas, member->shape); dirty = 1;