forked from enlightenment/efl
Introduce efl_ui_scroll_util files.
Summary: this brings API that connects the theme to the object. This reduces the amount of code that you need to write in order to develop a widget that can be scrollable. For now efl_ui_grid and efl_ui_scroller are replaced with it. efl_ui_list / efl_ui_list_view are not handeled with this, as they will be replaced with newer widgets. Right now this is only avaiable in the C API. However, wrapping this into a mixin should be easy. Reviewers: zmike, segfaultxavi Reviewed By: zmike Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D9245
This commit is contained in:
parent
70a3b71aba
commit
d76d5db5cb
|
@ -263,138 +263,6 @@ _item_scroll_internal(Eo *obj,
|
|||
efl_ui_scrollable_scroll(pd->smanager, ipos, anim);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_bar_read_and_update(Eo *obj)
|
||||
{
|
||||
EFL_UI_GRID_DATA_GET_OR_RETURN(obj, pd);
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||
double vx = 0.0, vy = 0.0;
|
||||
|
||||
edje_object_part_drag_value_get
|
||||
(wd->resize_obj, "efl.dragable.vbar", NULL, &vy);
|
||||
|
||||
edje_object_part_drag_value_get
|
||||
(wd->resize_obj, "efl.dragable.hbar", &vx, NULL);
|
||||
|
||||
efl_ui_scrollbar_bar_position_set(pd->smanager, vx, vy);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_reload_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Eo *list = data;
|
||||
EFL_UI_GRID_DATA_GET_OR_RETURN(list, pd);
|
||||
|
||||
efl_ui_scrollbar_bar_visibility_update(pd->smanager);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_vbar_drag_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
_efl_ui_grid_bar_read_and_update(data);
|
||||
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_DRAG, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_vbar_press_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_PRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_vbar_unpress_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_UNPRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_edje_drag_start_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Eo *list = data;
|
||||
EFL_UI_GRID_DATA_GET_OR_RETURN(list, pd);
|
||||
|
||||
_efl_ui_grid_bar_read_and_update(list);
|
||||
|
||||
pd->freeze_want = efl_ui_scrollable_scroll_freeze_get(pd->smanager);
|
||||
efl_ui_scrollable_scroll_freeze_set(pd->smanager, EINA_TRUE);
|
||||
efl_event_callback_call(list, EFL_UI_EVENT_SCROLL_DRAG_START, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_edje_drag_stop_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Eo *list = data;
|
||||
EFL_UI_GRID_DATA_GET_OR_RETURN(list, pd);
|
||||
|
||||
_efl_ui_grid_bar_read_and_update(list);
|
||||
|
||||
efl_ui_scrollable_scroll_freeze_set(pd->smanager, pd->freeze_want);
|
||||
efl_event_callback_call(list, EFL_UI_EVENT_SCROLL_DRAG_STOP, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_edje_drag_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
_efl_ui_grid_bar_read_and_update(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_hbar_drag_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
_efl_ui_grid_bar_read_and_update(data);
|
||||
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_DRAG, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_hbar_press_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_PRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_hbar_unpress_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_UNPRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_bar_size_changed_cb(void *data, const Efl_Event *event EINA_UNUSED)
|
||||
{
|
||||
|
@ -452,90 +320,6 @@ _efl_ui_grid_bar_hide_cb(void *data, const Efl_Event *event)
|
|||
edje_object_signal_emit(wd->resize_obj, "efl,action,hide,vbar", "efl");
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_edje_object_attach(Eo *obj)
|
||||
{
|
||||
EFL_UI_GRID_DATA_GET_OR_RETURN(obj, pd);
|
||||
|
||||
efl_layout_signal_callback_add(obj, "reload", "efl",
|
||||
obj, _efl_ui_grid_reload_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_vbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,set", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,start", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,stop", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,step", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,page", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "efl,vbar,press", "efl",
|
||||
obj, _efl_ui_grid_vbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "efl,vbar,unpress", "efl",
|
||||
obj, _efl_ui_grid_vbar_unpress_cb, NULL);
|
||||
|
||||
efl_layout_signal_callback_add(obj, "drag", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_hbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,set", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,start", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,stop", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,step", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,page", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "efl,hbar,press", "efl",
|
||||
obj, _efl_ui_grid_hbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "efl,hbar,unpress", "efl",
|
||||
obj, _efl_ui_grid_hbar_unpress_cb, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_edje_object_detach(Eo *obj)
|
||||
{
|
||||
EFL_UI_GRID_DATA_GET_OR_RETURN(obj, pd);
|
||||
|
||||
efl_layout_signal_callback_del(obj, "reload", "efl",
|
||||
obj, _efl_ui_grid_reload_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_vbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,set", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,start", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,stop", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,step", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,page", "efl.dragable.vbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "efl,vbar,press", "efl",
|
||||
obj, _efl_ui_grid_vbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "efl,vbar,unpress", "efl",
|
||||
obj, _efl_ui_grid_vbar_unpress_cb, NULL);
|
||||
|
||||
efl_layout_signal_callback_del(obj, "drag", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_hbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,set", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,start", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,stop", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,step", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,page", "efl.dragable.hbar",
|
||||
obj, _efl_ui_grid_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "efl,hbar,press", "efl",
|
||||
obj, _efl_ui_grid_hbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "efl,hbar,unpress", "efl",
|
||||
obj, _efl_ui_grid_hbar_unpress_cb, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_grid_content_moved_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
|
@ -608,7 +392,7 @@ _efl_ui_grid_efl_object_finalize(Eo *obj,
|
|||
pd->item.size.h = 1;
|
||||
}
|
||||
|
||||
_scroll_edje_object_attach(obj);
|
||||
efl_ui_scroll_connector_bind(obj, pd->smanager);
|
||||
|
||||
//FIXME: Workaround code! fake Content for pan resize.
|
||||
// to remove this code, we need to customize pan class.
|
||||
|
@ -642,7 +426,7 @@ _efl_ui_grid_efl_object_finalize(Eo *obj,
|
|||
EOLIAN static void
|
||||
_efl_ui_grid_efl_object_invalidate(Eo *obj, Efl_Ui_Grid_Data *pd)
|
||||
{
|
||||
_scroll_edje_object_detach(obj);
|
||||
efl_ui_scroll_connector_unbind(obj);
|
||||
|
||||
efl_event_callback_del(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SIZE_CHANGED,
|
||||
_efl_ui_grid_bar_size_changed_cb, obj);
|
||||
|
|
|
@ -0,0 +1,329 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
#include "elementary_config.h"
|
||||
#endif
|
||||
#define EFL_UI_SCROLL_MANAGER_PROTECTED
|
||||
#define EFL_UI_SCROLLBAR_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
#include <Efl_Ui.h>
|
||||
#include "elm_priv.h"
|
||||
|
||||
typedef struct {
|
||||
Eo *obj;
|
||||
Eo *smanager;
|
||||
int freeze_want;
|
||||
} Scroll_Connector_Context;
|
||||
|
||||
static void
|
||||
_scroll_connector_bar_read_and_update(Scroll_Connector_Context *ctx)
|
||||
{
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(ctx->obj, wd);
|
||||
double vx = 0.0, vy = 0.0;
|
||||
|
||||
edje_object_part_drag_value_get
|
||||
(wd->resize_obj, "efl.dragable.vbar", NULL, &vy);
|
||||
|
||||
edje_object_part_drag_value_get
|
||||
(wd->resize_obj, "efl.dragable.hbar", &vx, NULL);
|
||||
|
||||
efl_ui_scrollbar_bar_position_set(ctx->smanager, vx, vy);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_reload_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
|
||||
efl_ui_scrollbar_bar_visibility_update(ctx->smanager);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_scroll_connector_edje_drag_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
|
||||
_scroll_connector_bar_read_and_update(ctx);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_edje_drag_start_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
|
||||
_scroll_connector_bar_read_and_update(ctx);
|
||||
|
||||
ctx->freeze_want = efl_ui_scrollable_scroll_freeze_get(ctx->smanager);
|
||||
efl_ui_scrollable_scroll_freeze_set(ctx->smanager, EINA_TRUE);
|
||||
efl_event_callback_call(ctx->obj, EFL_UI_EVENT_SCROLL_DRAG_START, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_edje_drag_stop_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
|
||||
_scroll_connector_bar_read_and_update(ctx);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(ctx->freeze_want == -1);
|
||||
efl_ui_scrollable_scroll_freeze_set(ctx->smanager, ctx->freeze_want);
|
||||
ctx->freeze_want = -1;
|
||||
efl_event_callback_call(ctx->obj, EFL_UI_EVENT_SCROLL_DRAG_STOP, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_vbar_drag_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
Efl_Ui_Scrollbar_Direction type;
|
||||
|
||||
_scroll_connector_bar_read_and_update(ctx);
|
||||
|
||||
type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL;
|
||||
efl_event_callback_call(ctx->obj, EFL_UI_SCROLLBAR_EVENT_BAR_DRAG, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_vbar_press_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL;
|
||||
|
||||
efl_event_callback_call(ctx->obj, EFL_UI_SCROLLBAR_EVENT_BAR_PRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_vbar_unpress_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL;
|
||||
|
||||
efl_event_callback_call(ctx->obj, EFL_UI_SCROLLBAR_EVENT_BAR_UNPRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_hbar_drag_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL;
|
||||
|
||||
_scroll_connector_bar_read_and_update(ctx);
|
||||
efl_event_callback_call(ctx->obj, EFL_UI_SCROLLBAR_EVENT_BAR_DRAG, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_hbar_press_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL;
|
||||
|
||||
efl_event_callback_call(ctx->obj, EFL_UI_SCROLLBAR_EVENT_BAR_PRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_hbar_unpress_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL;
|
||||
|
||||
efl_event_callback_call(ctx->obj, EFL_UI_SCROLLBAR_EVENT_BAR_UNPRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_bar_size_changed_cb(void *data, const Efl_Event *event EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(ctx->obj, wd);
|
||||
|
||||
double width = 0.0, height = 0.0;
|
||||
|
||||
edje_object_calc_force(wd->resize_obj);
|
||||
efl_ui_scrollbar_bar_size_get(ctx->smanager, &width, &height);
|
||||
edje_object_part_drag_size_set(wd->resize_obj, "efl.dragable.hbar", width, 1.0);
|
||||
edje_object_part_drag_size_set(wd->resize_obj, "efl.dragable.vbar", 1.0, height);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_bar_pos_changed_cb(void *data, const Efl_Event *event EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(ctx->obj, wd);
|
||||
|
||||
double posx = 0.0, posy = 0.0;
|
||||
|
||||
efl_ui_scrollbar_bar_position_get(ctx->smanager, &posx, &posy);
|
||||
edje_object_part_drag_value_set(wd->resize_obj, "efl.dragable.hbar", posx, 0.0);
|
||||
edje_object_part_drag_value_set(wd->resize_obj, "efl.dragable.vbar", 0.0, posy);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_bar_show_cb(void *data, const Efl_Event *event)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(ctx->obj, wd);
|
||||
Efl_Ui_Scrollbar_Direction type = *(Efl_Ui_Scrollbar_Direction *)(event->info);
|
||||
|
||||
if (type == EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL)
|
||||
efl_layout_signal_emit(wd->resize_obj, "efl,action,show,hbar", "efl");
|
||||
else if (type == EFL_UI_SCROLLBAR_DIRECTION_VERTICAL)
|
||||
efl_layout_signal_emit(wd->resize_obj, "efl,action,show,vbar", "efl");
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_bar_hide_cb(void *data, const Efl_Event *event)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(ctx->obj, wd);
|
||||
Efl_Ui_Scrollbar_Direction type = *(Efl_Ui_Scrollbar_Direction *)(event->info);
|
||||
|
||||
if (type == EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL)
|
||||
efl_layout_signal_emit(wd->resize_obj, "efl,action,hide,hbar", "efl");
|
||||
else if (type == EFL_UI_SCROLLBAR_DIRECTION_VERTICAL)
|
||||
efl_layout_signal_emit(wd->resize_obj, "efl,action,hide,vbar", "efl");
|
||||
}
|
||||
static void
|
||||
_scroll_connector_resized_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
elm_layout_sizing_eval(ctx->obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_connector_size_hint_changed_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = data;
|
||||
elm_layout_sizing_eval(ctx->obj);
|
||||
}
|
||||
|
||||
void
|
||||
efl_ui_scroll_connector_bind(Eo *obj, Eo *manager)
|
||||
{
|
||||
Scroll_Connector_Context *ctx = calloc(1, sizeof(Scroll_Connector_Context));
|
||||
ctx->obj = obj;
|
||||
ctx->smanager = manager;
|
||||
efl_key_data_set(obj, "__context", ctx);
|
||||
|
||||
//from the theme to the object
|
||||
efl_layout_signal_callback_add(obj, "reload", "efl",
|
||||
ctx, _scroll_connector_reload_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_vbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,set", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,start", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,stop", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,step", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,page", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "efl,vbar,press", "efl",
|
||||
ctx, _scroll_connector_vbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "efl,vbar,unpress", "efl",
|
||||
ctx, _scroll_connector_vbar_unpress_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_hbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,set", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,start", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,stop", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,step", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "drag,page", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "efl,hbar,press", "efl",
|
||||
ctx, _scroll_connector_hbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_add(obj, "efl,hbar,unpress", "efl",
|
||||
ctx, _scroll_connector_hbar_unpress_cb, NULL);
|
||||
//from the object to the theme
|
||||
efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SIZE_CHANGED,
|
||||
_scroll_connector_bar_size_changed_cb, ctx);
|
||||
efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_POS_CHANGED,
|
||||
_scroll_connector_bar_pos_changed_cb, ctx);
|
||||
efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SHOW,
|
||||
_scroll_connector_bar_show_cb, ctx);
|
||||
efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_HIDE,
|
||||
_scroll_connector_bar_hide_cb, ctx);
|
||||
efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED,
|
||||
_scroll_connector_resized_cb, ctx);
|
||||
efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_HINTS_CHANGED,
|
||||
_scroll_connector_size_hint_changed_cb, ctx);
|
||||
}
|
||||
|
||||
void
|
||||
efl_ui_scroll_connector_unbind(Eo *obj)
|
||||
{
|
||||
Scroll_Connector_Context *ctx;
|
||||
|
||||
ctx = efl_key_data_get(obj, "__context");
|
||||
EINA_SAFETY_ON_NULL_RETURN(ctx);
|
||||
|
||||
efl_layout_signal_callback_del(obj, "reload", "efl",
|
||||
ctx, _scroll_connector_reload_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_vbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,set", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,start", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,stop", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,step", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,page", "efl.dragable.vbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "efl,vbar,press", "efl",
|
||||
ctx, _scroll_connector_vbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "efl,vbar,unpress", "efl",
|
||||
ctx, _scroll_connector_vbar_unpress_cb, NULL);
|
||||
|
||||
efl_layout_signal_callback_del(obj, "drag", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_hbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,set", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,start", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,stop", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,step", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "drag,page", "efl.dragable.hbar",
|
||||
ctx, _scroll_connector_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "efl,hbar,press", "efl",
|
||||
ctx, _scroll_connector_hbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_del(obj, "efl,hbar,unpress", "efl",
|
||||
ctx, _scroll_connector_hbar_unpress_cb, NULL);
|
||||
free(ctx);
|
||||
}
|
|
@ -211,329 +211,12 @@ _efl_ui_scroller_efl_content_content_unset(Eo *obj EINA_UNUSED, Efl_Ui_Scroller_
|
|||
return old_content;
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_bar_read_and_update(Eo *obj)
|
||||
{
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, sd);
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||
double vx, vy;
|
||||
|
||||
edje_object_part_drag_value_get
|
||||
(wd->resize_obj, "efl.dragable.vbar", NULL, &vy);
|
||||
edje_object_part_drag_value_get
|
||||
(wd->resize_obj, "efl.dragable.hbar", &vx, NULL);
|
||||
|
||||
efl_ui_scrollbar_bar_position_set(sd->smanager, vx, vy);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_reload_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Eo *scroller = data;
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(scroller, sd);
|
||||
|
||||
efl_ui_scrollbar_bar_visibility_update(sd->smanager);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_vbar_drag_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
_efl_ui_scroller_bar_read_and_update(data);
|
||||
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_DRAG, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_vbar_press_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_PRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_vbar_unpress_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_VERTICAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_UNPRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_edje_drag_start_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Eo *scroller = data;
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(scroller, sd);
|
||||
|
||||
_efl_ui_scroller_bar_read_and_update(scroller);
|
||||
|
||||
sd->freeze_want = efl_ui_scrollable_scroll_freeze_get(sd->smanager);
|
||||
efl_ui_scrollable_scroll_freeze_set(sd->smanager, EINA_TRUE);
|
||||
efl_event_callback_call(scroller, EFL_UI_EVENT_SCROLL_DRAG_START, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_edje_drag_stop_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Eo *scroller = data;
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(scroller, sd);
|
||||
|
||||
_efl_ui_scroller_bar_read_and_update(scroller);
|
||||
|
||||
efl_ui_scrollable_scroll_freeze_set(sd->smanager, sd->freeze_want);
|
||||
efl_event_callback_call(scroller, EFL_UI_EVENT_SCROLL_DRAG_STOP, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_edje_drag_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
_efl_ui_scroller_bar_read_and_update(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_hbar_drag_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
_efl_ui_scroller_bar_read_and_update(data);
|
||||
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_DRAG, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_hbar_press_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_PRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_hbar_unpress_cb(void *data,
|
||||
Evas_Object *obj EINA_UNUSED,
|
||||
const char *emission EINA_UNUSED,
|
||||
const char *source EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Scrollbar_Direction type = EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL;
|
||||
efl_event_callback_call(data, EFL_UI_SCROLLBAR_EVENT_BAR_UNPRESS, &type);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_bar_size_changed_cb(void *data, const Efl_Event *event EINA_UNUSED)
|
||||
{
|
||||
Eo *obj = data;
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, sd);
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||
|
||||
double width = 0.0, height = 0.0;
|
||||
|
||||
edje_object_calc_force(wd->resize_obj);
|
||||
efl_ui_scrollbar_bar_size_get(sd->smanager, &width, &height);
|
||||
edje_object_part_drag_size_set(wd->resize_obj, "efl.dragable.hbar", width, 1.0);
|
||||
edje_object_part_drag_size_set(wd->resize_obj, "efl.dragable.vbar", 1.0, height);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_bar_pos_changed_cb(void *data, const Efl_Event *event EINA_UNUSED)
|
||||
{
|
||||
Eo *obj = data;
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, sd);
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||
|
||||
double posx = 0.0, posy = 0.0;
|
||||
|
||||
efl_ui_scrollbar_bar_position_get(sd->smanager, &posx, &posy);
|
||||
edje_object_part_drag_value_set(wd->resize_obj, "efl.dragable.hbar", posx, 0.0);
|
||||
edje_object_part_drag_value_set(wd->resize_obj, "efl.dragable.vbar", 0.0, posy);
|
||||
edje_object_signal_emit(wd->resize_obj, "efl,action,scroll", "efl");
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_bar_show_cb(void *data, const Efl_Event *event)
|
||||
{
|
||||
Eo *obj = data;
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, sd);
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||
Efl_Ui_Scrollbar_Direction type = *(Efl_Ui_Scrollbar_Direction *)(event->info);
|
||||
|
||||
if (type == EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL)
|
||||
edje_object_signal_emit(wd->resize_obj, "efl,action,show,hbar", "efl");
|
||||
else if (type == EFL_UI_SCROLLBAR_DIRECTION_VERTICAL)
|
||||
edje_object_signal_emit(wd->resize_obj, "efl,action,show,vbar", "efl");
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_bar_hide_cb(void *data, const Efl_Event *event)
|
||||
{
|
||||
Eo *obj = data;
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, sd);
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||
Efl_Ui_Scrollbar_Direction type = *(Efl_Ui_Scrollbar_Direction *)(event->info);
|
||||
|
||||
if (type == EFL_UI_SCROLLBAR_DIRECTION_HORIZONTAL)
|
||||
edje_object_signal_emit(wd->resize_obj, "efl,action,hide,hbar", "efl");
|
||||
else if (type == EFL_UI_SCROLLBAR_DIRECTION_VERTICAL)
|
||||
edje_object_signal_emit(wd->resize_obj, "efl,action,hide,vbar", "efl");
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_edje_object_attach(Eo *obj)
|
||||
{
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, sd);
|
||||
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "reload", "efl",
|
||||
obj, _efl_ui_scroller_reload_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_vbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,set", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,start", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,stop", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,step", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,page", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "efl,vbar,press", "efl",
|
||||
obj, _efl_ui_scroller_vbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "efl,vbar,unpress", "efl",
|
||||
obj, _efl_ui_scroller_vbar_unpress_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_hbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,set", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,start", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,stop", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,step", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "drag,page", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "efl,hbar,press", "efl",
|
||||
obj, _efl_ui_scroller_hbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_add
|
||||
(obj, "efl,hbar,unpress", "efl",
|
||||
obj, _efl_ui_scroller_hbar_unpress_cb, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_edje_object_detach(Evas_Object *obj)
|
||||
{
|
||||
EFL_UI_SCROLLER_DATA_GET_OR_RETURN(obj, sd);
|
||||
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "reload", "efl",
|
||||
obj, _efl_ui_scroller_reload_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_vbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,set", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,start", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,stop", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,step", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,page", "efl.dragable.vbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "efl,vbar,press", "efl",
|
||||
obj, _efl_ui_scroller_vbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "efl,vbar,unpress", "efl",
|
||||
obj, _efl_ui_scroller_vbar_unpress_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_hbar_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,set", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,start", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_start_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,stop", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_stop_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,step", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "drag,page", "efl.dragable.hbar",
|
||||
obj, _efl_ui_scroller_edje_drag_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "efl,hbar,press", "efl",
|
||||
obj, _efl_ui_scroller_hbar_press_cb, NULL);
|
||||
efl_layout_signal_callback_del
|
||||
(obj, "efl,hbar,unpress", "efl",
|
||||
obj, _efl_ui_scroller_hbar_unpress_cb, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_pan_resized_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
elm_layout_sizing_eval(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_resized_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
elm_layout_sizing_eval(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_scroller_size_hint_changed_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
elm_layout_sizing_eval(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_focused_element(void *data, const Efl_Event *event)
|
||||
{
|
||||
|
@ -566,7 +249,7 @@ _efl_ui_scroller_efl_object_constructor(Eo *obj,
|
|||
|
||||
EOLIAN static Eo *
|
||||
_efl_ui_scroller_efl_object_finalize(Eo *obj,
|
||||
Efl_Ui_Scroller_Data *sd EINA_UNUSED)
|
||||
Efl_Ui_Scroller_Data *sd)
|
||||
{
|
||||
obj = efl_finalize(efl_super(obj, MY_CLASS));
|
||||
|
||||
|
@ -583,20 +266,7 @@ _efl_ui_scroller_efl_object_finalize(Eo *obj,
|
|||
|
||||
elm_widget_can_focus_set(obj, EINA_TRUE);
|
||||
|
||||
_scroll_edje_object_attach(obj);
|
||||
|
||||
efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SIZE_CHANGED,
|
||||
_efl_ui_scroller_bar_size_changed_cb, obj);
|
||||
efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_POS_CHANGED,
|
||||
_efl_ui_scroller_bar_pos_changed_cb, obj);
|
||||
efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SHOW,
|
||||
_efl_ui_scroller_bar_show_cb, obj);
|
||||
efl_event_callback_add(obj, EFL_UI_SCROLLBAR_EVENT_BAR_HIDE,
|
||||
_efl_ui_scroller_bar_hide_cb, obj);
|
||||
efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED,
|
||||
_efl_ui_scroller_resized_cb, obj);
|
||||
efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_HINTS_CHANGED,
|
||||
_efl_ui_scroller_size_hint_changed_cb, obj);
|
||||
efl_ui_scroll_connector_bind(obj, sd->smanager);
|
||||
efl_event_callback_add(sd->pan_obj, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED,
|
||||
_efl_ui_scroller_pan_resized_cb, obj);
|
||||
|
||||
|
@ -606,22 +276,9 @@ _efl_ui_scroller_efl_object_finalize(Eo *obj,
|
|||
|
||||
EOLIAN static void
|
||||
_efl_ui_scroller_efl_object_destructor(Eo *obj,
|
||||
Efl_Ui_Scroller_Data *sd EINA_UNUSED)
|
||||
Efl_Ui_Scroller_Data *sd)
|
||||
{
|
||||
_scroll_edje_object_detach(obj);
|
||||
|
||||
efl_event_callback_del(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SIZE_CHANGED,
|
||||
_efl_ui_scroller_bar_size_changed_cb, obj);
|
||||
efl_event_callback_del(obj, EFL_UI_SCROLLBAR_EVENT_BAR_POS_CHANGED,
|
||||
_efl_ui_scroller_bar_pos_changed_cb, obj);
|
||||
efl_event_callback_del(obj, EFL_UI_SCROLLBAR_EVENT_BAR_SHOW,
|
||||
_efl_ui_scroller_bar_show_cb, obj);
|
||||
efl_event_callback_del(obj, EFL_UI_SCROLLBAR_EVENT_BAR_HIDE,
|
||||
_efl_ui_scroller_bar_hide_cb, obj);
|
||||
efl_event_callback_del(obj, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED,
|
||||
_efl_ui_scroller_resized_cb, obj);
|
||||
efl_event_callback_del(obj, EFL_GFX_ENTITY_EVENT_HINTS_CHANGED,
|
||||
_efl_ui_scroller_size_hint_changed_cb, obj);
|
||||
efl_ui_scroll_connector_unbind(obj);
|
||||
efl_event_callback_del(sd->pan_obj, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED,
|
||||
_efl_ui_scroller_pan_resized_cb, obj);
|
||||
efl_del(sd->pan_obj);
|
||||
|
|
|
@ -1025,5 +1025,19 @@ void _efl_ui_focus_event_redirector(Efl_Ui_Focus_Object *obj, Efl_Ui_Focus_Objec
|
|||
void efl_ui_widget_internal_set(Eo *obj, Eina_Bool internal);
|
||||
Eina_Bool efl_ui_widget_internal_get(Eo *obj);
|
||||
|
||||
/**
|
||||
* Connect the default scrollable theme signals with the object events and vice versa
|
||||
*
|
||||
* @param obj The object where to listen for theme signals
|
||||
* @param manager The scroll manager object where to listen for events
|
||||
*/
|
||||
void efl_ui_scroll_connector_bind(Eo *obj, Eo *manager);
|
||||
|
||||
/**
|
||||
* Connect the default scrollable theme signals with the object events and vice versa
|
||||
*
|
||||
* @param obj The object where we are listening for events
|
||||
*/
|
||||
void efl_ui_scroll_connector_unbind(Eo *obj);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -937,6 +937,7 @@ elementary_src = [
|
|||
'efl_ui_clickable.c',
|
||||
'efl_ui_clickable_util.c',
|
||||
'efl_ui_format.c',
|
||||
'efl_ui_scroll_util.c',
|
||||
]
|
||||
|
||||
elementary_deps = [emile, eo, efl, edje, ethumb, ethumb_client, emotion, ecore_imf, ecore_con, eldbus, efreet, efreet_mime, efreet_trash, eio, atspi, dl, intl]
|
||||
|
|
Loading…
Reference in New Issue