elm_spinner: add feature in spinner to change values while dragging relative to the... 57/46957/3
authorgodly.talias <godly.talias@samsung.com>
Thu, 25 Jun 2015 14:27:09 +0000 (16:27 +0200)
committerJaeun Choi <jaeun12.choi@samsung.com>
Thu, 27 Aug 2015 11:06:05 +0000 (04:06 -0700)
Summary:
Currently the values in spinner change while dragging only based on
the amount of pixels dragged, this patch will enable Spinner to change value
based on the speed of dragging so that it will be more user friendly. This
will help users to alter drag values by big amounts if dragged in a good speed.

Test Plan: test_spinner.c in elementary_test

Reviewers: raster, prince.dubey, shilpasingh, cedric

Reviewed By: cedric

Subscribers: poornima.srinivasan, rajeshps, govi

Differential Revision: https://phab.enlightenment.org/D2659

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Conflicts:

AUTHORS
src/lib/elm_authors.h

Change-Id: If7f0fe979f81f32f065b0da2bbc7cb7fc28301ac
Origin: upstream

AUTHORS
src/bin/test_spinner.c
src/lib/elm_authors.h
src/lib/elm_spinner.c
src/lib/elm_widget_spinner.h

diff --git a/AUTHORS b/AUTHORS
index 1e0a28ed2d526421f9b437c005339bd088a0340a..404439a7674e3e7029c225251e0ca9687ad19126 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -163,3 +163,5 @@ Vitalii Vorobiov <vi.vorobiov@samsung.com>
 Jee-Yong Um <conr2d@gmail.com>
 Ji-In Moon <jiin.moon@samsung.com> 
 Subodh Kumar <s7158.kumar@samsung.com>
+Kumar Navneet <k.navneet@samsung.com>
+Godly T Alias <godly.talias@samsung.com>
index e3c2c4dda13d3e8887556378286990a0862f5461..41eb63f48e742ae0c399bd86dcbb55577f463eda 100644 (file)
@@ -35,7 +35,7 @@ test_spinner(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_i
    elm_spinner_label_format_set(sp, "%1.1f units");
    elm_spinner_step_set(sp, 1.3);
    elm_spinner_wrap_set(sp, EINA_TRUE);
-   elm_spinner_min_max_set(sp, -50.0, 250.0);
+   elm_spinner_min_max_set(sp, -5000.0, 5000.0);
    evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
    evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_smart_callback_add(sp, "spinner,drag,start",
index f4cf2f9e8d7038807474832097a9e9e5d951d258..71cc0f6c1c0a516be5a515981927e0b31f050dbf 100644 (file)
  * @author Jae Yong Hwang <j_yong.hwang@@samsung.com>
  * @author Kabeer Khan <kabeer.khan@@samsung.com>
  * @author yinsc <shouchen.yin@@samsung.com>
- * @author Subodh Kumar <s7158.kumar@samsung.com>
+ * @author Subodh Kumar <s7158.kumar@@samsung.com>
+ * @author Kumar Navneet <k.navneet@@samsung.com>
+ * @author Godly T Alias <godly.talias@@samsung.com>
  *
  * Please contact <enlightenment-devel@lists.sourceforge.net> to get in
  * contact with the developers and maintainers.
index 64c6a8c499f6b787ee761d95710d5c52475ba494..c720a47948168ede5a4a89e51ce8913cd28aa9ff 100644 (file)
@@ -217,11 +217,18 @@ _drag_cb(void *data,
    else
      eo_do((Eo *)wd->resize_obj,
            edje_obj_part_drag_value_get("elm.dragable.slider", &pos, NULL));
+   if (sd->drag_prev_pos != 0)
+     sd->drag_val_step = pow((pos - sd->drag_prev_pos), 2);
+   else
+     sd->drag_val_step = 1;
+
 
-   delta = pos * sd->step * _elm_config->scale;
+   delta = sd->drag_val_step * sd->step * _elm_config->scale;
+   if (pos < sd->drag_prev_pos) delta *= -1;
+   sd->drag_prev_pos = pos;
    /* If we are on rtl mode, change the delta to be negative on such changes */
    if (elm_widget_mirrored_get(obj)) delta *= -1;
-   if (_value_set(data, sd->drag_start_val + delta)) _label_write(data);
+   if (_value_set(data, sd->val + delta)) _label_write(data);
    sd->dragging = 1;
 }
 
@@ -233,7 +240,8 @@ _drag_start_cb(void *data,
 {
    ELM_SPINNER_DATA_GET(data, sd);
 
-   sd->drag_start_val = sd->val;
+   sd->drag_prev_pos = 0;
+   sd->drag_val_step = 1;
 
    evas_object_smart_callback_call(obj, SIG_DRAG_START, NULL);
 }
@@ -247,7 +255,8 @@ _drag_stop_cb(void *data,
    ELM_SPINNER_DATA_GET(data, sd);
    ELM_WIDGET_DATA_GET_OR_RETURN(data, wd);
 
-   sd->drag_start_val = 0;
+   sd->drag_prev_pos = 0;
+   sd->drag_val_step = 1;
    edje_object_part_drag_value_set
      (wd->resize_obj, "elm.dragable.slider", 0.0, 0.0);
 
index d0a4939dc31d0653263f3a79e81dee7bfe2565b2..151b704ea1ac7e15920a4460d922de4c61994b9c 100644 (file)
@@ -32,8 +32,7 @@ struct _Elm_Spinner_Data
    const char           *label;
    double                val, val_min, val_max, val_base;
    double                step; /**< step for the value change. 1 by default. */
-   double                drag_start_val; /**< spinner value on drag start.
-                                         this is reset to 0 when drag stops. */
+   double                drag_prev_pos, drag_val_step;
    double                spin_speed, interval, first_interval;
    int                   round;
    Ecore_Timer          *delay_change_timer; /**< a timer for a delay,changed smart callback */