From 9c8413684e589ae90c416e08e0419b91db6f7cc3 Mon Sep 17 00:00:00 2001 From: lecoanet Date: Mon, 28 Aug 2006 08:47:59 +0000 Subject: Added a -catchevent attribute that specifies whether an item should handle events or act as a decorating object. Groups can be controlled too, there catching state propagates to their children. --- generic/Arc.c | 4 ++++ generic/Curve.c | 6 +++++- generic/Group.c | 11 +++++++++-- generic/Item.h | 11 ++++++----- generic/Rectangle.c | 4 ++++ generic/Reticle.c | 4 ++++ generic/Tabular.c | 4 ++++ generic/Text.c | 4 ++++ generic/Track.c | 5 +++++ generic/Triangles.c | 4 ++++ generic/Window.c | 4 ++++ 11 files changed, 53 insertions(+), 8 deletions(-) diff --git a/generic/Arc.c b/generic/Arc.c index 9d86514..adb1656 100644 --- a/generic/Arc.c +++ b/generic/Arc.c @@ -77,6 +77,9 @@ typedef struct _ArcItemStruct { static ZnAttrConfig arc_attrs[] = { + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(ArcItemStruct, header.flags), ZN_CATCH_EVENT_BIT, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_BOOL, "-closed", NULL, Tk_Offset(ArcItemStruct, flags), CLOSED_BIT, ZN_COORDS_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, @@ -151,6 +154,7 @@ Init(ZnItem item, /* Init attributes */ SET(item->flags, ZN_VISIBLE_BIT); SET(item->flags, ZN_SENSITIVE_BIT); + SET(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); SET(item->flags, ZN_COMPOSE_ROTATION_BIT); SET(item->flags, ZN_COMPOSE_SCALE_BIT); diff --git a/generic/Curve.c b/generic/Curve.c index c73d467..832b125 100644 --- a/generic/Curve.c +++ b/generic/Curve.c @@ -85,6 +85,9 @@ static ZnAttrConfig cv_attrs[] = { { ZN_CONFIG_CAP_STYLE, "-capstyle", NULL, Tk_Offset(CurveItemStruct, cap_style), 0, ZN_COORDS_FLAG, False }, + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(CurveItemStruct, header.flags), ZN_CATCH_EVENT_BIT, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_BOOL, "-closed", NULL, Tk_Offset(CurveItemStruct, flags), CLOSED_BIT, ZN_COORDS_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, @@ -132,7 +135,7 @@ static ZnAttrConfig cv_attrs[] = { ZN_COORDS_FLAG, False }, { ZN_CONFIG_BOOL, "-sensitive", NULL, Tk_Offset(CurveItemStruct, header.flags), ZN_SENSITIVE_BIT, - ZN_DRAW_FLAG, False }, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_BOOL, "-smoothrelief", NULL, Tk_Offset(CurveItemStruct, flags), SMOOTH_RELIEF_BIT, ZN_REPICK_FLAG, False }, @@ -176,6 +179,7 @@ Init(ZnItem item, /* Init attributes */ SET(item->flags, ZN_VISIBLE_BIT); SET(item->flags, ZN_SENSITIVE_BIT); + SET(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); SET(item->flags, ZN_COMPOSE_ROTATION_BIT); SET(item->flags, ZN_COMPOSE_SCALE_BIT); diff --git a/generic/Group.c b/generic/Group.c index ce581a8..c4fef66 100644 --- a/generic/Group.c +++ b/generic/Group.c @@ -72,6 +72,9 @@ static ZnAttrConfig group_attrs[] = { { ZN_CONFIG_BOOL, "-atomic", NULL, Tk_Offset(GroupItemStruct, header.flags), ATOMIC_BIT, ZN_REPICK_FLAG, False }, + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(GroupItemStruct, header.flags), ZN_CATCH_EVENT_BIT, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_ITEM, "-clip", NULL, Tk_Offset(GroupItemStruct, clip), 0, ZN_COORDS_FLAG|ZN_ITEM_FLAG, False }, @@ -121,6 +124,7 @@ Init(ZnItem item, group->dependents = NULL; SET(item->flags, ZN_VISIBLE_BIT); SET(item->flags, ZN_SENSITIVE_BIT); + SET(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); SET(item->flags, ZN_COMPOSE_ROTATION_BIT); SET(item->flags, ZN_COMPOSE_SCALE_BIT); @@ -1240,12 +1244,15 @@ Pick(ZnItem item, for ( ; current_item != ZN_NO_ITEM; current_item = current_item->next) { /* + * If an item doesn't catch events it can be safely skipped + * right now. * Sensitive item must be reported even if they are invisible. * It is legal to fire bindings on invisible sensitive items. * This is _not_ a bug do _not_ modify the test below. */ - if (ISCLEAR(current_item->flags, ZN_SENSITIVE_BIT) && - ISCLEAR(current_item->flags, ZN_VISIBLE_BIT)) { + if (ISCLEAR(current_item->flags, ZN_CATCH_EVENT_BIT) || + (ISCLEAR(current_item->flags, ZN_SENSITIVE_BIT) && + ISCLEAR(current_item->flags, ZN_VISIBLE_BIT))) { continue; } ZnIntersectBBox(&bbox, ¤t_item->item_bounding_box, &inter); diff --git a/generic/Item.h b/generic/Item.h index 3871bf8..38e57c4 100644 --- a/generic/Item.h +++ b/generic/Item.h @@ -132,14 +132,15 @@ typedef struct _ZnAttrConfig { */ #define ZN_VISIBLE_BIT (1<<0) #define ZN_SENSITIVE_BIT (1<<1) -#define ZN_UPDATE_DEPENDENT_BIT (1<<2) -#define ZN_COMPOSE_SCALE_BIT (1<<3) -#define ZN_COMPOSE_ROTATION_BIT (1<<4) -#define ZN_COMPOSE_ALPHA_BIT (1<<5) +#define ZN_CATCH_EVENT_BIT (1<<2) +#define ZN_UPDATE_DEPENDENT_BIT (1<<3) +#define ZN_COMPOSE_SCALE_BIT (1<<4) +#define ZN_COMPOSE_ROTATION_BIT (1<<5) +#define ZN_COMPOSE_ALPHA_BIT (1<<6) /* * Must be kept one greater than the last flag shift count. */ -#define ZN_PRIVATE_FLAGS_OFFSET 6 +#define ZN_PRIVATE_FLAGS_OFFSET 7 /* diff --git a/generic/Rectangle.c b/generic/Rectangle.c index 8afb38f..798239a 100644 --- a/generic/Rectangle.c +++ b/generic/Rectangle.c @@ -66,6 +66,9 @@ typedef struct _RectangleItemStruct { static ZnAttrConfig rect_attrs[] = { + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(RectangleItemStruct, header.flags), ZN_CATCH_EVENT_BIT, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, Tk_Offset(RectangleItemStruct, header.flags), ZN_COMPOSE_ALPHA_BIT, ZN_DRAW_FLAG, False }, @@ -135,6 +138,7 @@ Init(ZnItem item, /* Init attributes */ SET(item->flags, ZN_VISIBLE_BIT); SET(item->flags, ZN_SENSITIVE_BIT); + SET(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); SET(item->flags, ZN_COMPOSE_ROTATION_BIT); SET(item->flags, ZN_COMPOSE_SCALE_BIT); diff --git a/generic/Reticle.c b/generic/Reticle.c index cebeb98..59e3cdc 100644 --- a/generic/Reticle.c +++ b/generic/Reticle.c @@ -74,6 +74,9 @@ static ZnAttrConfig reticle_attrs[] = { Tk_Offset(ReticleItemStruct, bright_line_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_LINE_STYLE, "-brightlinestyle", NULL, Tk_Offset(ReticleItemStruct, bright_line_style), 0, ZN_DRAW_FLAG, False }, + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(ReticleItemStruct, header.flags), ZN_CATCH_EVENT_BIT, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, Tk_Offset(ReticleItemStruct, header.flags), ZN_COMPOSE_ALPHA_BIT, ZN_DRAW_FLAG, False }, @@ -134,6 +137,7 @@ Init(ZnItem item, SET(item->flags, ZN_VISIBLE_BIT); CLEAR(item->flags, ZN_SENSITIVE_BIT); + CLEAR(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); SET(item->flags, ZN_COMPOSE_ROTATION_BIT); SET(item->flags, ZN_COMPOSE_SCALE_BIT); diff --git a/generic/Tabular.c b/generic/Tabular.c index c0d9886..a9e8f2d 100644 --- a/generic/Tabular.c +++ b/generic/Tabular.c @@ -53,6 +53,9 @@ typedef struct _TabularItemStruct { static ZnAttrConfig tabular_attrs[] = { { ZN_CONFIG_ANCHOR, "-anchor", NULL, Tk_Offset(TabularItemStruct, anchor), 0, ZN_COORDS_FLAG, False }, + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(TabularItemStruct, header.flags), ZN_CATCH_EVENT_BIT, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, Tk_Offset(TabularItemStruct, header.flags), ZN_COMPOSE_ALPHA_BIT, ZN_DRAW_FLAG, False }, @@ -111,6 +114,7 @@ Init(ZnItem item, SET(item->flags, ZN_VISIBLE_BIT); SET(item->flags, ZN_SENSITIVE_BIT); + SET(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); SET(item->flags, ZN_COMPOSE_SCALE_BIT); SET(item->flags, ZN_COMPOSE_ROTATION_BIT); diff --git a/generic/Text.c b/generic/Text.c index b2e83f8..1217ee5 100644 --- a/generic/Text.c +++ b/generic/Text.c @@ -99,6 +99,9 @@ static ZnAttrConfig text_attrs[] = { ZN_COORDS_FLAG|ZN_LAYOUT_FLAG, False }, { ZN_CONFIG_ANCHOR, "-anchor", NULL, Tk_Offset(TextItemStruct, anchor), 0, ZN_COORDS_FLAG, False }, + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(TextItemStruct, header.flags), ZN_CATCH_EVENT_BIT, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_GRADIENT, "-color", NULL, Tk_Offset(TextItemStruct, color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, @@ -174,6 +177,7 @@ Init(ZnItem item, /* Init attributes */ SET(item->flags, ZN_VISIBLE_BIT); SET(item->flags, ZN_SENSITIVE_BIT); + SET(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); CLEAR(item->flags, ZN_COMPOSE_ROTATION_BIT); CLEAR(item->flags, ZN_COMPOSE_SCALE_BIT); diff --git a/generic/Track.c b/generic/Track.c index 911a2c0..e6c4341 100644 --- a/generic/Track.c +++ b/generic/Track.c @@ -141,6 +141,8 @@ typedef struct _TrackItemStruct { static ZnAttrConfig track_attrs[] = { + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(TrackItemStruct, header.flags), ZN_CATCH_EVENT_BIT, ZN_REPICK_FLAG, False }, { ZN_CONFIG_BOOL, "-circlehistory", NULL, Tk_Offset(TrackItemStruct, flags), CIRCLE_HISTORY_BIT, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, @@ -271,6 +273,8 @@ static ZnAttrConfig track_attrs[] = { }; static ZnAttrConfig wp_attrs[] = { + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(TrackItemStruct, header.flags), ZN_CATCH_EVENT_BIT, ZN_REPICK_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, Tk_Offset(TrackItemStruct, header.flags), ZN_COMPOSE_ALPHA_BIT, ZN_DRAW_FLAG, False }, @@ -384,6 +388,7 @@ Init(ZnItem item, SET(item->flags, ZN_VISIBLE_BIT); SET(item->flags, ZN_SENSITIVE_BIT); + SET(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); SET(item->flags, ZN_COMPOSE_ROTATION_BIT); SET(item->flags, ZN_COMPOSE_SCALE_BIT); diff --git a/generic/Triangles.c b/generic/Triangles.c index 1565b5b..06a6c3a 100644 --- a/generic/Triangles.c +++ b/generic/Triangles.c @@ -59,6 +59,9 @@ typedef struct _TrianglesItemStruct { static ZnAttrConfig tr_attrs[] = { + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(TrianglesItemStruct, header.flags), ZN_CATCH_EVENT_BIT, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_GRADIENT_LIST, "-colors", NULL, Tk_Offset(TrianglesItemStruct, colors), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, @@ -112,6 +115,7 @@ Init(ZnItem item, /* Init attributes */ SET(item->flags, ZN_VISIBLE_BIT); SET(item->flags, ZN_SENSITIVE_BIT); + SET(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); SET(item->flags, ZN_COMPOSE_ROTATION_BIT); SET(item->flags, ZN_COMPOSE_SCALE_BIT); diff --git a/generic/Window.c b/generic/Window.c index a6ac2d7..eb5a68c 100644 --- a/generic/Window.c +++ b/generic/Window.c @@ -52,6 +52,9 @@ typedef struct _WindowItemStruct { static ZnAttrConfig wind_attrs[] = { { ZN_CONFIG_ANCHOR, "-anchor", NULL, Tk_Offset(WindowItemStruct, anchor), 0, ZN_COORDS_FLAG, False }, + { ZN_CONFIG_BOOL, "-catchevent", NULL, + Tk_Offset(WindowItemStruct, header.flags), ZN_CATCH_EVENT_BIT, + ZN_REPICK_FLAG, False }, { ZN_CONFIG_BOOL, "-composealpha", NULL, Tk_Offset(WindowItemStruct, header.flags), ZN_COMPOSE_ALPHA_BIT, ZN_DRAW_FLAG, False }, @@ -176,6 +179,7 @@ Init(ZnItem item, /* Init attributes */ SET(item->flags, ZN_VISIBLE_BIT); SET(item->flags, ZN_SENSITIVE_BIT); + SET(item->flags, ZN_CATCH_EVENT_BIT); SET(item->flags, ZN_COMPOSE_ALPHA_BIT); /* N.A */ SET(item->flags, ZN_COMPOSE_ROTATION_BIT); SET(item->flags, ZN_COMPOSE_SCALE_BIT); -- cgit v1.1