Add code to grid for catching key down and mouse events
Signed-off-by: Chris Michael <devilhorns@comcast.net>
This commit is contained in:
parent
4bf995e5ec
commit
ec853e9a25
122
src/bin/grid.c
122
src/bin/grid.c
|
@ -39,8 +39,10 @@ struct _Grid
|
|||
} cursor;
|
||||
|
||||
Evas_Object *o_event;
|
||||
Ecore_Animator *anim;
|
||||
|
||||
const char *name;
|
||||
int scroll;
|
||||
|
||||
Eina_Bool noreqsize : 1;
|
||||
|
||||
|
@ -476,8 +478,10 @@ _smart_apply(Evas_Object *obj)
|
|||
ch1, y, ch2 - ch1 + 1, 1);
|
||||
}
|
||||
|
||||
/* TODO: test scrolling */
|
||||
evas_object_show(sd->cursor.obj);
|
||||
if (sd->scroll != 0)
|
||||
evas_object_hide(sd->cursor.obj);
|
||||
else
|
||||
evas_object_show(sd->cursor.obj);
|
||||
|
||||
evas_object_move(sd->cursor.obj,
|
||||
ox + (sd->cursor.x * sd->font.chw),
|
||||
|
@ -539,23 +543,6 @@ _smart_cb_delayed_size(void *data)
|
|||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
/* static Eina_Bool */
|
||||
/* _smart_cb_change(void *data) */
|
||||
/* { */
|
||||
/* Evas_Object *obj; */
|
||||
/* Grid *sd; */
|
||||
|
||||
/* obj = data; */
|
||||
|
||||
/* if (!(sd = evas_object_smart_data_get(obj))) return EINA_FALSE; */
|
||||
|
||||
/* _smart_apply(obj); */
|
||||
|
||||
/* evas_object_smart_callback_call(obj, "changed", NULL); */
|
||||
|
||||
/* return EINA_FALSE; */
|
||||
/* } */
|
||||
|
||||
static void
|
||||
_smart_cb_cursor_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
|
||||
{
|
||||
|
@ -575,7 +562,6 @@ _smart_cb_focus_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNU
|
|||
if (!(sd = evas_object_smart_data_get(data))) return;
|
||||
|
||||
edje_object_signal_emit(sd->cursor.obj, "focus,in", "express");
|
||||
evas_object_show(sd->cursor.obj);
|
||||
|
||||
/* TODO: finish */
|
||||
}
|
||||
|
@ -592,6 +578,89 @@ _smart_cb_focus_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UN
|
|||
/* TODO: finish */
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
|
||||
{
|
||||
Grid *sd;
|
||||
Evas_Event_Mouse_Down *ev;
|
||||
|
||||
ev = event;
|
||||
if (!(sd = evas_object_smart_data_get(data))) return;
|
||||
|
||||
if (ev->button == 3)
|
||||
{
|
||||
elm_object_focus_set(data, EINA_TRUE);
|
||||
evas_object_smart_callback_call(data, "options", NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_smart_cb_change(void *data)
|
||||
{
|
||||
Evas_Object *obj;
|
||||
Grid *sd;
|
||||
|
||||
if (!(obj = data)) return EINA_FALSE;
|
||||
if (!(sd = evas_object_smart_data_get(obj))) return EINA_FALSE;
|
||||
|
||||
sd->anim = NULL;
|
||||
_smart_apply(obj);
|
||||
evas_object_smart_callback_call(obj, "changed", NULL);
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_update_queue(Evas_Object *obj, Grid *sd)
|
||||
{
|
||||
if (sd->anim) return;
|
||||
sd->anim = ecore_animator_add(_smart_cb_change, obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_cb_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
|
||||
{
|
||||
Grid *sd;
|
||||
Evas_Event_Mouse_Wheel *ev;
|
||||
|
||||
ev = event;
|
||||
if (!(sd = evas_object_smart_data_get(data))) return;
|
||||
|
||||
sd->scroll -= (ev->z * 4);
|
||||
if (sd->scroll < 0) sd->scroll = 0;
|
||||
_smart_update_queue(data, sd);
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_cb_key_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
|
||||
{
|
||||
Grid *sd;
|
||||
Evas_Event_Key_Down *ev;
|
||||
|
||||
ev = event;
|
||||
if (!(sd = evas_object_smart_data_get(data))) return;
|
||||
|
||||
if ((!evas_key_modifier_is_set(ev->modifiers, "Alt")) &&
|
||||
(evas_key_modifier_is_set(ev->modifiers, "Control")) &&
|
||||
(!evas_key_modifier_is_set(ev->modifiers, "Shift")))
|
||||
{
|
||||
if ((!strcmp(ev->key, "Prior")) || (!strcmp(ev->key, "Right")))
|
||||
{
|
||||
evas_object_smart_callback_call(data, "prev", NULL);
|
||||
goto end;
|
||||
}
|
||||
else if ((!strcmp(ev->key, "Next")) || (!strcmp(ev->key, "Left")))
|
||||
{
|
||||
evas_object_smart_callback_call(data, "next", NULL);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: finish */
|
||||
|
||||
end:
|
||||
edje_object_signal_emit(sd->cursor.obj, "key,down", "express");
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_calculate(Evas_Object *obj)
|
||||
{
|
||||
|
@ -656,16 +725,23 @@ _smart_add(Evas_Object *obj)
|
|||
|
||||
sd->sel.theme = edje_object_add(sd->evas);
|
||||
evas_object_smart_member_add(sd->sel.theme, obj);
|
||||
/* TODO: callbacks */
|
||||
/* TODO: selection callbacks */
|
||||
|
||||
/* create event object */
|
||||
sd->o_event = evas_object_rectangle_add(sd->evas);
|
||||
evas_object_repeat_events_set(sd->o_event, EINA_TRUE);
|
||||
evas_object_color_set(sd->o_event, 255, 0, 0,32);
|
||||
evas_object_color_set(sd->o_event, 0, 0, 0, 0);
|
||||
evas_object_smart_member_add(sd->o_event, obj);
|
||||
evas_object_show(sd->o_event);
|
||||
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN,
|
||||
_smart_cb_mouse_down, obj);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_WHEEL,
|
||||
_smart_cb_mouse_wheel, obj);
|
||||
|
||||
/* TODO: Finish callbacks & imf */
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN,
|
||||
_smart_cb_key_down, obj);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_FOCUS_IN,
|
||||
_smart_cb_focus_in, obj);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_FOCUS_OUT,
|
||||
|
@ -689,6 +765,8 @@ _smart_del(Evas_Object *obj)
|
|||
if (sd->sel.theme) evas_object_del(sd->sel.theme);
|
||||
if (sd->grid.obj) evas_object_del(sd->grid.obj);
|
||||
if (sd->font.name) eina_stringshare_del(sd->font.name);
|
||||
if (sd->anim) ecore_animator_del(sd->anim);
|
||||
|
||||
/* TODO: finish */
|
||||
|
||||
_parent_sc.del(obj);
|
||||
|
|
Loading…
Reference in New Issue