Enlightenment CVS committal

Author  : moom
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_colorpicker.c etk_colorpicker.h 


Log Message:
* More work on the colorpicker


===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_colorpicker.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- etk_colorpicker.c   16 May 2006 22:02:59 -0000      1.10
+++ etk_colorpicker.c   17 May 2006 15:15:08 -0000      1.11
@@ -2,16 +2,25 @@
 #include "etk_colorpicker.h"
 #include <stdlib.h>
 #include <stdint.h>
+#include <Edje.h>
 #include "etk_signal.h"
 #include "etk_signal_callback.h"
 #include "etk_utils.h"
 #include "etk_radio_button.h"
+#include "etk_theme.h"
 
 /**
  * @addtogroup Etk_Colorpicker
  * @{
  */
 
+typedef struct Etk_Colorpicker_Picker_Data
+{
+   Evas_List *objects;
+   Etk_Colorpicker *cp;
+   void (*move_resize)(Etk_Colorpicker *cp, int x, int y, int w, int h);
+} Etk_Colorpicker_Picker_Data;
+
 enum Etk_Combobox_Signal_Id
 {
    ETK_CP_COLOR_CHANGED_SIGNAL,
@@ -40,8 +49,20 @@
 static void _etk_colorpicker_vp_mouse_up_cb(void *data, Evas *e, Evas_Object 
*obj, void *event_info);
 static void _etk_colorpicker_vp_mouse_move_cb(void *data, Evas *e, Evas_Object 
*obj, void *event_info);
 
+static Evas_Object *_etk_colorpicker_picker_object_add(Evas *evas, 
Etk_Colorpicker *cp, void (*move_resize)(Etk_Colorpicker *cp, int x, int y, int 
w, int h));
+static void _etk_colorpicker_picker_smart_add(Evas_Object *obj);
+static void _etk_colorpicker_picker_smart_del(Evas_Object *obj);
+static void _etk_colorpicker_picker_smart_move(Evas_Object *obj, Evas_Coord x, 
Evas_Coord y);
+static void _etk_colorpicker_picker_smart_resize(Evas_Object *obj, Evas_Coord 
w, Evas_Coord h);
+static void _etk_colorpicker_picker_smart_show(Evas_Object *obj);
+static void _etk_colorpicker_picker_smart_hide(Evas_Object *obj);
+static void _etk_colorpicker_picker_smart_clip_set(Evas_Object *obj, 
Evas_Object *clip);
+static void _etk_colorpicker_picker_smart_clip_unset(Evas_Object *obj);
+
 static void _etk_colorpicker_sp_move_resize(Etk_Colorpicker *cp, int x, int y, 
int w, int h);
 static void _etk_colorpicker_vp_move_resize(Etk_Colorpicker *cp, int x, int y, 
int w, int h);
+static void _etk_colorpicker_sp_cursor_move_resize(Etk_Colorpicker *cp);
+static void _etk_colorpicker_vp_cursor_move_resize(Etk_Colorpicker *cp);
 
 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);
@@ -51,6 +72,9 @@
 static void _etk_colorpicker_sp_color_get(Etk_Colorpicker *cp, int i, int j, 
int *r, int *g, int *b);
 static void _etk_colorpicker_vp_color_get(Etk_Colorpicker *cp, int i, int *r, 
int *g, int *b);
 static void _etk_colorpicker_color_calc(Etk_Colorpicker_Mode mode, float 
sp_xpos, float sp_ypos, float vp_pos, int *r, int *g, int *b);
+
+static Evas_Smart *_etk_colorpicker_picker_smart = NULL;
+static int _etk_colorpicker_picker_smart_use = 0;
 static Etk_Signal *_etk_colorpicker_signals[ETK_CP_NUM_SIGNALS];
 
 
@@ -143,7 +167,7 @@
    return cp->current_color;
 }
 
-/* TODO: doc, signal */
+/* TODO: doc */
 void etk_colorpicker_current_color_set(Etk_Colorpicker *cp, Etk_Color color)
 {
    int r, g, b;
@@ -215,6 +239,9 @@
    cp->current_color.b = 0;
    cp->current_color.a = 255;
    
+   cp->picker_theme_object = NULL;
+   
+   cp->sp_object = NULL;
    cp->sp_image = NULL;
    cp->sp_hcursor = NULL;
    cp->sp_vcursor = NULL;
@@ -222,6 +249,7 @@
    cp->sp_xpos = 0.0;
    cp->sp_ypos = 0.0;
    
+   cp->vp_object = NULL;
    cp->vp_image = NULL;
    cp->vp_cursor = NULL;
    cp->vp_res = 256;
@@ -312,7 +340,6 @@
 }
 
 /* Resizes the colorpicker to the allocated size */
-/* TODO: size_allocate */
 static void _etk_colorpicker_size_allocate(Etk_Widget *widget, Etk_Geometry 
geometry)
 {
    Etk_Colorpicker *cp;
@@ -332,8 +359,10 @@
       _etk_colorpicker_vp_cursor_update(cp);
    
    /* Then, moves and resizes the objects */
-   _etk_colorpicker_sp_move_resize(cp, geometry.x, geometry.y, (geometry.w / 
2) - 30, geometry.h);
-   _etk_colorpicker_vp_move_resize(cp, geometry.x + (geometry.w / 2) - 25, 
geometry.y, 20, geometry.h);
+   evas_object_move(cp->picker_theme_object, geometry.x, geometry.y);
+   evas_object_resize(cp->picker_theme_object, (geometry.w / 2) - 5, 
geometry.h);
+   _etk_colorpicker_sp_cursor_move_resize(cp);
+   _etk_colorpicker_vp_cursor_move_resize(cp);
    
    child_geometry.x = geometry.x + (geometry.w / 2);
    child_geometry.y = geometry.y;
@@ -354,49 +383,59 @@
  **************************/
 
 /* Called when the colorpicker is realized */
-/* TODO: use smart objects! */
 static void _etk_colorpicker_realize_cb(Etk_Object *object, void *data)
 {
    Etk_Colorpicker *cp;
+   Etk_Colorpicker_Picker_Data *picker_data;
    Evas *evas;
    
    if (!(cp = ETK_COLORPICKER(object)) || !(evas = 
etk_widget_toplevel_evas_get(ETK_WIDGET(cp))))
       return;
    
-   /* Square picker */
+   /* Picker theme object */
+   cp->picker_theme_object = etk_theme_object_load_from_parent(evas, 
ETK_WIDGET(cp), NULL, "picker");
+   evas_object_show(cp->picker_theme_object);
+   etk_widget_member_object_add(ETK_WIDGET(cp), cp->picker_theme_object);
+   
+   /* Square picker objects */
+   cp->sp_object = _etk_colorpicker_picker_object_add(evas, cp, 
_etk_colorpicker_sp_move_resize);
+   edje_object_part_swallow(cp->picker_theme_object, "square_picker", 
cp->sp_object);
+   picker_data = evas_object_smart_data_get(cp->sp_object);
+   
    cp->sp_image = evas_object_image_add(evas);
    evas_object_image_alpha_set(cp->sp_image, 0);
    evas_object_image_size_set(cp->sp_image, cp->sp_res, cp->sp_res);
-   evas_object_show(cp->sp_image);
-   etk_widget_member_object_add(ETK_WIDGET(cp), cp->sp_image);
+   picker_data->objects = evas_list_append(picker_data->objects, cp->sp_image);
    
    cp->sp_hcursor = evas_object_image_add(evas);
    evas_object_image_alpha_set(cp->sp_hcursor, 0);
    evas_object_image_size_set(cp->sp_hcursor, cp->sp_res, 1);
    evas_object_pass_events_set(cp->sp_hcursor, 1);
-   evas_object_show(cp->sp_hcursor);
-   etk_widget_member_object_add(ETK_WIDGET(cp), cp->sp_hcursor);
+   picker_data->objects = evas_list_append(picker_data->objects, 
cp->sp_hcursor);
    
    cp->sp_vcursor = evas_object_image_add(evas);
    evas_object_image_alpha_set(cp->sp_vcursor, 0);
    evas_object_image_size_set(cp->sp_vcursor, 1, cp->sp_res);
    evas_object_pass_events_set(cp->sp_vcursor, 1);
-   evas_object_show(cp->sp_vcursor);
-   etk_widget_member_object_add(ETK_WIDGET(cp), cp->sp_vcursor);
+   picker_data->objects = evas_list_append(picker_data->objects, 
cp->sp_vcursor);
+   
+   evas_object_show(cp->sp_object);
+   
+   /* Vertical picker objects */
+   cp->vp_object = _etk_colorpicker_picker_object_add(evas, cp, 
_etk_colorpicker_vp_move_resize);
+   edje_object_part_swallow(cp->picker_theme_object, "vertical_picker", 
cp->vp_object);
+   picker_data = evas_object_smart_data_get(cp->vp_object);
    
-   /* Vertical picker */
    cp->vp_image = evas_object_image_add(evas);
    evas_object_image_alpha_set(cp->vp_image, 0);
    evas_object_image_size_set(cp->vp_image, 1, cp->vp_res);
-   evas_object_show(cp->vp_image);
-   etk_widget_member_object_add(ETK_WIDGET(cp), cp->vp_image);
+   picker_data->objects = evas_list_append(picker_data->objects, cp->vp_image);
    
-   cp->vp_cursor = evas_object_image_add(evas);
-   evas_object_image_alpha_set(cp->vp_cursor, 0);
-   evas_object_image_size_set(cp->vp_cursor, 1, 1);
+   cp->vp_cursor = evas_object_rectangle_add(evas);
    evas_object_pass_events_set(cp->vp_cursor, 1);
-   evas_object_show(cp->vp_cursor);
-   etk_widget_member_object_add(ETK_WIDGET(cp), cp->vp_cursor);
+   picker_data->objects = evas_list_append(picker_data->objects, 
cp->vp_cursor);
+   
+   evas_object_show(cp->vp_object);
    
    /* Adds the mouse callbacks */
    evas_object_event_callback_add(cp->sp_image, EVAS_CALLBACK_MOUSE_DOWN, 
_etk_colorpicker_sp_mouse_down_cb, cp);
@@ -418,9 +457,11 @@
    if (!(cp = ETK_COLORPICKER(object)))
       return;
    
+   cp->sp_object = NULL;
    cp->sp_image = NULL;
    cp->sp_hcursor = NULL;
    cp->sp_vcursor = NULL;
+   cp->vp_object = NULL;
    cp->vp_image = NULL;
    cp->vp_cursor = NULL;
 }
@@ -535,6 +576,163 @@
 
 /**************************
  *
+ * Colorpicker's smart object
+ *
+ **************************/
+
+/* Creates a new picker object */
+static Evas_Object *_etk_colorpicker_picker_object_add(Evas *evas, 
Etk_Colorpicker *cp, void (*move_resize)(Etk_Colorpicker *cp, int x, int y, int 
w, int h))
+{
+   Evas_Object *obj;
+   Etk_Colorpicker_Picker_Data *picker_data;
+   
+   if (!evas || !cp)
+      return NULL;
+   
+   if (!_etk_colorpicker_picker_smart)
+   {
+      _etk_colorpicker_picker_smart = evas_smart_new("Picker_Object",
+         _etk_colorpicker_picker_smart_add,
+         _etk_colorpicker_picker_smart_del,
+         NULL,
+         NULL,
+         NULL,
+         NULL,
+         NULL,
+         _etk_colorpicker_picker_smart_move,
+         _etk_colorpicker_picker_smart_resize,
+         _etk_colorpicker_picker_smart_show,
+         _etk_colorpicker_picker_smart_hide,
+         NULL,
+         _etk_colorpicker_picker_smart_clip_set,
+         _etk_colorpicker_picker_smart_clip_unset,
+         NULL);
+   }
+   /* TODO: _etk_colorpicker_picker_smart_use */
+   _etk_colorpicker_picker_smart_use++;
+   
+   obj = evas_object_smart_add(evas, _etk_colorpicker_picker_smart);
+   picker_data = evas_object_smart_data_get(obj);
+   picker_data->cp = cp;
+   picker_data->move_resize = move_resize;
+   
+   return obj;
+}
+
+/* Initializes the new picker object */
+static void _etk_colorpicker_picker_smart_add(Evas_Object *obj)
+{
+   Etk_Colorpicker_Picker_Data *picker_data;
+   Evas *evas;
+   
+   if (!obj || !(evas = evas_object_evas_get(obj)))
+      return;
+   
+   picker_data = malloc(sizeof(Etk_Colorpicker_Picker_Data));
+   picker_data->objects = NULL;
+   picker_data->cp = NULL;
+   picker_data->move_resize = NULL;
+   evas_object_smart_data_set(obj, picker_data);
+}
+
+/* Destroys the picker object */
+static void _etk_colorpicker_picker_smart_del(Evas_Object *obj)
+{
+   Etk_Colorpicker_Picker_Data *picker_data;
+   
+   if (!obj || !(picker_data = evas_object_smart_data_get(obj)))
+      return;
+
+   while (picker_data->objects)
+   {
+      evas_object_del(picker_data->objects->data);
+      picker_data->objects = evas_list_remove_list(picker_data->objects, 
picker_data->objects);
+   }
+   free(picker_data);
+}
+
+/* Moves the picker object */
+static void _etk_colorpicker_picker_smart_move(Evas_Object *obj, Evas_Coord x, 
Evas_Coord y)
+{
+   Etk_Colorpicker_Picker_Data *picker_data;
+   Evas_Coord w, h;
+   
+   if (!obj || !(picker_data = evas_object_smart_data_get(obj)))
+      return;
+
+   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+   if (picker_data->cp && picker_data->move_resize)
+      picker_data->move_resize(picker_data->cp, x, y, w, h);
+}
+
+/* Resizes the picker object */
+static void _etk_colorpicker_picker_smart_resize(Evas_Object *obj, Evas_Coord 
w, Evas_Coord h)
+{
+   Etk_Colorpicker_Picker_Data *picker_data;
+   Evas_Coord x, y;
+   
+   if (!obj || !(picker_data = evas_object_smart_data_get(obj)))
+      return;
+
+   evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+   if (picker_data->cp && picker_data->move_resize)
+      picker_data->move_resize(picker_data->cp, x, y, w, h);
+}
+
+/* Shows the picker object */
+static void _etk_colorpicker_picker_smart_show(Evas_Object *obj)
+{
+   Etk_Colorpicker_Picker_Data *picker_data;
+   Evas_List *l;
+   
+   if (!obj || !(picker_data = evas_object_smart_data_get(obj)))
+      return;
+
+   for (l = picker_data->objects; l; l = l->next)
+      evas_object_show(l->data);
+}
+
+/* Hides the picker object */
+static void _etk_colorpicker_picker_smart_hide(Evas_Object *obj)
+{
+   Etk_Colorpicker_Picker_Data *picker_data;
+   Evas_List *l;
+   
+   if (!obj || !(picker_data = evas_object_smart_data_get(obj)))
+      return;
+
+   for (l = picker_data->objects; l; l = l->next)
+      evas_object_hide(l->data);
+}
+
+/* Sets the clip of the picker object */
+static void _etk_colorpicker_picker_smart_clip_set(Evas_Object *obj, 
Evas_Object *clip)
+{
+   Etk_Colorpicker_Picker_Data *picker_data;
+   Evas_List *l;
+   
+   if (!obj || !(picker_data = evas_object_smart_data_get(obj)))
+      return;
+
+   for (l = picker_data->objects; l; l = l->next)
+      evas_object_clip_set(l->data, clip);
+}
+
+/* Unsets the clip of the picker object */
+static void _etk_colorpicker_picker_smart_clip_unset(Evas_Object *obj)
+{
+   Etk_Colorpicker_Picker_Data *picker_data;
+   Evas_List *l;
+   
+   if (!obj || !(picker_data = evas_object_smart_data_get(obj)))
+      return;
+
+   for (l = picker_data->objects; l; l = l->next)
+      evas_object_clip_unset(l->data);
+}
+
+/**************************
+ *
  * Private functions
  *
  **************************/
@@ -542,35 +740,59 @@
 /* Moves and resizes the square picker */
 static void _etk_colorpicker_sp_move_resize(Etk_Colorpicker *cp, int x, int y, 
int w, int h)
 {
-   if (!cp || !cp->sp_image || !cp->sp_hcursor || !cp->sp_vcursor)
+   if (!cp || !cp->sp_image)
       return;
    
    evas_object_move(cp->sp_image, x, y);
    evas_object_resize(cp->sp_image, w, h);
    evas_object_image_fill_set(cp->sp_image, 0, 0, w, h);
    
-   evas_object_move(cp->sp_hcursor, x, y + ((1.0 - cp->sp_ypos) * h));
-   evas_object_resize(cp->sp_hcursor, w, 1);
-   evas_object_image_fill_set(cp->sp_hcursor, 0, 0, w, 1);
-   
-   evas_object_move(cp->sp_vcursor, x + (cp->sp_xpos * w), y);
-   evas_object_resize(cp->sp_vcursor, 1, h);
-   evas_object_image_fill_set(cp->sp_vcursor, 0, 0, 1, h);
+   _etk_colorpicker_sp_cursor_move_resize(cp);
 }
 
 /* Moves and resizes the vertical picker */
 static void _etk_colorpicker_vp_move_resize(Etk_Colorpicker *cp, int x, int y, 
int w, int h)
 {
-   if (!cp || !cp->vp_image || !cp->vp_cursor)
+   if (!cp || !cp->vp_image)
       return;
    
    evas_object_move(cp->vp_image, x, y);
    evas_object_resize(cp->vp_image, w, h);
    evas_object_image_fill_set(cp->vp_image, 0, 0, w, h);
    
-   evas_object_move(cp->vp_cursor, x, y + ((1.0 - cp->vp_pos) * h));
+   _etk_colorpicker_vp_cursor_move_resize(cp);
+}
+
+/* Moves and resizes the cursor of the square picker to the correct 
position/size */
+static void _etk_colorpicker_sp_cursor_move_resize(Etk_Colorpicker *cp)
+{
+   int x, y, w, h;
+   
+   if (!cp || !cp->sp_image || !cp->sp_hcursor || !cp->sp_vcursor)
+      return;
+   
+   evas_object_geometry_get(cp->sp_image, &x, &y, &w, &h);
+   
+   evas_object_move(cp->sp_hcursor, x, y + ((1.0 - cp->sp_ypos) * (h - 1)));
+   evas_object_resize(cp->sp_hcursor, w, 1);
+   evas_object_image_fill_set(cp->sp_hcursor, 0, 0, w, 1);
+   
+   evas_object_move(cp->sp_vcursor, x + (cp->sp_xpos * (w - 1)), y);
+   evas_object_resize(cp->sp_vcursor, 1, h);
+   evas_object_image_fill_set(cp->sp_vcursor, 0, 0, 1, h);
+}
+
+/* Moves and resizes the cursor of the vertical picker to the correct 
position/size */
+static void _etk_colorpicker_vp_cursor_move_resize(Etk_Colorpicker *cp)
+{
+   int x, y, w, h;
+   
+   if (!cp || !cp->vp_image || !cp->vp_cursor)
+      return;
+   
+   evas_object_geometry_get(cp->vp_image, &x, &y, &w, &h);
+   evas_object_move(cp->vp_cursor, x, y + ((1.0 - cp->vp_pos) * (h - 1)));
    evas_object_resize(cp->vp_cursor, w, 1);
-   evas_object_image_fill_set(cp->vp_cursor, 0, 0, w, 1);
 }
 
 /* Updates of the colorpicker */ 
@@ -640,7 +862,7 @@
       j = cp->sp_res * (1.0 - cp->sp_ypos);
       for (i = 0; i < cp->sp_res; i++)
       {
-         _etk_colorpicker_sp_color_get(cp, i, j, &r, &g, &b);
+         _etk_colorpicker_sp_color_get(cp, j, i, &r, &g, &b);
          *data = (((255 - r) << 16) | ((255 - g) << 8) | (255 - b));
          data++;
       }
@@ -653,7 +875,7 @@
       i = cp->sp_res * cp->sp_xpos;
       for (j = 0; j < cp->sp_res; j++)
       {
-         _etk_colorpicker_sp_color_get(cp, i, j, &r, &g, &b);
+         _etk_colorpicker_sp_color_get(cp, j, i, &r, &g, &b);
          *data = (((255 - r) << 16) | ((255 - g) << 8) | (255 - b));
          data++;
       }
@@ -686,18 +908,13 @@
 /* Updates the vertical picker cursor */
 static void _etk_colorpicker_vp_cursor_update(Etk_Colorpicker *cp)
 {
-   uint32_t *data;
    int r, g, b;
    
    if (!cp || !cp->vp_cursor)
       return;
-   if (!(data = (uint32_t *)evas_object_image_data_get(cp->vp_cursor, 1)))
-      return;
    
    _etk_colorpicker_vp_color_get(cp, cp->vp_res * (1.0 - cp->vp_pos), &r, &g, 
&b);
-   *data = (((255 - r) << 16) | ((255 - g) << 8) | (255 - b));
-   
-   evas_object_image_data_update_add(cp->vp_cursor, 0, 0, 1, 1);
+   evas_object_color_set(cp->vp_cursor, 255 - r, 255 - g, 255 - b, 255);
 }
 
 /* Get the color of the square picker's image, at the point (i, j). (r, g, b) 
must not be NULL! */
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_colorpicker.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- etk_colorpicker.h   16 May 2006 22:03:00 -0000      1.4
+++ etk_colorpicker.h   17 May 2006 15:15:08 -0000      1.5
@@ -3,6 +3,7 @@
 #define __ETK_COLORPICKER_H__
 
 #include "etk_box.h"
+#include <Evas.h>
 #include "etk_types.h"
 
 /**
@@ -39,7 +40,10 @@
    /* Inherit from Etk_Widget */
    Etk_Widget widget;
    
+   Evas_Object *picker_theme_object;
+   
    /* Square picker */
+   Evas_Object *sp_object;
    Evas_Object *sp_image;
    Evas_Object *sp_hcursor;
    Evas_Object *sp_vcursor;
@@ -50,6 +54,7 @@
    Etk_Bool sp_cursor_needs_update;
    
    /* Vertical picker */
+   Evas_Object *vp_object;
    Evas_Object *vp_image;
    Evas_Object *vp_cursor;
    int vp_res;




-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to