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 <cedric@osg.samsung.com>
This commit is contained in:
Jee-Yong Um 2015-06-25 15:56:48 +02:00 committed by Cedric BAIL
parent 70e5687f6c
commit ef491e697e
4 changed files with 152 additions and 0 deletions

View File

@ -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[]);

View File

@ -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);

View File

@ -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 <remix/remix.h>
#endif

View File

@ -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 :*/