Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_engine.c etk_engine.h etk_widget.c etk_widget.h 
        etk_window.c etk_window.h 


Log Message:
Implement translucency support and color setting for etk widgets.

[Engines] Add a has_alpha_set/get call.
[Window] Add etk_window_has_alpha_set/get call
[Widget] Add etk_widget_color_set call.



===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_engine.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- etk_engine.c        19 Dec 2006 22:01:57 -0000      1.15
+++ etk_engine.c        22 Mar 2007 23:31:40 -0000      1.16
@@ -663,6 +663,30 @@
 }
 
 /**
+ * @brief Calls the engine's method to set whether the window has alpha 
(supports translucency) or not
+ * @param window a window
+ * @param has_alpha ETK_TRUE to give the window alpha, ETK_FALSE to make it 
non-translucent
+ */
+void etk_engine_window_has_alpha_set(Etk_Window *window, Etk_Bool has_alpha)
+{
+   if (!_engine || !_engine->window_has_alpha_set || !window)
+      return;   
+   _engine->window_has_alpha_set(window, has_alpha);
+}
+
+/**
+ * @brief Calls the engine's method to get whether the window has alpha 
(translucency) or not
+ * @param window a window
+ * @return Returns ETK_TRUE if the window has an alpha channel (supports 
translucency), ETK_FALSE otherwise
+ */
+Etk_Bool etk_engine_window_has_alpha_get(Etk_Window *window)
+{
+   if (!_engine || !_engine->window_has_alpha_get || !window)
+      return ETK_FALSE;   
+   return _engine->window_has_alpha_get(window);
+}
+
+/**
  * @brief Calls the engine's method to set whether or not the window should 
appear in the taskbar
  * @param window a window
  * @param skip_taskbar_hint ETK_TRUE to prevent the window from appearing in 
the taskbar, ETK_FALSE otherwise
@@ -901,6 +925,8 @@
    INHERIT(window_decorated_get);
    INHERIT(window_shaped_set);
    INHERIT(window_shaped_get);
+   INHERIT(window_has_alpha_set);
+   INHERIT(window_has_alpha_get);   
    INHERIT(window_skip_taskbar_hint_set);
    INHERIT(window_skip_taskbar_hint_get);
    INHERIT(window_skip_pager_hint_set);
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_engine.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- etk_engine.h        12 Mar 2007 01:46:13 -0000      1.14
+++ etk_engine.h        22 Mar 2007 23:31:40 -0000      1.15
@@ -63,6 +63,8 @@
    Etk_Bool (*window_decorated_get)(Etk_Window *window);
    void (*window_shaped_set)(Etk_Window *window, Etk_Bool shaped);
    Etk_Bool (*window_shaped_get)(Etk_Window *window);
+   void (*window_has_alpha_set)(Etk_Window *window, Etk_Bool has_alpha);
+   Etk_Bool (*window_has_alpha_get)(Etk_Window *window);   
    void (*window_skip_taskbar_hint_set)(Etk_Window *window, Etk_Bool 
skip_taskbar_hint);
    Etk_Bool (*window_skip_taskbar_hint_get)(Etk_Window *window);
    void (*window_skip_pager_hint_set)(Etk_Window *window, Etk_Bool 
skip_pager_hint);
@@ -133,7 +135,9 @@
 void etk_engine_window_decorated_set(Etk_Window *window, Etk_Bool decorated);
 Etk_Bool etk_engine_window_decorated_get(Etk_Window *window);
 void etk_engine_window_shaped_set(Etk_Window *window, Etk_Bool shaped);
-Etk_Bool etk_engine_window_shaped_get(Etk_Window *window);  
+Etk_Bool etk_engine_window_shaped_get(Etk_Window *window);
+void etk_engine_window_has_alpha_set(Etk_Window *window, Etk_Bool has_alpha);
+Etk_Bool etk_engine_window_has_alpha_get(Etk_Window *window);
 void etk_engine_window_skip_taskbar_hint_set(Etk_Window *window, Etk_Bool 
skip_taskbar_hint);
 Etk_Bool etk_engine_window_skip_taskbar_hint_get(Etk_Window *window);
 void etk_engine_window_skip_pager_hint_set(Etk_Window *window, Etk_Bool 
skip_pager_hint);
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_widget.c,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -3 -r1.106 -r1.107
--- etk_widget.c        22 Mar 2007 21:29:52 -0000      1.106
+++ etk_widget.c        22 Mar 2007 23:31:40 -0000      1.107
@@ -141,6 +141,7 @@
 static void _etk_widget_smart_object_resize_cb(Evas_Object *obj, Evas_Coord w, 
Evas_Coord h);
 static void _etk_widget_smart_object_show_cb(Evas_Object *obj);
 static void _etk_widget_smart_object_hide_cb(Evas_Object *obj);
+static void _etk_widget_smart_object_color_set_cb(Evas_Object *obj, int r, int 
g, int b, int a);
 static void _etk_widget_smart_object_clip_set_cb(Evas_Object *object, 
Evas_Object *clip);
 static void _etk_widget_smart_object_clip_unset_cb(Evas_Object *object);
 
@@ -904,6 +905,25 @@
 }
 
 /**
+ * @brief Recursively sets the color of the widget and its children
+ * @param widget a widget
+ * @param r red
+ * @param g green
+ * @param b blue
+ * @param a alpha
+ */
+void etk_widget_color_set(Etk_Widget *widget, int r, int g, int b, int a)
+{
+   Evas_List *l;
+   
+   if (!widget)
+      return;
+
+   if (widget->smart_object)
+      evas_object_color_set(widget->smart_object, r, g, b, a);
+}
+
+/**
  * @brief Raises a widget: it will be moved above all the other widgets that 
have the same parent as @a widget
  * @param widget the widget to raise
  */
@@ -3012,7 +3032,7 @@
          _etk_widget_smart_object_resize_cb, /* resize */
          _etk_widget_smart_object_show_cb, /* show */
          _etk_widget_smart_object_hide_cb, /* hide */
-         NULL, /* color_set */
+         _etk_widget_smart_object_color_set_cb, /* color_set */
          _etk_widget_smart_object_clip_set_cb, /* clip_set */
          _etk_widget_smart_object_clip_unset_cb, /* clip_unset */
          NULL); /* data*/
@@ -3183,6 +3203,38 @@
          evas_object_hide(child->smart_object);
    }
 }
+
+/* Called when the smart object's color is set */
+static void _etk_widget_smart_object_color_set_cb(Evas_Object *obj, int r, int 
g, int b, int a)
+{
+   Evas_List *l;
+   Etk_Widget_Member_Object *m;
+   Etk_Widget *widget, *child;
+   
+   if (!obj || !(widget = ETK_WIDGET(evas_object_smart_data_get(obj))))
+      return;
+   
+   if (widget->theme_object)
+      evas_object_color_set(widget->theme_object, r, g, b, a);
+   
+   /* TODO: Do we want to change the color on this? */
+   if (widget->event_object)
+      evas_object_color_set(widget->event_object, r, g, b, a);
+   for (l = widget->member_objects; l; l = l->next)
+   {
+      m = l->data;      
+      evas_object_color_set(m->object, r, g, b, a);
+   }
+#if 0   
+   for (l = widget->children; l; l = l->next)
+   {
+      child = l->data;
+      if (!child->swallowed)
+         evas_object_color_set(child->smart_object, r, g, b, a);
+   }
+#endif   
+}
+
 
 /* Called when a clip is set to the smart object */
 static void _etk_widget_smart_object_clip_set_cb(Evas_Object *object, 
Evas_Object *clip)
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_widget.h,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -3 -r1.48 -r1.49
--- etk_widget.h        22 Mar 2007 19:36:52 -0000      1.48
+++ etk_widget.h        22 Mar 2007 23:31:40 -0000      1.49
@@ -146,6 +146,8 @@
 void     etk_widget_hide_all(Etk_Widget *widget);
 Etk_Bool etk_widget_is_visible(Etk_Widget *widget);
 
+void etk_widget_color_set(Etk_Widget *widget, int r, int g, int b, int a);
+
 void etk_widget_raise(Etk_Widget *widget);
 void etk_widget_lower(Etk_Widget *widget);
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_window.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -3 -r1.44 -r1.45
--- etk_window.c        22 Mar 2007 19:36:52 -0000      1.44
+++ etk_window.c        22 Mar 2007 23:31:40 -0000      1.45
@@ -34,6 +34,7 @@
    ETK_WINDOW_FOCUSED_PROPERTY,
    ETK_WINDOW_DECORATED_PROPERTY,
    ETK_WINDOW_SHAPED_PROPERTY,
+   ETK_WINDOW_HAS_ALPHA_PROPERTY,     
    ETK_WINDOW_SKIP_TASKBAR_PROPERTY,
    ETK_WINDOW_SKIP_PAGER_PROPERTY
 };
@@ -86,6 +87,7 @@
       etk_type_property_add(window_type, "focused", 
ETK_WINDOW_FOCUSED_PROPERTY, ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_bool(ETK_TRUE));
       etk_type_property_add(window_type, "decorated", 
ETK_WINDOW_DECORATED_PROPERTY, ETK_PROPERTY_BOOL, 
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_FALSE));
       etk_type_property_add(window_type, "shaped", ETK_WINDOW_SHAPED_PROPERTY, 
ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_bool(ETK_FALSE));
+      etk_type_property_add(window_type, "has_alpha", 
ETK_WINDOW_HAS_ALPHA_PROPERTY, ETK_PROPERTY_BOOL, 
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_FALSE));      
       etk_type_property_add(window_type, "skip-taskbar", 
ETK_WINDOW_SKIP_TASKBAR_PROPERTY, ETK_PROPERTY_BOOL, 
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_FALSE));
       etk_type_property_add(window_type, "skip-pager", 
ETK_WINDOW_SKIP_PAGER_PROPERTY, ETK_PROPERTY_BOOL, 
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_FALSE));
       
@@ -481,6 +483,30 @@
 }
 
 /**
+ * @brief Sets wheter the window has an alpha channel (supports translucency)
+ * @param window a window
+ * @param has_alpha the alpha setting
+ */
+void etk_window_has_alpha_set(Etk_Window *window, Etk_Bool has_alpha)
+{
+   if (!window)
+      return;
+   etk_engine_window_has_alpha_set(window, has_alpha);
+}
+
+/**
+ * @brief Gets whether the window has an alpha channel (supports translucency)
+ * @param window a window
+ * @return Returns ETK_TRUE if the window has an alpha channel
+ */
+Etk_Bool etk_window_has_alpha_get(Etk_Window *window)
+{
+   if (!window)
+      return ETK_TRUE;
+   return etk_engine_window_has_alpha_get(window);
+}
+
+/**
  * @brief Sets whether the window should not be shown in the taskbar
  * @param window a window
  * @param skip_taskbar_hint if @a skip_taskbar_hint == ETK_TRUE, the window 
should not be shown in the taskbar
@@ -611,6 +637,9 @@
       case ETK_WINDOW_SHAPED_PROPERTY:
          etk_window_shaped_set(window, etk_property_value_bool_get(value));
          break;
+      case ETK_WINDOW_HAS_ALPHA_PROPERTY:
+         etk_window_has_alpha_set(window, etk_property_value_bool_get(value));
+         break;      
       case ETK_WINDOW_SKIP_TASKBAR_PROPERTY:
          etk_window_skip_taskbar_hint_set(window, 
etk_property_value_bool_get(value));
          break;
@@ -656,6 +685,9 @@
       case ETK_WINDOW_SHAPED_PROPERTY:
          etk_property_value_bool_set(value, etk_window_shaped_get(window));
          break;
+      case ETK_WINDOW_HAS_ALPHA_PROPERTY:
+         etk_property_value_bool_set(value, etk_window_has_alpha_get(window));
+         break;      
       case ETK_WINDOW_SKIP_TASKBAR_PROPERTY:
          etk_property_value_bool_set(value, 
etk_window_skip_taskbar_hint_get(window));
          break;
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_window.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- etk_window.h        6 Feb 2007 21:45:36 -0000       1.22
+++ etk_window.h        22 Mar 2007 23:31:40 -0000      1.23
@@ -80,6 +80,8 @@
 Etk_Bool etk_window_decorated_get(Etk_Window *window);
 void     etk_window_shaped_set(Etk_Window *window, Etk_Bool shaped);
 Etk_Bool etk_window_shaped_get(Etk_Window *window);
+void     etk_window_has_alpha_set(Etk_Window *window, Etk_Bool has_alpha);
+Etk_Bool etk_window_has_alpha_get(Etk_Window *window);
 
 void     etk_window_skip_taskbar_hint_set(Etk_Window *window, Etk_Bool 
skip_taskbar_hint);
 Etk_Bool etk_window_skip_taskbar_hint_get(Etk_Window *window);



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