forked from enlightenment/efl
Edje: adding support for ignore_flags.
Parts can choose to ignore Events with certain flags in event_flags. The default value is to accept all events. The syntax for this is specifying in the part: ignore_flags: ON_HOLD; I've tried to update Edje_Edit bits also. SVN revision: 34170
This commit is contained in:
parent
a43c7ca786
commit
ea56c61eba
|
@ -83,6 +83,7 @@ static void st_collections_group_parts_part_type(void);
|
|||
static void st_collections_group_parts_part_effect(void);
|
||||
static void st_collections_group_parts_part_mouse_events(void);
|
||||
static void st_collections_group_parts_part_repeat_events(void);
|
||||
static void st_collections_group_parts_part_ignore_flags(void);
|
||||
static void st_collections_group_parts_part_pointer_mode(void);
|
||||
static void st_collections_group_parts_part_precise_is_inside(void);
|
||||
static void st_collections_group_parts_part_use_alternate_font_metrics(void);
|
||||
|
@ -222,6 +223,7 @@ New_Statement_Handler statement_handlers[] =
|
|||
{"collections.group.parts.part.effect", st_collections_group_parts_part_effect},
|
||||
{"collections.group.parts.part.mouse_events", st_collections_group_parts_part_mouse_events},
|
||||
{"collections.group.parts.part.repeat_events", st_collections_group_parts_part_repeat_events},
|
||||
{"collections.group.parts.part.ignore_flags", st_collections_group_parts_part_ignore_flags},
|
||||
{"collections.group.parts.part.pointer_mode", st_collections_group_parts_part_pointer_mode},
|
||||
{"collections.group.parts.part.precise_is_inside", st_collections_group_parts_part_precise_is_inside},
|
||||
{"collections.group.parts.part.use_alternate_font_metrics", st_collections_group_parts_part_use_alternate_font_metrics},
|
||||
|
@ -1382,6 +1384,7 @@ st_collections_group_data_item(void)
|
|||
type: IMAGE;
|
||||
mouse_events: 1;
|
||||
repeat_events: 0;
|
||||
ignore_flags: NONE;
|
||||
clip_to: "anotherpart";
|
||||
source: "groupname";
|
||||
pointer_mode: AUTOGRAB;
|
||||
|
@ -1412,6 +1415,7 @@ ob_collections_group_parts_part(void)
|
|||
ep->type = EDJE_PART_TYPE_IMAGE;
|
||||
ep->mouse_events = 1;
|
||||
ep->repeat_events = 0;
|
||||
ep->ignore_flags = EVAS_EVENT_FLAG_NONE;
|
||||
ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
|
||||
ep->precise_is_inside = 0;
|
||||
ep->use_alternate_font_metrics = 0;
|
||||
|
@ -1551,6 +1555,37 @@ st_collections_group_parts_part_repeat_events(void)
|
|||
ep->repeat_events = parse_bool(0);
|
||||
}
|
||||
|
||||
/**
|
||||
@page edcref
|
||||
@property
|
||||
ignore_flags
|
||||
@parameters
|
||||
[FLAG] ...
|
||||
@effect
|
||||
Specifies whether events with the given flags should be ignored,
|
||||
i.e., will not have the signals emitted to the parts. Multiple flags
|
||||
must be separated by spaces, the effect will be ignoring all events
|
||||
with one of the flags specified. Possible flags:
|
||||
@li NONE (default value, no event will be ignored)
|
||||
@li ON_HOLD
|
||||
@endproperty
|
||||
*/
|
||||
static void
|
||||
st_collections_group_parts_part_ignore_flags(void)
|
||||
{
|
||||
Edje_Part_Collection *pc;
|
||||
Edje_Part *ep;
|
||||
|
||||
check_min_arg_count(1);
|
||||
|
||||
pc = evas_list_data(evas_list_last(edje_collections));
|
||||
ep = evas_list_data(evas_list_last(pc->parts));
|
||||
ep->ignore_flags = parse_flags(0,
|
||||
"NONE", EVAS_EVENT_FLAG_NONE,
|
||||
"ON_HOLD", EVAS_EVENT_FLAG_ON_HOLD,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
@page edcref
|
||||
@property
|
||||
|
|
|
@ -383,6 +383,22 @@ edje_edit_part_repeat_events_set(
|
|||
* If set to 0 the events received will not propagate to other parts.*/
|
||||
);
|
||||
|
||||
/**Get ignore_flags for part.*/
|
||||
EAPI Evas_Event_Flags ///@return event flags ignored
|
||||
edje_edit_part_ignore_flags_get(
|
||||
Evas_Object *obj, ///< The edje object
|
||||
const char *part ///< The name of the part
|
||||
);
|
||||
|
||||
/**Set repeat_events for part. */
|
||||
EAPI void
|
||||
edje_edit_part_ignore_flags_set(
|
||||
Evas_Object *obj, ///< The edje object
|
||||
const char *part, ///< The name of the part
|
||||
Evas_Event_Flags ignore_flags ///< event flags to be ignored
|
||||
);
|
||||
|
||||
|
||||
//@}
|
||||
/******************************************************************************/
|
||||
/************************** STATES API ************************************/
|
||||
|
|
|
@ -34,7 +34,7 @@ _edje_mouse_in_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
ev = event_info;
|
||||
ed = data;
|
||||
rp = evas_object_data_get(obj, "real_part");
|
||||
if (!rp) return;
|
||||
if (!rp || !(rp->part->ignore_flags & ev->event_flags)) return;
|
||||
_edje_emit(ed, "mouse,in", rp->part->name);
|
||||
return;
|
||||
e = NULL;
|
||||
|
@ -50,7 +50,7 @@ _edje_mouse_out_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
ev = event_info;
|
||||
ed = data;
|
||||
rp = evas_object_data_get(obj, "real_part");
|
||||
if (!rp) return;
|
||||
if (!rp || !(rp->part->ignore_flags & ev->event_flags)) return;
|
||||
_edje_emit(ed, "mouse,out", rp->part->name);
|
||||
return;
|
||||
e = NULL;
|
||||
|
@ -63,20 +63,28 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
Edje *ed;
|
||||
Edje_Real_Part *rp;
|
||||
char buf[256];
|
||||
int ignored;
|
||||
|
||||
ev = event_info;
|
||||
ed = data;
|
||||
rp = evas_object_data_get(obj, "real_part");
|
||||
if (!rp) return;
|
||||
|
||||
ignored = rp->part->ignore_flags & ev->event_flags;
|
||||
|
||||
_edje_ref(ed);
|
||||
_edje_freeze(ed);
|
||||
|
||||
if (!ignored)
|
||||
{
|
||||
if (ev->flags & EVAS_BUTTON_TRIPLE_CLICK)
|
||||
snprintf(buf, sizeof(buf), "mouse,down,%i,triple", ev->button);
|
||||
else if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
|
||||
snprintf(buf, sizeof(buf), "mouse,down,%i,double", ev->button);
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
|
||||
_edje_ref(ed);
|
||||
_edje_freeze(ed);
|
||||
_edje_emit(ed, buf, rp->part->name);
|
||||
}
|
||||
|
||||
if (rp->events_to)
|
||||
{
|
||||
|
@ -101,8 +109,11 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
events->y = ev->canvas.y - y - events->h / 2;
|
||||
}
|
||||
|
||||
if (!ignored)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
|
||||
_edje_emit(ed, buf, events->part->name);
|
||||
}
|
||||
ed->dirty = 1;
|
||||
}
|
||||
_edje_recalc(ed);
|
||||
|
@ -123,6 +134,7 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
{
|
||||
rp->drag.val.x = dx;
|
||||
rp->drag.val.y = dy;
|
||||
if (!ignored)
|
||||
_edje_emit(ed, "drag", rp->part->name);
|
||||
ed->dirty = 1;
|
||||
rp->drag.need_reset = 1;
|
||||
|
@ -139,6 +151,7 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
rp->drag.down.x = ev->canvas.x;
|
||||
if (rp->part->dragable.y)
|
||||
rp->drag.down.y = ev->canvas.y;
|
||||
if (!ignored)
|
||||
_edje_emit(ed, "drag,start", rp->part->name);
|
||||
}
|
||||
rp->drag.down.count++;
|
||||
|
@ -162,23 +175,33 @@ _edje_mouse_up_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
Edje *ed;
|
||||
Edje_Real_Part *rp;
|
||||
char buf[256];
|
||||
int ignored;
|
||||
|
||||
ev = event_info;
|
||||
ed = data;
|
||||
rp = evas_object_data_get(obj, "real_part");
|
||||
if (!rp) return;
|
||||
|
||||
snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button);
|
||||
ignored = rp->part->ignore_flags & ev->event_flags;
|
||||
|
||||
_edje_ref(ed);
|
||||
_edje_freeze(ed);
|
||||
|
||||
if (!ignored)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button);
|
||||
_edje_emit(ed, buf, rp->part->name);
|
||||
}
|
||||
|
||||
if (rp->events_to)
|
||||
{
|
||||
rp = rp->events_to;
|
||||
if (!ignored)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button);
|
||||
_edje_emit(ed, buf, rp->part->name);
|
||||
}
|
||||
}
|
||||
|
||||
if ((rp->part->dragable.x) || (rp->part->dragable.y))
|
||||
{
|
||||
|
@ -189,11 +212,12 @@ _edje_mouse_up_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
{
|
||||
rp->drag.need_reset = 1;
|
||||
ed->dirty = 1;
|
||||
if (!ignored)
|
||||
_edje_emit(ed, "drag,stop", rp->part->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((rp->still_in) && (rp->clicked_button == ev->button))
|
||||
if ((rp->still_in) && (rp->clicked_button == ev->button) && (!ignored))
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "mouse,clicked,%i", ev->button);
|
||||
_edje_emit(ed, buf, rp->part->name);
|
||||
|
@ -214,6 +238,7 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
Evas_Event_Mouse_Move *ev;
|
||||
Edje *ed;
|
||||
Edje_Real_Part *rp;
|
||||
int ignored;
|
||||
|
||||
ev = event_info;
|
||||
ed = data;
|
||||
|
@ -221,7 +246,10 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
if (!rp) return;
|
||||
if (rp->events_to) rp = rp->events_to;
|
||||
|
||||
ignored = rp->part->ignore_flags & ev->event_flags;
|
||||
|
||||
_edje_ref(ed);
|
||||
if (!ignored)
|
||||
_edje_emit(ed, "mouse,move", rp->part->name);
|
||||
|
||||
if (rp->still_in)
|
||||
|
@ -267,6 +295,7 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
{
|
||||
rp->drag.val.x = dx;
|
||||
rp->drag.val.y = dy;
|
||||
if (!ignored)
|
||||
_edje_emit(ed, "drag", rp->part->name);
|
||||
ed->dirty = 1;
|
||||
_edje_recalc(ed);
|
||||
|
@ -290,7 +319,8 @@ _edje_mouse_wheel_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
ev = event_info;
|
||||
ed = data;
|
||||
rp = evas_object_data_get(obj, "real_part");
|
||||
if (!rp) return;
|
||||
if (!rp || !(rp->part->ignore_flags & ev->event_flags)) return;
|
||||
|
||||
snprintf(buf, sizeof(buf), "mouse,wheel,%i,%i", ev->direction, (ev->z < 0) ? (-1) : (1));
|
||||
_edje_emit(ed, buf, rp->part->name);
|
||||
return;
|
||||
|
|
|
@ -358,6 +358,7 @@ _edje_edd_setup(void)
|
|||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "effect", effect, EET_T_CHAR);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "mouse_events", mouse_events, EET_T_CHAR);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "repeat_events", repeat_events, EET_T_CHAR);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "ignore_flags", ignore_flags, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "pointer_mode", pointer_mode, EET_T_CHAR);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "precise_is_inside", precise_is_inside, EET_T_CHAR);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "clip_to_id", clip_to_id, EET_T_INT);
|
||||
|
|
|
@ -921,6 +921,7 @@ edje_edit_part_add(Evas_Object *obj, const char* name, unsigned char type)
|
|||
ep->name = evas_stringshare_add(name);
|
||||
ep->mouse_events = 1;
|
||||
ep->repeat_events = 0;
|
||||
ep->ignore_flags = EVAS_EVENT_FLAG_NONE;
|
||||
ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
|
||||
ep->precise_is_inside = 0;
|
||||
ep->use_alternate_font_metrics = 0;
|
||||
|
@ -1299,6 +1300,23 @@ edje_edit_part_repeat_events_set(Evas_Object *obj, const char *part, unsigned ch
|
|||
evas_object_repeat_events_set(rp->object, 0);
|
||||
}
|
||||
|
||||
EAPI Evas_Event_Flags
|
||||
edje_edit_part_ignore_flags_get(Evas_Object *obj, const char *part)
|
||||
{
|
||||
GET_RP_OR_RETURN(0);
|
||||
return rp->part->ignore_flags;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edje_edit_part_ignore_flags_set(Evas_Object *obj, const char *part, Evas_Event_Flags ignore_flags)
|
||||
{
|
||||
GET_RP_OR_RETURN();
|
||||
if (!rp->object) return;
|
||||
printf("Set ignore_flags for part: %s [%#x]\n", part, ignore_flags);
|
||||
|
||||
rp->part->ignore_flags = ignore_flags;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edje_edit_part_source_get(Evas_Object *obj, const char *part)
|
||||
{
|
||||
|
|
|
@ -486,6 +486,7 @@ struct _Edje_Part
|
|||
unsigned char effect; /* 0 = plain... */
|
||||
unsigned char mouse_events; /* it will affect/respond to mouse events */
|
||||
unsigned char repeat_events; /* it will repeat events to objects below */
|
||||
Evas_Event_Flags ignore_flags;
|
||||
unsigned char precise_is_inside;
|
||||
unsigned char use_alternate_font_metrics;
|
||||
char pointer_mode;
|
||||
|
|
Loading…
Reference in New Issue