forked from enlightenment/efl
Eolian: Integration of Hover
This commit is contained in:
parent
c3fecd2782
commit
22287cae27
|
@ -535,7 +535,9 @@ BUILT_SOURCES = \
|
||||||
elm_pan.eo.c \
|
elm_pan.eo.c \
|
||||||
elm_pan.eo.h \
|
elm_pan.eo.h \
|
||||||
elm_frame.eo.c \
|
elm_frame.eo.c \
|
||||||
elm_frame.eo.h
|
elm_frame.eo.h \
|
||||||
|
elm_hover.eo.c \
|
||||||
|
elm_hover.eo.h
|
||||||
|
|
||||||
EXTRA_DIST += \
|
EXTRA_DIST += \
|
||||||
elm_widget.eo \
|
elm_widget.eo \
|
||||||
|
@ -543,7 +545,8 @@ EXTRA_DIST += \
|
||||||
elm_layout.eo \
|
elm_layout.eo \
|
||||||
elm_interface_scrollable.eo \
|
elm_interface_scrollable.eo \
|
||||||
elm_pan.eo \
|
elm_pan.eo \
|
||||||
elm_frame.eo
|
elm_frame.eo \
|
||||||
|
elm_hover.eo
|
||||||
|
|
||||||
nodist_includesunstable_HEADERS = \
|
nodist_includesunstable_HEADERS = \
|
||||||
elm_widget.eo.h \
|
elm_widget.eo.h \
|
||||||
|
@ -551,5 +554,6 @@ nodist_includesunstable_HEADERS = \
|
||||||
elm_layout.eo.h \
|
elm_layout.eo.h \
|
||||||
elm_interface_scrollable.eo.h \
|
elm_interface_scrollable.eo.h \
|
||||||
elm_pan.eo.h \
|
elm_pan.eo.h \
|
||||||
elm_frame.eo.h
|
elm_frame.eo.h \
|
||||||
|
elm_hover.eo.h
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,6 @@
|
||||||
#include "elm_priv.h"
|
#include "elm_priv.h"
|
||||||
#include "elm_widget_hover.h"
|
#include "elm_widget_hover.h"
|
||||||
|
|
||||||
EAPI Eo_Op ELM_OBJ_HOVER_BASE_ID = EO_NOOP;
|
|
||||||
|
|
||||||
#define MY_CLASS ELM_OBJ_HOVER_CLASS
|
#define MY_CLASS ELM_OBJ_HOVER_CLASS
|
||||||
|
|
||||||
#define MY_CLASS_NAME "Elm_Hover"
|
#define MY_CLASS_NAME "Elm_Hover"
|
||||||
|
@ -122,7 +120,7 @@ _elm_hover_parent_detach(Evas_Object *obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_elm_hover_left_space_calc(Elm_Hover_Smart_Data *sd,
|
_elm_hover_left_space_calc(Elm_Hover_Data *sd,
|
||||||
Evas_Coord *spc_l,
|
Evas_Coord *spc_l,
|
||||||
Evas_Coord *spc_t,
|
Evas_Coord *spc_t,
|
||||||
Evas_Coord *spc_r,
|
Evas_Coord *spc_r,
|
||||||
|
@ -145,7 +143,7 @@ _elm_hover_left_space_calc(Elm_Hover_Smart_Data *sd,
|
||||||
}
|
}
|
||||||
|
|
||||||
static Content_Info *
|
static Content_Info *
|
||||||
_elm_hover_smart_content_location_get(Elm_Hover_Smart_Data *sd,
|
_elm_hover_smart_content_location_get(Elm_Hover_Data *sd,
|
||||||
Evas_Coord spc_l,
|
Evas_Coord spc_l,
|
||||||
Evas_Coord spc_t,
|
Evas_Coord spc_t,
|
||||||
Evas_Coord spc_r,
|
Evas_Coord spc_r,
|
||||||
|
@ -279,16 +277,12 @@ _hov_show_do(Evas_Object *obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static Eina_Bool
|
||||||
_elm_hover_smart_theme(Eo *obj, void *_pd, va_list *list)
|
_elm_hover_elm_widget_theme_apply(Eo *obj, Elm_Hover_Data *sd)
|
||||||
{
|
{
|
||||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
|
||||||
if (ret) *ret = EINA_FALSE;
|
|
||||||
Eina_Bool int_ret;
|
Eina_Bool int_ret;
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret));
|
eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret));
|
||||||
if (!int_ret) return;
|
if (!int_ret) return EINA_FALSE;
|
||||||
|
|
||||||
if (sd->smt_sub) _elm_hover_smt_sub_re_eval(obj);
|
if (sd->smt_sub) _elm_hover_smt_sub_re_eval(obj);
|
||||||
|
|
||||||
|
@ -296,16 +290,15 @@ _elm_hover_smart_theme(Eo *obj, void *_pd, va_list *list)
|
||||||
|
|
||||||
if (evas_object_visible_get(obj)) _hov_show_do(obj);
|
if (evas_object_visible_get(obj)) _hov_show_do(obj);
|
||||||
|
|
||||||
if (ret) *ret = EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static void
|
||||||
_elm_hover_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
_elm_hover_elm_layout_sizing_eval(Eo *obj, Elm_Hover_Data *sd)
|
||||||
{
|
{
|
||||||
Evas_Coord ofs_x, x = 0, y = 0, w = 0, h = 0, x2 = 0,
|
Evas_Coord ofs_x, x = 0, y = 0, w = 0, h = 0, x2 = 0,
|
||||||
y2 = 0, w2 = 0, h2 = 0;
|
y2 = 0, w2 = 0, h2 = 0;
|
||||||
|
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
if (sd->on_del) return;
|
if (sd->on_del) return;
|
||||||
|
|
||||||
|
@ -331,40 +324,30 @@ _on_smt_sub_changed(void *data,
|
||||||
_elm_hover_smt_sub_re_eval(data);
|
_elm_hover_smt_sub_re_eval(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static Eina_Bool
|
||||||
_elm_hover_smart_sub_object_add(Eo *obj, void *_pd, va_list *list)
|
_elm_hover_elm_widget_sub_object_add(Eo *obj, Elm_Hover_Data *sd, Evas_Object *sobj)
|
||||||
{
|
{
|
||||||
Evas_Object *sobj = va_arg(*list, Evas_Object *);
|
|
||||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
|
||||||
if (ret) *ret = EINA_FALSE;
|
|
||||||
Eina_Bool int_ret;
|
Eina_Bool int_ret;
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
if (evas_object_data_get(sobj, "elm-parent") == obj)
|
if (evas_object_data_get(sobj, "elm-parent") == obj) return EINA_TRUE;
|
||||||
goto end;
|
|
||||||
|
|
||||||
eo_do_super(obj, MY_CLASS, elm_obj_widget_sub_object_add(sobj, &int_ret));
|
eo_do_super(obj, MY_CLASS, elm_obj_widget_sub_object_add(sobj, &int_ret));
|
||||||
if (!int_ret) return;
|
if (!int_ret) return EINA_FALSE;
|
||||||
|
|
||||||
if (sd->smt_sub && sd->smt_sub->obj == sobj)
|
if (sd->smt_sub && sd->smt_sub->obj == sobj)
|
||||||
evas_object_event_callback_add
|
evas_object_event_callback_add
|
||||||
(sobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _on_smt_sub_changed, obj);
|
(sobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _on_smt_sub_changed, obj);
|
||||||
|
|
||||||
end:
|
return EINA_TRUE;
|
||||||
if (ret) *ret = EINA_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static Eina_Bool
|
||||||
_elm_hover_smart_sub_object_del(Eo *obj, void *_pd, va_list *list)
|
_elm_hover_elm_widget_sub_object_del(Eo *obj, Elm_Hover_Data *sd, Evas_Object *sobj)
|
||||||
{
|
{
|
||||||
Evas_Object *sobj = va_arg(*list, Evas_Object *);
|
|
||||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
|
||||||
if (ret) *ret = EINA_FALSE;
|
|
||||||
Eina_Bool int_ret;
|
Eina_Bool int_ret;
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
eo_do_super(obj, MY_CLASS, elm_obj_widget_sub_object_del(sobj, &int_ret));
|
eo_do_super(obj, MY_CLASS, elm_obj_widget_sub_object_del(sobj, &int_ret));
|
||||||
if (!int_ret) return;
|
if (!int_ret) return EINA_FALSE;
|
||||||
|
|
||||||
if (sd->smt_sub && sd->smt_sub->obj == sobj)
|
if (sd->smt_sub && sd->smt_sub->obj == sobj)
|
||||||
{
|
{
|
||||||
|
@ -387,27 +370,22 @@ _elm_hover_smart_sub_object_del(Eo *obj, void *_pd, va_list *list)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret) *ret = EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_elm_hover_subs_del(Elm_Hover_Smart_Data *sd)
|
_elm_hover_subs_del(Elm_Hover_Data *sd)
|
||||||
{
|
{
|
||||||
ELM_HOVER_PARTS_FOREACH
|
ELM_HOVER_PARTS_FOREACH
|
||||||
ELM_SAFE_FREE(sd->subs[i].obj, evas_object_del);
|
ELM_SAFE_FREE(sd->subs[i].obj, evas_object_del);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static Eina_Bool
|
||||||
_elm_hover_smart_content_set(Eo *obj, void *_pd, va_list *list)
|
_elm_hover_elm_container_content_set(Eo *obj, Elm_Hover_Data *sd, const char *swallow, Evas_Object *content)
|
||||||
{
|
{
|
||||||
const char *swallow= va_arg(*list, const char *);
|
|
||||||
Evas_Object *content = va_arg(*list, Evas_Object *);
|
|
||||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
|
||||||
if (ret) *ret = EINA_FALSE;
|
|
||||||
Eina_Bool int_ret;
|
Eina_Bool int_ret;
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
if (!swallow) return;
|
if (!swallow) return EINA_FALSE;
|
||||||
|
|
||||||
if (!strcmp(swallow, "smart"))
|
if (!strcmp(swallow, "smart"))
|
||||||
{
|
{
|
||||||
|
@ -442,7 +420,7 @@ _elm_hover_smart_content_set(Eo *obj, void *_pd, va_list *list)
|
||||||
}
|
}
|
||||||
|
|
||||||
eo_do_super(obj, MY_CLASS, elm_obj_container_content_set(swallow, content, &int_ret));
|
eo_do_super(obj, MY_CLASS, elm_obj_container_content_set(swallow, content, &int_ret));
|
||||||
if (!int_ret) return;
|
if (!int_ret) return EINA_FALSE;
|
||||||
|
|
||||||
if (strstr(swallow, "elm.swallow.slot."))
|
if (strstr(swallow, "elm.swallow.slot."))
|
||||||
swallow += sizeof("elm.swallow.slot.");
|
swallow += sizeof("elm.swallow.slot.");
|
||||||
|
@ -458,35 +436,31 @@ _elm_hover_smart_content_set(Eo *obj, void *_pd, va_list *list)
|
||||||
|
|
||||||
end:
|
end:
|
||||||
elm_layout_sizing_eval(obj);
|
elm_layout_sizing_eval(obj);
|
||||||
if (ret) *ret = EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static Evas_Object*
|
||||||
_elm_hover_smart_content_get(Eo *obj, void *_pd, va_list *list)
|
_elm_hover_elm_container_content_get(Eo *obj, Elm_Hover_Data *sd, const char *swallow)
|
||||||
{
|
{
|
||||||
const char *swallow = va_arg(*list, const char *);
|
Evas_Object *ret;
|
||||||
Evas_Object **ret = va_arg(*list, Evas_Object **);
|
ret = NULL;
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
*ret = NULL;
|
|
||||||
|
|
||||||
if (!swallow) return;
|
if (!swallow) return ret;
|
||||||
|
|
||||||
if (!strcmp(swallow, "smart"))
|
if (!strcmp(swallow, "smart"))
|
||||||
eo_do_super(obj, MY_CLASS, elm_obj_container_content_get(sd->smt_sub->swallow, ret));
|
eo_do_super(obj, MY_CLASS, elm_obj_container_content_get(sd->smt_sub->swallow, &ret));
|
||||||
else
|
else
|
||||||
eo_do_super(obj, MY_CLASS, elm_obj_container_content_get(swallow, ret));
|
eo_do_super(obj, MY_CLASS, elm_obj_container_content_get(swallow, &ret));
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static Evas_Object*
|
||||||
_elm_hover_smart_content_unset(Eo *obj, void *_pd, va_list *list)
|
_elm_hover_elm_container_content_unset(Eo *obj, Elm_Hover_Data *sd, const char *swallow)
|
||||||
{
|
{
|
||||||
const char *swallow = va_arg(*list, const char *);
|
|
||||||
Evas_Object **ret = va_arg(*list, Evas_Object **);
|
|
||||||
if (ret) *ret = NULL;
|
|
||||||
Evas_Object *int_ret;
|
Evas_Object *int_ret;
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
if (!swallow) return;
|
if (!swallow) return NULL;
|
||||||
|
|
||||||
if (!strcmp(swallow, "smart"))
|
if (!strcmp(swallow, "smart"))
|
||||||
eo_do_super(obj, MY_CLASS, elm_obj_container_content_unset
|
eo_do_super(obj, MY_CLASS, elm_obj_container_content_unset
|
||||||
|
@ -494,7 +468,7 @@ _elm_hover_smart_content_unset(Eo *obj, void *_pd, va_list *list)
|
||||||
else
|
else
|
||||||
eo_do_super(obj, MY_CLASS, elm_obj_container_content_unset
|
eo_do_super(obj, MY_CLASS, elm_obj_container_content_unset
|
||||||
(swallow, &int_ret));
|
(swallow, &int_ret));
|
||||||
if (ret) *ret = int_ret;
|
return int_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -529,10 +503,9 @@ _hov_dismiss_cb(void *data,
|
||||||
evas_object_smart_callback_call(data, SIG_DISMISSED, NULL);
|
evas_object_smart_callback_call(data, SIG_DISMISSED, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static void
|
||||||
_elm_hover_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
_elm_hover_evas_smart_add(Eo *obj, Elm_Hover_Data *priv)
|
||||||
{
|
{
|
||||||
Elm_Hover_Smart_Data *priv = _pd;
|
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
|
||||||
|
@ -561,10 +534,9 @@ _elm_hover_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
||||||
elm_widget_can_focus_set(obj, EINA_FALSE);
|
elm_widget_can_focus_set(obj, EINA_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static void
|
||||||
_elm_hover_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
_elm_hover_evas_smart_del(Eo *obj, Elm_Hover_Data *sd)
|
||||||
{
|
{
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
sd->on_del = EINA_TRUE;
|
sd->on_del = EINA_TRUE;
|
||||||
|
|
||||||
|
@ -582,38 +554,33 @@ _elm_hover_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
||||||
eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static void
|
||||||
_elm_hover_smart_move(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
|
_elm_hover_evas_smart_move(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED, Evas_Coord x, Evas_Coord y)
|
||||||
{
|
{
|
||||||
Evas_Coord x = va_arg(*list, Evas_Coord);
|
|
||||||
Evas_Coord y = va_arg(*list, Evas_Coord);
|
|
||||||
eo_do_super(obj, MY_CLASS, evas_obj_smart_move(x, y));
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_move(x, y));
|
||||||
|
|
||||||
elm_layout_sizing_eval(obj);
|
elm_layout_sizing_eval(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static void
|
||||||
_elm_hover_smart_resize(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
|
_elm_hover_evas_smart_resize(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED, Evas_Coord w, Evas_Coord h)
|
||||||
{
|
{
|
||||||
Evas_Coord w = va_arg(*list, Evas_Coord);
|
|
||||||
Evas_Coord h = va_arg(*list, Evas_Coord);
|
|
||||||
eo_do_super(obj, MY_CLASS, evas_obj_smart_resize(w, h));
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_resize(w, h));
|
||||||
|
|
||||||
elm_layout_sizing_eval(obj);
|
elm_layout_sizing_eval(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static void
|
||||||
_elm_hover_smart_show(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
|
_elm_hover_evas_smart_show(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED)
|
||||||
{
|
{
|
||||||
eo_do_super(obj, MY_CLASS, evas_obj_smart_show());
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_show());
|
||||||
|
|
||||||
_hov_show_do(obj);
|
_hov_show_do(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static void
|
||||||
_elm_hover_smart_hide(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
_elm_hover_evas_smart_hide(Eo *obj, Elm_Hover_Data *sd)
|
||||||
{
|
{
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
eo_do_super(obj, MY_CLASS, evas_obj_smart_hide());
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_hide());
|
||||||
|
|
||||||
elm_layout_signal_emit(obj, "elm,action,hide", "elm");
|
elm_layout_signal_emit(obj, "elm,action,hide", "elm");
|
||||||
|
@ -631,11 +598,10 @@ _elm_hover_smart_hide(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static const Elm_Layout_Part_Alias_Description*
|
||||||
_elm_hover_smart_content_aliases_get(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
_elm_hover_elm_layout_content_aliases_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *_pd EINA_UNUSED)
|
||||||
{
|
{
|
||||||
const Elm_Layout_Part_Alias_Description **aliases = va_arg(*list, const Elm_Layout_Part_Alias_Description **);
|
return _content_aliases;
|
||||||
*aliases = _content_aliases;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Evas_Object *
|
EAPI Evas_Object *
|
||||||
|
@ -647,8 +613,8 @@ elm_hover_add(Evas_Object *parent)
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static void
|
||||||
_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
|
_elm_hover_constructor(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED)
|
||||||
{
|
{
|
||||||
eo_do_super(obj, MY_CLASS, eo_constructor());
|
eo_do_super(obj, MY_CLASS, eo_constructor());
|
||||||
eo_do(obj,
|
eo_do(obj,
|
||||||
|
@ -656,19 +622,9 @@ _constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
|
||||||
evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL));
|
evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EOLIAN static void
|
||||||
elm_hover_target_set(Evas_Object *obj,
|
_elm_hover_target_set(Eo *obj, Elm_Hover_Data *sd, Evas_Object *target)
|
||||||
Evas_Object *target)
|
|
||||||
{
|
{
|
||||||
ELM_HOVER_CHECK(obj);
|
|
||||||
eo_do(obj, elm_obj_hover_target_set(target));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_elm_hover_target_set(Eo *obj, void *_pd, va_list *list)
|
|
||||||
{
|
|
||||||
Evas_Object *target = va_arg(*list, Evas_Object *);
|
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
if (sd->target)
|
if (sd->target)
|
||||||
{
|
{
|
||||||
|
@ -699,12 +655,9 @@ elm_hover_parent_set(Evas_Object *obj,
|
||||||
eo_do(obj, elm_obj_widget_parent_set(parent));
|
eo_do(obj, elm_obj_widget_parent_set(parent));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static void
|
||||||
_elm_hover_smart_parent_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
|
_elm_hover_elm_widget_parent_set(Eo *obj, Elm_Hover_Data *sd, Evas_Object *parent)
|
||||||
{
|
{
|
||||||
Evas_Object *parent = va_arg(*list, Evas_Object *);
|
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
_elm_hover_parent_detach(obj);
|
_elm_hover_parent_detach(obj);
|
||||||
|
|
||||||
sd->parent = parent;
|
sd->parent = parent;
|
||||||
|
@ -725,21 +678,10 @@ _elm_hover_smart_parent_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
|
||||||
elm_layout_sizing_eval(obj);
|
elm_layout_sizing_eval(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Evas_Object *
|
EOLIAN static Evas_Object*
|
||||||
elm_hover_target_get(const Evas_Object *obj)
|
_elm_hover_target_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *sd)
|
||||||
{
|
{
|
||||||
ELM_HOVER_CHECK(obj) NULL;
|
return sd->target;
|
||||||
Evas_Object *ret = NULL;
|
|
||||||
eo_do((Eo *) obj, elm_obj_hover_target_get(&ret));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_elm_hover_target_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|
||||||
{
|
|
||||||
Evas_Object **ret = va_arg(*list, Evas_Object **);
|
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
*ret = sd->target;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Evas_Object *
|
EAPI Evas_Object *
|
||||||
|
@ -751,151 +693,74 @@ elm_hover_parent_get(const Evas_Object *obj)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static Evas_Object*
|
||||||
_elm_hover_smart_parent_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
_elm_hover_elm_widget_parent_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *sd)
|
||||||
{
|
{
|
||||||
Evas_Object **ret = va_arg(*list, Evas_Object **);
|
return sd->parent;
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
*ret = sd->parent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI const char *
|
EOLIAN static const char*
|
||||||
elm_hover_best_content_location_get(const Evas_Object *obj,
|
_elm_hover_best_content_location_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *sd, Elm_Hover_Axis pref_axis)
|
||||||
Elm_Hover_Axis pref_axis)
|
|
||||||
{
|
|
||||||
ELM_HOVER_CHECK(obj) NULL;
|
|
||||||
const char *ret = NULL;
|
|
||||||
eo_do((Eo *) obj, elm_obj_hover_best_content_location_get(pref_axis, &ret));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_elm_hover_best_content_location_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|
||||||
{
|
{
|
||||||
Evas_Coord spc_l, spc_r, spc_t, spc_b;
|
Evas_Coord spc_l, spc_r, spc_t, spc_b;
|
||||||
|
|
||||||
Elm_Hover_Axis pref_axis = va_arg(*list, Elm_Hover_Axis);
|
|
||||||
const char **ret = va_arg(*list, const char **);
|
|
||||||
Elm_Hover_Smart_Data *sd = _pd;
|
|
||||||
|
|
||||||
_elm_hover_left_space_calc(sd, &spc_l, &spc_t, &spc_r, &spc_b);
|
_elm_hover_left_space_calc(sd, &spc_l, &spc_t, &spc_r, &spc_b);
|
||||||
|
|
||||||
if (pref_axis == ELM_HOVER_AXIS_HORIZONTAL)
|
if (pref_axis == ELM_HOVER_AXIS_HORIZONTAL)
|
||||||
{
|
{
|
||||||
if (spc_l < spc_r) *ret = (_HOV_RIGHT)->swallow;
|
if (spc_l < spc_r) return (_HOV_RIGHT)->swallow;
|
||||||
else *ret = (_HOV_LEFT)->swallow;
|
else return (_HOV_LEFT)->swallow;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else if (pref_axis == ELM_HOVER_AXIS_VERTICAL)
|
else if (pref_axis == ELM_HOVER_AXIS_VERTICAL)
|
||||||
{
|
{
|
||||||
if (spc_t < spc_b) *ret = (_HOV_BOTTOM)->swallow;
|
if (spc_t < spc_b) return (_HOV_BOTTOM)->swallow;
|
||||||
else *ret = (_HOV_TOP)->swallow;
|
else return (_HOV_TOP)->swallow;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spc_l < spc_r)
|
if (spc_l < spc_r)
|
||||||
{
|
{
|
||||||
if (spc_t > spc_r)
|
if (spc_t > spc_r)
|
||||||
*ret = (_HOV_TOP)->swallow;
|
return (_HOV_TOP)->swallow;
|
||||||
else if (spc_b > spc_r)
|
else if (spc_b > spc_r)
|
||||||
*ret = (_HOV_BOTTOM)->swallow;
|
return (_HOV_BOTTOM)->swallow;
|
||||||
else
|
else
|
||||||
*ret = (_HOV_RIGHT)->swallow;
|
return (_HOV_RIGHT)->swallow;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spc_t > spc_r)
|
if (spc_t > spc_r)
|
||||||
*ret = (_HOV_TOP)->swallow;
|
return (_HOV_TOP)->swallow;
|
||||||
else if (spc_b > spc_r)
|
else if (spc_b > spc_r)
|
||||||
*ret = (_HOV_BOTTOM)->swallow;
|
return (_HOV_BOTTOM)->swallow;
|
||||||
else
|
else
|
||||||
*ret = (_HOV_LEFT)->swallow;
|
return (_HOV_LEFT)->swallow;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EOLIAN static void
|
||||||
elm_hover_dismiss(Evas_Object *obj)
|
_elm_hover_dismiss(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED)
|
||||||
{
|
|
||||||
ELM_HOVER_CHECK(obj);
|
|
||||||
eo_do(obj, elm_obj_hover_dismiss());
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_elm_hover_dismiss(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
|
|
||||||
{
|
{
|
||||||
elm_layout_signal_emit(obj, "elm,action,dismiss", ""); // XXX: for compat
|
elm_layout_signal_emit(obj, "elm,action,dismiss", ""); // XXX: for compat
|
||||||
elm_layout_signal_emit(obj, "elm,action,dismiss", "elm");
|
elm_layout_signal_emit(obj, "elm,action,dismiss", "elm");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static Eina_Bool
|
||||||
_elm_hover_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
_elm_hover_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Hover_Data *_pd EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
return EINA_TRUE;
|
||||||
*ret = EINA_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
EOLIAN static Eina_Bool
|
||||||
_elm_hover_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
_elm_hover_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Hover_Data *_pd EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
return EINA_TRUE;
|
||||||
*ret = EINA_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_class_constructor(Eo_Class *klass)
|
EOLIAN static void
|
||||||
|
_elm_hover_class_constructor(Eo_Class *klass)
|
||||||
{
|
{
|
||||||
const Eo_Op_Func_Description func_desc[] = {
|
|
||||||
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
|
|
||||||
|
|
||||||
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_hover_smart_add),
|
|
||||||
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_hover_smart_del),
|
|
||||||
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_RESIZE), _elm_hover_smart_resize),
|
|
||||||
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MOVE), _elm_hover_smart_move),
|
|
||||||
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_SHOW), _elm_hover_smart_show),
|
|
||||||
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_HIDE), _elm_hover_smart_hide),
|
|
||||||
|
|
||||||
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_hover_smart_theme),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_SUB_OBJECT_ADD), _elm_hover_smart_sub_object_add),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_SUB_OBJECT_DEL), _elm_hover_smart_sub_object_del),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_PARENT_SET), _elm_hover_smart_parent_set),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_PARENT_GET), _elm_hover_smart_parent_get),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS), _elm_hover_smart_focus_next_manager_is),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS), _elm_hover_smart_focus_direction_manager_is),
|
|
||||||
|
|
||||||
EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_SET), _elm_hover_smart_content_set),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_GET), _elm_hover_smart_content_get),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_UNSET), _elm_hover_smart_content_unset),
|
|
||||||
|
|
||||||
EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL), _elm_hover_smart_sizing_eval),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_CONTENT_ALIASES_GET), _elm_hover_smart_content_aliases_get),
|
|
||||||
|
|
||||||
EO_OP_FUNC(ELM_OBJ_HOVER_ID(ELM_OBJ_HOVER_SUB_ID_TARGET_SET), _elm_hover_target_set),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_HOVER_ID(ELM_OBJ_HOVER_SUB_ID_TARGET_GET), _elm_hover_target_get),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_HOVER_ID(ELM_OBJ_HOVER_SUB_ID_BEST_CONTENT_LOCATION_GET), _elm_hover_best_content_location_get),
|
|
||||||
EO_OP_FUNC(ELM_OBJ_HOVER_ID(ELM_OBJ_HOVER_SUB_ID_DISMISS), _elm_hover_dismiss),
|
|
||||||
EO_OP_FUNC_SENTINEL
|
|
||||||
};
|
|
||||||
eo_class_funcs_set(klass, func_desc);
|
|
||||||
|
|
||||||
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
|
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const Eo_Op_Description op_desc[] = {
|
#include "elm_hover.eo.c"
|
||||||
EO_OP_DESCRIPTION(ELM_OBJ_HOVER_SUB_ID_TARGET_SET, "Sets the target object for the hover."),
|
|
||||||
EO_OP_DESCRIPTION(ELM_OBJ_HOVER_SUB_ID_TARGET_GET, "Get the target object for the hover."),
|
|
||||||
EO_OP_DESCRIPTION(ELM_OBJ_HOVER_SUB_ID_BEST_CONTENT_LOCATION_GET, "Returns the best swallow location for content in the hover."),
|
|
||||||
EO_OP_DESCRIPTION(ELM_OBJ_HOVER_SUB_ID_DISMISS, "Dismiss a hover object."),
|
|
||||||
EO_OP_DESCRIPTION_SENTINEL
|
|
||||||
};
|
|
||||||
|
|
||||||
static const Eo_Class_Description class_desc = {
|
|
||||||
EO_VERSION,
|
|
||||||
MY_CLASS_NAME,
|
|
||||||
EO_CLASS_TYPE_REGULAR,
|
|
||||||
EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_HOVER_BASE_ID, op_desc, ELM_OBJ_HOVER_SUB_ID_LAST),
|
|
||||||
NULL,
|
|
||||||
sizeof(Elm_Hover_Smart_Data),
|
|
||||||
_class_constructor,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
EO_DEFINE_CLASS(elm_obj_hover_class_get, &class_desc, ELM_OBJ_LAYOUT_CLASS, EVAS_SMART_CLICKABLE_INTERFACE, NULL);
|
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
class Elm_Hover (Elm_Layout, Evas_Clickable_Interface)
|
||||||
|
{
|
||||||
|
eo_prefix: elm_obj_hover;
|
||||||
|
properties {
|
||||||
|
target {
|
||||||
|
set {
|
||||||
|
/*@
|
||||||
|
@brief Sets the target object for the hover.
|
||||||
|
|
||||||
|
This function will cause the hover to be centered on the target object.
|
||||||
|
|
||||||
|
@ingroup Hover */
|
||||||
|
}
|
||||||
|
get {
|
||||||
|
/*@
|
||||||
|
@brief Get the target object for the hover.
|
||||||
|
|
||||||
|
@return The target object for the hover.
|
||||||
|
|
||||||
|
@see elm_hover_target_set()
|
||||||
|
|
||||||
|
@ingroup Hover */
|
||||||
|
}
|
||||||
|
values {
|
||||||
|
Evas_Object *target; /*@ The object to center the hover onto. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
methods {
|
||||||
|
best_content_location_get {
|
||||||
|
/*@
|
||||||
|
@brief Returns the best swallow location for content in the hover.
|
||||||
|
|
||||||
|
@return The edje location to place content into the hover or @c
|
||||||
|
NULL, on errors.
|
||||||
|
|
||||||
|
Best is defined here as the location at which there is the most available
|
||||||
|
space.
|
||||||
|
|
||||||
|
@p pref_axis may be one of
|
||||||
|
- @c ELM_HOVER_AXIS_NONE -- no preferred orientation
|
||||||
|
- @c ELM_HOVER_AXIS_HORIZONTAL -- horizontal
|
||||||
|
- @c ELM_HOVER_AXIS_VERTICAL -- vertical
|
||||||
|
- @c ELM_HOVER_AXIS_BOTH -- both
|
||||||
|
|
||||||
|
If ELM_HOVER_AXIS_HORIZONTAL is chosen the returned position will
|
||||||
|
necessarily be along the horizontal axis("left" or "right"). If
|
||||||
|
ELM_HOVER_AXIS_VERTICAL is chosen the returned position will necessarily
|
||||||
|
be along the vertical axis("top" or "bottom"). Choosing
|
||||||
|
ELM_HOVER_AXIS_BOTH or ELM_HOVER_AXIS_NONE has the same effect and the
|
||||||
|
returned position may be in either axis.
|
||||||
|
|
||||||
|
@see elm_object_part_content_set()
|
||||||
|
|
||||||
|
@ingroup Hover */
|
||||||
|
|
||||||
|
const;
|
||||||
|
return const char *;
|
||||||
|
params {
|
||||||
|
@in Elm_Hover_Axis pref_axis; /*@ The preferred orientation axis for the hover object to use */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dismiss {
|
||||||
|
/*@
|
||||||
|
@brief Dismiss a hover object
|
||||||
|
|
||||||
|
@ingroup Hover */
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
implements {
|
||||||
|
class::constructor;
|
||||||
|
Eo_Base::constructor;
|
||||||
|
Evas_Smart::del;
|
||||||
|
Evas_Smart::hide;
|
||||||
|
Evas_Smart::show;
|
||||||
|
Evas_Smart::move;
|
||||||
|
Evas_Smart::add;
|
||||||
|
Evas_Smart::resize;
|
||||||
|
Elm_Widget::theme_apply;
|
||||||
|
Elm_Widget::sub_object_add;
|
||||||
|
Elm_Widget::parent;
|
||||||
|
Elm_Widget::focus_direction_manager_is;
|
||||||
|
Elm_Widget::focus_next_manager_is;
|
||||||
|
Elm_Widget::sub_object_del;
|
||||||
|
Elm_Container::content_get;
|
||||||
|
Elm_Container::content_set;
|
||||||
|
Elm_Container::content_unset;
|
||||||
|
Elm_Layout::sizing_eval;
|
||||||
|
Elm_Layout::content_aliases::get;
|
||||||
|
}
|
||||||
|
events {
|
||||||
|
focused;
|
||||||
|
unfocused;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,3 +1,6 @@
|
||||||
|
#include "elm_hover.eo.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
#define ELM_OBJ_HOVER_CLASS elm_obj_hover_class_get()
|
#define ELM_OBJ_HOVER_CLASS elm_obj_hover_class_get()
|
||||||
|
|
||||||
const Eo_Class *elm_obj_hover_class_get(void) EINA_CONST;
|
const Eo_Class *elm_obj_hover_class_get(void) EINA_CONST;
|
||||||
|
@ -69,3 +72,6 @@ const Eo_Class *elm_obj_hover_class_get(void) EINA_CONST;
|
||||||
* @see elm_hover_dismiss
|
* @see elm_hover_dismiss
|
||||||
*/
|
*/
|
||||||
#define elm_obj_hover_dismiss() ELM_OBJ_HOVER_ID(ELM_OBJ_HOVER_SUB_ID_DISMISS)
|
#define elm_obj_hover_dismiss() ELM_OBJ_HOVER_ID(ELM_OBJ_HOVER_SUB_ID_DISMISS)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
/**
|
/**
|
||||||
* Base widget smart data extended with hover instance data.
|
* Base widget smart data extended with hover instance data.
|
||||||
*/
|
*/
|
||||||
typedef struct _Elm_Hover_Smart_Data Elm_Hover_Smart_Data;
|
typedef struct _Elm_Hover_Data Elm_Hover_Data;
|
||||||
typedef struct _Content_Info Content_Info;
|
typedef struct _Content_Info Content_Info;
|
||||||
|
|
||||||
struct _Content_Info
|
struct _Content_Info
|
||||||
|
@ -30,7 +30,7 @@ struct _Content_Info
|
||||||
/* WARNING: sync size with actual declaration, always */
|
/* WARNING: sync size with actual declaration, always */
|
||||||
extern const Elm_Layout_Part_Alias_Description _content_aliases[10];
|
extern const Elm_Layout_Part_Alias_Description _content_aliases[10];
|
||||||
|
|
||||||
struct _Elm_Hover_Smart_Data
|
struct _Elm_Hover_Data
|
||||||
{
|
{
|
||||||
Evas_Object *offset, *size;
|
Evas_Object *offset, *size;
|
||||||
Evas_Object *parent, *target;
|
Evas_Object *parent, *target;
|
||||||
|
@ -47,7 +47,7 @@ struct _Elm_Hover_Smart_Data
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ELM_HOVER_DATA_GET(o, sd) \
|
#define ELM_HOVER_DATA_GET(o, sd) \
|
||||||
Elm_Hover_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_HOVER_CLASS)
|
Elm_Hover_Data * sd = eo_data_scope_get(o, ELM_OBJ_HOVER_CLASS)
|
||||||
|
|
||||||
#define ELM_HOVER_DATA_GET_OR_RETURN(o, ptr) \
|
#define ELM_HOVER_DATA_GET_OR_RETURN(o, ptr) \
|
||||||
ELM_HOVER_DATA_GET(o, ptr); \
|
ELM_HOVER_DATA_GET(o, ptr); \
|
||||||
|
|
Loading…
Reference in New Issue