forked from enlightenment/efl
Scroller can me made to snap to pages on scrolling now.
This commit is contained in:
parent
86b4ab8276
commit
d8be9d6cf1
|
@ -71,6 +71,21 @@ my_bt_block_movements_x_axis(void *data, Evas_Object *obj,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
my_bt_snap_to_pages(void *data,
|
||||
Evas_Object *obj,
|
||||
void *event_info __UNUSED__)
|
||||
{
|
||||
if (elm_check_state_get(obj))
|
||||
{
|
||||
elm_scroller_page_snap_set(data, EINA_TRUE, EINA_TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
elm_scroller_page_snap_set(data, EINA_FALSE, EINA_FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
my_bt_block_movements_y_axis(void *data, Evas_Object *obj,
|
||||
void *event_info __UNUSED__)
|
||||
|
@ -116,7 +131,8 @@ _sc_resize_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info
|
|||
void
|
||||
test_scroller(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||
{
|
||||
Evas_Object *win, *bg2, *tb, *tb2, *sc, *bt, *ck1, *ck2, *bx, *bx2, *fr, *ck3, *ck4;
|
||||
Evas_Object *win, *bg2, *tb, *tb2, *sc, *bt, *ck1, *ck2, *bx, *bx2, *fr,
|
||||
*ck3, *ck4, *ck5;
|
||||
int i, j, n;
|
||||
char buf[PATH_MAX];
|
||||
Evas_Coord x = 0, y = 0, w = 0, h = 0;
|
||||
|
@ -173,6 +189,11 @@ test_scroller(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
|
|||
elm_box_pack_end(bx2, ck4);
|
||||
evas_object_show(ck4);
|
||||
|
||||
ck5 = elm_check_add(win);
|
||||
elm_object_text_set(ck5, "Snap to pages");
|
||||
elm_box_pack_end(bx2, ck5);
|
||||
evas_object_show(ck5);
|
||||
|
||||
sc = elm_scroller_add(win);
|
||||
evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
|
@ -211,6 +232,7 @@ test_scroller(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
|
|||
sc);
|
||||
evas_object_smart_callback_add(ck4, "changed", my_bt_block_movements_y_axis,
|
||||
sc);
|
||||
evas_object_smart_callback_add(ck5, "changed", my_bt_snap_to_pages, sc);
|
||||
|
||||
tb2 = elm_table_add(win);
|
||||
|
||||
|
|
|
@ -1541,8 +1541,29 @@ _elm_scroll_content_pos_set(Eo *obj, void *_pd, va_list *list)
|
|||
eo_do(sid->pan_obj, elm_obj_pan_pos_max_get(&mx, &my));
|
||||
eo_do(sid->pan_obj, elm_obj_pan_pos_min_get(&minx, &miny));
|
||||
eo_do(sid->pan_obj, elm_obj_pan_pos_get(&px, &py));
|
||||
|
||||
if (_paging_is_enabled(sid) && sid->page_snap_horiz)
|
||||
{
|
||||
//we passed one page to the right
|
||||
if (x > sid->current_page.x + sid->pagesize_h)
|
||||
x = sid->current_page.x + sid->pagesize_h;
|
||||
//we passed one page to the left
|
||||
if (x < sid->current_page.x - sid->pagesize_h)
|
||||
x = sid->current_page.x - sid->pagesize_h;
|
||||
}
|
||||
if (_paging_is_enabled(sid) && sid->page_snap_vert)
|
||||
{
|
||||
//we passed one page to the bottom
|
||||
if (y > sid->current_page.y + sid->pagesize_v)
|
||||
y = sid->current_page.y + sid->pagesize_v;
|
||||
//we passed one page to the top
|
||||
if (y < sid->current_page.y - sid->pagesize_v)
|
||||
y = sid->current_page.y - sid->pagesize_v;
|
||||
}
|
||||
|
||||
if (!_elm_config->thumbscroll_bounce_enable)
|
||||
{
|
||||
|
||||
if (x < minx) x = minx;
|
||||
if ((x - minx) > mx) x = mx + minx;
|
||||
if (y < miny) y = miny;
|
||||
|
@ -4174,6 +4195,32 @@ _elm_scroll_freeze_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|||
_elm_scroll_bounce_eval(sid);
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_scroll_page_snap_allow_set(Eo *obj EINA_UNUSED,
|
||||
void *_pd,
|
||||
va_list *list)
|
||||
{
|
||||
Elm_Scrollable_Smart_Interface_Data *sid = _pd;
|
||||
Eina_Bool horiz = va_arg(*list, int);
|
||||
Eina_Bool vert = va_arg(*list, int);
|
||||
|
||||
sid->page_snap_horiz = !!horiz;
|
||||
sid->page_snap_vert = !!vert;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_scroll_page_snap_allow_get(Eo *obj EINA_UNUSED,
|
||||
void *_pd,
|
||||
va_list *list)
|
||||
{
|
||||
Elm_Scrollable_Smart_Interface_Data *sid = _pd;
|
||||
Eina_Bool *horiz = va_arg(*list, Eina_Bool *);
|
||||
Eina_Bool *vert = va_arg(*list, Eina_Bool *);
|
||||
|
||||
if (horiz) *horiz = sid->page_snap_horiz;
|
||||
if (vert) *vert = sid->page_snap_vert;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_scroll_bounce_allow_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||
{
|
||||
|
@ -4542,6 +4589,8 @@ _elm_scrollable_interface_constructor(Eo_Class *klass)
|
|||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_MIRRORED_SET), _elm_scroll_mirrored_set),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_HOLD_SET), _elm_scroll_hold_set),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_FREEZE_SET), _elm_scroll_freeze_set),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_BOUNCE_ALLOW_SET), _elm_scroll_page_snap_allow_set),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_BOUNCE_ALLOW_GET), _elm_scroll_page_snap_allow_get),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_BOUNCE_ALLOW_SET), _elm_scroll_bounce_allow_set),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_BOUNCE_ALLOW_GET), _elm_scroll_bounce_allow_get),
|
||||
EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_SET), _elm_scroll_paging_set),
|
||||
|
@ -4616,6 +4665,12 @@ static const Eo_Op_Description op_desc[] = {
|
|||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_MIRRORED_SET, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_HOLD_SET, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_FREEZE_SET, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_BOUNCE_ALLOW_SET,
|
||||
"Enable/disable page bouncing, for paged scrollers, "
|
||||
"on each axis."),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_BOUNCE_ALLOW_GET,
|
||||
"Get wether page bouncing is enabled,"
|
||||
" for paged scrollers, on each axis"),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_BOUNCE_ALLOW_SET, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_BOUNCE_ALLOW_GET, "description here"),
|
||||
EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_SET, "description here"),
|
||||
|
|
|
@ -192,6 +192,8 @@ enum
|
|||
ELM_SCROLLABLE_INTERFACE_SUB_ID_MIRRORED_SET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_HOLD_SET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_FREEZE_SET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_BOUNCE_ALLOW_SET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_BOUNCE_ALLOW_GET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_BOUNCE_ALLOW_SET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_BOUNCE_ALLOW_GET,
|
||||
ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGING_SET,
|
||||
|
@ -714,6 +716,31 @@ enum
|
|||
*/
|
||||
#define elm_scrollable_interface_freeze_set(freeze) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_FREEZE_SET), EO_TYPECHECK(Eina_Bool, freeze)
|
||||
|
||||
/**
|
||||
* @def elm_scrollable_interface_page_snap_allow_set
|
||||
* @since 1.8
|
||||
*
|
||||
* Enable/disable page bouncing, for paged scrollers, on each axis.
|
||||
*
|
||||
* @param[in] horiz
|
||||
* @param[in] vert
|
||||
*
|
||||
*/
|
||||
#define elm_scrollable_interface_page_snap_allow_set(horiz, vert) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_BOUNCE_ALLOW_SET), EO_TYPECHECK(Eina_Bool, horiz), EO_TYPECHECK(Eina_Bool, vert)
|
||||
|
||||
/**
|
||||
* @def elm_scrollable_interface_page_snap_allow_get
|
||||
* @since 1.8
|
||||
*
|
||||
* Get wether page bouncing is enabled, for paged scrollers, on each
|
||||
* axis.
|
||||
*
|
||||
* @param[out] horiz
|
||||
* @param[out] vert
|
||||
*
|
||||
*/
|
||||
#define elm_scrollable_interface_page_snap_allow_get(horiz, vert) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_PAGE_BOUNCE_ALLOW_GET), EO_TYPECHECK(Eina_Bool *, horiz), EO_TYPECHECK(Eina_Bool *, vert)
|
||||
|
||||
/**
|
||||
* @def elm_scrollable_interface_bounce_allow_set
|
||||
* @since 1.8
|
||||
|
@ -1126,6 +1153,8 @@ struct _Elm_Scrollable_Smart_Interface_Data
|
|||
|
||||
Eina_Bool momentum_animator_disabled : 1;
|
||||
Eina_Bool bounce_animator_disabled : 1;
|
||||
Eina_Bool page_snap_horiz : 1;
|
||||
Eina_Bool page_snap_vert : 1;
|
||||
Eina_Bool wheel_disabled : 1;
|
||||
Eina_Bool hbar_visible : 1;
|
||||
Eina_Bool vbar_visible : 1;
|
||||
|
|
|
@ -1021,6 +1021,28 @@ _child_size_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
|
|||
eo_do((Eo *) obj, elm_scrollable_interface_content_size_get(w, h));
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_scroller_page_snap_set(Evas_Object *obj,
|
||||
Eina_Bool page_snap_h,
|
||||
Eina_Bool page_snap_v)
|
||||
{
|
||||
ELM_SCROLLABLE_CHECK(obj);
|
||||
|
||||
eo_do(obj, elm_scrollable_interface_page_snap_allow_set
|
||||
(page_snap_h, page_snap_v));
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_scroller_page_snap_get(const Evas_Object *obj,
|
||||
Eina_Bool *page_snap_h,
|
||||
Eina_Bool *page_snap_v)
|
||||
{
|
||||
ELM_SCROLLABLE_CHECK(obj);
|
||||
|
||||
eo_do((Eo *) obj, elm_scrollable_interface_page_snap_allow_get
|
||||
(page_snap_h, page_snap_v));
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_scroller_bounce_set(Evas_Object *obj,
|
||||
Eina_Bool h_bounce,
|
||||
|
|
|
@ -133,6 +133,44 @@ EAPI void elm_scroller_region_get(const Evas_Object *ob
|
|||
*/
|
||||
EAPI void elm_scroller_child_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
|
||||
|
||||
/**
|
||||
* @brief Set page snapping behavior of a scroller
|
||||
*
|
||||
* @param obj The scroller object
|
||||
* @param page_h_snap Allow snap horizontally
|
||||
* @param page_v_snap Allow snap vertically
|
||||
*
|
||||
* When scrolling, if a scroller is paged (see
|
||||
* elm_scroller_page_size_set() and elm_scroller_page_relative_set()),
|
||||
* the scroller may snap to pages when being scrolled, i.e., even if
|
||||
* it had momentum to scroll further, it will stop at the next page
|
||||
* boundaries. This is @b disabled, by default, for both axis. This
|
||||
* function will set if it that is enabled or not, for each axis.
|
||||
*
|
||||
* @note If @a obj is not set to have pages, nothing will happen after
|
||||
* this call.
|
||||
*
|
||||
* @since 1.8
|
||||
*
|
||||
* @ingroup Scroller
|
||||
*/
|
||||
EAPI void elm_scroller_page_snap_set(Evas_Object *obj, Eina_Bool page_h_snap, Eina_Bool page_v_snap);
|
||||
|
||||
/**
|
||||
* @brief Get the page snap behaviour of a scroller
|
||||
*
|
||||
* @param obj The Scroller object
|
||||
* @param page_h_snap Will the scroller snap horizontally or not
|
||||
* @param page_v_snap Will the scroller snap vertically or not
|
||||
*
|
||||
* @see elm_scroller_page_snap_set() for more details
|
||||
*
|
||||
* @since 1.8
|
||||
*
|
||||
* @ingroup Scroller
|
||||
*/
|
||||
EAPI void elm_scroller_page_snap_get(const Evas_Object *obj, Eina_Bool *page_h_snap, Eina_Bool *page_v_snap);
|
||||
|
||||
/**
|
||||
* @brief Set bouncing behavior
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue