elm_spinner: Spinner value adjust when round enabled. 98/177298/2
authorWoochan Lee <wc0917.lee@samsung.com>
Fri, 27 Apr 2018 02:13:52 +0000 (11:13 +0900)
committerWoochan Lee <wc0917.lee@samsung.com>
Fri, 27 Apr 2018 04:03:31 +0000 (13:03 +0900)
https://phab.enlightenment.org/D5843

P180419-05492

Change-Id: I50eb08cbff75e7fbe0e5ea7d9fe88a5388943cca

src/lib/elm_spinner.c

index 5379d52db209c73e0af072ce2bdf5c885b24be30..7d4c2e0d5b94827d1551e16286143c2a074134dc 100644 (file)
@@ -250,13 +250,33 @@ _delay_change_timer_cb(void *data)
 
 static Eina_Bool
 _value_set(Evas_Object *obj,
-           double new_val)
+//TIZEN_ONLY(20180427): Spinner value adjust when round enabled.
+           //double new_val)
+           double val, double changed)
+//
 {
+   //TIZEN_ONLY(20180427): Spinner value adjust when round enabled.
+   double new_val;
+   //
+
    ELM_SPINNER_DATA_GET(obj, sd);
 
    if (sd->round > 0)
-     new_val = sd->val_base +
-       (double)((((int)(new_val - sd->val_base)) / sd->round) * sd->round);
+     {
+        //TIZEN_ONLY(20180427): Spinner value adjust when round enabled.
+        //new_val = sd->val_base +
+        //  (double)((((int)(new_val - sd->val_base)) / sd->round) * sd->round);
+        //Spin value changed by entry input.
+        if (changed != 0)
+          new_val = sd->val_base +
+            (double)((((int)((val + changed) - sd->val_base)) / sd->round) * sd->round);
+        else
+          new_val = sd->val_base +
+            (double)((((int)(val - sd->val_base + (sd->round / 2.0))) / sd->round) * sd->round);
+        //
+     }
+   else
+     new_val = val + changed;
 
    if (sd->wrap)
      {
@@ -351,7 +371,10 @@ _drag_cb(void *data,
    if (!strncmp(style, "vertical", 8)) delta *= -1;
    /* 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->val + delta)) _label_write(data);
+   //TIZEN_ONLY(20180427): Spinner value adjust when round enabled.
+   //if (_value_set(data, sd->val + delta)) _label_write(data);
+   if (_value_set(data, sd->val, delta)) _label_write(data);
+   //
    sd->dragging = 1;
 }
 
@@ -439,17 +462,15 @@ _entry_value_apply(Evas_Object *obj)
    val = strtod(str, &end);
    if (((*end != '\0') && (!isspace(*end))) || (fabs(val - sd->val) < DBL_EPSILON)) return;
 
-   //TIZEN_ONLY(20180321): Spinner value adjust when round enabled.
-   if (sd->round > 0)
-     val = sd->val_base + (double)((((int)(val - sd->val_base + (sd->round / 2.0))) / sd->round) * sd->round);
-   //
+   //TIZEN_ONLY(20180427): Spinner value adjust when round enabled.
+   //elm_spinner_value_set(obj, val);
 
-   elm_spinner_value_set(obj, val);
-
-   eo_do(obj, eo_event_callback_call(ELM_SPINNER_EVENT_CHANGED, NULL));
-   ecore_timer_del(sd->delay_change_timer);
-   sd->delay_change_timer = ecore_timer_add(ELM_SPINNER_DELAY_CHANGE_TIME,
-                                            _delay_change_timer_cb, obj);
+   //efl_event_callback_legacy_call(obj, ELM_SPINNER_EVENT_CHANGED, NULL);
+   //ecore_timer_del(sd->delay_change_timer);
+   //sd->delay_change_timer = ecore_timer_add(ELM_SPINNER_DELAY_CHANGE_TIME,
+   //                                         _delay_change_timer_cb, obj);
+   if (_value_set(obj, val, 0.0)) _label_write(obj);
+   //
 }
 
 static int
@@ -754,7 +775,10 @@ _spin_value(void *data)
    if (sd->spin_timer)
      ecore_timer_interval_set(sd->spin_timer, sd->interval);
    */
-   if (_value_set(data, sd->val + real_speed)) _label_write(data);
+   //TIZEN_ONLY(20180427): Spinner value adjust when round enabled.
+   //if (_value_set(data, sd->val + real_speed)) _label_write(data);
+   if (_value_set(data, sd->val, real_speed)) _label_write(data);
+   //
 
    return ECORE_CALLBACK_RENEW;
 }
@@ -1694,7 +1718,12 @@ _elm_spinner_value_set(Eo *obj, Elm_Spinner_Data *sd, double val)
 {
    if (sd->val == val) return;
 
-   sd->val = val;
+   //TIZEN_ONLY(20180427): Spinner value adjust when round enabled.
+   //sd->val = val;
+   sd->val = (sd->round <= 0) ? val : sd->val_base +
+      (double)((((int)(val - sd->val_base + (sd->round / 2.0))) / sd->round) * sd->round);
+   //
+
    sd->val_updated = EINA_FALSE;
 
    if (sd->val < sd->val_min)