}
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__)
{
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;
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);
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);
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;
}
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)
{
Elm_Scrollable_Smart_Interface_Data *sid = _pd;
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),
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"),
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,
#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
*
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;
}
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,
Eina_Bool v_bounce)
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
*
* @param obj The scroller object