summaryrefslogtreecommitdiff
path: root/src/lib/elementary/efl_ui_pager.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/elementary/efl_ui_pager.c')
-rw-r--r--src/lib/elementary/efl_ui_pager.c811
1 files changed, 811 insertions, 0 deletions
diff --git a/src/lib/elementary/efl_ui_pager.c b/src/lib/elementary/efl_ui_pager.c
new file mode 100644
index 0000000000..921d7676f9
--- /dev/null
+++ b/src/lib/elementary/efl_ui_pager.c
@@ -0,0 +1,811 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#define EFL_PACK_LAYOUT_PROTECTED
+
+#include <Elementary.h>
+#include "elm_priv.h"
+#include "efl_ui_widget_pager.h"
+#include "efl_page_transition.h"
+
+#define MY_CLASS EFL_UI_PAGER_CLASS
+
+
+static void
+_efl_ui_pager_update(Efl_Ui_Pager_Data *pd)
+{
+ if (pd->cnt == 0) return;
+
+ efl_page_transition_update(pd->transition, pd->curr.pos);
+ if (pd->indicator)
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+}
+
+static void
+_job(void *data)
+{
+ Evas_Object *obj = data;
+ EFL_UI_PAGER_DATA_GET(obj, pd);
+
+ int prev_page, page_diff;
+ double prev_pos, pos_diff;
+
+ prev_page = pd->curr.page;
+ prev_pos = pd->curr.pos;
+
+ pd->job = NULL;
+
+ pos_diff = ((double) pd->down.x - (double) pd->mouse_x) / (double) pd->w;
+ pd->curr.pos = pd->down.pos + pos_diff;
+ page_diff = (int) pd->curr.pos;
+
+ //FIXME what if (prev_pos != 0.0)
+ if ((pd->loop == EFL_UI_PAGER_LOOP_DISABLED) &&
+ (((prev_page == 0) && (pd->curr.pos < 0)) ||
+ ((prev_page == (pd->cnt - 1)) && (pd->curr.pos > 0))))
+ {
+ pd->curr.page = prev_page;
+ pd->curr.pos = prev_pos;
+ return;
+ }
+
+ pd->curr.page = (pd->down.page + page_diff + pd->cnt) % pd->cnt;
+ pd->curr.pos -= page_diff;
+
+ //FIXME what if (page_diff >= 2 || page_diff <= -2)
+ if (page_diff != 0)
+ {
+ pd->down.x = pd->mouse_x;
+ pd->down.y = pd->mouse_y;
+ pd->down.page = pd->curr.page;
+ pd->down.pos = pd->curr.pos;
+
+ efl_page_transition_curr_page_change(pd->transition, page_diff);
+ }
+
+ _efl_ui_pager_update(pd);
+
+ return;
+}
+
+static void
+_page_set_animation(void *data, const Efl_Event *event)
+{
+ Efl_Ui_Pager_Data *pd = data;
+ double p = ecore_loop_time_get() - pd->change.start_time;
+ double d, temp_pos;
+ int temp_page;
+
+ if (p >= 1.0) p = 1.0;
+ p = ecore_animator_pos_map(p, ECORE_POS_MAP_ACCELERATE, 0.0, 0.0);
+
+ d = pd->change.src + pd->change.delta * p;
+ temp_page = d;
+ temp_pos = d - temp_page;
+
+ if ((temp_page < pd->curr.page) && (fabs(pd->curr.page - d) < 1.0))
+ {
+ temp_page += 1;
+ temp_pos -= 1.0;
+ }
+
+ if (pd->curr.page != temp_page)
+ {
+ if (pd->change.delta < 0)
+ efl_page_transition_curr_page_change(pd->transition, -1.0);
+ else
+ efl_page_transition_curr_page_change(pd->transition, 1.0);
+ temp_pos = 0.0;
+ }
+
+ pd->curr.page = temp_page;
+ pd->curr.pos = temp_pos;
+
+ ERR("page %d pos %lf", pd->curr.page, pd->curr.pos);
+
+ _efl_ui_pager_update(pd);
+
+ if (EINA_DBL_EQ(p, 1.0))
+ efl_event_callback_del(event->object, EFL_EVENT_ANIMATOR_TICK,
+ _page_set_animation, pd);
+}
+
+static void
+_mouse_up_animation(void *data, const Efl_Event *event)
+{
+ Efl_Ui_Pager_Data *pd = data;
+ double p = ecore_loop_time_get() - pd->mouse_up_time;
+
+ if (p >= 1.0) p = 1.0;
+ p = ecore_animator_pos_map(p, ECORE_POS_MAP_ACCELERATE, 0.0, 0.0);
+
+ if (pd->curr.pos < 0.0)
+ {
+ if (pd->curr.pos > -0.5)
+ pd->curr.pos = pd->curr.pos * (1 - p);
+ else
+ pd->curr.pos = (-1) - (-1 - pd->curr.pos) * (1 - p);
+ }
+ else
+ {
+ if (pd->curr.pos < 0.5)
+ pd->curr.pos = pd->curr.pos * (1 - p);
+ else
+ pd->curr.pos = 1 - (1 - pd->curr.pos) * (1 - p);
+ }
+
+ if (EINA_DBL_EQ(pd->curr.pos, 1.0))
+ {
+ efl_page_transition_curr_page_change(pd->transition, 1.0);
+ pd->curr.page = (pd->curr.page + 1 + pd->cnt) % pd->cnt;
+ pd->curr.pos = 0.0;
+ }
+ else if (EINA_DBL_EQ(pd->curr.pos, -1.0))
+ {
+ efl_page_transition_curr_page_change(pd->transition, -1.0);
+ pd->curr.page = (pd->curr.page - 1 + pd->cnt) % pd->cnt;
+ pd->curr.pos = 0.0;
+ }
+
+ _efl_ui_pager_update(pd);
+
+ if (EINA_DBL_EQ(p, 1.0))
+ efl_event_callback_del(event->object, EFL_EVENT_ANIMATOR_TICK,
+ _mouse_up_animation, pd);
+}
+
+static void
+_mouse_down_cb(void *data,
+ const Efl_Event *event)
+{
+ Efl_Input_Pointer *ev = event->info;
+ Eo *obj = data;
+ EFL_UI_PAGER_DATA_GET(obj, pd);
+ Eina_Position2D pos;
+
+ if (efl_input_pointer_button_get(ev) != 1) return;
+ if (efl_input_event_flags_get(ev) & EFL_INPUT_FLAGS_PROCESSED) return;
+
+ efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _mouse_up_animation, pd);
+ efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _page_set_animation, pd);
+
+ pd->move_started = EINA_FALSE;
+
+ pos = efl_input_pointer_position_get(ev);
+ pd->mouse_x = pos.x - pd->x;
+ pd->mouse_y = pos.y - pd->y;
+
+ pd->down.enabled = EINA_TRUE;
+ pd->down.x = pd->mouse_x;
+ pd->down.y = pd->mouse_y;
+ pd->down.page = pd->curr.page;
+ pd->down.pos = pd->curr.pos;
+}
+
+static void
+_mouse_move_cb(void *data,
+ const Efl_Event *event)
+{
+ Efl_Input_Pointer *ev = event->info;
+ Eo *obj = data;
+ EFL_UI_PAGER_DATA_GET(obj, pd);
+ Eina_Position2D pos;
+
+ if (efl_input_event_flags_get(ev) & EFL_INPUT_FLAGS_PROCESSED) return;
+ if (!pd->down.enabled) return;
+
+ pos = efl_input_pointer_position_get(ev);
+
+ if (pd->prev_block && (pd->mouse_x < (pos.x - pd->x))) return;
+ if (pd->next_block && (pd->mouse_x > (pos.x - pd->x))) return;
+
+ pd->mouse_x = pos.x - pd->x;
+ pd->mouse_y = pos.y - pd->y;
+
+ if (!pd->move_started)
+ {
+ Evas_Coord dx, dy;
+ dx = pd->mouse_x - pd->down.x;
+ dy = pd->mouse_y - pd->down.y;
+
+ if (((dx * dx) + (dy * dy)) <=
+ (_elm_config->finger_size * _elm_config->finger_size / 4))
+ return;
+
+ pd->move_started = EINA_TRUE;
+ }
+
+ ecore_job_del(pd->job);
+ pd->job = ecore_job_add(_job, obj);
+}
+
+static void
+_mouse_up_cb(void *data,
+ const Efl_Event *event)
+{
+ Efl_Input_Pointer *ev = event->info;
+ Eo *obj = data;
+ EFL_UI_PAGER_DATA_GET(obj, pd);
+
+ if (efl_input_event_flags_get(ev) & EFL_INPUT_FLAGS_PROCESSED) return;
+ if (!pd->down.enabled) return;
+
+ pd->down.enabled = EINA_FALSE;
+
+ ELM_SAFE_FREE(pd->job, ecore_job_del);
+
+ if (EINA_DBL_EQ(pd->curr.pos, 0.0)) return;
+
+ pd->mouse_up_time = ecore_loop_time_get();
+
+ efl_event_callback_add(obj, EFL_EVENT_ANIMATOR_TICK, _mouse_up_animation, pd);
+}
+
+//FIXME sub_object_parent_add? destruction
+static void
+_event_handler_create(Eo *obj, Efl_Ui_Pager_Data *pd)
+{
+ pd->event = efl_add(EFL_CANVAS_RECTANGLE_CLASS,
+ evas_object_evas_get(obj));
+ evas_object_color_set(pd->event, 0, 0, 0, 0);
+ evas_object_repeat_events_set(pd->event, EINA_TRUE);
+
+ efl_content_set(efl_part(obj, "efl.event"), pd->event);
+
+ efl_event_callback_add(pd->event, EFL_EVENT_POINTER_DOWN,
+ _mouse_down_cb, obj);
+ efl_event_callback_add(pd->event, EFL_EVENT_POINTER_UP,
+ _mouse_up_cb, obj);
+ efl_event_callback_add(pd->event, EFL_EVENT_POINTER_MOVE,
+ _mouse_move_cb, obj);
+}
+
+static void
+_event_handler_del(Eo *obj, Efl_Ui_Pager_Data *pd)
+{
+ efl_content_unset(efl_part(obj, "efl.event"));
+ efl_del(pd->event);
+ pd->event = NULL;
+}
+
+static void
+_resize_cb(void *data, const Efl_Event *ev)
+{
+ Efl_Ui_Pager_Data *pd = data;
+ Eina_Size2D sz;
+
+ sz = efl_gfx_entity_size_get(ev->object);
+
+ pd->w = sz.w;
+ pd->h = sz.h;
+
+ if (pd->fill_width) pd->page_spec.sz.w = pd->w;
+ if (pd->fill_height) pd->page_spec.sz.h = pd->h;
+
+ if (pd->transition)
+ efl_page_transition_page_size_set(pd->transition, pd->page_spec.sz);
+ else
+ {
+ efl_gfx_entity_size_set(pd->foreclip, sz);
+ efl_gfx_entity_size_set(pd->page_box, pd->page_spec.sz);
+ efl_gfx_entity_position_set(pd->page_box,
+ EINA_POSITION2D(pd->x + (pd->w / 2) - (pd->page_spec.sz.w / 2),
+ pd->y + (pd->h / 2) - (pd->page_spec.sz.h / 2)));
+ }
+}
+
+static void
+_move_cb(void *data, const Efl_Event *ev)
+{
+ Efl_Ui_Pager_Data *pd = data;
+ Eina_Position2D pos;
+
+ pos = efl_gfx_entity_position_get(ev->object);
+
+ pd->x = pos.x;
+ pd->y = pos.y;
+
+ if (!pd->transition)
+ {
+ efl_gfx_entity_position_set(pd->foreclip, pos);
+ efl_gfx_entity_position_set(pd->page_box,
+ EINA_POSITION2D(pd->x + (pd->w / 2) - (pd->page_spec.sz.w / 2),
+ pd->y + (pd->h / 2) - (pd->page_spec.sz.h / 2)));
+ }
+}
+
+EOLIAN static Eo *
+_efl_ui_pager_efl_object_constructor(Eo *obj,
+ Efl_Ui_Pager_Data *pd)
+{
+ ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
+
+ if (!elm_widget_theme_klass_get(obj))
+ elm_widget_theme_klass_set(obj, "pager");
+
+ obj = efl_constructor(efl_super(obj, MY_CLASS));
+
+ if (!elm_widget_theme_object_set(obj, wd->resize_obj,
+ elm_widget_theme_klass_get(obj),
+ elm_widget_theme_element_get(obj),
+ elm_widget_theme_style_get(obj)))
+ CRI("Failed to set layout!");
+
+ elm_widget_sub_object_parent_add(obj);
+
+ pd->cnt = 0;
+ pd->loop = EFL_UI_PAGER_LOOP_DISABLED;
+
+ pd->curr.page = 0;
+ pd->curr.pos = 0.0;
+
+ pd->transition = NULL;
+ pd->indicator = NULL;
+
+ pd->fill_width = EINA_TRUE;
+ pd->fill_height = EINA_TRUE;
+
+ pd->page_spec.sz.w = -1;
+ pd->page_spec.sz.h = -1;
+
+ elm_widget_can_focus_set(obj, EINA_TRUE);
+
+ pd->page_root = efl_add(EFL_CANVAS_GROUP_CLASS, evas_object_evas_get(obj));
+ efl_content_set(efl_part(obj, "efl.page_root"), pd->page_root);
+
+ efl_event_callback_add(pd->page_root, EFL_GFX_ENTITY_EVENT_RESIZE, _resize_cb, pd);
+ efl_event_callback_add(pd->page_root, EFL_GFX_ENTITY_EVENT_MOVE, _move_cb, pd);
+
+ pd->page_box = efl_add(EFL_UI_BOX_CLASS, obj);
+ efl_canvas_group_member_add(pd->page_root, pd->page_box);
+
+ pd->foreclip = efl_add(EFL_CANVAS_RECTANGLE_CLASS,
+ evas_object_evas_get(obj));
+ efl_canvas_group_member_add(pd->page_root, pd->foreclip);
+ evas_object_static_clip_set(pd->foreclip, EINA_TRUE);
+ efl_canvas_object_clip_set(pd->page_box, pd->foreclip);
+
+ pd->backclip = efl_add(EFL_CANVAS_RECTANGLE_CLASS,
+ evas_object_evas_get(obj));
+ efl_canvas_group_member_add(pd->page_root, pd->backclip);
+ evas_object_static_clip_set(pd->backclip, EINA_TRUE);
+ efl_gfx_entity_visible_set(pd->backclip, EINA_FALSE);
+
+ return obj;
+}
+
+EOLIAN static int
+_efl_ui_pager_efl_container_content_count(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd)
+{
+ return pd->cnt;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_pager_efl_pack_linear_pack_begin(Eo *obj,
+ Efl_Ui_Pager_Data *pd,
+ Efl_Gfx_Entity *subobj)
+{
+ efl_parent_set(subobj, obj);
+ elm_widget_sub_object_add(obj, subobj);
+
+ pd->content_list = eina_list_prepend(pd->content_list, subobj);
+
+ pd->cnt += 1;
+ pd->curr.page += 1;
+
+ if (pd->transition)
+ efl_page_transition_update(pd->transition, pd->curr.pos);
+ else
+ {
+ if (pd->cnt == 1)
+ efl_pack(pd->page_box, subobj);
+ else efl_canvas_object_clip_set(subobj, pd->backclip);
+ }
+
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack(pd->indicator, 0);
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
+ return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_pager_efl_pack_linear_pack_end(Eo *obj,
+ Efl_Ui_Pager_Data *pd,
+ Efl_Gfx_Entity *subobj)
+{
+ efl_parent_set(subobj, obj);
+ elm_widget_sub_object_add(obj, subobj);
+
+ pd->content_list = eina_list_append(pd->content_list, subobj);
+
+ pd->cnt += 1;
+
+ if (pd->transition)
+ efl_page_transition_update(pd->transition, pd->curr.pos);
+ else
+ {
+ if (pd->cnt == 1)
+ efl_pack(pd->page_box, subobj);
+ else efl_canvas_object_clip_set(subobj, pd->backclip);
+ }
+
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack(pd->indicator, (pd->cnt - 1));
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
+ return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_pager_efl_pack_linear_pack_before(Eo *obj,
+ Efl_Ui_Pager_Data *pd,
+ Efl_Gfx_Entity *subobj,
+ const Efl_Gfx_Entity *existing)
+{
+ int index;
+
+ efl_parent_set(subobj, obj);
+ elm_widget_sub_object_add(obj, subobj);
+
+ index = eina_list_data_idx(pd->content_list, (void *)existing);
+ pd->content_list = eina_list_prepend_relative(pd->content_list, subobj, existing);
+
+ pd->cnt += 1;
+ if (pd->curr.page >= index) pd->curr.page += 1;
+
+ if (pd->transition)
+ efl_page_transition_update(pd->transition, pd->curr.pos);
+ else efl_canvas_object_clip_set(subobj, pd->backclip);
+
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack(pd->indicator, index);
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
+ return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_pager_efl_pack_linear_pack_after(Eo *obj,
+ Efl_Ui_Pager_Data *pd,
+ Efl_Gfx_Entity *subobj,
+ const Efl_Gfx_Entity *existing)
+{
+ int index;
+
+ efl_parent_set(subobj, obj);
+ elm_widget_sub_object_add(obj, subobj);
+
+ index = eina_list_data_idx(pd->content_list, (void *)existing);
+ pd->content_list = eina_list_append_relative(pd->content_list, subobj, existing);
+
+ pd->cnt += 1;
+ if (pd->curr.page > index) pd->curr.page += 1;
+
+ if (pd->transition)
+ efl_page_transition_update(pd->transition, pd->curr.pos);
+ else efl_canvas_object_clip_set(subobj, pd->backclip);
+
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack(pd->indicator, (index + 1));
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
+ return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_pager_efl_pack_linear_pack_at(Eo *obj,
+ Efl_Ui_Pager_Data *pd,
+ Efl_Gfx_Entity *subobj,
+ int index)
+{
+ Efl_Gfx_Entity *existing = NULL;
+
+ efl_parent_set(subobj, obj);
+ elm_widget_sub_object_add(obj, subobj);
+
+ existing = eina_list_nth(pd->content_list, index);
+ pd->content_list = eina_list_prepend_relative(pd->content_list, subobj, existing);
+
+ pd->cnt += 1;
+ if (pd->curr.page >= index) pd->curr.page += 1;
+
+ if (pd->transition)
+ efl_page_transition_update(pd->transition, pd->curr.pos);
+ else efl_canvas_object_clip_set(subobj, pd->backclip);
+
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack(pd->indicator, index);
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
+ return EINA_TRUE;
+}
+
+EOLIAN static Efl_Gfx_Entity *
+_efl_ui_pager_efl_pack_linear_pack_content_get(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd,
+ int index)
+{
+ return eina_list_nth(pd->content_list, index);
+}
+
+EOLIAN static int
+_efl_ui_pager_efl_pack_linear_pack_index_get(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd,
+ const Efl_Gfx_Entity *subobj)
+{
+ return eina_list_data_idx(pd->content_list, (void *)subobj);
+}
+
+EOLIAN static void
+_efl_ui_pager_current_page_set(Eo *obj,
+ Efl_Ui_Pager_Data *pd,
+ int index)
+{
+ if (index == pd->curr.page) return;
+
+ efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _mouse_up_animation, pd);
+ efl_event_callback_del(obj, EFL_EVENT_ANIMATOR_TICK, _page_set_animation, pd);
+
+ if (index >= pd->cnt)
+ {
+ ERR("page set fail");
+ return;
+ }
+
+ if (!pd->transition)
+ {
+ Eo *curr;
+
+ curr = eina_list_nth(pd->content_list, pd->curr.page);
+ efl_pack_unpack(pd->page_box, curr);
+ efl_canvas_object_clip_set(curr, pd->backclip);
+
+ pd->curr.page = index;
+ curr = eina_list_nth(pd->content_list, pd->curr.page);
+ efl_pack(pd->page_box, curr);
+
+ if (pd->indicator)
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+
+ return;
+ }
+
+ pd->change.src = pd->curr.page + pd->curr.pos;
+ pd->change.delta = index - pd->change.src;
+
+ if (pd->change.delta == 0) return;
+
+ pd->change.start_time = ecore_loop_time_get();
+ efl_event_callback_add(obj, EFL_EVENT_ANIMATOR_TICK, _page_set_animation, pd);
+}
+
+EOLIAN static int
+_efl_ui_pager_current_page_get(const Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd)
+{
+ return pd->curr.page;
+}
+
+EOLIAN static void
+_efl_ui_pager_transition_set(Eo *obj,
+ Efl_Ui_Pager_Data *pd,
+ Efl_Page_Transition *transition)
+{
+ if (pd->transition == transition) return;
+
+ if (pd->transition)
+ efl_page_transition_bind(pd->transition, NULL, NULL);
+ else
+ {
+ Eo *curr;
+
+ curr = eina_list_nth(pd->content_list, pd->curr.page);
+ efl_pack_unpack(pd->page_box, curr);
+ efl_canvas_object_clip_set(pd->page_box, pd->backclip);
+ }
+
+ pd->transition = transition;
+
+ if (pd->transition)
+ {
+ if (!pd->event) _event_handler_create(obj, pd);
+ efl_page_transition_bind(pd->transition, obj, pd->page_root);
+ }
+ else
+ {
+ Eina_List *list;
+ Eo *curr;
+
+ _event_handler_del(obj, pd);
+
+ efl_canvas_object_clip_set(pd->page_box, pd->foreclip);
+
+ EINA_LIST_FOREACH(pd->content_list, list, curr)
+ {
+ efl_canvas_object_clip_set(curr, pd->backclip);
+ }
+
+ curr = eina_list_nth(pd->content_list, pd->curr.page);
+ efl_pack(pd->page_box, curr);
+ }
+}
+
+EOLIAN static void
+_efl_ui_pager_indicator_set(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd,
+ Efl_Page_Indicator *indicator)
+{
+ if (pd->indicator == indicator) return;
+
+ if (pd->indicator)
+ {
+ efl_page_indicator_bind(pd->indicator, NULL, NULL);
+ pd->indicator = NULL;
+ }
+
+ pd->indicator = indicator;
+
+ if (!pd->indicator)
+ {
+ if (pd->idbox)
+ {
+ efl_del(pd->idbox);
+ pd->idbox = NULL;
+ }
+ return;
+ }
+
+ if (!pd->idbox)
+ {
+ pd->idbox = efl_add(EFL_UI_BOX_CLASS, obj);
+ efl_content_set(efl_part(obj, "efl.indicator"), pd->idbox);
+ }
+
+ efl_page_indicator_bind(pd->indicator, obj, pd->idbox);
+}
+
+EOLIAN Eina_Size2D
+_efl_ui_pager_page_size_get(const Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd)
+{
+ return pd->page_spec.sz;
+}
+
+EOLIAN static void
+_efl_ui_pager_page_size_set(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd,
+ Eina_Size2D sz)
+{
+ if (sz.w < -1 || sz.h < -1) return;
+
+ if (sz.w == -1)
+ {
+ pd->fill_width = EINA_TRUE;
+ pd->page_spec.sz.w = pd->w;
+ }
+ else
+ {
+ pd->fill_width = EINA_FALSE;
+ pd->page_spec.sz.w = sz.w;
+ }
+ if (sz.h == -1)
+ {
+ pd->fill_height = EINA_TRUE;
+ pd->page_spec.sz.h = pd->h;
+ }
+ else
+ {
+ pd->fill_height = EINA_FALSE;
+ pd->page_spec.sz.h = sz.h;
+ }
+
+ if (pd->transition)
+ efl_page_transition_page_size_set(pd->transition, pd->page_spec.sz);
+ else
+ efl_gfx_entity_size_set(pd->page_box, pd->page_spec.sz);
+}
+
+EOLIAN static int
+_efl_ui_pager_padding_get(const Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd)
+{
+ return pd->page_spec.padding;
+}
+
+EOLIAN static void
+_efl_ui_pager_padding_set(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd,
+ int padding)
+{
+ pd->page_spec.padding = padding;
+
+ efl_page_transition_padding_size_set(pd->transition, padding);
+}
+
+EOLIAN static void
+_efl_ui_pager_scroll_block_get(const Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd,
+ Eina_Bool *prev,
+ Eina_Bool *next)
+{
+ if (prev) *prev = pd->prev_block;
+ if (next) *next = pd->next_block;
+}
+
+EOLIAN static void
+_efl_ui_pager_scroll_block_set(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd,
+ Eina_Bool prev,
+ Eina_Bool next)
+{
+ pd->prev_block = prev;
+ pd->next_block = next;
+}
+
+EOLIAN static void
+_efl_ui_pager_loop_mode_set(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd,
+ Efl_Ui_Pager_Loop loop)
+{
+ pd->loop = loop;
+
+ efl_page_transition_loop_set(pd->transition, loop);
+}
+
+EOLIAN static Efl_Ui_Pager_Loop
+_efl_ui_pager_loop_mode_get(const Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd)
+{
+ return pd->loop;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_pager_efl_pack_pack_clear(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd EINA_UNUSED)
+{
+ ERR("Soon to be implemented");
+ return EINA_FALSE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_pager_efl_pack_unpack_all(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd EINA_UNUSED)
+{
+ ERR("Soon to be implemented");
+ return EINA_FALSE;
+}
+
+EOLIAN static Eina_Bool
+_efl_ui_pager_efl_pack_unpack(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd EINA_UNUSED,
+ Efl_Gfx_Entity *subobj EINA_UNUSED)
+{
+ ERR("Soon to be implemented");
+ return EINA_FALSE;
+}
+
+EOLIAN static Efl_Gfx_Entity *
+_efl_ui_pager_efl_pack_linear_pack_unpack_at(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd EINA_UNUSED,
+ int index EINA_UNUSED)
+{
+ ERR("Soon to be implemented");
+ return NULL;
+}
+
+
+
+#include "efl_ui_pager.eo.c"