forked from enlightenment/efl
parent
0740d6e962
commit
b6116cc8dc
|
@ -424,6 +424,7 @@ group { name: "elm/ctxpopup/bg/default";
|
|||
source: "elm";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "ctxpopup_bg";
|
||||
transition: LINEAR 0.25;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -620,26 +621,46 @@ group { name: "elm/ctxpopup/base/default";
|
|||
rel1 { to:"base"; relative: 0 0; }
|
||||
rel2 { to:"base"; relative: 0 1; }
|
||||
}
|
||||
description { state: "up" 0.0;
|
||||
description { state: "show_up" 0.0;
|
||||
color: 255 255 255 0;
|
||||
rel1 { to:"arrow_area_down"; relative: 0 1; }
|
||||
rel2 { to:"arrow_area_down"; relative: 1 1; }
|
||||
}
|
||||
description { state: "left" 0.0;
|
||||
description { state: "show_left" 0.0;
|
||||
color: 255 255 255 0;
|
||||
rel1 { to:"arrow_area_right"; relative: 1 0; }
|
||||
rel2 { to:"arrow_area_right"; relative: 1 1; }
|
||||
}
|
||||
description { state: "right" 0.0;
|
||||
description { state: "show_right" 0.0;
|
||||
color: 255 255 255 0;
|
||||
rel1 { to:"arrow_area_left"; relative: 0 0; }
|
||||
rel2 { to:"arrow_area_left"; relative: 0 1; }
|
||||
}
|
||||
description { state: "down" 0.0;
|
||||
description { state: "show_down" 0.0;
|
||||
color: 255 255 255 0;
|
||||
rel1 { to:"arrow_area_up"; relative: 0 0; }
|
||||
rel2 { to:"arrow_area_up"; relative: 1 0; }
|
||||
}
|
||||
description { state: "hide_up" 0.0;
|
||||
color: 255 255 255 255;
|
||||
rel1 { to:"arrow_area_down"; relative: 0 1; }
|
||||
rel2 { to:"arrow_area_down"; relative: 1 1; }
|
||||
}
|
||||
description { state: "hide_left" 0.0;
|
||||
color: 255 255 255 255;
|
||||
rel1 { to:"arrow_area_right"; relative: 1 0; }
|
||||
rel2 { to:"arrow_area_right"; relative: 1 1; }
|
||||
}
|
||||
description { state: "hide_right" 0.0;
|
||||
color: 255 255 255 255;
|
||||
rel1 { to:"arrow_area_left"; relative: 0 0; }
|
||||
rel2 { to:"arrow_area_left"; relative: 0 1; }
|
||||
}
|
||||
description { state: "hide_down" 0.0;
|
||||
color: 255 255 255 255;
|
||||
rel1 { to:"arrow_area_up"; relative: 0 0; }
|
||||
rel2 { to:"arrow_area_up"; relative: 1 0; }
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
color: 255 255 255 255;
|
||||
rel1 { to_x:"arrow_area_left"; to_y:"arrow_area_up"; }
|
||||
|
@ -655,34 +676,70 @@ group { name: "elm/ctxpopup/base/default";
|
|||
transition: LINEAR 0.25;
|
||||
target: "ctxpopup_clip";
|
||||
}
|
||||
program { name: "up";
|
||||
program { name: "show_up";
|
||||
signal: "elm,state,show,up";
|
||||
source: "elm";
|
||||
action: STATE_SET "up" 0.0;
|
||||
action: STATE_SET "show_up" 0.0;
|
||||
transition: LINEAR 0.25;
|
||||
target: "ctxpopup_clip";
|
||||
}
|
||||
program { name: "left";
|
||||
program { name: "show_left";
|
||||
signal: "elm,state,show,left";
|
||||
source: "elm";
|
||||
action: STATE_SET "left" 0.0;
|
||||
action: STATE_SET "show_left" 0.0;
|
||||
transition: LINEAR 0.25;
|
||||
target: "ctxpopup_clip";
|
||||
}
|
||||
program { name: "right";
|
||||
program { name: "show_right";
|
||||
signal: "elm,state,show,right";
|
||||
source: "elm";
|
||||
action: STATE_SET "right" 0.0;
|
||||
action: STATE_SET "show_right" 0.0;
|
||||
transition: LINEAR 0.25;
|
||||
target: "ctxpopup_clip";
|
||||
}
|
||||
program { name: "down";
|
||||
program { name: "show_down";
|
||||
signal: "elm,state,show,down";
|
||||
source: "elm";
|
||||
action: STATE_SET "down" 0.0;
|
||||
action: STATE_SET "show_down" 0.0;
|
||||
transition: LINEAR 0.25;
|
||||
target: "ctxpopup_clip";
|
||||
}
|
||||
program { name: "hide_up";
|
||||
signal: "elm,state,hide,up";
|
||||
source: "elm";
|
||||
action: STATE_SET "hide_up" 0.0;
|
||||
transition: LINEAR 0.25;
|
||||
target: "ctxpopup_clip";
|
||||
after: "hide_finished";
|
||||
}
|
||||
program { name: "hide_left";
|
||||
signal: "elm,state,hide,left";
|
||||
source: "elm";
|
||||
action: STATE_SET "hide_left" 0.0;
|
||||
transition: LINEAR 0.25;
|
||||
target: "ctxpopup_clip";
|
||||
after: "hide_finished";
|
||||
}
|
||||
program { name: "hide_right";
|
||||
signal: "elm,state,hide,right";
|
||||
source: "elm";
|
||||
action: STATE_SET "hide_right" 0.0;
|
||||
transition: LINEAR 0.25;
|
||||
target: "ctxpopup_clip";
|
||||
after: "hide_finished";
|
||||
}
|
||||
program { name: "hide_down";
|
||||
signal: "elm,state,hide,down";
|
||||
source: "elm";
|
||||
action: STATE_SET "hide_down" 0.0;
|
||||
transition: LINEAR 0.25;
|
||||
target: "ctxpopup_clip";
|
||||
after: "hide_finished";
|
||||
}
|
||||
program { name: "hide_finished";
|
||||
action: SIGNAL_EMIT "elm,action,hide,finished" "";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -68,6 +68,10 @@ static void _update_arrow(Evas_Object *obj,
|
|||
Elm_Ctxpopup_Direction dir,
|
||||
Evas_Coord_Rectangle rect);
|
||||
static void _sizing_eval(Evas_Object *obj);
|
||||
static void _hide_signal_emit(Evas_Object *obj,
|
||||
Elm_Ctxpopup_Direction dir);
|
||||
static void _show_signal_emit(Evas_Object *obj,
|
||||
Elm_Ctxpopup_Direction dir);
|
||||
static void _shift_base_by_arrow(Evas_Object *arrow,
|
||||
Elm_Ctxpopup_Direction dir,
|
||||
Evas_Coord_Rectangle *rect);
|
||||
|
@ -102,6 +106,10 @@ static void _ctxpopup_show(void *data,
|
|||
Evas *e,
|
||||
Evas_Object *obj,
|
||||
void *event_info);
|
||||
static void _hide_finished(void *data,
|
||||
Evas_Object *obj,
|
||||
const char *emission,
|
||||
const char *source __UNUSED__);
|
||||
static void _hide(Evas_Object *obj);
|
||||
static void _ctxpopup_hide(void *data,
|
||||
Evas *e,
|
||||
|
@ -613,13 +621,42 @@ _update_arrow(Evas_Object *obj, Elm_Ctxpopup_Direction dir,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_hide_signal_emit(Evas_Object *obj, Elm_Ctxpopup_Direction dir)
|
||||
{
|
||||
Widget_Data *wd;
|
||||
|
||||
wd = elm_widget_data_get(obj);
|
||||
if (!wd->visible) return;
|
||||
|
||||
switch (dir)
|
||||
{
|
||||
case ELM_CTXPOPUP_DIRECTION_UP:
|
||||
edje_object_signal_emit(wd->base, "elm,state,hide,up", "elm");
|
||||
break;
|
||||
case ELM_CTXPOPUP_DIRECTION_LEFT:
|
||||
edje_object_signal_emit(wd->base, "elm,state,hide,left", "elm");
|
||||
break;
|
||||
case ELM_CTXPOPUP_DIRECTION_RIGHT:
|
||||
edje_object_signal_emit(wd->base, "elm,state,hide,right", "elm");
|
||||
break;
|
||||
case ELM_CTXPOPUP_DIRECTION_DOWN:
|
||||
edje_object_signal_emit(wd->base, "elm,state,hide,down", "elm");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
edje_object_signal_emit(wd->bg, "elm,state,hide", "elm");
|
||||
}
|
||||
|
||||
static void
|
||||
_show_signal_emit(Evas_Object *obj, Elm_Ctxpopup_Direction dir)
|
||||
{
|
||||
Widget_Data *wd;
|
||||
|
||||
wd = elm_widget_data_get(obj);
|
||||
if (!wd || wd->visible) return;
|
||||
if (wd->visible) return;
|
||||
|
||||
switch (dir)
|
||||
{
|
||||
|
@ -1022,6 +1059,13 @@ _ctxpopup_show(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj,
|
|||
elm_object_focus_set(obj, EINA_TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
_hide_finished(void *data, Evas_Object *obj __UNUSED__,
|
||||
const char *emission __UNUSED__, const char *source __UNUSED__)
|
||||
{
|
||||
_hide(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_hide(Evas_Object *obj)
|
||||
{
|
||||
|
@ -1043,7 +1087,9 @@ static void
|
|||
_ctxpopup_hide(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj,
|
||||
void *event_info __UNUSED__)
|
||||
{
|
||||
_hide(obj);
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_hide_signal_emit(obj, wd->dir);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1302,6 +1348,8 @@ elm_ctxpopup_add(Evas_Object *parent)
|
|||
wd->base = edje_object_add(e);
|
||||
elm_widget_sub_object_add(obj, wd->base);
|
||||
_elm_theme_object_set(obj, wd->base, "ctxpopup", "base", "default");
|
||||
edje_object_signal_callback_add(wd->base, "elm,action,hide,finished", "",
|
||||
_hide_finished, obj);
|
||||
|
||||
//Arrow
|
||||
wd->arrow = edje_object_add(e);
|
||||
|
|
Loading…
Reference in New Issue