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

Reply via email to