Enlightenment CVS committal Author : englebass Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_slider.c Log Message: Make slider work better with keyboard. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_slider.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- e_slider.c 4 Aug 2007 13:12:41 -0000 1.10 +++ e_slider.c 16 Sep 2007 13:31:10 -0000 1.11 @@ -16,6 +16,7 @@ Evas_Object *edje_obj; double val, val_min, val_max, step_size; int reversed, step_count, horizontal; + int direction; const char *format; Evas_Coord minw, minh; Ecore_Timer *set_timer; @@ -100,6 +101,7 @@ sd->val_min = min; sd->val_max = max; if (sd->val_max < sd->val_min) sd->val_min = sd->val_max; + sd->direction = 0; _e_smart_value_limit(sd); _e_smart_value_update_now(sd); } @@ -124,6 +126,7 @@ if (sd->val_max > sd->val_min) step = step_size / (sd->val_max - sd->val_min); edje_object_part_drag_step_set(sd->edje_obj, "e.dragable.slider", step, step); + sd->direction = 0; _e_smart_value_limit(sd); _e_smart_value_update_now(sd); } @@ -140,6 +143,7 @@ { API_ENTRY return; sd->step_count = step_count; + sd->direction = 0; _e_smart_value_limit(sd); _e_smart_value_update_now(sd); } @@ -257,6 +261,7 @@ static void _e_smart_value_limit(E_Smart_Data *sd) { + printf("direction: %d\n", sd->direction); if (sd->val < sd->val_min) sd->val = sd->val_min; if (sd->val > sd->val_max) sd->val = sd->val_max; if (sd->val_max > sd->val_min) @@ -264,48 +269,32 @@ if (sd->step_count > 0) { double p, s; - double v1, v2; - - p = sd->val_min; + s = (sd->val_max - sd->val_min) / sd->step_count; - v1 = sd->val_min; - v2 = sd->val_max; - while (p <= sd->val_max) - { - p += s; - if ((p <= sd->val) && ((sd->val - p) < (sd->val - v1))) - v1 = p; - if ((p >= sd->val) && ((p - sd->val) < (v2 - sd->val))) - v2 = p; - } - if ((sd->val - v1) < (v2 - sd->val)) - sd->val = v1; + p = sd->val / s; + if (sd->direction == 1) + p = (int)(p + 1); + else if (sd->direction == -1) + p = (int)p; else - sd->val = v2; + p = round(p); + sd->val = p * s; } else if (sd->step_size > 0.0) { - double p, s; - double v1, v2; - - p = sd->val_min; - s = sd->step_size; - v1 = sd->val_min; - v2 = sd->val_max; - while (p <= sd->val_max) - { - p += s; - if ((p <= sd->val) && ((sd->val - p) < (sd->val - v1))) - v1 = p; - if ((p >= sd->val) && ((p - sd->val) < (v2 - sd->val))) - v2 = p; - } - if ((sd->val - v1) < (v2 - sd->val)) - sd->val = v1; + double p; + + p = sd->val / sd->step_size; + if (sd->direction == 1) + p = (int)(p + 1); + else if (sd->direction == -1) + p = (int)p; else - sd->val = v2; + p = round(p); + sd->val = p * sd->step_size; } } + sd->direction = 0; } static void @@ -388,6 +377,7 @@ } else edje_object_part_drag_step(sd->edje_obj, "e.dragable.slider", -sd->step_size, -sd->step_size); + sd->direction = -1; } else if ((!strcmp(ev->keyname, "Down")) || (!strcmp(ev->keyname, "KP_Down")) || @@ -403,16 +393,19 @@ } else edje_object_part_drag_step(sd->edje_obj, "e.dragable.slider", sd->step_size, sd->step_size); + sd->direction = 1; } else if ((!strcmp(ev->keyname, "Home")) || (!strcmp(ev->keyname, "KP_Home"))) { edje_object_part_drag_value_set(sd->edje_obj, "e.dragable.slider", 0., 0.); + sd->direction = 0; } else if ((!strcmp(ev->keyname, "End")) || (!strcmp(ev->keyname, "KP_End"))) { edje_object_part_drag_value_set(sd->edje_obj, "e.dragable.slider", 1., 1.); + sd->direction = 0; } } @@ -446,6 +439,7 @@ sd->step_count = 0; sd->horizontal = 0; sd->format = NULL; + sd->direction = 0; sd->edje_obj = edje_object_add(evas_object_evas_get(obj)); e_theme_edje_object_set(sd->edje_obj, "base/theme/widgets", ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs