Enlightenment CVS committal Author : moom Project : e17 Module : libs/etk
Dir : e17/libs/etk/src/lib Modified Files: etk_colorpicker.c etk_colorpicker.h etk_slider.c etk_slider.h Log Message: * [Slider] The maximum bound of the vertical slider now corresponds to its top end (doesn't seem to be the case with E/Gtk though...). Uses more logical key bindings too (using the down arrow to increase the value of a hslider is a non-sense imho), same for mouse-wheel. Sliders can now be inverted with etk_slider_inverted_set() * [Colorpicker] The colorpicker now uses the label of the sliders instead of its own labels =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_colorpicker.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- etk_colorpicker.c 18 Feb 2007 16:53:24 -0000 1.25 +++ etk_colorpicker.c 21 Feb 2007 05:19:17 -0000 1.26 @@ -264,14 +264,12 @@ { etk_widget_show(cp->alpha_slider); etk_widget_show(cp->alpha_name_label); - etk_widget_show(cp->alpha_value_label); etk_range_value_set(ETK_RANGE(cp->alpha_slider), cp->current_color.a); } else { etk_widget_hide(cp->alpha_slider); etk_widget_hide(cp->alpha_name_label); - etk_widget_hide(cp->alpha_value_label); cp->current_color.a = 255; } etk_object_notify(ETK_OBJECT(cp), "use_alpha"); @@ -355,7 +353,7 @@ etk_table_attach_default(ETK_TABLE(cp->main_table), cp->picker_widget, 0, 0, 0, 0); etk_widget_show(cp->picker_widget); - cp->component_table = etk_table_new(3, 7, ETK_FALSE); + cp->component_table = etk_table_new(2, 7, ETK_FALSE); etk_widget_internal_set(cp->component_table, ETK_TRUE); etk_table_attach_default(ETK_TABLE(cp->main_table), cp->component_table, 1, 1, 0, 0); etk_widget_show(cp->component_table); @@ -373,6 +371,7 @@ etk_widget_show(cp->radios[i]); cp->sliders[i] = etk_hslider_new(0.0, _etk_colorpicker_max_values[i], 0.0, steps[i], steps[i] * 5); + etk_slider_label_set(ETK_SLIDER(cp->sliders[i]), "%.0f"); etk_widget_theme_parent_set(cp->sliders[i], ETK_WIDGET(cp)); etk_widget_internal_set(cp->sliders[i], ETK_TRUE); etk_table_attach(ETK_TABLE(cp->component_table), cp->sliders[i], 1, 1, i, i, @@ -381,14 +380,6 @@ cp->sliders_image[i] = NULL; - cp->value_labels[i] = etk_label_new("0"); - etk_widget_internal_set(cp->value_labels[i], ETK_TRUE); - /* TODO: this sucks.. the width shouldn't be hardcoded.. */ - etk_widget_size_request_set(cp->value_labels[i], 28, -1); - etk_table_attach(ETK_TABLE(cp->component_table), cp->value_labels[i], 2, 2, i, i, - 0, 0, ETK_TABLE_HFILL | ETK_TABLE_VEXPAND); - etk_widget_show(cp->value_labels[i]); - etk_signal_connect("toggled", ETK_OBJECT(cp->radios[i]), ETK_CALLBACK(_etk_colorpicker_radio_toggled_cb), cp); etk_signal_connect("realize", ETK_OBJECT(cp->sliders[i]), @@ -407,17 +398,11 @@ 0, 0, ETK_TABLE_HFILL | ETK_TABLE_VEXPAND); cp->alpha_slider = etk_hslider_new(0.0, 255.0, 255.0, 10, 5.0); + etk_slider_label_set(ETK_SLIDER(cp->alpha_slider), "%.0f"); etk_widget_internal_set(cp->alpha_slider, ETK_TRUE); etk_table_attach(ETK_TABLE(cp->component_table), cp->alpha_slider, 1, 1, 6, 6, 0, 0, ETK_TABLE_HFILL | ETK_TABLE_EXPAND); - cp->alpha_value_label = etk_label_new("255"); - etk_widget_internal_set(cp->alpha_value_label, ETK_TRUE); - /* TODO: this sucks.. the width shouldn't be hardcoded.. */ - etk_widget_size_request_set(cp->alpha_value_label, 28, -1); - etk_table_attach(ETK_TABLE(cp->component_table), cp->alpha_value_label, 2, 2, 6, 6, - 0, 0, ETK_TABLE_HFILL | ETK_TABLE_VEXPAND); - etk_signal_connect("value_changed", ETK_OBJECT(cp->alpha_slider), ETK_CALLBACK(_etk_colorpicker_alpha_slider_value_changed_cb), cp); } @@ -727,7 +712,6 @@ Etk_Color color; Etk_Bool update_sp_image; Etk_Bool update_vp_image; - char string[10]; float h, s, v; int i; @@ -746,13 +730,6 @@ else if (i == cp->sp_ycomponent) cp->sp_ypos = value / _etk_colorpicker_max_values[i]; - /* We update the corresponding label */ - if (i == ETK_COLORPICKER_S || i == ETK_COLORPICKER_V) - snprintf(string, 10, "%d", (int)(value * 100)); - else - snprintf(string, 10, "%d",(int)value); - etk_label_set(ETK_LABEL(cp->value_labels[i]), string); - if (cp->ignore_value_changed) return; @@ -841,13 +818,9 @@ Etk_Colorpicker *cp; Etk_Widget *slider; Etk_Color color; - char string[10]; if (!(slider = ETK_WIDGET(object)) || !(cp = ETK_COLORPICKER(data))) return; - - snprintf(string, 10, "%d", (int)(value)); - etk_label_set(ETK_LABEL(cp->alpha_value_label), string); /* TODO: do we really need that?? */ if (cp->ignore_value_changed) =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_colorpicker.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- etk_colorpicker.h 28 Jan 2007 17:46:04 -0000 1.12 +++ etk_colorpicker.h 21 Feb 2007 05:19:17 -0000 1.13 @@ -75,12 +75,10 @@ /* Component widgets */ Etk_Widget *component_table; Etk_Widget *radios[6]; - Etk_Widget *value_labels[6]; /* Alpha slider */ Etk_Widget *alpha_slider; Etk_Widget *alpha_name_label; - Etk_Widget *alpha_value_label; /* Current color objects */ Etk_Widget *color_table; =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_slider.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- etk_slider.c 20 Feb 2007 21:55:25 -0000 1.15 +++ etk_slider.c 21 Feb 2007 05:19:17 -0000 1.16 @@ -15,7 +15,8 @@ enum Etk_Slider_Property_Id { - ETK_SLIDER_LABEL_FORMAT_PROPERTY + ETK_SLIDER_LABEL_FORMAT_PROPERTY, + ETK_SLIDER_INVERTED_PROPERTY }; static void _etk_slider_constructor(Etk_Slider *slider); @@ -53,6 +54,8 @@ etk_type_property_add(slider_type, "label_format", ETK_SLIDER_LABEL_FORMAT_PROPERTY, ETK_PROPERTY_STRING, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_string(NULL)); + etk_type_property_add(slider_type, "inverted", ETK_SLIDER_INVERTED_PROPERTY, + ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_FALSE)); slider_type->property_set = _etk_slider_property_set; slider_type->property_get = _etk_slider_property_get; @@ -161,6 +164,39 @@ return slider->format; } +/** + * @brief Sets whether or not the slider is inverted. An inverted slider has its ends inverted: the maximum bound is + * at the left end for an Etk_HSlider, or at the bottom end (for an Etk_VSlider). + * @param slider a slider + * @param inverted ETK_TRUE to invert the slider, ETK_FALSE otherwise + */ +void etk_slider_inverted_set(Etk_Slider *slider, Etk_Bool inverted) +{ + if (!slider || slider->inverted == inverted) + return; + + slider->inverted = inverted; + if (ETK_WIDGET(slider)->theme_object) + { + _etk_slider_value_changed_handler(ETK_RANGE(slider), ETK_RANGE(slider)->value); + etk_widget_theme_signal_emit(ETK_WIDGET(slider), + inverted ? "etk,state,inverted" : "etk,state,normal", ETK_FALSE); + } + etk_object_notify(ETK_OBJECT(slider), "inverted"); +} + +/** + * @brief Gets whether or not the slider is inverted + * @param slider a slider + * @return Returns ETK_TRUE if the slider is inverted, ETK_FALSE otherwise + */ +Etk_Bool etk_slider_inverted_get(Etk_Slider *slider) +{ + if (!slider) + return ETK_FALSE; + return slider->inverted; +} + /************************** * * Etk specific functions @@ -173,8 +209,9 @@ if (!slider) return; - slider->dragging = ETK_FALSE; slider->format = NULL; + slider->inverted = ETK_FALSE; + slider->dragging = ETK_FALSE; ETK_RANGE(slider)->value_changed = _etk_slider_value_changed_handler; etk_signal_connect("realize", ETK_OBJECT(slider), ETK_CALLBACK(_etk_slider_realize_cb), NULL); @@ -205,6 +242,9 @@ case ETK_SLIDER_LABEL_FORMAT_PROPERTY: etk_slider_label_set(slider, etk_property_value_string_get(value)); break; + case ETK_SLIDER_INVERTED_PROPERTY: + etk_slider_inverted_set(slider, etk_property_value_bool_get(value)); + break; default: break; } @@ -223,6 +263,9 @@ case ETK_SLIDER_LABEL_FORMAT_PROPERTY: etk_property_value_string_set(value, slider->format); break; + case ETK_SLIDER_INVERTED_PROPERTY: + etk_property_value_bool_set(value, slider->inverted); + break; default: break; } @@ -243,6 +286,8 @@ if (!(slider = ETK_SLIDER(object)) || !(theme_object = ETK_WIDGET(slider)->theme_object)) return; + etk_widget_theme_signal_emit(ETK_WIDGET(slider), + slider->inverted ? "etk,state,inverted" : "etk,state,normal", ETK_FALSE); etk_widget_theme_signal_emit(ETK_WIDGET(object), slider->format ? "etk,action,show,label" : "etk,action,hide,label", ETK_TRUE); edje_object_signal_callback_add(theme_object, "drag*", "etk.dragable.slider", @@ -256,22 +301,24 @@ { Etk_Range *range; Etk_Bool propagate = ETK_FALSE; + int dir; if (!(range = ETK_RANGE(object))) return; - if (strcmp(event->keyname, "Right") == 0 || strcmp(event->keyname, "Down") == 0) - etk_range_value_set(range, range->value + range->step_increment); - else if (strcmp(event->keyname, "Left") == 0 || strcmp(event->keyname, "Up") == 0) - etk_range_value_set(range, range->value - range->step_increment); + dir = ETK_SLIDER(range)->inverted ? -1 : 1; + if (strcmp(event->keyname, "Right") == 0 || strcmp(event->keyname, "Up") == 0) + etk_range_value_set(range, range->value + dir * range->step_increment); + else if (strcmp(event->keyname, "Left") == 0 || strcmp(event->keyname, "Down") == 0) + etk_range_value_set(range, range->value - dir * range->step_increment); else if (strcmp(event->keyname, "Home") == 0) etk_range_value_set(range, range->lower); else if (strcmp(event->keyname, "End") == 0) etk_range_value_set(range, range->upper); else if (strcmp(event->keyname, "Next") == 0) - etk_range_value_set(range, range->value + range->page_increment); + etk_range_value_set(range, range->value - dir * range->page_increment); else if (strcmp(event->keyname, "Prior") == 0) - etk_range_value_set(range, range->value - range->page_increment); + etk_range_value_set(range, range->value + dir * range->page_increment); else propagate = ETK_TRUE; @@ -282,12 +329,14 @@ /* Called when the user wants to change the value with the mouse wheel */ static void _etk_slider_mouse_wheel(Etk_Object *object, Etk_Event_Mouse_Wheel *event, void *data) { - Etk_Range *slider_range; + Etk_Range *range; + int dir; - if (!(slider_range = ETK_RANGE(object))) + if (!(range = ETK_RANGE(object))) return; - etk_range_value_set(slider_range, slider_range->value + event->z * slider_range->step_increment); + dir = ETK_SLIDER(range)->inverted ? 1 : -1; + etk_range_value_set(range, range->value + dir * event->z * range->step_increment); etk_signal_stop(); } @@ -307,9 +356,16 @@ else if (strcmp(emission, "drag") == 0) { if (ETK_IS_HSLIDER(range)) + { edje_object_part_drag_value_get(obj, "etk.dragable.slider", &v, NULL); + v = ETK_SLIDER(range)->inverted ? (1.0 - v) : v; + } else + { edje_object_part_drag_value_get(obj, "etk.dragable.slider", NULL, &v); + v = ETK_SLIDER(range)->inverted ? v : (1.0 - v); + } + etk_range_value_set(range, range->lower + v * (range->upper - range->lower)); } } @@ -332,15 +388,22 @@ if (!slider->dragging) { if (ETK_IS_HSLIDER(slider)) + { + percent = slider->inverted ? (1.0 - percent) : percent; edje_object_part_drag_value_set(theme_object, "etk.dragable.slider", percent, 0.0); + } else + { + percent = slider->inverted ? percent : (1.0 - percent); edje_object_part_drag_value_set(theme_object, "etk.dragable.slider", 0.0, percent); + } } _etk_slider_label_update(slider); } /* Called when the range of the slider is changed */ +/* TODO: do we need that? _etk_slider_value_changed_handler() might be good enough? */ static void _etk_slider_range_changed_cb(Etk_Object *object, const char *property_name, void *data) { Etk_Range *range; @@ -376,7 +439,7 @@ if (!slider || !slider->format) return; - snprintf(label, sizeof(label), slider->format, etk_range_value_get(ETK_RANGE(slider))); + snprintf(label, sizeof(label), slider->format, ETK_RANGE(slider)->value); etk_widget_theme_part_text_set(ETK_WIDGET(slider), "etk.text.label", label); } @@ -396,6 +459,8 @@ * Since Etk_Slider inherits from Etk_Range, you can use all the @a etk_range_*() functions to get or set the value of * a slider, or to change its bounds. You can also use the @a "value_changed" signal to be notified when the value * of a slider is changed. @n + * By default, the maximum bound of an Etk_HSlider is the right end, and the top end for an Etk_VSlider. But you can + * invert the ends of a slider with etk_slider_inverted_set(). @n * Sliders can also have their own label. For example, if you want to use a slider to control a value in centimeters, * you can add the associated label with: * @code @@ -416,4 +481,9 @@ * @prop_type String (char *) * @prop_rw * @prop_val NULL + * \par + * @prop_name "inverted": Whether or not the slider is inverted + * @prop_type Boolean (char *) + * @prop_rw + * @prop_val ETK_FALSE */ =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_slider.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- etk_slider.h 20 Feb 2007 20:50:19 -0000 1.4 +++ etk_slider.h 21 Feb 2007 05:19:17 -0000 1.5 @@ -43,6 +43,7 @@ Etk_Range range; char *format; + Etk_Bool inverted; Etk_Bool dragging; }; @@ -77,6 +78,8 @@ void etk_slider_label_set(Etk_Slider *slider, const char *label_format); const char *etk_slider_label_get(Etk_Slider *slider); +void etk_slider_inverted_set(Etk_Slider *slider, Etk_Bool inverted); +Etk_Bool etk_slider_inverted_get(Etk_Slider *slider); /** @} */ ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs