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