forked from enlightenment/efl
Welcome a new smart callback for scrollables -- page,changed.
This commit is contained in:
parent
f296eed13e
commit
d53cc519ff
|
@ -55,6 +55,7 @@ static const char SIG_SCROLL_ANIM_START[] = "scroll,anim,start";
|
|||
static const char SIG_SCROLL_ANIM_STOP[] = "scroll,anim,stop";
|
||||
static const char SIG_SCROLL_DRAG_START[] = "scroll,drag,start";
|
||||
static const char SIG_SCROLL_DRAG_STOP[] = "scroll,drag,stop";
|
||||
static const char SIG_SCROLL_PAGE_CHANGE[] = "scroll,page,changed";
|
||||
static const char SIG_EDGE_TOP[] = "edge,top";
|
||||
static const char SIG_EDGE_BOTTOM[] = "edge,bottom";
|
||||
static const char SIG_EDGE_LEFT[] = "edge,left";
|
||||
|
@ -97,6 +98,7 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = {
|
|||
{SIG_LANG_CHANGED, ""},
|
||||
{SIG_PRESSED, ""},
|
||||
{SIG_RELEASED, ""},
|
||||
{SIG_SCROLL_PAGE_CHANGE, ""},
|
||||
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
@ -2157,6 +2159,13 @@ _edge_bottom_cb(Evas_Object *obj,
|
|||
evas_object_smart_callback_call(obj, SIG_EDGE_BOTTOM, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_page_change_cb(Evas_Object *obj,
|
||||
void *data __UNUSED__)
|
||||
{
|
||||
evas_object_smart_callback_call(obj, SIG_SCROLL_PAGE_CHANGE, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_scroll_cb(Evas_Object *obj,
|
||||
void *data __UNUSED__)
|
||||
|
@ -2432,7 +2441,8 @@ _elm_gengrid_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|||
eo_do(obj, elm_scrollable_interface_bounce_allow_set(bounce, bounce));
|
||||
|
||||
eo_do(obj,
|
||||
elm_scrollable_interface_animate_start_cb_set(_scroll_animate_start_cb),
|
||||
elm_scrollable_interface_animate_start_cb_set
|
||||
(_scroll_animate_start_cb),
|
||||
elm_scrollable_interface_animate_stop_cb_set(_scroll_animate_stop_cb),
|
||||
elm_scrollable_interface_drag_start_cb_set(_scroll_drag_start_cb),
|
||||
elm_scrollable_interface_drag_stop_cb_set(_scroll_drag_stop_cb),
|
||||
|
@ -2440,7 +2450,8 @@ _elm_gengrid_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|||
elm_scrollable_interface_edge_right_cb_set(_edge_right_cb),
|
||||
elm_scrollable_interface_edge_top_cb_set(_edge_top_cb),
|
||||
elm_scrollable_interface_edge_bottom_cb_set(_edge_bottom_cb),
|
||||
elm_scrollable_interface_scroll_cb_set(_scroll_cb));
|
||||
elm_scrollable_interface_scroll_cb_set(_scroll_cb),
|
||||
elm_scrollable_interface_page_change_cb_set(_scroll_page_change_cb));
|
||||
|
||||
priv->align_x = 0.5;
|
||||
priv->align_y = 0.5;
|
||||
|
|
|
@ -209,6 +209,8 @@
|
|||
* started.
|
||||
* - @c "scroll,drag,stop" - called when dragging the content has
|
||||
* stopped.
|
||||
* - @c "scroll,page,changed" - called when the visible page has
|
||||
* changed.
|
||||
* - @c "edge,top" - This is called when the gengrid is scrolled until
|
||||
* the top edge.
|
||||
* - @c "edge,bottom" - This is called when the gengrid is scrolled
|
||||
|
|
|
@ -958,6 +958,9 @@ _elm_scroll_scroll_bar_read_and_update(
|
|||
static void
|
||||
_elm_scroll_drag_start(Elm_Scrollable_Smart_Interface_Data *sid)
|
||||
{
|
||||
sid->current_page.x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
|
||||
sid->current_page.y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
|
||||
|
||||
if (sid->cb_func.drag_start)
|
||||
sid->cb_func.drag_start(sid->obj, NULL);
|
||||
}
|
||||
|
@ -965,6 +968,18 @@ _elm_scroll_drag_start(Elm_Scrollable_Smart_Interface_Data *sid)
|
|||
static void
|
||||
_elm_scroll_drag_stop(Elm_Scrollable_Smart_Interface_Data *sid)
|
||||
{
|
||||
Evas_Coord x, y;
|
||||
|
||||
if (!(sid->down.bounce_x_animator) && !(sid->down.bounce_y_animator) &&
|
||||
!(sid->scrollto.x.animator) && !(sid->scrollto.y.animator))
|
||||
{
|
||||
x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
|
||||
y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
|
||||
if (sid->cb_func.page_change &&
|
||||
((x != sid->current_page.x) || (y != sid->current_page.y)))
|
||||
sid->cb_func.page_change(sid->obj, NULL);
|
||||
}
|
||||
|
||||
if (sid->cb_func.drag_stop)
|
||||
sid->cb_func.drag_stop(sid->obj, NULL);
|
||||
}
|
||||
|
@ -979,6 +994,16 @@ _elm_scroll_anim_start(Elm_Scrollable_Smart_Interface_Data *sid)
|
|||
static void
|
||||
_elm_scroll_anim_stop(Elm_Scrollable_Smart_Interface_Data *sid)
|
||||
{
|
||||
Evas_Coord x, y;
|
||||
|
||||
if (sid->cb_func.page_change)
|
||||
{
|
||||
x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
|
||||
y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
|
||||
if ((x != sid->current_page.x) || (y != sid->current_page.y))
|
||||
sid->cb_func.page_change(sid->obj, NULL);
|
||||
}
|
||||
|
||||
if (sid->cb_func.animate_stop)
|
||||
sid->cb_func.animate_stop(sid->obj, NULL);
|
||||
}
|
||||
|
@ -3772,6 +3797,16 @@ _elm_scroll_animate_stop_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|||
sid->cb_func.animate_stop = animate_stop_cb;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_scroll_page_change_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||
{
|
||||
Elm_Scrollable_Smart_Interface_Data *sid = _pd;
|
||||
Elm_Interface_Scrollable_Cb page_change_cb =
|
||||
va_arg(*list, Elm_Interface_Scrollable_Cb);
|
||||
|
||||
sid->cb_func.page_change = page_change_cb;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_scroll_scroll_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||
{
|
||||
|
@ -4282,13 +4317,20 @@ _elm_scroll_page_show(Eo *obj, void *_pd, va_list *list)
|
|||
|
||||
Elm_Scrollable_Smart_Interface_Data *sid = _pd;
|
||||
|
||||
sid->current_page.x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
|
||||
sid->current_page.y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
|
||||
|
||||
eo_do(sid->obj, elm_scrollable_interface_content_viewport_size_get(&w, &h));
|
||||
if (pagenumber_h >= 0) x = sid->pagesize_h * pagenumber_h;
|
||||
if (pagenumber_v >= 0) y = sid->pagesize_v * pagenumber_v;
|
||||
if (_elm_scroll_content_region_show_internal(obj, &x, &y, w, h))
|
||||
|
||||
|
||||
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
|
||||
|
||||
if ((sid->current_page.x != x) || (sid->current_page.y != y))
|
||||
{
|
||||
if (sid->cb_func.page_change)
|
||||
sid->cb_func.page_change(sid->obj, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -4303,6 +4345,9 @@ _elm_scroll_page_bring_in(Eo *obj, void *_pd, va_list *list)
|
|||
|
||||
Elm_Scrollable_Smart_Interface_Data *sid = _pd;
|
||||
|
||||
sid->current_page.x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
|
||||
sid->current_page.y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
|
||||
|
||||
eo_do(sid->obj, elm_scrollable_interface_content_viewport_size_get(&w, &h));
|
||||
if (pagenumber_h >= 0) x = sid->pagesize_h * pagenumber_h;
|
||||
if (pagenumber_v >= 0) y = sid->pagesize_v * pagenumber_v;
|
||||
|
@ -4311,6 +4356,12 @@ _elm_scroll_page_bring_in(Eo *obj, void *_pd, va_list *list)
|
|||
_elm_scroll_scroll_to_x(sid, _elm_config->bring_in_scroll_friction, x);
|
||||
_elm_scroll_scroll_to_y(sid, _elm_config->bring_in_scroll_friction, y);
|
||||
}
|
||||
|
||||
if ((sid->current_page.x != x) || (sid->current_page.y != y))
|
||||
{
|
||||
if (sid->cb_func.page_change)
|
||||
sid->cb_func.page_change(sid->obj, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -4512,6 +4563,8 @@ _elm_scrollable_interface_constructor(Eo_Class *klass)
|
|||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_WHEEL_DISABLED_SET), _elm_scroll_wheel_disabled_set),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_MOVEMENT_BLOCK_SET), _elm_scroll_movement_block_set),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_MOVEMENT_BLOCK_GET), _elm_scroll_movement_block_get),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_CHANGE_CB_SET), _elm_scroll_page_change_cb_set),
|
||||
|
||||
EO_OP_FUNC_SENTINEL
|
||||
};
|
||||
eo_class_funcs_set(klass, func_desc);
|
||||
|
@ -4584,6 +4637,8 @@ static const Eo_Op_Description op_desc[] = {
|
|||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_WHEEL_DISABLED_SET, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_MOVEMENT_BLOCK_SET, "Set movement block in a axis"),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_MOVEMENT_BLOCK_GET, "Get the movement block"),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_CHANGE_CB_SET,
|
||||
"Set a scroller page change callback function"),
|
||||
EO_OP_DESCRIPTION_SENTINEL
|
||||
};
|
||||
|
||||
|
|
|
@ -213,6 +213,7 @@ enum
|
|||
ELM_SCROLLABLE_INTERFACE_SUB_ID_WHEEL_DISABLED_SET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_MOVEMENT_BLOCK_SET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_MOVEMENT_BLOCK_GET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_CHANGE_CB_SET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_LAST
|
||||
};
|
||||
|
||||
|
@ -963,6 +964,17 @@ enum
|
|||
*/
|
||||
#define elm_scrollable_interface_movement_block_get(block) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_MOVEMENT_BLOCK_GET), EO_TYPECHECK(Elm_Scroller_Movement_Block *, block)
|
||||
|
||||
/**
|
||||
* @def elm_scrollable_interface_page_change_cb_set
|
||||
* @since 1.8
|
||||
*
|
||||
* No description supplied by the EAPI.
|
||||
*
|
||||
* @param[in] page_change_cb
|
||||
*
|
||||
*/
|
||||
#define elm_scrollable_interface_page_change_cb_set(page_change_cb) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_CHANGE_CB_SET), EO_TYPECHECK(Elm_Interface_Scrollable_Cb, page_change_cb)
|
||||
|
||||
|
||||
/**
|
||||
* Elementary scroller panning base smart data.
|
||||
|
@ -1070,7 +1082,7 @@ struct _Elm_Scrollable_Smart_Interface_Data
|
|||
struct
|
||||
{
|
||||
Evas_Coord x, y;
|
||||
} step, page;
|
||||
} step, page, current_page;
|
||||
|
||||
struct
|
||||
{
|
||||
|
@ -1093,6 +1105,8 @@ struct _Elm_Scrollable_Smart_Interface_Data
|
|||
Elm_Interface_Scrollable_Cb hbar_drag;
|
||||
Elm_Interface_Scrollable_Cb hbar_press;
|
||||
Elm_Interface_Scrollable_Cb hbar_unpress;
|
||||
Elm_Interface_Scrollable_Cb page_change;
|
||||
|
||||
Elm_Interface_Scrollable_Min_Limit_Cb content_min_limit;
|
||||
} cb_func;
|
||||
|
||||
|
|
|
@ -34,6 +34,8 @@ static const char SIG_VBAR_UNPRESS[] = "vbar,unpress";
|
|||
static const char SIG_HBAR_DRAG[] = "hbar,drag";
|
||||
static const char SIG_HBAR_PRESS[] = "hbar,press";
|
||||
static const char SIG_HBAR_UNPRESS[] = "hbar,unpress";
|
||||
static const char SIG_SCROLL_PAGE_CHANGE[] = "scroll,page,changed";
|
||||
|
||||
static const Evas_Smart_Cb_Description _smart_callbacks[] =
|
||||
{
|
||||
{SIG_SCROLL, ""},
|
||||
|
@ -55,6 +57,7 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] =
|
|||
{SIG_HBAR_DRAG, ""},
|
||||
{SIG_HBAR_PRESS, ""},
|
||||
{SIG_HBAR_UNPRESS, ""},
|
||||
{SIG_SCROLL_PAGE_CHANGE, ""},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
@ -646,6 +649,13 @@ _hbar_unpress_cb(Evas_Object *obj,
|
|||
evas_object_smart_callback_call(obj, SIG_HBAR_UNPRESS, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_page_change_cb(Evas_Object *obj,
|
||||
void *data __UNUSED__)
|
||||
{
|
||||
evas_object_smart_callback_call(obj, SIG_SCROLL_PAGE_CHANGE, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_scroller_smart_content_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
|
||||
{
|
||||
|
@ -790,7 +800,9 @@ _elm_scroller_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|||
elm_scrollable_interface_hbar_drag_cb_set(_hbar_drag_cb),
|
||||
elm_scrollable_interface_hbar_press_cb_set(_hbar_press_cb),
|
||||
elm_scrollable_interface_hbar_unpress_cb_set(_hbar_unpress_cb),
|
||||
elm_scrollable_interface_content_min_limit_cb_set(_elm_scroller_content_min_limit_cb));
|
||||
elm_scrollable_interface_page_change_cb_set(_page_change_cb),
|
||||
elm_scrollable_interface_content_min_limit_cb_set
|
||||
(_elm_scroller_content_min_limit_cb));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
* @li @c "hbar,drag" - the horizontal scroll bar has been dragged
|
||||
* @li @c "hbar,press" - the horizontal scroll bar has been pressed
|
||||
* @li @c "hbar,unpress" - the horizontal scroll bar has been unpressed
|
||||
* @li @c "scroll,page,changed" - the visible page has changed
|
||||
*
|
||||
* This widget implements the @ref elm-scrollable-interface interface.
|
||||
* Its (non-deprecated) API functions, except for elm_scroller_add(),
|
||||
|
|
Loading…
Reference in New Issue