Enlightenment CVS committal

Author  : moom
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_cache.c etk_canvas.c etk_canvas.h etk_check_button.c 
        etk_check_button.h etk_colorpicker.c etk_colorpicker.h 
        etk_frame.c etk_shadow.c etk_signal_callback.h 


Log Message:
* [Canvas] Don't resize the object when adding it.
* [Colorpicker] Fix bug where "color_changed" signal where not emitted 
or emitted twice
* [Colorpicker] Rename the swallow parts of the theme-groups
* Doc++ and cleanup


===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_cache.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- etk_cache.c 17 Jan 2007 21:46:56 -0000      1.14
+++ etk_cache.c 23 Feb 2007 20:44:41 -0000      1.15
@@ -300,5 +300,11 @@
  * @addtogroup Etk_Cache
  *
  * You will almost never have to use Etk_Cache directly, except if you are 
implementing a new widget that needs to
- * load a lot of images efficiently, or if you are creating a new tree-model 
that displays images.
+ * load a lot of images efficiently, or if you are creating a new tree-model 
that displays images. @n
+ *
+ * The cache system is a simple pool where you can store a limited number of 
Evas objects associated to a filename and
+ * to a key. If you try to add a new object with etk_cache_add() while the 
cache is already full, the oldest object
+ * of the cache will be destroyed. You can then retrieve a cached object from 
its filename/key with etk_cache_find(). @n
+ * You can also dynamically change the maximum size of the cache system with 
etk_cache_size_set() and know the current
+ * number of cached objects with etk_cache_num_objects_get().
  */
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_canvas.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- etk_canvas.c        20 Oct 2006 17:51:44 -0000      1.17
+++ etk_canvas.c        23 Feb 2007 20:44:41 -0000      1.18
@@ -27,7 +27,7 @@
  * @brief Gets the type of an Etk_Canvas
  * @return Returns the type of an Etk_Canvas
  */
-Etk_Type *etk_canvas_type_get()
+Etk_Type *etk_canvas_type_get(void)
 {
    static Etk_Type *canvas_type = NULL;
 
@@ -44,22 +44,21 @@
  * @brief Creates a new canvas
  * @return Returns the new canvas widget
  */
-Etk_Widget *etk_canvas_new()
+Etk_Widget *etk_canvas_new(void)
 {
    return etk_widget_new(ETK_CANVAS_TYPE, NULL);
 }
 
 /**
- * @brief Adds an evas object to the canvas. The object will be moved to the 
top left corner of the canvas
- * and will be resized to 32x32. The object will also be clipped against the 
canvas. @n
- * You can then use any Evas function to control the object
+ * @brief Adds an Evas object to the canvas. The object will be moved to the 
top left corner of the canvas and
+ * will be clipped against the canvas. You can then use any Evas function to 
control the object
  * @param canvas a canvas
  * @param object the object to add
- * @return Returns ETK_TRUE on success, or ETK_FALSE on failure
- * (probably because the canvas and the object do not belong to the same evas)
+ * @return Returns ETK_TRUE on success, or ETK_FALSE on failure (probably 
because the canvas and
+ * the object do not belong to the same Evas)
  * @note The object will be automatically deleted when the canvas is destroyed
  * @warning The object position remains relative to the window, and not to the 
canvas itself
- * (See the detailed description Etk_Canvas, at the top of this page, for more 
information)
+ * (See the detailed description of Etk_Canvas, at the top of this page, for 
more information)
  */
 Etk_Bool etk_canvas_object_add(Etk_Canvas *canvas, Evas_Object *object)
 {
@@ -78,7 +77,6 @@
    if ((result = etk_widget_member_object_add(ETK_WIDGET(canvas), object)))
    {
       evas_object_move(object, cx, cy);
-      evas_object_resize(object, 32, 32);
       evas_object_clip_set(object, canvas->clip);
       evas_object_show(canvas->clip);
       
@@ -90,7 +88,7 @@
 }
 
 /**
- * @brief Removes an evas object from the canvas. The evas object will also be 
automatically hidden
+ * @brief Removes an Evas object from the canvas. The removed object will be 
automatically hidden
  * @param canvas a canvas
  * @param object the evas object to remove
  */
@@ -115,13 +113,13 @@
 }
 
 /**
- * @brief Moves an Evas Object to position ( @a x, @a y ), relatively to the 
canvas top-left corner.
+ * @brief Moves an Evas object to position ( @a x, @a y ), relatively to the 
canvas' top-left corner.
  * @param canvas a canvas
- * @param object the object to move. The object does not necessarily belong to 
the canvas
- * @param x the x component of the position where to move the object, relative 
to the canvas top-left corner
- * @param y the y component of the position where to move the object, relative 
to the canvas top-left corner
- * @note You can still use evas_object_move(), but the position passed to 
evas_object_move() is relative to the evas,
- * not to the canvas.
+ * @param object the object to move
+ * @param x the x component of the position where to move the object, relative 
to the canvas' top-left corner
+ * @param y the y component of the position where to move the object, relative 
to the canvas' top-left corner
+ * @note You can still use evas_object_move() to move an object of the canvas, 
but the position passed to
+ * evas_object_move() is relative to the Evas, not to the canvas.
  */
 void etk_canvas_object_move(Etk_Canvas *canvas, Evas_Object *object, int x, 
int y)
 {
@@ -135,17 +133,17 @@
 }
 
 /**
- * @brief Gets the geometry of an Evas Object. The returned position will be 
relative to the canvas top-left corner
+ * @brief Gets the geometry of an Evas Object. The returned position will be 
relative to the canvas' top-left corner
  * @param canvas a canvas
- * @param object the object to get the position of. The object does not 
necessarily belong to the canvas
+ * @param object the object to get the geomtry of
  * @param x the location where to store the x component of the position of the 
object,
- * relative to the canvas top-left corner
+ * relative to the canvas' top-left corner
  * @param y the location where to store the y component of the position of the 
object,
- * relative to the canvas top-left corner
+ * relative to the canvas' top-left corner
  * @param w the location where to store the width of the object
  * @param h the location where to store the height of the object
  * @note You can still use evas_object_geometry_get(), but the position 
returned by evas_object_geometry_get() is
- * relative to the evas, not to the canvas.
+ * relative to the Evas, not to the canvas.
  */
 void etk_canvas_object_geometry_get(Etk_Canvas *canvas, Evas_Object *object, 
int *x, int *y, int *w, int *h)
 {
@@ -229,6 +227,7 @@
       return;
    
    canvas->clip = NULL;
+   evas_list_free(canvas->objects);
    canvas->objects = NULL;
 }
 
@@ -257,9 +256,9 @@
  * @addtogroup Etk_Canvas
  *
  * @image html widgets/canvas.png
- * To add an object to a canvas, the object and the canvas should belong to 
the same evas. It means the canvas has to be
- * realized when you create the objects. You can for example create the 
objects in a callback connected to the "realize"
- * signal of the canvas widget.
+ * To add an object to a canvas, the object and the canvas should belong to 
the same evas. It means the canvas has
+ * to be realized when you create the objects. You can for example create the 
objects in a callback connected to the
+ * @b "realize" signal of the canvas widget.
  * @code
  * etk_signal_connect("realize", ETK_OBJECT(canvas), 
ETK_CALLBACK(canvas_realize_cb), NULL),
  *
@@ -274,9 +273,9 @@
  * }
  * @endcode @n
  * 
- * Once an object is added to the canvas, you can use any evas_object_* 
functions to control it. @n
- * You just have to keep in mind that calling evas_object_move() on an object 
belonging to the canvas
- * will move the object relatively to the top-left corner of the window, and 
not to the top corner of the canvas itself. @n
+ * Once an object is added to the canvas, you can use any @a evas_object_*() 
functions to control it. @n
+ * You just have to keep in mind that calling evas_object_move() on an object 
belonging to the canvas will move
+ * the object relatively to the top-left corner of the window, and not to the 
top corner of the canvas itself. @n
  * So if you want to move your object to the position (200, 300) inside the 
canvas, you first have to get the position
  * (cx, cy) of the canvas and then to move the object relatively to it: @n
  * @code
@@ -286,7 +285,7 @@
  * The function etk_canvas_object_move() does that for you. @n @n
  *
  * When the canvas is moved, the objects belonging to it are automatically 
moved with it,
- * but you might want to add a notification callback to the @a "geometry" 
property of the canvas widget, which will be
+ * but you might want to add a notification callback to the @b "geometry" 
property of the canvas widget, which will be
  * called each time the geometry of the canvas is changed. That way, you can 
resize the objects when the size of the
  * canvas is modified: @n
  * @code
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_canvas.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- etk_canvas.h        6 Oct 2006 17:04:14 -0000       1.7
+++ etk_canvas.h        23 Feb 2007 20:44:41 -0000      1.8
@@ -19,6 +19,7 @@
 /** Checks if the object is an Etk_Canvas */
 #define ETK_IS_CANVAS(obj)    (ETK_OBJECT_CHECK_TYPE((obj), ETK_CANVAS_TYPE))
 
+
 /**
  * @brief @widget A widget that can contain any type of Evas_Object
  * @structinfo
@@ -33,8 +34,9 @@
    Evas_List *objects;
 };
 
-Etk_Type   *etk_canvas_type_get();
-Etk_Widget *etk_canvas_new();
+
+Etk_Type   *etk_canvas_type_get(void);
+Etk_Widget *etk_canvas_new(void);
 
 Etk_Bool etk_canvas_object_add(Etk_Canvas *canvas, Evas_Object *object);
 void     etk_canvas_object_remove(Etk_Canvas *canvas, Evas_Object *object);
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_check_button.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- etk_check_button.c  6 Oct 2006 17:04:14 -0000       1.8
+++ etk_check_button.c  23 Feb 2007 20:44:41 -0000      1.9
@@ -18,7 +18,7 @@
  * @brief Gets the type of an Etk_Check_Button
  * @return Returns the type of an Etk_Check_Button
  */
-Etk_Type *etk_check_button_type_get()
+Etk_Type *etk_check_button_type_get(void)
 {
    static Etk_Type *check_button_type = NULL;
 
@@ -35,7 +35,7 @@
  * @brief Creates a new check button
  * @return Returns the new check button widget
  */
-Etk_Widget *etk_check_button_new()
+Etk_Widget *etk_check_button_new(void)
 {
    return etk_widget_new(ETK_CHECK_BUTTON_TYPE, "theme_group", "check_button",
       "focusable", ETK_TRUE, "xalign", 0.0, NULL);
@@ -64,6 +64,13 @@
  * @addtogroup Etk_Check_Button
  *
  * @image html widgets/check_button.png
+ *
+ * Since Etk_Check_Button inherits from Etk_Toggle_Button, you can use the @a 
etk_toggle_button_*() functions to
+ * change the state of the check-button. For example, to know if the button is 
checked, you should call
+ * etk_toggle_button_active_get(). @n
+ * You can also be notified when the state of the check button is changed with 
the @b "toggled" signal of
+ * Etk_Toggle_Button.
+ *
  * \par Object Hierarchy:
  * - Etk_Object
  *   - Etk_Widget
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_check_button.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- etk_check_button.h  6 Oct 2006 17:04:14 -0000       1.4
+++ etk_check_button.h  23 Feb 2007 20:44:41 -0000      1.5
@@ -29,8 +29,9 @@
    Etk_Toggle_Button toggle_button;
 };
 
-Etk_Type   *etk_check_button_type_get();
-Etk_Widget *etk_check_button_new();
+
+Etk_Type   *etk_check_button_type_get(void);
+Etk_Widget *etk_check_button_new(void);
 Etk_Widget *etk_check_button_new_with_label(const char *label);
 
 /** @} */
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_colorpicker.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- etk_colorpicker.c   21 Feb 2007 05:19:17 -0000      1.26
+++ etk_colorpicker.c   23 Feb 2007 20:44:41 -0000      1.27
@@ -2,12 +2,10 @@
 #include "etk_colorpicker.h"
 #include <stdlib.h>
 #include <stdint.h>
-#include <Edje.h>
 #include "etk_table.h"
 #include "etk_slider.h"
 #include "etk_label.h"
 #include "etk_radio_button.h"
-#include "etk_theme.h"
 #include "etk_signal.h"
 #include "etk_signal_callback.h"
 #include "etk_utils.h"
@@ -75,8 +73,9 @@
 static void _etk_colorpicker_vp_move_resize(Etk_Colorpicker *cp, int x, int y, 
int w, int h);
 static void _etk_colorpicker_sp_cursor_replace(Etk_Colorpicker *cp);
 static void _etk_colorpicker_vp_cursor_replace(Etk_Colorpicker *cp);
-
 static void _etk_colorpicker_sp_cursor_move(Etk_Colorpicker *cp, float 
xpercent, float ypercent);
+
+static void _etk_colorpicker_update_from_sliders(Etk_Colorpicker *cp, 
Etk_Colorpicker_Mode mode, Etk_Bool update_sp, Etk_Bool update_vp);
 static void _etk_colorpicker_update(Etk_Colorpicker *cp, Etk_Bool sp_image, 
Etk_Bool sp_cursor, Etk_Bool vp_image, Etk_Bool vp_cursor);
 static void _etk_colorpicker_sp_image_update(Etk_Colorpicker *cp);
 static void _etk_colorpicker_sp_cursor_update(Etk_Colorpicker *cp);
@@ -144,9 +143,6 @@
  */
 void etk_colorpicker_mode_set(Etk_Colorpicker *cp, Etk_Colorpicker_Mode mode)
 {
-   float value;
-   int i;
-   
    if (!cp || (cp->mode == mode))
       return;
    
@@ -180,20 +176,8 @@
          break;
    }
    
-   /* Update the colorpicker */
-   for (i = (mode / 3) * 3; i < ((mode / 3) + 1) * 3; i++)
-   {
-      value = etk_range_value_get(ETK_RANGE(cp->sliders[i]));
-      if (i == mode)
-         cp->vp_pos = value / _etk_colorpicker_max_values[i];
-      else if (i == cp->sp_xcomponent)
-         cp->sp_xpos = value / _etk_colorpicker_max_values[i];
-      else if (i == cp->sp_ycomponent)
-         cp->sp_ypos = value / _etk_colorpicker_max_values[i];
-   }
-   _etk_colorpicker_update(cp, ETK_TRUE, ETK_TRUE, ETK_TRUE, ETK_TRUE);
-   
    cp->mode = mode;
+   _etk_colorpicker_update_from_sliders(cp, mode, ETK_TRUE, ETK_TRUE);
    etk_object_notify(ETK_OBJECT(cp), "color_mode");
 }
 
@@ -222,14 +206,15 @@
       return;
    }
    
-   /* TODO: this may bug if the B component is not changed... */
-   /* TODO: this may emit the signal twice... */
    cp->ignore_value_changed = ETK_TRUE;
    etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_R]), color.r);
    etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_G]), color.g);
-   cp->ignore_value_changed = ETK_FALSE;
    etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_B]), color.b);
    etk_range_value_set(ETK_RANGE(cp->alpha_slider), color.a);
+   cp->ignore_value_changed = ETK_FALSE;
+   
+   _etk_colorpicker_update_from_sliders(cp, ETK_COLORPICKER_R, ETK_TRUE, 
ETK_TRUE);
+   etk_signal_emit(_etk_colorpicker_signals[ETK_CP_COLOR_CHANGED_SIGNAL], 
ETK_OBJECT(cp), NULL);
 }
 
 /**
@@ -263,13 +248,13 @@
    if (cp->use_alpha)
    {
       etk_widget_show(cp->alpha_slider);
-      etk_widget_show(cp->alpha_name_label);
+      etk_widget_show(cp->alpha_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_label);
       cp->current_color.a = 255;
    }
    etk_object_notify(ETK_OBJECT(cp), "use_alpha");
@@ -296,12 +281,11 @@
 /* Initializes the colorpicker */
 static void _etk_colorpicker_constructor(Etk_Colorpicker *cp)
 {
-   Etk_Widget *cp_widget;
    char *labels[6] = { _("H"), _("S"), _("V"), _("R"), _("G"), _("B") };
    float steps[6] = { 1.0, 0.01, 0.01, 1.0, 1.0, 1.0 };
    int i;
 
-   if (!(cp_widget = ETK_WIDGET(cp)))
+   if (!cp)
       return;
    
    cp->mode = ETK_COLORPICKER_H;
@@ -339,13 +323,12 @@
    cp->vp_cursor_needs_update = ETK_FALSE;
    cp->sliders_need_update = ETK_FALSE;
    cp->ignore_value_changed = ETK_FALSE;
-   cp->emit_signal = ETK_TRUE;
    
    
    /* We create the widgets */
    cp->main_table = etk_table_new(2, 2, ETK_FALSE);
    etk_widget_internal_set(cp->main_table, ETK_TRUE);
-   etk_widget_parent_set(cp->main_table, cp_widget);
+   etk_widget_parent_set(cp->main_table, ETK_WIDGET(cp));
    etk_widget_show(cp->main_table);
    
    cp->picker_widget = etk_widget_new(ETK_WIDGET_TYPE, "theme_group", 
"picker", "theme_parent", cp, NULL);
@@ -365,9 +348,9 @@
          cp->radios[i] = etk_radio_button_new_with_label(labels[i], NULL);
       else
          cp->radios[i] = 
etk_radio_button_new_with_label_from_widget(labels[i], 
ETK_RADIO_BUTTON(cp->radios[0]));
+      etk_widget_internal_set(cp->radios[i], ETK_TRUE);
       etk_table_attach(ETK_TABLE(cp->component_table), cp->radios[i], 0, 0, i, 
i,
          0, 0, ETK_TABLE_HFILL | ETK_TABLE_VEXPAND);
-      etk_widget_internal_set(cp->radios[i], ETK_TRUE);
       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);
@@ -392,9 +375,9 @@
    
    /* Alpha slider */
    {
-      cp->alpha_name_label = etk_label_new(_("Alpha"));
-      etk_widget_internal_set(cp->alpha_name_label, ETK_TRUE);
-      etk_table_attach(ETK_TABLE(cp->component_table), cp->alpha_name_label, 
0, 0, 6, 6,
+      cp->alpha_label = etk_label_new(_("Alpha"));
+      etk_widget_internal_set(cp->alpha_label, ETK_TRUE);
+      etk_table_attach(ETK_TABLE(cp->component_table), cp->alpha_label, 0, 0, 
6, 6,
          0, 0, ETK_TABLE_HFILL | ETK_TABLE_VEXPAND);
       
       cp->alpha_slider = etk_hslider_new(0.0, 255.0, 255.0, 10, 5.0);
@@ -429,16 +412,16 @@
       0, 0, ETK_TABLE_HFILL | ETK_TABLE_HEXPAND);
    etk_widget_show(cp->current_color_widget);
    
-   
-   cp_widget->size_request = _etk_colorpicker_size_request;
-   cp_widget->size_allocate = _etk_colorpicker_size_allocate;
-   
    etk_signal_connect("realize", ETK_OBJECT(cp->picker_widget), 
ETK_CALLBACK(_etk_colorpicker_realize_cb), cp);
    etk_signal_connect("unrealize", ETK_OBJECT(cp->picker_widget), 
ETK_CALLBACK(_etk_colorpicker_unrealize_cb), cp);
    etk_signal_connect("realize", ETK_OBJECT(cp->current_color_widget),
       ETK_CALLBACK(_etk_colorpicker_current_color_realize_cb), cp);
    etk_signal_connect("unrealize", ETK_OBJECT(cp->current_color_widget),
       ETK_CALLBACK(_etk_colorpicker_current_color_unrealize_cb), cp);
+   
+   
+   ETK_WIDGET(cp)->size_request = _etk_colorpicker_size_request;
+   ETK_WIDGET(cp)->size_allocate = _etk_colorpicker_size_allocate;
 }
 
 /* Destroys the colorpicker */
@@ -466,6 +449,9 @@
       case ETK_CP_MODE_PROPERTY:
          etk_colorpicker_mode_set(cp, etk_property_value_int_get(value));
          break;
+      case ETK_CP_USE_ALPHA_PROPERTY:
+         etk_colorpicker_use_alpha_set(cp, etk_property_value_bool_get(value));
+         break;
       default:
          break;
    }
@@ -484,6 +470,9 @@
       case ETK_CP_MODE_PROPERTY:
          etk_property_value_int_set(value, cp->mode);
          break;
+      case ETK_CP_USE_ALPHA_PROPERTY:
+         etk_property_value_bool_set(value, cp->use_alpha);
+         break;
       default:
          break;
    }
@@ -549,7 +538,7 @@
    
    /* Square picker objects */
    cp->sp_object = _etk_colorpicker_picker_object_add(evas, cp, 
_etk_colorpicker_sp_move_resize);
-   etk_widget_swallow_object(cp->picker_widget, "square_picker", 
cp->sp_object);
+   etk_widget_swallow_object(cp->picker_widget, "etk.swallow.square_picker", 
cp->sp_object);
    picker_sd = evas_object_smart_data_get(cp->sp_object);
    
    cp->sp_image = evas_object_image_add(evas);
@@ -576,7 +565,7 @@
    
    /* Vertical picker objects */
    cp->vp_object = _etk_colorpicker_picker_object_add(evas, cp, 
_etk_colorpicker_vp_move_resize);
-   etk_widget_swallow_object(cp->picker_widget, "vertical_picker", 
cp->vp_object);
+   etk_widget_swallow_object(cp->picker_widget, "etk.swallow.vertical_picker", 
cp->vp_object);
    picker_sd = evas_object_smart_data_get(cp->vp_object);
    
    cp->vp_image = evas_object_image_add(evas);
@@ -645,7 +634,7 @@
          evas_object_show(cp->sliders_image[i]);
          evas_object_event_callback_add(cp->sliders_image[i], 
EVAS_CALLBACK_RESIZE,
             _etk_colorpicker_slider_image_resize_cb, NULL);
-         etk_widget_swallow_object(slider, "slider_image", 
cp->sliders_image[i]);
+         etk_widget_swallow_object(slider, "etk.swallow.image", 
cp->sliders_image[i]);
          
          _etk_colorpicker_update(cp, ETK_FALSE, ETK_FALSE, ETK_FALSE, 
ETK_FALSE);
          return;
@@ -684,7 +673,7 @@
       return;
    
    cp->current_color_rect = evas_object_rectangle_add(evas);
-   etk_widget_swallow_object(cp->current_color_widget, "preview_rect", 
cp->current_color_rect);
+   etk_widget_swallow_object(cp->current_color_widget, "etk.swallow.preview", 
cp->current_color_rect);
    evas_object_show(cp->current_color_rect);
    
    color = cp->current_color;
@@ -709,104 +698,23 @@
 {
    Etk_Widget *slider;
    Etk_Colorpicker *cp;
-   Etk_Color color;
-   Etk_Bool update_sp_image;
-   Etk_Bool update_vp_image;
-   float h, s, v;
+   Etk_Bool update_sp;
+   Etk_Bool update_vp;
    int i;
    
    if (!(slider = ETK_WIDGET(object)) || !(cp = ETK_COLORPICKER(data)))
       return;
+   if (cp->ignore_value_changed)
+      return;
    
    for (i = 0; i < 6; i++)
    {
       if (cp->sliders[i] == slider)
       {
-         /* First, we update the position of the cursors */
-         if (i == cp->mode)
-            cp->vp_pos = value / _etk_colorpicker_max_values[i];
-         else if (i == cp->sp_xcomponent)
-            cp->sp_xpos = value / _etk_colorpicker_max_values[i];
-         else if (i == cp->sp_ycomponent)
-            cp->sp_ypos = value / _etk_colorpicker_max_values[i];
-         
-         if (cp->ignore_value_changed)
-            return;
-         
-         /* Then, we update the values of the other sliders */
-         switch (i)
-         {
-            case ETK_COLORPICKER_H:
-               h = value;
-               s = 
etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_S]));
-               v = 
etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_V]));
-               evas_color_hsv_to_rgb(h, s, v, &color.r, &color.g, &color.b);
-               break;
-            case ETK_COLORPICKER_S:
-               h = 
etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_H]));
-               s = value;
-               v = 
etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_V]));
-               evas_color_hsv_to_rgb(h, s, v, &color.r, &color.g, &color.b);
-               break;
-            case ETK_COLORPICKER_V:
-               h = 
etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_H]));
-               s = 
etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_S]));
-               v = value;
-               evas_color_hsv_to_rgb(h, s, v, &color.r, &color.g, &color.b);
-               break;
-            case ETK_COLORPICKER_R:
-               color.r = (int)value;
-               color.g = 
(int)etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_G]));
-               color.b = 
(int)etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_B]));
-               break;
-            case ETK_COLORPICKER_G:
-               color.r = 
(int)etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_R]));
-               color.g = (int)value;
-               color.b = 
(int)etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_B]));
-               break;
-            case ETK_COLORPICKER_B:
-               color.r = 
(int)etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_R]));
-               color.g = 
(int)etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_G]));
-               color.b = (int)value;
-               break;
-            default:
-               break;
-         }
-         
-         if (i == ETK_COLORPICKER_H || i == ETK_COLORPICKER_S || i == 
ETK_COLORPICKER_V)
-         {
-            cp->ignore_value_changed = ETK_TRUE;
-            etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_R]), 
color.r);
-            etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_G]), 
color.g);
-            etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_B]), 
color.b);
-            cp->ignore_value_changed = ETK_FALSE;
-         }
-         else
-         {
-            cp->ignore_value_changed = ETK_TRUE;
-            evas_color_rgb_to_hsv(color.r, color.g, color.b, &h, &s, &v);
-            etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_H]), h);
-            etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_S]), s);
-            etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_V]), v);
-            cp->ignore_value_changed = ETK_FALSE;
-         }
-         
-         /* And then, we update the current color and the colorpicker */
-         if (color.r != cp->current_color.r || color.g != cp->current_color.g 
|| color.b != cp->current_color.b)
-         {
-            cp->current_color.r = color.r;
-            cp->current_color.g = color.g;
-            cp->current_color.b = color.b;
-            evas_color_argb_premul(cp->current_color.a, &color.r, &color.g, 
&color.b);
-            evas_object_color_set(cp->current_color_rect, color.r, color.g, 
color.b, cp->current_color.a);
-            if (cp->emit_signal)
-               
etk_signal_emit(_etk_colorpicker_signals[ETK_CP_COLOR_CHANGED_SIGNAL], 
ETK_OBJECT(cp), NULL);
-         }
-         
-         update_sp_image = !((i != cp->mode) && ((i / 3) == (cp->mode / 3)));
-         update_vp_image = !((i / 3) == (cp->mode / 3));
-         _etk_colorpicker_update(cp, update_sp_image, ETK_TRUE, 
update_vp_image, ETK_TRUE);
-         
+         update_sp = ((i != cp->sp_xcomponent) && (i != cp->sp_ycomponent));
+         update_vp = ((i / 3) != (cp->mode / 3));
+         _etk_colorpicker_update_from_sliders(cp, i, update_sp, update_vp);
+         
etk_signal_emit(_etk_colorpicker_signals[ETK_CP_COLOR_CHANGED_SIGNAL], 
ETK_OBJECT(cp), NULL);
          return;
       }
    }
@@ -822,10 +730,6 @@
    if (!(slider = ETK_WIDGET(object)) || !(cp = ETK_COLORPICKER(data)))
       return;
    
-   /* TODO: do we really need that?? */
-   if (cp->ignore_value_changed)
-      return;
-   
    color.r = cp->current_color.r;
    color.g = cp->current_color.g;
    color.b = cp->current_color.b;
@@ -834,7 +738,7 @@
    evas_color_argb_premul(cp->current_color.a, &color.r, &color.g, &color.b);
    evas_object_color_set(cp->current_color_rect, color.r, color.g, color.b, 
cp->current_color.a);
    
-   if (cp->emit_signal)
+   if (!cp->ignore_value_changed)
       etk_signal_emit(_etk_colorpicker_signals[ETK_CP_COLOR_CHANGED_SIGNAL], 
ETK_OBJECT(cp), NULL);
 }
 
@@ -875,6 +779,7 @@
    xpercent = ETK_CLAMP((float)(event->canvas.x - x) / w, 0.0, 1.0);
    ypercent = 1.0 - ETK_CLAMP((float)(event->canvas.y - y) / h, 0.0, 1.0);
    
+   printf("Mouse Down\n");
    _etk_colorpicker_sp_cursor_move(cp, xpercent, ypercent);
    cp->sp_dragging = ETK_TRUE;
 }
@@ -900,6 +805,7 @@
    if (!(cp = ETK_COLORPICKER(data)) || !(event = event_info) || 
!cp->sp_dragging)
       return;
    
+   printf("Mouse Move\n");
    evas_object_geometry_get(cp->sp_image, &x, &y, &w, &h);
    xpercent = ETK_CLAMP((float)(event->cur.canvas.x - x) / w, 0.0, 1.0);
    ypercent = 1.0 - ETK_CLAMP((float)(event->cur.canvas.y - y) / h, 0.0, 1.0);
@@ -997,8 +903,8 @@
          _etk_colorpicker_picker_smart_clip_set,
          _etk_colorpicker_picker_smart_clip_unset,
          NULL);
+      _etk_colorpicker_picker_smart_use = 0;
    }
-   /* TODO: _etk_colorpicker_picker_smart_use */
    _etk_colorpicker_picker_smart_use++;
    
    obj = evas_object_smart_add(evas, _etk_colorpicker_picker_smart);
@@ -1039,6 +945,13 @@
       picker_sd->objects = evas_list_remove_list(picker_sd->objects, 
picker_sd->objects);
    }
    free(picker_sd);
+   
+   _etk_colorpicker_picker_smart_use--;
+   if (_etk_colorpicker_picker_smart_use <= 0 && _etk_colorpicker_picker_smart)
+   {
+      evas_smart_free(_etk_colorpicker_picker_smart);
+      _etk_colorpicker_picker_smart = NULL;
+   }
 }
 
 /* Moves the picker object */
@@ -1191,12 +1104,84 @@
    if (!cp)
       return;
    
-   cp->emit_signal = ETK_FALSE;
+   cp->ignore_value_changed = ETK_TRUE;
    etk_range_value_set(ETK_RANGE(cp->sliders[cp->sp_xcomponent]),
       xpercent * _etk_colorpicker_max_values[cp->sp_xcomponent]);
-   cp->emit_signal = ETK_TRUE;
    etk_range_value_set(ETK_RANGE(cp->sliders[cp->sp_ycomponent]),
       ypercent * _etk_colorpicker_max_values[cp->sp_ycomponent]);
+   cp->ignore_value_changed = ETK_FALSE;
+   
+   _etk_colorpicker_update_from_sliders(cp, cp->mode, ETK_FALSE, ETK_FALSE);
+   etk_signal_emit(_etk_colorpicker_signals[ETK_CP_COLOR_CHANGED_SIGNAL], 
ETK_OBJECT(cp), NULL);
+}
+
+/* Updates the colorpicker from its sliders */
+static void _etk_colorpicker_update_from_sliders(Etk_Colorpicker *cp, 
Etk_Colorpicker_Mode mode, Etk_Bool update_sp, Etk_Bool update_vp)
+{
+   Etk_Color color;
+   float h, s, v;
+   double value;
+   int i;
+   
+   if (!cp)
+      return;
+   
+   /* First, we update the values of the other sliders */
+   if (mode == ETK_COLORPICKER_H || mode == ETK_COLORPICKER_S || mode == 
ETK_COLORPICKER_V)
+   {
+      h = etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_S]));
+      s = etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_S]));
+      v = etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_V]));
+      evas_color_hsv_to_rgb(h, s, v, &color.r, &color.g, &color.b);
+      
+      cp->ignore_value_changed = ETK_TRUE;
+      etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_R]), color.r);
+      etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_G]), color.g);
+      etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_B]), color.b);
+      cp->ignore_value_changed = ETK_FALSE;
+   }
+   else
+   {
+      color.r = 
(int)etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_R]));
+      color.g = 
(int)etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_G]));
+      color.b = 
(int)etk_range_value_get(ETK_RANGE(cp->sliders[ETK_COLORPICKER_B]));
+      
+      cp->ignore_value_changed = ETK_TRUE;
+      evas_color_rgb_to_hsv(color.r, color.g, color.b, &h, &s, &v);
+      etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_H]), h);
+      etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_S]), s);
+      etk_range_value_set(ETK_RANGE(cp->sliders[ETK_COLORPICKER_V]), v);
+      cp->ignore_value_changed = ETK_FALSE;
+   }
+   
+   /* Then, we update the position of the cursors */
+   for (i = (cp->mode / 3) * 3; i < ((cp->mode / 3) + 1) * 3; i++)
+   {
+      value = etk_range_value_get(ETK_RANGE(cp->sliders[i]));
+      if (i == cp->mode)
+         cp->vp_pos = value / _etk_colorpicker_max_values[i];
+      else if (i == cp->sp_xcomponent)
+         cp->sp_xpos = value / _etk_colorpicker_max_values[i];
+      else if (i == cp->sp_ycomponent)
+         cp->sp_ypos = value / _etk_colorpicker_max_values[i];
+   }
+   
+   /* And finally, we update the current color and the colorpicker */
+   if (color.r != cp->current_color.r || color.g != cp->current_color.g || 
color.b != cp->current_color.b)
+   {
+      cp->current_color.r = color.r;
+      cp->current_color.g = color.g;
+      cp->current_color.b = color.b;
+      if (cp->current_color_rect)
+      {
+         evas_color_argb_premul(cp->current_color.a, &color.r, &color.g, 
&color.b);
+         evas_object_color_set(cp->current_color_rect, color.r, color.g, 
color.b, cp->current_color.a);
+      }
+   }
+   
+   _etk_colorpicker_update(cp, update_sp, ETK_TRUE, update_vp, ETK_TRUE);
+   
+   return;
 }
 
 /* Updates of the colorpicker */ 
@@ -1449,4 +1434,45 @@
 
 /** @} */
 
-/* TODOC: write documentation... */
+/**************************
+ *
+ * Documentation
+ *
+ **************************/
+
+/**
+ * @addtogroup Etk_Colorpicker
+ *
+ * @image html widgets/colorpicker.png
+ * A colorpicker can work in 6 different modes, H (Hue), S (saturation), V 
(value), R (red), G (green) and B (blue).
+ * The default mode is H, but you can change it with 
etk_colorpicker_mode_set(). For each of these modes, there is
+ * a slider that allows the user to change the corresponding value. @n
+ * Optionally, the colorpicker can also have a slider to control the alpha 
channel of the color, corresponding to how
+ * much the color is transparent. This slider is hidden by default, but can be 
shown with
+ * etk_colorpicker_use_alpha_set(). @n
+ * Most of the time, all you want to do is getting the selected color, and be 
notified when the selected color is
+ * changed. This can be done with etk_colorpicker_current_color_get() and by 
connecting a callback to the
+ * @b "color_changed" signal.
+ *
+ * \par Object Hierarchy:
+ * - Etk_Object
+ *   - Etk_Widget
+ *     - Etk_Colorpicker
+ *
+ * \par Signals:
+ * @signal_name "color_changed": Emitted when the selected color is changed
+ * @signal_cb void callback(Etk_Colorpicker *colorpicker, void *data)
+ * @signal_arg button: the colorpicker whose color has been changed
+ * @signal_data
+ *
+ * \par Properties:
+ * @prop_name "color_mode": The current color-mode of the colorpicker
+ * @prop_type Integer (Etk_Colorpicker_Mode)
+ * @prop_rw
+ * @prop_val ETK_COLORPICKER_H
+ * \par 
+ * @prop_name "use_alpha": Whether or not the alpha slider is visible
+ * @prop_type Boolean
+ * @prop_rw
+ * @prop_val ETK_FALSE
+ */
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_colorpicker.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- etk_colorpicker.h   21 Feb 2007 05:19:17 -0000      1.13
+++ etk_colorpicker.h   23 Feb 2007 20:44:41 -0000      1.14
@@ -20,7 +20,7 @@
 #define ETK_IS_COLORPICKER(obj)     (ETK_OBJECT_CHECK_TYPE((obj), 
ETK_COLORPICKER_TYPE))
 
 
-/** @brief The color modes used by the colorpicker */
+/** @brief The different color modes that can be used by the colorpicker */
 typedef enum Etk_Colorpicker_Mode
 {
    ETK_COLORPICKER_H,     /**< The "Hue" mode */
@@ -31,6 +31,7 @@
    ETK_COLORPICKER_B      /**< The "Blue" mode */
 } Etk_Colorpicker_Mode;
 
+
 /**
  * @brief @widget A widget that allows the user to select a color
  * @structinfo
@@ -66,19 +67,19 @@
    Etk_Bool vp_image_needs_update;
    Etk_Bool vp_cursor_needs_update;
    
+   /* Component widgets */
+   Etk_Widget *component_table;
+   Etk_Widget *radios[6];
+   
    /* Sliders */
    Etk_Widget *sliders[6];
    Evas_Object *sliders_image[6];
    int sliders_res;
    Etk_Bool sliders_need_update;
    
-   /* Component widgets */
-   Etk_Widget *component_table;
-   Etk_Widget *radios[6];
-   
    /* Alpha slider */
    Etk_Widget *alpha_slider;
-   Etk_Widget *alpha_name_label;
+   Etk_Widget *alpha_label;
    
    /* Current color objects */
    Etk_Widget *color_table;
@@ -87,12 +88,11 @@
    Evas_Object *current_color_rect;
    
    Etk_Bool ignore_value_changed;
-   Etk_Bool emit_signal;
-   
    Etk_Bool use_alpha;
    Etk_Colorpicker_Mode mode;
    Etk_Color current_color;
 };
+
 
 Etk_Type   *etk_colorpicker_type_get(void);
 Etk_Widget *etk_colorpicker_new(void);
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_frame.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- etk_frame.c 29 Jan 2007 05:08:30 -0000      1.13
+++ etk_frame.c 23 Feb 2007 20:44:41 -0000      1.14
@@ -20,7 +20,7 @@
 static void _etk_frame_destructor(Etk_Frame *frame);
 static void _etk_frame_property_set(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
 static void _etk_frame_property_get(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
-static void _etk_frame_realized_cb(Etk_Object *object, void *data);
+static void _etk_frame_realize_cb(Etk_Object *object, void *data);
 
 /**************************
  *
@@ -122,7 +122,7 @@
       return;
 
    frame->label = NULL;
-   etk_signal_connect("realize", ETK_OBJECT(frame), 
ETK_CALLBACK(_etk_frame_realized_cb), NULL);
+   etk_signal_connect("realize", ETK_OBJECT(frame), 
ETK_CALLBACK(_etk_frame_realize_cb), NULL);
 }
 
 /* Destroys the frame */
@@ -176,7 +176,7 @@
  **************************/
 
 /* Called when the frame is realized */
-static void _etk_frame_realized_cb(Etk_Object *object, void *data)
+static void _etk_frame_realize_cb(Etk_Object *object, void *data)
 {
    Etk_Frame *frame;
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_shadow.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- etk_shadow.c        3 Jan 2007 19:08:00 -0000       1.4
+++ etk_shadow.c        23 Feb 2007 20:44:41 -0000      1.5
@@ -50,8 +50,8 @@
 static void _etk_shadow_property_get(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
 static void _etk_shadow_size_request(Etk_Widget *widget, Etk_Size *size);
 static void _etk_shadow_size_allocate(Etk_Widget *widget, Etk_Geometry 
geometry);
-static void _etk_shadow_realized_cb(Etk_Object *object, void *data);
-static void _etk_shadow_unrealized_cb(Etk_Object *object, void *data);
+static void _etk_shadow_realize_cb(Etk_Object *object, void *data);
+static void _etk_shadow_unrealize_cb(Etk_Object *object, void *data);
 static void _etk_shadow_shadow_recalc(Etk_Shadow *shadow);
 static void _etk_shadow_border_recalc(Etk_Shadow *shadow);
 static Etk_Bool _etk_shadow_edge_visible(Etk_Shadow *shadow, 
Etk_Shadow_Object_Id object_id);
@@ -398,8 +398,8 @@
    ETK_WIDGET(shadow)->size_request = _etk_shadow_size_request;
    ETK_WIDGET(shadow)->size_allocate = _etk_shadow_size_allocate;
 
-   etk_signal_connect("realize", ETK_OBJECT(shadow), 
ETK_CALLBACK(_etk_shadow_realized_cb), NULL);
-   etk_signal_connect("unrealize", ETK_OBJECT(shadow), 
ETK_CALLBACK(_etk_shadow_unrealized_cb), NULL);
+   etk_signal_connect("realize", ETK_OBJECT(shadow), 
ETK_CALLBACK(_etk_shadow_realize_cb), NULL);
+   etk_signal_connect("unrealize", ETK_OBJECT(shadow), 
ETK_CALLBACK(_etk_shadow_unrealize_cb), NULL);
 }
 
 /* Sets the property whose id is "property_id" to the value "value" */
@@ -685,7 +685,7 @@
  **************************/
 
 /* Called when the shadow container is realized */
-static void _etk_shadow_realized_cb(Etk_Object *object, void *data)
+static void _etk_shadow_realize_cb(Etk_Object *object, void *data)
 {
    Etk_Shadow *shadow;
    Evas *evas;
@@ -731,7 +731,7 @@
 }
 
 /* Called when the shadow container is unrealized */
-static void _etk_shadow_unrealized_cb(Etk_Object *object, void *data)
+static void _etk_shadow_unrealize_cb(Etk_Object *object, void *data)
 {
    Etk_Shadow *shadow;
    int i;
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_signal_callback.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- etk_signal_callback.h       13 Jan 2007 05:19:11 -0000      1.4
+++ etk_signal_callback.h       23 Feb 2007 20:44:41 -0000      1.5
@@ -7,7 +7,7 @@
 
 /**
  * @defgroup Etk_Signal_Callback Etk_Signal_Callback
- * @brief For more infos, see the page about Etk_Signal
+ * @brief For more info, see the page about Etk_Signal
  * @{
  */
 



-------------------------------------------------------------------------
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