efl_ui_popup: Code refactoring to replace legacy APIs

This commit is contained in:
Jaehyun Cho 2017-10-24 18:34:36 +09:00
parent 0928335fbc
commit b85cebdb96
14 changed files with 264 additions and 311 deletions

View File

@ -11,16 +11,15 @@
#define MY_CLASS EFL_UI_POPUP_CLASS #define MY_CLASS EFL_UI_POPUP_CLASS
#define MY_CLASS_NAME "Efl.Ui.Popup" #define MY_CLASS_NAME "Efl.Ui.Popup"
#define MY_CLASS_NAME_LEGACY "elm_popup"
static void static void
_bg_clicked_cb(void *data, _bg_clicked_cb(void *data,
Evas_Object *o EINA_UNUSED, Eo *o EINA_UNUSED,
const char *emission EINA_UNUSED, const char *emission EINA_UNUSED,
const char *source EINA_UNUSED) const char *source EINA_UNUSED)
{ {
Evas_Object *obj = data; Eo *obj = data;
efl_event_callback_legacy_call(obj, EFL_UI_POPUP_EVENT_BG_CLICKED, NULL); efl_event_callback_call(obj, EFL_UI_POPUP_EVENT_BG_CLICKED, NULL);
} }
EOLIAN static void EOLIAN static void
@ -31,41 +30,44 @@ _efl_ui_popup_efl_gfx_position_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED, E
} }
static void static void
_calc_align(Evas_Object *obj) _calc_align(Eo *obj)
{ {
Efl_Ui_Popup_Data *pd = efl_data_scope_get(obj, MY_CLASS); Efl_Ui_Popup_Data *pd = efl_data_scope_get(obj, MY_CLASS);
Evas_Coord x, y, w, h; Eina_Rect p_geom = efl_gfx_geometry_get(pd->win_parent);
evas_object_geometry_get(pd->win_parent, &x, &y, &w, &h);
x = 0; efl_gfx_position_set(pd->event_bg, EINA_POSITION2D(0, 0));
y = 0; efl_gfx_size_set(pd->event_bg, EINA_SIZE2D(p_geom.w, p_geom.h));
evas_object_move(pd->event_bg, x, y); Eina_Rect o_geom = efl_gfx_geometry_get(obj);
evas_object_resize(pd->event_bg, w, h);
Evas_Coord pw, ph; Evas_Coord pw, ph;
evas_object_geometry_get(obj, NULL, NULL, &pw, &ph); pw = p_geom.w;
ph = p_geom.h;
Evas_Coord ow, oh;
ow = o_geom.w;
oh = o_geom.h;
switch (pd->align) switch (pd->align)
{ {
case EFL_UI_POPUP_ALIGN_CENTER: case EFL_UI_POPUP_ALIGN_CENTER:
efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D(x + ((w - pw ) / 2), y + ((h - ph) / 2))); efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D((pw - ow ) / 2, (ph - oh) / 2));
break; break;
case EFL_UI_POPUP_ALIGN_LEFT: case EFL_UI_POPUP_ALIGN_LEFT:
efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D(x, y + ((h - ph) / 2))); efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D(0, (ph - oh) / 2));
break; break;
case EFL_UI_POPUP_ALIGN_RIGHT: case EFL_UI_POPUP_ALIGN_RIGHT:
efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D(x + (w - pw), ((h - ph) / 2))); efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D(pw - ow, (ph - oh) / 2));
break; break;
case EFL_UI_POPUP_ALIGN_TOP: case EFL_UI_POPUP_ALIGN_TOP:
efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D(x + ((w - pw) / 2), y)); efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D((pw - ow) / 2, 0));
break; break;
case EFL_UI_POPUP_ALIGN_BOTTOM: case EFL_UI_POPUP_ALIGN_BOTTOM:
efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D(x + ((w - pw) / 2), y + (h - ph))); efl_gfx_position_set(efl_super(obj, MY_CLASS), EINA_POSITION2D((pw - ow) / 2, ph - oh));
break; break;
default: default:
break; break;
} }
} }
@ -76,9 +78,8 @@ _parent_geom_cb(void *data, const Efl_Event *ev EINA_UNUSED)
} }
EOLIAN static void EOLIAN static void
_efl_ui_popup_elm_widget_widget_parent_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED, Evas_Object *parent EINA_UNUSED) _efl_ui_popup_elm_widget_widget_parent_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED, Eo *parent EINA_UNUSED)
{ {
Evas_Coord x, y, w, h;
pd->win_parent = efl_provider_find(obj, EFL_UI_WIN_CLASS); pd->win_parent = efl_provider_find(obj, EFL_UI_WIN_CLASS);
if (!pd->win_parent) if (!pd->win_parent)
{ {
@ -86,27 +87,28 @@ _efl_ui_popup_elm_widget_widget_parent_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_U
return; return;
} }
evas_object_geometry_get(pd->win_parent, &x, &y, &w, &h); Eina_Rect p_geom = efl_gfx_geometry_get(pd->win_parent);
evas_object_move(pd->event_bg, x, y);
evas_object_resize(pd->event_bg, w, h); efl_gfx_position_set(pd->event_bg, EINA_POSITION2D(p_geom.x, p_geom.y));
efl_gfx_size_set(pd->event_bg, EINA_SIZE2D(p_geom.w, p_geom.h));
efl_event_callback_add(pd->win_parent, EFL_GFX_EVENT_RESIZE, _parent_geom_cb, obj); efl_event_callback_add(pd->win_parent, EFL_GFX_EVENT_RESIZE, _parent_geom_cb, obj);
efl_event_callback_add(pd->win_parent, EFL_GFX_EVENT_MOVE, _parent_geom_cb, obj); efl_event_callback_add(pd->win_parent, EFL_GFX_EVENT_MOVE, _parent_geom_cb, obj);
} }
EOLIAN static Eina_Bool EOLIAN static Eina_Bool
_efl_ui_popup_efl_container_content_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED, Evas_Object *content) _efl_ui_popup_efl_container_content_set(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED, Eo *content)
{ {
return efl_content_set(efl_part(obj, "elm.swallow.content"), content); return efl_content_set(efl_part(obj, "elm.swallow.content"), content);
} }
EOLIAN static Evas_Object* EOLIAN static Eo*
_efl_ui_popup_efl_container_content_get(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED) _efl_ui_popup_efl_container_content_get(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED)
{ {
return efl_content_get(efl_part(obj, "elm.swallow.content")); return efl_content_get(efl_part(obj, "elm.swallow.content"));
} }
EOLIAN static Evas_Object* EOLIAN static Eo*
_efl_ui_popup_efl_container_content_unset(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED) _efl_ui_popup_efl_container_content_unset(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED)
{ {
return efl_content_unset(efl_part(obj, "elm.swallow.content")); return efl_content_unset(efl_part(obj, "elm.swallow.content"));
@ -128,8 +130,8 @@ _efl_ui_popup_align_get(Eo *obj EINA_UNUSED, Efl_Ui_Popup_Data *pd)
static Eina_Bool static Eina_Bool
_timer_cb(void *data) _timer_cb(void *data)
{ {
Evas_Object *popup = data; Eo *popup = data;
evas_object_del(popup); efl_del(popup);
return ECORE_CALLBACK_CANCEL; return ECORE_CALLBACK_CANCEL;
} }
@ -210,7 +212,7 @@ _efl_ui_popup_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Popup_Data *pd)
EOLIAN static void EOLIAN static void
_efl_ui_popup_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Popup_Data *pd) _efl_ui_popup_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Popup_Data *pd)
{ {
ELM_SAFE_FREE(pd->event_bg, evas_object_del); ELM_SAFE_DEL(pd->event_bg);
efl_event_callback_del(pd->win_parent, EFL_GFX_EVENT_RESIZE, _parent_geom_cb, obj); efl_event_callback_del(pd->win_parent, EFL_GFX_EVENT_RESIZE, _parent_geom_cb, obj);
efl_event_callback_del(pd->win_parent, EFL_GFX_EVENT_MOVE, _parent_geom_cb, obj); efl_event_callback_del(pd->win_parent, EFL_GFX_EVENT_MOVE, _parent_geom_cb, obj);
@ -225,38 +227,35 @@ _efl_ui_popup_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Popup_Data *pd EINA_UNUSED)
elm_coords_finger_size_adjust(1, &minw, 1, &minh); elm_coords_finger_size_adjust(1, &minw, 1, &minh);
edje_object_size_min_restricted_calc edje_object_size_min_restricted_calc
(wd->resize_obj, &minw, &minh, minw, minh); (wd->resize_obj, &minw, &minh, minw, minh);
evas_object_size_hint_min_set(obj, minw, minh); efl_gfx_size_hint_min_set(obj, EINA_SIZE2D(minw, minh));
Evas_Coord w, h; Eina_Size2D size = efl_gfx_size_get(obj);
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
if ((minw > w) && (minh < h)) Eina_Size2D new_size;
evas_object_resize(obj, minw, h); new_size.w = (minw > size.w ? minw : size.w);
else if ((minw < w) && (minh > h)) new_size.h = (minh > size.h ? minh : size.h);
evas_object_resize(obj, w, minh); efl_gfx_size_set(obj, new_size);
else if ((minw >= w) && (minh >= h))
evas_object_resize(obj, minw, minh);
} }
EOLIAN static void EOLIAN static void
_efl_ui_popup_bg_set(Eo *obj, Efl_Ui_Popup_Data *pd, const char* file, const char* group) _efl_ui_popup_bg_set(Eo *obj, Efl_Ui_Popup_Data *pd, const char* file, const char* group)
{ {
Evas_Object *prev_obj = edje_object_part_swallow_get(pd->event_bg, "elm.swallow.image"); Eo *prev_obj = edje_object_part_swallow_get(pd->event_bg, "elm.swallow.image");
if (prev_obj) if (prev_obj)
{ {
edje_object_part_unswallow(pd->event_bg, prev_obj); edje_object_part_unswallow(pd->event_bg, prev_obj);
evas_object_del(prev_obj); efl_del(prev_obj);
} }
Evas_Object *image = elm_image_add(obj); Eo *image = elm_image_add(obj);
Eina_Bool ret = elm_image_file_set(image, file, group); Eina_Bool ret = elm_image_file_set(image, file, group);
if (!ret) if (!ret)
{ {
edje_object_signal_emit(pd->event_bg, "elm,state,image,hidden", "elm"); edje_object_signal_emit(pd->event_bg, "elm,state,image,hidden", "elm");
evas_object_del(image); efl_del(image);
return; return;
} }
edje_object_part_swallow(pd->event_bg, "elm.swallow.image", image); edje_object_part_swallow(pd->event_bg, "elm.swallow.image", image);
edje_object_signal_emit(pd->event_bg, "elm,state,image,visible", "elm"); edje_object_signal_emit(pd->event_bg, "elm,state,image,visible", "elm");
} }
@ -266,19 +265,13 @@ _efl_ui_popup_bg_repeat_events_set(Eo *obj EINA_UNUSED, Efl_Ui_Popup_Data *pd, E
{ {
pd->bg_repeat_events = repeat; pd->bg_repeat_events = repeat;
evas_object_repeat_events_set(pd->event_bg, repeat); efl_canvas_object_repeat_events_set(pd->event_bg, repeat);
} }
EOLIAN static Eina_Bool EOLIAN static Eina_Bool
_efl_ui_popup_bg_repeat_events_get(Eo *obj EINA_UNUSED, Efl_Ui_Popup_Data *pd) _efl_ui_popup_bg_repeat_events_get(Eo *obj EINA_UNUSED, Efl_Ui_Popup_Data *pd)
{ {
return pd->bg_repeat_events; return pd->bg_repeat_events;
}
EOLIAN static void
_efl_ui_popup_class_constructor(Efl_Class *klass)
{
evas_smart_legacy_type_register(MY_CLASS_NAME, klass);
} }
/* Internal EO APIs and hidden overrides */ /* Internal EO APIs and hidden overrides */

View File

@ -57,7 +57,6 @@ class Efl.Ui.Popup(Efl.Ui.Layout)
} }
} }
implements { implements {
class.constructor;
Efl.Gfx.position { set; } Efl.Gfx.position { set; }
Efl.Gfx.visible { set; } Efl.Gfx.visible { set; }
Elm.Widget.widget_parent { set; } Elm.Widget.widget_parent { set; }

View File

@ -22,11 +22,8 @@ _efl_ui_popup_alert_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Popup_Alert_Data *pd
elm_coords_finger_size_adjust(1, &minw, 1, &minh); elm_coords_finger_size_adjust(1, &minw, 1, &minh);
edje_object_size_min_restricted_calc edje_object_size_min_restricted_calc
(wd->resize_obj, &minw, &minh, minw, minh); (wd->resize_obj, &minw, &minh, minw, minh);
evas_object_size_hint_min_set(obj, minw, minh); efl_gfx_size_hint_min_set(obj, EINA_SIZE2D(minw, minh));
Evas_Coord w, h;
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
} }
static Eina_Bool static Eina_Bool
@ -69,33 +66,33 @@ _efl_ui_popup_alert_text_get(Eo *obj EINA_UNUSED, Efl_Ui_Popup_Alert_Data *pd, c
} }
static Eina_Bool static Eina_Bool
_efl_ui_popup_alert_content_set(Eo *obj, Efl_Ui_Popup_Alert_Data *pd EINA_UNUSED, const char *part, Evas_Object *content) _efl_ui_popup_alert_content_set(Eo *obj, Efl_Ui_Popup_Alert_Data *pd EINA_UNUSED, const char *part, Eo *content)
{ {
return efl_content_set(efl_part(efl_super(obj, MY_CLASS), part), content); return efl_content_set(efl_part(efl_super(obj, MY_CLASS), part), content);
} }
Evas_Object * Eo *
_efl_ui_popup_alert_content_get(Eo *obj, Efl_Ui_Popup_Alert_Data *pd EINA_UNUSED, const char *part) _efl_ui_popup_alert_content_get(Eo *obj, Efl_Ui_Popup_Alert_Data *pd EINA_UNUSED, const char *part)
{ {
return efl_content_get(efl_part(efl_super(obj, MY_CLASS), part)); return efl_content_get(efl_part(efl_super(obj, MY_CLASS), part));
} }
static Evas_Object * static Eo *
_efl_ui_popup_alert_content_unset(Eo *obj, Efl_Ui_Popup_Alert_Data *pd EINA_UNUSED, const char *part) _efl_ui_popup_alert_content_unset(Eo *obj, Efl_Ui_Popup_Alert_Data *pd EINA_UNUSED, const char *part)
{ {
return efl_content_unset(efl_part(efl_super(obj, MY_CLASS), part)); return efl_content_unset(efl_part(efl_super(obj, MY_CLASS), part));
} }
static void static void
_positive_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, _positive_button_clicked_cb(void *data, Eo *obj EINA_UNUSED,
void *event_info EINA_UNUSED) void *event_info EINA_UNUSED)
{ {
Eo *popup_obj = data; Eo *popup_obj = data;
efl_event_callback_call(popup_obj, EFL_UI_POPUP_ALERT_EVENT_CLICKED, (void *)(uintptr_t)EFL_UI_POPUP_ALERT_BUTTON_POSITIVE); efl_event_callback_call(popup_obj, EFL_UI_POPUP_ALERT_EVENT_CLICKED, (void *)(uintptr_t)EFL_UI_POPUP_ALERT_BUTTON_POSITIVE);
} }
static void static void
_negative_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, _negative_button_clicked_cb(void *data, Eo *obj EINA_UNUSED,
void *event_info EINA_UNUSED) void *event_info EINA_UNUSED)
{ {
Eo *popup_obj = data; Eo *popup_obj = data;
@ -103,7 +100,7 @@ _negative_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
} }
static void static void
_user_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, _user_button_clicked_cb(void *data, Eo *obj EINA_UNUSED,
void *event_info EINA_UNUSED) void *event_info EINA_UNUSED)
{ {
Eo *popup_obj = data; Eo *popup_obj = data;
@ -115,7 +112,7 @@ _efl_ui_popup_alert_button_set(Eo *obj, Efl_Ui_Popup_Alert_Data *pd, Efl_Ui_Popu
{ {
if (pd->button[type]) if (pd->button[type])
{ {
evas_object_del(pd->button[type]); efl_del(pd->button[type]);
pd->button[type] = NULL; pd->button[type] = NULL;
} }
pd->button[type] = elm_button_add(obj); pd->button[type] = elm_button_add(obj);
@ -123,32 +120,32 @@ _efl_ui_popup_alert_button_set(Eo *obj, Efl_Ui_Popup_Alert_Data *pd, Efl_Ui_Popu
switch (type) switch (type)
{ {
case EFL_UI_POPUP_ALERT_BUTTON_POSITIVE: case EFL_UI_POPUP_ALERT_BUTTON_POSITIVE:
evas_object_smart_callback_add(pd->button[type], "clicked", evas_object_smart_callback_add(pd->button[type], "clicked",
_positive_button_clicked_cb, _positive_button_clicked_cb,
obj); obj);
break; break;
case EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE: case EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE:
evas_object_smart_callback_add(pd->button[type], "clicked", evas_object_smart_callback_add(pd->button[type], "clicked",
_negative_button_clicked_cb, _negative_button_clicked_cb,
obj); obj);
break; break;
case EFL_UI_POPUP_ALERT_BUTTON_USER: case EFL_UI_POPUP_ALERT_BUTTON_USER:
evas_object_smart_callback_add(pd->button[type], "clicked", evas_object_smart_callback_add(pd->button[type], "clicked",
_user_button_clicked_cb, _user_button_clicked_cb,
obj); obj);
break; break;
default: default:
break; break;
} }
Evas_Object * cur_content = efl_content_unset(efl_part(obj, "buttons")); Eo *cur_content = efl_content_unset(efl_part(obj, "buttons"));
if (cur_content) if (cur_content)
{ {
efl_content_unset(efl_part(cur_content, "elm.swallow.button1")); efl_content_unset(efl_part(cur_content, "elm.swallow.button1"));
efl_content_unset(efl_part(cur_content, "elm.swallow.button2")); efl_content_unset(efl_part(cur_content, "elm.swallow.button2"));
efl_content_unset(efl_part(cur_content, "elm.swallow.button3")); efl_content_unset(efl_part(cur_content, "elm.swallow.button3"));
evas_object_del(cur_content); efl_del(cur_content);
} }
if (pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE] if (pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE]
@ -211,8 +208,8 @@ _efl_ui_popup_alert_button_set(Eo *obj, Efl_Ui_Popup_Alert_Data *pd, Efl_Ui_Popu
efl_content_set(efl_part(obj, "buttons"), pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1]); efl_content_set(efl_part(obj, "buttons"), pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1]);
} }
elm_layout_signal_emit(obj, "elm,buttons,show", "elm"); elm_layout_signal_emit(obj, "elm,buttons,show", "elm");
elm_layout_sizing_eval(obj); elm_layout_sizing_eval(obj);
} }
EOLIAN static void EOLIAN static void
@ -238,12 +235,6 @@ _efl_ui_popup_alert_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Popup_Alert_Data
efl_canvas_group_del(efl_super(obj, MY_CLASS)); efl_canvas_group_del(efl_super(obj, MY_CLASS));
} }
EOLIAN static void
_efl_ui_popup_alert_class_constructor(Efl_Class *klass)
{
evas_smart_legacy_type_register(MY_CLASS_NAME, klass);
}
/* Efl.Part begin */ /* Efl.Part begin */
ELM_PART_OVERRIDE(efl_ui_popup_alert, EFL_UI_POPUP_ALERT, Efl_Ui_Popup_Alert_Data) ELM_PART_OVERRIDE(efl_ui_popup_alert, EFL_UI_POPUP_ALERT, Efl_Ui_Popup_Alert_Data)

View File

@ -21,7 +21,6 @@ class Efl.Ui.Popup.Alert(Efl.Ui.Popup)
} }
} }
implements { implements {
class.constructor;
Efl.Part.part; Efl.Part.part;
} }
events { events {

View File

@ -13,53 +13,52 @@
#define MY_CLASS_NAME "Efl.Ui.Popup.Alert.Scroll" #define MY_CLASS_NAME "Efl.Ui.Popup.Alert.Scroll"
static void static void
_scroller_sizing_eval(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, Evas_Coord minw, Evas_Coord minh) _scroller_sizing_eval(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, Eina_Size2D min)
{ {
Evas_Coord w, h; Eina_Rect geom = efl_gfx_geometry_get(obj);
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
pd->is_sizing_eval = EINA_TRUE; pd->is_sizing_eval = EINA_TRUE;
if (pd->is_expandable_w && !pd->is_expandable_h) if (pd->is_expandable_w && !pd->is_expandable_h)
{ {
if ((pd->max_scroll_w > -1) && (minw > pd->max_scroll_w)) if ((pd->max_scroll.w > -1) && (min.w > pd->max_scroll.w))
{ {
elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_FALSE); elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_FALSE);
evas_object_resize(obj, pd->max_scroll_w, h); efl_gfx_size_set(obj, EINA_SIZE2D(pd->max_scroll.w, geom.h));
} }
} }
else if (!pd->is_expandable_w && pd->is_expandable_h) else if (!pd->is_expandable_w && pd->is_expandable_h)
{ {
if ((pd->max_scroll_h > -1) && (minh > pd->max_scroll_h)) if ((pd->max_scroll.h > -1) && (min.h > pd->max_scroll.h))
{ {
elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_FALSE); elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_FALSE);
evas_object_resize(obj, w, pd->max_scroll_h); efl_gfx_size_set(obj, EINA_SIZE2D(geom.w, pd->max_scroll.h));
} }
} }
else if (pd->is_expandable_w && pd->is_expandable_h) else if (pd->is_expandable_w && pd->is_expandable_h)
{ {
Eina_Bool wdir, hdir; Eina_Bool wdir, hdir;
wdir = hdir = EINA_FALSE; wdir = hdir = EINA_FALSE;
if ((pd->max_scroll_w > -1) && (minw > pd->max_scroll_w)) if ((pd->max_scroll.w > -1) && (min.w > pd->max_scroll.w))
wdir = 1; wdir = 1;
if ((pd->max_scroll_h > -1) && (minh > pd->max_scroll_h)) if ((pd->max_scroll.h > -1) && (min.h > pd->max_scroll.h))
hdir = 1; hdir = 1;
if (wdir && !hdir) if (wdir && !hdir)
{ {
elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_TRUE); elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_TRUE);
evas_object_resize(obj, pd->max_scroll_w, h); efl_gfx_size_set(obj, EINA_SIZE2D(pd->max_scroll.w, geom.h));
} }
else if (!wdir && hdir) else if (!wdir && hdir)
{ {
elm_scroller_content_min_limit(pd->scroller, EINA_TRUE, EINA_FALSE); elm_scroller_content_min_limit(pd->scroller, EINA_TRUE, EINA_FALSE);
evas_object_resize(obj, w, pd->max_scroll_h); efl_gfx_size_set(obj, EINA_SIZE2D(geom.w, pd->max_scroll.h));
} }
else if(wdir && hdir) else if(wdir && hdir)
{ {
elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_FALSE); elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_FALSE);
evas_object_resize(obj, pd->max_scroll_w, pd->max_scroll_h); efl_gfx_size_set(obj, pd->max_scroll);
} }
} }
pd->is_sizing_eval = EINA_FALSE; pd->is_sizing_eval = EINA_FALSE;
@ -77,14 +76,14 @@ _efl_ui_popup_alert_scroll_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Popup_Alert_Sc
elm_coords_finger_size_adjust(1, &minw, 1, &minh); elm_coords_finger_size_adjust(1, &minw, 1, &minh);
edje_object_size_min_restricted_calc edje_object_size_min_restricted_calc
(wd->resize_obj, &minw, &minh, minw, minh); (wd->resize_obj, &minw, &minh, minw, minh);
evas_object_size_hint_min_set(obj, minw, minh); efl_gfx_size_hint_min_set(obj, EINA_SIZE2D(minw, minh));
_scroller_sizing_eval(obj, pd, minw, minh); _scroller_sizing_eval(obj, pd, EINA_SIZE2D(minw, minh));
} }
static Eina_Bool static Eina_Bool
_efl_ui_popup_alert_scroll_content_set(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, const char *part, Evas_Object *content) _efl_ui_popup_alert_scroll_content_set(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, const char *part, Eo *content)
{ {
//For efl_content_set() //For efl_content_set()
if (part && !strcmp(part, "elm.swallow.content")) if (part && !strcmp(part, "elm.swallow.content"))
@ -92,8 +91,8 @@ _efl_ui_popup_alert_scroll_content_set(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *
pd->content = content; pd->content = content;
//Content should have expand propeties since the scroller is not layout layer //Content should have expand propeties since the scroller is not layout layer
evas_object_size_hint_weight_set(pd->content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); efl_gfx_size_hint_weight_set(pd->content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(pd->content, EVAS_HINT_FILL, EVAS_HINT_FILL); efl_gfx_size_hint_align_set(pd->content, EVAS_HINT_FILL, EVAS_HINT_FILL);
efl_content_set(efl_part(pd->scroller, "default"), pd->content); efl_content_set(efl_part(pd->scroller, "default"), pd->content);
} }
@ -105,7 +104,7 @@ _efl_ui_popup_alert_scroll_content_set(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *
return EINA_TRUE; return EINA_TRUE;
} }
Evas_Object * Eo *
_efl_ui_popup_alert_scroll_content_get(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, const char *part) _efl_ui_popup_alert_scroll_content_get(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, const char *part)
{ {
//For efl_content_set() //For efl_content_set()
@ -115,13 +114,13 @@ _efl_ui_popup_alert_scroll_content_get(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *
return efl_content_get(efl_part(efl_super(obj, MY_CLASS), part)); return efl_content_get(efl_part(efl_super(obj, MY_CLASS), part));
} }
static Evas_Object * static Eo *
_efl_ui_popup_alert_scroll_content_unset(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, const char *part) _efl_ui_popup_alert_scroll_content_unset(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, const char *part)
{ {
//For efl_content_set() //For efl_content_set()
if (part && !strcmp(part, "elm.swallow.content")) if (part && !strcmp(part, "elm.swallow.content"))
{ {
Evas_Object *content = pd->content; Eo *content = pd->content;
if (!content) return content; if (!content) return content;
pd->content = NULL; pd->content = NULL;
@ -179,8 +178,7 @@ static void
_efl_ui_popup_alert_scroll_efl_gfx_size_hint_hint_max_set(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, Eina_Size2D size) _efl_ui_popup_alert_scroll_efl_gfx_size_hint_hint_max_set(Eo *obj, Efl_Ui_Popup_Alert_Scroll_Data *pd, Eina_Size2D size)
{ {
efl_gfx_size_hint_max_set(efl_super(obj, MY_CLASS), size); efl_gfx_size_hint_max_set(efl_super(obj, MY_CLASS), size);
pd->max_scroll_w = size.w; pd->max_scroll = size;
pd->max_scroll_h = size.h;
elm_layout_sizing_eval(obj); elm_layout_sizing_eval(obj);
} }
@ -198,8 +196,7 @@ _efl_ui_popup_alert_scroll_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Popup_Aler
efl_content_set(efl_part(efl_super(obj, MY_CLASS), "elm.swallow.content"), pd->scroller); efl_content_set(efl_part(efl_super(obj, MY_CLASS), "elm.swallow.content"), pd->scroller);
pd->max_scroll_w = -1; pd->max_scroll = EINA_SIZE2D(-1, -1);
pd->max_scroll_h = -1;
} }
EOLIAN static void EOLIAN static void
@ -208,12 +205,6 @@ _efl_ui_popup_alert_scroll_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Popup_Aler
efl_canvas_group_del(efl_super(obj, MY_CLASS)); efl_canvas_group_del(efl_super(obj, MY_CLASS));
} }
EOLIAN static void
_efl_ui_popup_alert_scroll_class_constructor(Efl_Class *klass)
{
evas_smart_legacy_type_register(MY_CLASS_NAME, klass);
}
/* Efl.Part begin */ /* Efl.Part begin */
ELM_PART_OVERRIDE(efl_ui_popup_alert_scroll, EFL_UI_POPUP_ALERT_SCROLL, Efl_Ui_Popup_Alert_Scroll_Data) ELM_PART_OVERRIDE(efl_ui_popup_alert_scroll, EFL_UI_POPUP_ALERT_SCROLL, Efl_Ui_Popup_Alert_Scroll_Data)

View File

@ -17,7 +17,6 @@ class Efl.Ui.Popup.Alert.Scroll(Efl.Ui.Popup.Alert)
} }
} }
implements { implements {
class.constructor;
Efl.Gfx.Size.Hint.hint_max { set; } Efl.Gfx.Size.Hint.hint_max { set; }
Efl.Part.part; Efl.Part.part;
} }

View File

@ -6,13 +6,12 @@
typedef struct _Efl_Ui_Popup_Alert_Scroll_Data Efl_Ui_Popup_Alert_Scroll_Data; typedef struct _Efl_Ui_Popup_Alert_Scroll_Data Efl_Ui_Popup_Alert_Scroll_Data;
struct _Efl_Ui_Popup_Alert_Scroll_Data struct _Efl_Ui_Popup_Alert_Scroll_Data
{ {
Evas_Object *scroller; Eo *scroller;
Evas_Object *content; Eo *content;
Evas_Coord max_scroll_w; Eina_Size2D max_scroll;
Evas_Coord max_scroll_h; Eina_Bool is_expandable_w : 1;
Eina_Bool is_expandable_w; Eina_Bool is_expandable_h : 1;
Eina_Bool is_expandable_h; Eina_Bool is_sizing_eval : 1;
Eina_Bool is_sizing_eval;
}; };
#endif #endif

View File

@ -15,16 +15,15 @@
static void static void
_scroller_sizing_eval(Eo *obj, Efl_Ui_Popup_Alert_Text_Data *pd, Evas_Coord minh) _scroller_sizing_eval(Eo *obj, Efl_Ui_Popup_Alert_Text_Data *pd, Evas_Coord minh)
{ {
Evas_Coord w, h; Eina_Rect geom = efl_gfx_geometry_get(obj);
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
if (pd->is_expandable_h) if (pd->is_expandable_h)
{ {
if ((pd->max_scroll_h > -1) && (minh > pd->max_scroll_h)) if ((pd->max_scroll_h > -1) && (minh > pd->max_scroll_h))
{ {
elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_FALSE); elm_scroller_content_min_limit(pd->scroller, EINA_FALSE, EINA_FALSE);
evas_object_resize(obj, w, pd->max_scroll_h); efl_gfx_size_set(obj, EINA_SIZE2D(geom.w, pd->max_scroll_h));
} }
} }
} }
@ -38,24 +37,24 @@ _efl_ui_popup_alert_text_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Popup_Alert_Text
elm_coords_finger_size_adjust(1, &minw, 1, &minh); elm_coords_finger_size_adjust(1, &minw, 1, &minh);
edje_object_size_min_restricted_calc(wd->resize_obj, &minw, &minh, minw, minh); edje_object_size_min_restricted_calc(wd->resize_obj, &minw, &minh, minw, minh);
evas_object_size_hint_min_set(obj, minw, minh); efl_gfx_size_hint_min_set(obj, EINA_SIZE2D(minw, minh));
_scroller_sizing_eval(obj, pd, minh); _scroller_sizing_eval(obj, pd, minh);
} }
static Eina_Bool static Eina_Bool
_efl_ui_popup_alert_text_content_set(Eo *obj, Efl_Ui_Popup_Alert_Text_Data *pd EINA_UNUSED, const char *part, Evas_Object *content) _efl_ui_popup_alert_text_content_set(Eo *obj, Efl_Ui_Popup_Alert_Text_Data *pd EINA_UNUSED, const char *part, Eo *content)
{ {
return efl_content_set(efl_part(efl_super(obj, MY_CLASS), part), content); return efl_content_set(efl_part(efl_super(obj, MY_CLASS), part), content);
} }
Evas_Object * Eo *
_efl_ui_popup_alert_text_content_get(Eo *obj, Efl_Ui_Popup_Alert_Text_Data *pd EINA_UNUSED, const char *part) _efl_ui_popup_alert_text_content_get(Eo *obj, Efl_Ui_Popup_Alert_Text_Data *pd EINA_UNUSED, const char *part)
{ {
return efl_content_get(efl_part(efl_super(obj, MY_CLASS), part)); return efl_content_get(efl_part(efl_super(obj, MY_CLASS), part));
} }
static Evas_Object * static Eo *
_efl_ui_popup_alert_text_content_unset(Eo *obj, Efl_Ui_Popup_Alert_Text_Data *pd EINA_UNUSED, const char *part) _efl_ui_popup_alert_text_content_unset(Eo *obj, Efl_Ui_Popup_Alert_Text_Data *pd EINA_UNUSED, const char *part)
{ {
return efl_content_unset(efl_part(efl_super(obj, MY_CLASS), part)); return efl_content_unset(efl_part(efl_super(obj, MY_CLASS), part));
@ -70,8 +69,8 @@ _efl_ui_popup_alert_text_text_set(Eo *obj, Efl_Ui_Popup_Alert_Text_Data *pd, con
{ {
pd->message = elm_label_add(obj); pd->message = elm_label_add(obj);
elm_label_line_wrap_set(pd->message, ELM_WRAP_MIXED); elm_label_line_wrap_set(pd->message, ELM_WRAP_MIXED);
evas_object_size_hint_weight_set(pd->message, EVAS_HINT_EXPAND, efl_gfx_size_hint_weight_set(pd->message, EVAS_HINT_EXPAND,
EVAS_HINT_EXPAND); EVAS_HINT_EXPAND);
efl_content_set(efl_part(pd->scroller, "default"), pd->message); efl_content_set(efl_part(pd->scroller, "default"), pd->message);
} }
elm_object_text_set(pd->message, label); elm_object_text_set(pd->message, label);
@ -155,12 +154,6 @@ _efl_ui_popup_alert_text_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Popup_Alert_
efl_canvas_group_del(efl_super(obj, MY_CLASS)); efl_canvas_group_del(efl_super(obj, MY_CLASS));
} }
EOLIAN static void
_efl_ui_popup_alert_text_class_constructor(Efl_Class *klass)
{
evas_smart_legacy_type_register(MY_CLASS_NAME, klass);
}
/* Efl.Part begin */ /* Efl.Part begin */
ELM_PART_OVERRIDE(efl_ui_popup_alert_text, EFL_UI_POPUP_ALERT_TEXT, Efl_Ui_Popup_Alert_Text_Data) ELM_PART_OVERRIDE(efl_ui_popup_alert_text, EFL_UI_POPUP_ALERT_TEXT, Efl_Ui_Popup_Alert_Text_Data)

View File

@ -16,7 +16,6 @@ class Efl.Ui.Popup.Alert.Text(Efl.Ui.Popup.Alert, Efl.Text)
} }
} }
implements { implements {
class.constructor;
Efl.Gfx.Size.Hint.hint_max { set;} Efl.Gfx.Size.Hint.hint_max { set;}
Efl.Text.text { get; set; } Efl.Text.text { get; set; }
Efl.Part.part; Efl.Part.part;

View File

@ -6,10 +6,10 @@
typedef struct _Efl_Ui_Popup_Alert_Text_Data Efl_Ui_Popup_Alert_Text_Data; typedef struct _Efl_Ui_Popup_Alert_Text_Data Efl_Ui_Popup_Alert_Text_Data;
struct _Efl_Ui_Popup_Alert_Text_Data struct _Efl_Ui_Popup_Alert_Text_Data
{ {
Evas_Object *scroller; Eo *scroller;
Evas_Object *message; Eo *message;
Evas_Coord max_scroll_h; Evas_Coord max_scroll_h;
Eina_Bool is_expandable_h; Eina_Bool is_expandable_h : 1;
}; };
#endif #endif

View File

@ -14,26 +14,23 @@
#define MY_CLASS_NAME "Efl.Ui.Popup.Anchor" #define MY_CLASS_NAME "Efl.Ui.Popup.Anchor"
static void static void
_anchor_calc(Evas_Object *obj) _anchor_calc(Eo *obj)
{ {
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
EFL_UI_POPUP_ANCHOR_DATA_GET(obj, sd); EFL_UI_POPUP_ANCHOR_DATA_GET(obj, sd);
Evas_Coord_Rectangle anchor_geom = {0, 0, 0, 0};
Evas_Coord_Size popup_size = {0, 0};
Evas_Coord_Size parent_size = {0, 0};
Eina_Position2D pos = {0, 0}; Eina_Position2D pos = {0, 0};
Evas_Object *parent = efl_provider_find(obj, EFL_UI_WIN_CLASS); Eo *parent = efl_provider_find(obj, EFL_UI_WIN_CLASS);
if (!parent) if (!parent)
{ {
ERR("Cannot find window parent"); ERR("Cannot find window parent");
return; return;
} }
evas_object_geometry_get(sd->anchor, &anchor_geom.x, &anchor_geom.y, &anchor_geom.w, &anchor_geom.h); Eina_Rect a_geom = efl_gfx_geometry_get(sd->anchor);
evas_object_geometry_get(obj, NULL, NULL, &popup_size.w, &popup_size.h); Eina_Rect o_geom = efl_gfx_geometry_get(obj);
evas_object_geometry_get(parent, NULL, NULL, &parent_size.w, &parent_size.h); Eina_Rect p_geom = efl_gfx_geometry_get(parent);
sd->used_align = EFL_UI_POPUP_ALIGN_NONE; sd->used_align = EFL_UI_POPUP_ALIGN_NONE;
@ -58,56 +55,56 @@ _anchor_calc(Evas_Object *obj)
switch(cur_align) switch(cur_align)
{ {
case EFL_UI_POPUP_ALIGN_TOP: case EFL_UI_POPUP_ALIGN_TOP:
pos.x = anchor_geom.x + ((anchor_geom.w - popup_size.w) / 2); pos.x = a_geom.x + ((a_geom.w - o_geom.w) / 2);
pos.y = (anchor_geom.y - popup_size.h); pos.y = (a_geom.y - o_geom.h);
if ((pos.y < 0) || if ((pos.y < 0) ||
((pos.y + popup_size.h) > parent_size.h) || ((pos.y + o_geom.h) > p_geom.h) ||
(popup_size.w > parent_size.w)) (o_geom.w > p_geom.w))
continue; continue;
break; break;
case EFL_UI_POPUP_ALIGN_LEFT: case EFL_UI_POPUP_ALIGN_LEFT:
pos.x = (anchor_geom.x - popup_size.w); pos.x = (a_geom.x - o_geom.w);
pos.y = anchor_geom.y + ((anchor_geom.h - popup_size.h) / 2); pos.y = a_geom.y + ((a_geom.h - o_geom.h) / 2);
if ((pos.x < 0) || if ((pos.x < 0) ||
((pos.x + popup_size.w) > parent_size.w) || ((pos.x + o_geom.w) > p_geom.w) ||
(popup_size.h > parent_size.h)) (o_geom.h > p_geom.h))
continue; continue;
break; break;
case EFL_UI_POPUP_ALIGN_RIGHT: case EFL_UI_POPUP_ALIGN_RIGHT:
pos.x = (anchor_geom.x + anchor_geom.w); pos.x = (a_geom.x + a_geom.w);
pos.y = anchor_geom.y + ((anchor_geom.h - popup_size.h) / 2); pos.y = a_geom.y + ((a_geom.h - o_geom.h) / 2);
if ((pos.x < 0) || if ((pos.x < 0) ||
((pos.x + popup_size.w) > parent_size.w) || ((pos.x + o_geom.w) > p_geom.w) ||
(popup_size.h > parent_size.h)) (o_geom.h > p_geom.h))
continue; continue;
break; break;
case EFL_UI_POPUP_ALIGN_BOTTOM: case EFL_UI_POPUP_ALIGN_BOTTOM:
pos.x = anchor_geom.x + ((anchor_geom.w - popup_size.w) / 2); pos.x = a_geom.x + ((a_geom.w - o_geom.w) / 2);
pos.y = (anchor_geom.y + anchor_geom.h); pos.y = (a_geom.y + a_geom.h);
if ((pos.y < 0) || if ((pos.y < 0) ||
((pos.y + popup_size.h) > parent_size.h) || ((pos.y + o_geom.h) > p_geom.h) ||
(popup_size.w > parent_size.w)) (o_geom.w > p_geom.w))
continue; continue;
break; break;
case EFL_UI_POPUP_ALIGN_CENTER: case EFL_UI_POPUP_ALIGN_CENTER:
pos.x = anchor_geom.x + ((anchor_geom.w - popup_size.w) / 2); pos.x = a_geom.x + ((a_geom.w - o_geom.w) / 2);
pos.y = anchor_geom.y + ((anchor_geom.h - popup_size.h) / 2); pos.y = a_geom.y + ((a_geom.h - o_geom.h) / 2);
if (popup_size.w > parent_size.w || popup_size.h > parent_size.h) if ((o_geom.w > p_geom.w) || (o_geom.h > p_geom.h))
continue; continue;
break; break;
default: default:
continue; continue;
} }
if ((cur_align == EFL_UI_POPUP_ALIGN_TOP) || if ((cur_align == EFL_UI_POPUP_ALIGN_TOP) ||
@ -116,11 +113,11 @@ _anchor_calc(Evas_Object *obj)
{ {
if (pos.x < 0) if (pos.x < 0)
pos.x = 0; pos.x = 0;
if ((pos.x + popup_size.w) > parent_size.w) if ((pos.x + o_geom.w) > p_geom.w)
pos.x = parent_size.w - popup_size.w; pos.x = p_geom.w - o_geom.w;
if ((pos.x > (anchor_geom.x + anchor_geom.w)) || if ((pos.x > (a_geom.x + a_geom.w)) ||
((pos.x + popup_size.w) < anchor_geom.x)) ((pos.x + o_geom.w) < a_geom.x))
continue; continue;
} }
@ -130,11 +127,11 @@ _anchor_calc(Evas_Object *obj)
{ {
if (pos.y < 0) if (pos.y < 0)
pos.y = 0; pos.y = 0;
if ((pos.y + popup_size.h) > parent_size.h) if ((pos.y + o_geom.h) > p_geom.h)
pos.y = parent_size.h - popup_size.h; pos.y = p_geom.h - o_geom.h;
if ((pos.y > (anchor_geom.y + anchor_geom.h)) || if ((pos.y > (a_geom.y + a_geom.h)) ||
((pos.y + popup_size.h) < anchor_geom.y)) ((pos.y + o_geom.h) < a_geom.y))
continue; continue;
} }
@ -146,56 +143,56 @@ _anchor_calc(Evas_Object *obj)
for (int idx = 0; idx < 6; idx++) for (int idx = 0; idx < 6; idx++)
{ {
Efl_Ui_Popup_Align cur_align; Efl_Ui_Popup_Align cur_align;
if (idx == 0) if (idx == 0)
cur_align = sd->align; cur_align = sd->align;
else else
cur_align = sd->priority[idx - 1]; cur_align = sd->priority[idx - 1];
if (cur_align == EFL_UI_POPUP_ALIGN_NONE) if (cur_align == EFL_UI_POPUP_ALIGN_NONE)
continue; continue;
switch(cur_align) switch(cur_align)
{ {
case EFL_UI_POPUP_ALIGN_TOP: case EFL_UI_POPUP_ALIGN_TOP:
pos.x = anchor_geom.x + ((anchor_geom.w - popup_size.w) / 2); pos.x = a_geom.x + ((a_geom.w - o_geom.w) / 2);
pos.y = (anchor_geom.y - popup_size.h); pos.y = (a_geom.y - o_geom.h);
sd->used_align = cur_align; sd->used_align = cur_align;
goto end; goto end;
break; break;
case EFL_UI_POPUP_ALIGN_LEFT: case EFL_UI_POPUP_ALIGN_LEFT:
pos.x = (anchor_geom.x - popup_size.w); pos.x = (a_geom.x - o_geom.w);
pos.y = anchor_geom.y + ((anchor_geom.h - popup_size.h) / 2); pos.y = a_geom.y + ((a_geom.h - o_geom.h) / 2);
sd->used_align = cur_align; sd->used_align = cur_align;
goto end; goto end;
break; break;
case EFL_UI_POPUP_ALIGN_RIGHT: case EFL_UI_POPUP_ALIGN_RIGHT:
pos.x = (anchor_geom.x + anchor_geom.w); pos.x = (a_geom.x + a_geom.w);
pos.y = anchor_geom.y + ((anchor_geom.h - popup_size.h) / 2); pos.y = a_geom.y + ((a_geom.h - o_geom.h) / 2);
sd->used_align = cur_align; sd->used_align = cur_align;
goto end; goto end;
break; break;
case EFL_UI_POPUP_ALIGN_BOTTOM: case EFL_UI_POPUP_ALIGN_BOTTOM:
pos.x = anchor_geom.x + ((anchor_geom.w - popup_size.w) / 2); pos.x = a_geom.x + ((a_geom.w - o_geom.w) / 2);
pos.y = (anchor_geom.y + anchor_geom.h); pos.y = (a_geom.y + a_geom.h);
sd->used_align = cur_align; sd->used_align = cur_align;
goto end; goto end;
break; break;
case EFL_UI_POPUP_ALIGN_CENTER: case EFL_UI_POPUP_ALIGN_CENTER:
pos.x = anchor_geom.x + ((anchor_geom.w - popup_size.w) / 2); pos.x = a_geom.x + ((a_geom.w - o_geom.w) / 2);
pos.y = anchor_geom.y + ((anchor_geom.h - popup_size.h) / 2); pos.y = a_geom.y + ((a_geom.h - o_geom.h) / 2);
sd->used_align = cur_align; sd->used_align = cur_align;
goto end; goto end;
break; break;
default: default:
break; break;
} }
} }
end: end:
@ -214,7 +211,7 @@ _anchor_del_cb(void *data, const Efl_Event *ev EINA_UNUSED)
{ {
EFL_UI_POPUP_ANCHOR_DATA_GET(data, sd); EFL_UI_POPUP_ANCHOR_DATA_GET(data, sd);
Evas_Object *parent = efl_provider_find(data, EFL_UI_WIN_CLASS); Eo *parent = efl_provider_find(data, EFL_UI_WIN_CLASS);
if (!parent) if (!parent)
{ {
ERR("Cannot find window parent"); ERR("Cannot find window parent");
@ -228,13 +225,13 @@ _anchor_del_cb(void *data, const Efl_Event *ev EINA_UNUSED)
} }
static void static void
_anchor_detach(Evas_Object *obj) _anchor_detach(Eo *obj)
{ {
EFL_UI_POPUP_ANCHOR_DATA_GET(obj, sd); EFL_UI_POPUP_ANCHOR_DATA_GET(obj, sd);
if (sd->anchor == NULL) return; if (sd->anchor == NULL) return;
Evas_Object *parent = efl_provider_find(obj, EFL_UI_WIN_CLASS); Eo *parent = efl_provider_find(obj, EFL_UI_WIN_CLASS);
if (!parent) if (!parent)
{ {
ERR("Cannot find window parent"); ERR("Cannot find window parent");
@ -248,20 +245,20 @@ _anchor_detach(Evas_Object *obj)
} }
EOLIAN static void EOLIAN static void
_efl_ui_popup_anchor_anchor_set(Eo *obj, Efl_Ui_Popup_Anchor_Data *pd, Evas_Object *anchor) _efl_ui_popup_anchor_anchor_set(Eo *obj, Efl_Ui_Popup_Anchor_Data *pd, Eo *anchor)
{ {
_anchor_detach(obj); _anchor_detach(obj);
pd->anchor = anchor; pd->anchor = anchor;
if (anchor == NULL) if (anchor == NULL)
efl_ui_popup_align_set(efl_super(obj, MY_CLASS), pd->align); efl_ui_popup_align_set(efl_super(obj, MY_CLASS), pd->align);
else else
{ {
efl_ui_popup_align_set(efl_super(obj, MY_CLASS), EFL_UI_POPUP_ALIGN_NONE); efl_ui_popup_align_set(efl_super(obj, MY_CLASS), EFL_UI_POPUP_ALIGN_NONE);
_anchor_calc(obj); _anchor_calc(obj);
Evas_Object *parent = efl_provider_find(obj, EFL_UI_WIN_CLASS); Eo *parent = efl_provider_find(obj, EFL_UI_WIN_CLASS);
if (!parent) if (!parent)
{ {
ERR("Cannot find window parent"); ERR("Cannot find window parent");
@ -338,9 +335,9 @@ _efl_ui_popup_anchor_efl_ui_popup_align_set(Eo *obj, Efl_Ui_Popup_Anchor_Data *p
{ {
pd->align = type; pd->align = type;
if (pd->anchor == NULL) if (pd->anchor == NULL)
efl_ui_popup_align_set(efl_super(obj, MY_CLASS), type); efl_ui_popup_align_set(efl_super(obj, MY_CLASS), type);
else else
_anchor_calc(obj); _anchor_calc(obj);
} }
EOLIAN static Efl_Ui_Popup_Align EOLIAN static Efl_Ui_Popup_Align
@ -370,12 +367,6 @@ _efl_ui_popup_anchor_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Popup_Anchor_Dat
efl_canvas_group_del(efl_super(obj, MY_CLASS)); efl_canvas_group_del(efl_super(obj, MY_CLASS));
} }
EOLIAN static void
_efl_ui_popup_anchor_class_constructor(Efl_Class *klass)
{
evas_smart_legacy_type_register(MY_CLASS_NAME, klass);
}
#define EFL_UI_POPUP_ANCHOR_EXTRA_OPS \ #define EFL_UI_POPUP_ANCHOR_EXTRA_OPS \
EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_ui_popup_anchor), \ EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_ui_popup_anchor), \
ELM_LAYOUT_SIZING_EVAL_OPS(efl_ui_popup_anchor) ELM_LAYOUT_SIZING_EVAL_OPS(efl_ui_popup_anchor)

View File

@ -33,7 +33,6 @@ class Efl.Ui.Popup.Anchor(Efl.Ui.Popup)
} }
} }
implements { implements {
class.constructor;
Efl.Gfx.position { set; } Efl.Gfx.position { set; }
Efl.Ui.Popup.align { set; get; } Efl.Ui.Popup.align { set; get; }
} }

View File

@ -6,7 +6,7 @@
typedef struct _Efl_Ui_Popup_Anchor_Data Efl_Ui_Popup_Anchor_Data; typedef struct _Efl_Ui_Popup_Anchor_Data Efl_Ui_Popup_Anchor_Data;
struct _Efl_Ui_Popup_Anchor_Data struct _Efl_Ui_Popup_Anchor_Data
{ {
Evas_Object *anchor; Eo *anchor;
Efl_Ui_Popup_Align align; Efl_Ui_Popup_Align align;
Efl_Ui_Popup_Align priority[5]; Efl_Ui_Popup_Align priority[5];
Efl_Ui_Popup_Align used_align; Efl_Ui_Popup_Align used_align;

View File

@ -4,12 +4,12 @@
typedef struct _Efl_Ui_Popup_Data Efl_Ui_Popup_Data; typedef struct _Efl_Ui_Popup_Data Efl_Ui_Popup_Data;
struct _Efl_Ui_Popup_Data struct _Efl_Ui_Popup_Data
{ {
Evas_Object *win_parent; Eo *win_parent;
Evas_Object *event_bg; Eo *event_bg;
Efl_Ui_Popup_Align align; Efl_Ui_Popup_Align align;
Ecore_Timer *timer; Ecore_Timer *timer;
double timeout; double timeout;
Eina_Bool bg_repeat_events : 1; Eina_Bool bg_repeat_events : 1;
}; };
#endif #endif