{
if (sid->down.now)
{
- int dodir = 0;
-
if ((sid->scrollto.x.animator) && (!sid->hold) && (!sid->freeze))
{
Evas_Coord px;
if (x < 0) x = -x;
if (y < 0) y = -y;
- if ((sid->one_direction_at_a_time) &&
- (!((sid->down.dir_x) || (sid->down.dir_y))))
+ if (sid->one_direction_at_a_time)
{
- if (x > _elm_config->thumbscroll_threshold)
+ if (!((sid->down.dir_x) || (sid->down.dir_y)) &&
+ (((x * x) + (y * y)) >
+ (_elm_config->thumbscroll_threshold *
+ _elm_config->thumbscroll_threshold)))
{
- if (x > (y * 2))
+ if (sid->one_direction_at_a_time ==
+ ELM_SCROLLER_SINGLE_DIRECTION_SOFT)
{
- sid->down.dir_x = EINA_TRUE;
- sid->down.dir_y = EINA_FALSE;
- dodir++;
+ int dodir = 0;
+ if (x > (y * 2))
+ {
+ sid->down.dir_x = EINA_TRUE;
+ sid->down.dir_y = EINA_FALSE;
+ dodir++;
+ }
+ if (y > (x * 2))
+ {
+ sid->down.dir_x = EINA_FALSE;
+ sid->down.dir_y = EINA_TRUE;
+ dodir++;
+ }
+ if (!dodir)
+ {
+ sid->down.dir_x = EINA_TRUE;
+ sid->down.dir_y = EINA_TRUE;
+ }
}
- }
- if (y > _elm_config->thumbscroll_threshold)
- {
- if (y > (x * 2))
+ else if (sid->one_direction_at_a_time ==
+ ELM_SCROLLER_SINGLE_DIRECTION_HARD)
{
- sid->down.dir_x = EINA_FALSE;
- sid->down.dir_y = EINA_TRUE;
- dodir++;
+ if (x > y)
+ {
+ sid->down.dir_x = EINA_TRUE;
+ sid->down.dir_y = EINA_FALSE;
+ }
+ if (y > x)
+ {
+ sid->down.dir_x = EINA_FALSE;
+ sid->down.dir_y = EINA_TRUE;
+ }
}
}
- if (!dodir)
- {
- sid->down.dir_x = EINA_TRUE;
- sid->down.dir_y = EINA_TRUE;
- }
}
else
{
static void
_elm_scroll_single_direction_set(Evas_Object *obj,
- Eina_Bool single_dir)
+ Elm_Scroller_Single_Direction single_dir)
{
ELM_SCROLL_IFACE_DATA_GET_OR_RETURN(obj, sid);
sid->one_direction_at_a_time = single_dir;
}
-static Eina_Bool
+static Elm_Scroller_Single_Direction
_elm_scroll_single_direction_get(const Evas_Object *obj)
{
- ELM_SCROLL_IFACE_DATA_GET_OR_RETURN_VAL(obj, sid, EINA_FALSE);
+ ELM_SCROLL_IFACE_DATA_GET_OR_RETURN_VAL(obj, sid, ELM_SCROLLER_SINGLE_DIRECTION_SOFT);
return sid->one_direction_at_a_time;
}
sid->bounce_horiz = EINA_TRUE;
sid->bounce_vert = EINA_TRUE;
- sid->one_direction_at_a_time = EINA_TRUE;
+ sid->one_direction_at_a_time = ELM_SCROLLER_SINGLE_DIRECTION_SOFT;
sid->momentum_animator_disabled = EINA_FALSE;
sid->bounce_animator_disabled = EINA_FALSE;
} Elm_Scroller_Policy;
/**
+ * @brief Type that controls how the content is scrolled.
+ *
+ * @see elm_scroller_single_direction_set()
+ */
+typedef enum
+{
+ ELM_SCROLLER_SINGLE_DIRECTION_NONE = 0, /**< Scroll every direction */
+ ELM_SCROLLER_SINGLE_DIRECTION_SOFT, /**< Scroll single direction if the direction is certain*/
+ ELM_SCROLLER_SINGLE_DIRECTION_HARD, /**< Scroll only single direction */
+ ELM_SCROLLER_SINGLE_DIRECTION_LAST
+} Elm_Scroller_Single_Direction;
+
+/**
* @brief Add a new scroller to the parent
*
* @param parent The parent object
*
* @ingroup Scroller
*/
-EAPI Evas_Object *elm_scroller_add(Evas_Object *parent);
+EAPI Evas_Object *elm_scroller_add(Evas_Object *parent);
/**
* @brief Set custom theme elements for the scroller
*
* @ingroup Scroller
*/
-EINA_DEPRECATED EAPI void elm_scroller_custom_widget_base_theme_set(Evas_Object *obj, const char *widget, const char *base);
+EINA_DEPRECATED EAPI void elm_scroller_custom_widget_base_theme_set(Evas_Object *obj, const char *widget, const char *base);
/**
* @brief Make the scroller minimum size limited to the minimum size of the content
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_content_min_limit(Evas_Object *obj, Eina_Bool w, Eina_Bool h);
+EAPI void elm_scroller_content_min_limit(Evas_Object *obj, Eina_Bool w, Eina_Bool h);
/**
* @brief Show a specific virtual region within the scroller content object
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
+EAPI void elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
/**
* @brief Set the scrollbar visibility policy
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v);
+EAPI void elm_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v);
/**
* @brief Gets scrollbar visibility policy
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v);
+EAPI void elm_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v);
+
+/**
+ * @brief Set the type of single direction scroll
+ *
+ * @param obj The scroller object
+ * @param single_dir The type of single direction
+ *
+ * @see elm_scroller_single_direction_get()
+ *
+ * @since 1.8
+ *
+ * @ingroup Scroller
+ */
+EAPI void elm_scroller_single_direction_set(Evas_Object *obj, Elm_Scroller_Single_Direction single_dir);
+
+/**
+ * @brief Get the type of single direction scroll
+ *
+ * @param obj The scroller object
+ * @return the type of single direction
+ *
+ * @see elm_scroller_single_direction_get()
+ *
+ * @since 1.8
+ *
+ * @ingroup Scroller
+ */
+EAPI Elm_Scroller_Single_Direction elm_scroller_single_direction_get(const Evas_Object *obj);
/**
* @brief Get the currently visible content region
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_region_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
+EAPI void elm_scroller_region_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
/**
* @brief Get the size of the content object
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_child_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
+EAPI void elm_scroller_child_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
/**
* @brief Set bouncing behavior
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce);
+EAPI void elm_scroller_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce);
/**
* @brief Get the bounce behaviour
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce);
+EAPI void elm_scroller_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce);
/**
* @brief Set scroll page size relative to viewport size.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_page_relative_set(Evas_Object *obj, double h_pagerel, double v_pagerel);
+EAPI void elm_scroller_page_relative_set(Evas_Object *obj, double h_pagerel, double v_pagerel);
/**
* Get a given scroller widget's scrolling page size, relative to
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_page_relative_get(const Evas_Object *obj, double *h_pagerel, double *v_pagerel);
+EAPI void elm_scroller_page_relative_get(const Evas_Object *obj, double *h_pagerel, double *v_pagerel);
/**
* @brief Set scroll page size.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize);
+EAPI void elm_scroller_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize);
/**
* @brief Retrieve a scroller widget's current page size.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_page_size_get(const Evas_Object *obj, Evas_Coord *h_pagesize, Evas_Coord *v_pagesize);
+EAPI void elm_scroller_page_size_get(const Evas_Object *obj, Evas_Coord *h_pagesize, Evas_Coord *v_pagesize);
/**
* @brief Set the maxium of the movable page at a flicking.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_page_scroll_limit_set(Evas_Object *obj, int page_limit_h, int page_limit_v);
+EAPI void elm_scroller_page_scroll_limit_set(Evas_Object *obj, int page_limit_h, int page_limit_v);
/**
* @brief Get the maxium of the movable page at a flicking.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_page_scroll_limit_get(Evas_Object *obj, int *page_limit_h, int *page_limit_v);
+EAPI void elm_scroller_page_scroll_limit_get(Evas_Object *obj, int *page_limit_h, int *page_limit_v);
/**
* @brief Get scroll current page number.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_current_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber);
+EAPI void elm_scroller_current_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber);
/**
* @brief Get scroll last page number.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_last_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber);
+EAPI void elm_scroller_last_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber);
/**
* Show a specific virtual region within the scroller content object by page number.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_page_show(Evas_Object *obj, int h_pagenumber, int v_pagenumber);
+EAPI void elm_scroller_page_show(Evas_Object *obj, int h_pagenumber, int v_pagenumber);
/**
* Show a specific virtual region within the scroller content object by page number.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_page_bring_in(Evas_Object *obj, int h_pagenumber, int v_pagenumber);
+EAPI void elm_scroller_page_bring_in(Evas_Object *obj, int h_pagenumber, int v_pagenumber);
/**
* @brief Show a specific virtual region within the scroller content object.
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
+EAPI void elm_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
/**
* @brief Set event propagation on a scroller
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_propagate_events_set(Evas_Object *obj, Eina_Bool propagation);
+EAPI void elm_scroller_propagate_events_set(Evas_Object *obj, Eina_Bool propagation);
/**
* @brief Get event propagation for a scroller
*
* @ingroup Scroller
*/
-EAPI Eina_Bool elm_scroller_propagate_events_get(const Evas_Object *obj);
+EAPI Eina_Bool elm_scroller_propagate_events_get(const Evas_Object *obj);
/**
* @brief Set scrolling gravity on a scroller
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_gravity_set(Evas_Object *obj, double x, double y);
+EAPI void elm_scroller_gravity_set(Evas_Object *obj, double x, double y);
/**
* @brief Get scrolling gravity values for a scroller
*
* @ingroup Scroller
*/
-EAPI void elm_scroller_gravity_get(const Evas_Object *obj, double *x, double *y);
+EAPI void elm_scroller_gravity_get(const Evas_Object *obj, double *x, double *y);
/**
* @}