From ef491e697e60a6e79bec27164342bfb103d2c95a Mon Sep 17 00:00:00 2001 From: Jee-Yong Um Date: Thu, 25 Jun 2015 15:56:48 +0200 Subject: [PATCH] edje: implement methods for mouse_events with edje_part for Edje Embryo script. Summary: In edje_embryo.c, there are the list for supported methods in script. However, methods listed from line 175 to 188 don't exist actually. This patch implements 4 methods among them. set_mouse_events(part_id, ev) get_mouse_events(part_id) set_repeat_events(part_id, rep) get_repeat_events(part_id) Reviewers: Hermet, woohyun, cedric Reviewed By: cedric Subscribers: cedric, Hermet Differential Revision: https://phab.enlightenment.org/D2766 Signed-off-by: Cedric BAIL --- data/edje/include/edje.inc | 4 ++ src/lib/edje/edje_embryo.c | 95 +++++++++++++++++++++++++++++++++++++ src/lib/edje/edje_private.h | 5 ++ src/lib/edje/edje_util.c | 48 +++++++++++++++++++ 4 files changed, 152 insertions(+) diff --git a/data/edje/include/edje.inc b/data/edje/include/edje.inc index 5a3e9dd290..98105b6c97 100644 --- a/data/edje/include/edje.inc +++ b/data/edje/include/edje.inc @@ -131,6 +131,10 @@ native stop_program (program_id); native stop_programs_on (part_id); native set_min_size (Float:w, Float:h); native set_max_size (Float:w, Float:h); +native set_mouse_events (part_id, ev); +native get_mouse_events (part_id); +native set_repeat_events(part_id, rep); +native get_repeat_events(part_id); native part_swallow (part_id, GROUP:str[]); native external_param_get_int(id, param_name[]); diff --git a/src/lib/edje/edje_embryo.c b/src/lib/edje/edje_embryo.c index 2977a544d4..ddf4ebdfda 100644 --- a/src/lib/edje/edje_embryo.c +++ b/src/lib/edje/edje_embryo.c @@ -3462,6 +3462,96 @@ _edje_embryo_fn_get_state_val(Embryo_Program *ep, Embryo_Cell *params) return 0; } +/* set_mouse_events(part_id, ev) */ +static Embryo_Cell +_edje_embryo_fn_set_mouse_events(Embryo_Program *ep, Embryo_Cell *params) +{ + int part_id = 0; + Edje *ed; + Edje_Real_Part *rp; + + CHKPARAM(2); + + part_id = params[1]; + if (part_id < 0) return 0; + + ed = embryo_program_data_get(ep); + rp = ed->table_parts[part_id % ed->table_parts_size]; + + if (rp) + _edje_part_mouse_events_set(ed, rp, params[2]); + + return 0; +} + +/* get_mouse_events(part_id) */ +static Embryo_Cell +_edje_embryo_fn_get_mouse_events(Embryo_Program *ep, Embryo_Cell *params) +{ + int part_id = 0; + Edje *ed; + Edje_Real_Part *rp; + + CHKPARAM(1); + + part_id = params[1]; + if (part_id < 0) return 0; + + ed = embryo_program_data_get(ep); + rp = ed->table_parts[part_id % ed->table_parts_size]; + + if (rp) + return (Embryo_Cell)_edje_var_int_get(ed, (int)_edje_part_mouse_events_get(ed, rp)); + + return 0; + +} + +/* set_repeat_events(part_id, rep) */ +static Embryo_Cell +_edje_embryo_fn_set_repeat_events(Embryo_Program *ep, Embryo_Cell *params) +{ + int part_id = 0; + Edje *ed; + Edje_Real_Part *rp; + + CHKPARAM(2); + + part_id = params[1]; + if (part_id < 0) return 0; + + ed = embryo_program_data_get(ep); + rp = ed->table_parts[part_id % ed->table_parts_size]; + + if (rp) + _edje_part_repeat_events_set(ed, rp, params[2]); + + return 0; +} + +/* get_repeat_events(part_id) */ +static Embryo_Cell +_edje_embryo_fn_get_repeat_events(Embryo_Program *ep, Embryo_Cell *params) +{ + int part_id = 0; + Edje *ed; + Edje_Real_Part *rp; + + CHKPARAM(1); + + part_id = params[1]; + if (part_id < 0) return 0; + + ed = embryo_program_data_get(ep); + rp = ed->table_parts[part_id % ed->table_parts_size]; + + if (rp) + return (Embryo_Cell)_edje_var_int_get(ed, (int)_edje_part_repeat_events_get(ed, rp)); + + return 0; + +} + /* part_swallow(part_id, group_name) */ static Embryo_Cell _edje_embryo_fn_part_swallow(Embryo_Program *ep, Embryo_Cell *params) @@ -4191,6 +4281,11 @@ _edje_embryo_script_init(Edje_Part_Collection *edc) embryo_program_native_call_add(ep, "get_state_val", _edje_embryo_fn_get_state_val); embryo_program_native_call_add(ep, "set_state_anim", _edje_embryo_fn_set_state_anim); + embryo_program_native_call_add(ep, "set_mouse_events", _edje_embryo_fn_set_mouse_events); + embryo_program_native_call_add(ep, "get_mouse_events", _edje_embryo_fn_get_mouse_events); + embryo_program_native_call_add(ep, "set_repeat_events", _edje_embryo_fn_set_repeat_events); + embryo_program_native_call_add(ep, "get_repeat_events", _edje_embryo_fn_get_repeat_events); + embryo_program_native_call_add(ep, "part_swallow", _edje_embryo_fn_part_swallow); embryo_program_native_call_add(ep, "external_param_get_int", _edje_embryo_fn_external_param_get_int); diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h index 9125f1a8d4..2b1ec6b43a 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -2849,6 +2849,11 @@ void _animation_get(Eo *obj, void *_pd, va_list *list); void edje_signal_init(void); void edje_signal_shutdown(void); +Eina_Bool _edje_part_mouse_events_get(Edje *ed, Edje_Real_Part *rp); +void _edje_part_mouse_events_set(Edje *ed, Edje_Real_Part *rp, Eina_Bool mouse_events); +Eina_Bool _edje_part_repeat_events_get(Edje *ed, Edje_Real_Part *rp); +void _edje_part_repeat_events_set(Edje *ed, Edje_Real_Part *rp, Eina_Bool repeat_events); + #ifdef HAVE_LIBREMIX #include #endif diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c index d99084b276..c7913ecbac 100644 --- a/src/lib/edje/edje_util.c +++ b/src/lib/edje/edje_util.c @@ -5717,4 +5717,52 @@ edje_object_part_object_name_get(const Evas_Object *obj) return rp ? rp->part->name : NULL; } +Eina_Bool +_edje_part_mouse_events_get(Edje *ed EINA_UNUSED, Edje_Real_Part *rp) +{ + if (!rp) return EINA_FALSE; + + return rp->part->mouse_events; +} + +void +_edje_part_mouse_events_set(Edje *ed EINA_UNUSED, Edje_Real_Part *rp, Eina_Bool mouse_events) +{ + if (!rp) return; + + rp->part->mouse_events = !!mouse_events; + + if (mouse_events) + { + evas_object_pass_events_set(rp->object, 0); + _edje_callbacks_add(rp->object, ed, rp); + } + else + { + evas_object_pass_events_set(rp->object, 1); + _edje_callbacks_del(rp->object, ed); + } +} + +Eina_Bool +_edje_part_repeat_events_get(Edje *ed EINA_UNUSED, Edje_Real_Part *rp) +{ + if (!rp) return EINA_FALSE; + + return rp->part->repeat_events; +} + +void +_edje_part_repeat_events_set(Edje *ed EINA_UNUSED, Edje_Real_Part *rp, Eina_Bool repeat_events) +{ + if (!rp) return; + + rp->part->repeat_events = !!repeat_events; + + if (repeat_events) + evas_object_repeat_events_set(rp->object, 1); + else + evas_object_repeat_events_set(rp->object, 0); +} + /* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/