Hi,I've got a small problem recently on a theme. If the theme use a min size for
it's buttons, way larger than the default theme's. It's impossible to have the icon centered on a button with no text. (For exemple into the File Properties dialog in EFM).
Currently the button theme only know when an icon is visible or not. My patch
replace the two e,action,show/hide,icon signals by e,state,icon/text/combo. That way the theme knows how justify the icon. Any comments is welcome. lok
Index: e/data/themes/default_button.edc =================================================================== RCS file: /cvs/e/e17/apps/e/data/themes/default_button.edc,v retrieving revision 1.12 diff -u -r1.12 default_button.edc --- e/data/themes/default_button.edc 7 Jul 2007 02:04:19 -0000 1.12 +++ e/data/themes/default_button.edc 18 Sep 2007 00:33:09 -0000 @@ -78,7 +78,7 @@ } } description { - state: "visible" 0.0; + state: "combo" 0.0; inherit: "default" 0.0; aspect: 1.0 1.0; aspect_preference: VERTICAL; @@ -94,6 +94,23 @@ to: "button_image"; } } + description { + state: "icon" 0.0; + inherit: "default" 0.0; + aspect: 1.0 1.0; + aspect_preference: BOTH; + align: 0.5 0.5; + rel1 { + relative: 0.0 0.0; + offset: 8 8; + to: "button_image"; + } + rel2 { + relative: 1.0 1.0; + offset: -9 -9; + to: "button_image"; + } + } } part { name: "e.text.label"; @@ -117,7 +134,7 @@ color3: 255 255 255 128; color_class: "button_text"; text { - text: "OK"; + text: ""; font: "Edje-Vera"; size: 10; min: 1 1; @@ -132,6 +149,11 @@ color3: 255 255 255 64; color_class: "button_text_disabled"; } + description { + state: "icon" 0.0; + inherit: "default" 0.0; + visible: 0; + } } part { name: "glint_clip"; @@ -330,18 +352,28 @@ action: SIGNAL_EMIT "e,action,click" ""; } program { - name: "icon_visible"; - signal: "e,action,show,icon"; + name: "text_state"; + signal: "e,state,text"; source: "e"; - action: STATE_SET "visible" 0.0; + action: STATE_SET "default" 0.0; target: "e.swallow.icon"; + target: "e.text.label"; } program { - name: "icon_invisible"; - signal: "e,action,hide,icon"; + name: "icon_state"; + signal: "e,state,icon"; source: "e"; - action: STATE_SET "default" 0.0; + action: STATE_SET "icon" 0.0; + target: "e.swallow.icon"; + target: "e.text.label"; + } + program { + name: "combo_state"; + signal: "e,state,combo"; + source: "e"; + action: STATE_SET "combo" 0.0; target: "e.swallow.icon"; + target: "e.text.label"; } program { name: "button_in"; Index: e/src/bin/e_widget_button.c =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_button.c,v retrieving revision 1.16 diff -u -r1.16 e_widget_button.c --- e/src/bin/e_widget_button.c 7 Aug 2007 14:20:47 -0000 1.16 +++ e/src/bin/e_widget_button.c 18 Sep 2007 00:33:49 -0000 @@ -3,6 +3,13 @@ */ #include "e.h" +typedef enum _E_Widget_Button_Type E_Widget_Button_Type; +enum _E_Widget_Button_Type +{ + E_WIDGET_BUTTON_TEXT = 1 << 0, + E_WIDGET_BUTTON_ICON = 1 << 1 +}; + typedef struct _E_Widget_Data E_Widget_Data; struct _E_Widget_Data { @@ -11,6 +18,7 @@ void (*func) (void *data, void *data2); void *data; void *data2; + E_Widget_Button_Type type; }; static void _e_wid_del_hook(Evas_Object *obj); @@ -19,6 +27,7 @@ static void _e_wid_disable_hook(Evas_Object *obj); static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source); static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_wid_button_state_send(E_Widget_Data *wd); /* local subsystem functions */ /* externally accessible functions */ @@ -46,7 +55,11 @@ e_theme_edje_object_set(o, "base/theme/widgets", "e/widgets/button"); edje_object_signal_callback_add(o, "e,action,click", "", _e_wid_signal_cb1, obj); - edje_object_part_text_set(o, "e.text.label", label); + if (label && label[0] != 0) + { + edje_object_part_text_set(o, "e.text.label", label); + wd->type |= E_WIDGET_BUTTON_TEXT; + } evas_object_show(o); e_widget_sub_object_add(obj, o); @@ -59,12 +72,12 @@ wd->o_icon = o; e_util_edje_icon_set(o, icon); edje_object_part_swallow(wd->o_button, "e.swallow.icon", o); - edje_object_signal_emit(wd->o_button, "e,action,show,icon", "e"); - edje_object_message_signal_process(wd->o_button); evas_object_show(o); e_widget_sub_object_add(obj, o); + wd->type |= E_WIDGET_BUTTON_ICON; } - + + _e_wid_button_state_send(wd); edje_object_size_min_calc(wd->o_button, &mw, &mh); e_widget_min_size_set(obj, mw, mh); @@ -78,6 +91,11 @@ wd = e_widget_data_get(obj); edje_object_part_text_set(wd->o_button, "e.text.label", label); + if (label && label[0] != 0) + wd->type |= E_WIDGET_BUTTON_TEXT; + else + wd->type = ~(wd->type & E_WIDGET_BUTTON_TEXT); + _e_wid_button_state_send(wd); } EAPI void @@ -90,8 +108,6 @@ { e_widget_sub_object_del(obj, wd->o_icon); evas_object_hide(wd->o_icon); - edje_object_signal_emit(wd->o_button, "e,action,hide,icon", "e"); - edje_object_message_signal_process(wd->o_button); edje_object_part_unswallow(wd->o_button, wd->o_icon); evas_object_del(wd->o_icon); wd->o_icon = NULL; @@ -100,12 +116,14 @@ { wd->o_icon = icon; edje_object_part_swallow(wd->o_button, "e.swallow.icon", icon); - edje_object_signal_emit(wd->o_button, "e,action,show,icon", "e"); - edje_object_message_signal_process(wd->o_button); evas_object_pass_events_set(icon, 1); evas_object_show(icon); e_widget_sub_object_add(obj, icon); + wd->type |= E_WIDGET_BUTTON_ICON; } + else + wd->type = ~(wd->type & E_WIDGET_BUTTON_ICON); + _e_wid_button_state_send(wd); } static void @@ -172,4 +190,26 @@ _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info) { e_widget_focus_steal(data); +} + +static void +_e_wid_button_state_send(E_Widget_Data *wd) +{ + if (!wd || !wd->o_button) return; + if (wd->type & E_WIDGET_BUTTON_TEXT) + { + if (wd->type & E_WIDGET_BUTTON_ICON) + { + edje_object_signal_emit(wd->o_button, "e,state,combo", "e"); + } + else + { + edje_object_signal_emit(wd->o_button, "e,state,text", "e"); + } + } + else if (wd->type & E_WIDGET_BUTTON_ICON) + { + edje_object_signal_emit(wd->o_button, "e,state,icon", "e"); + } + edje_object_message_signal_process(wd->o_button); }
------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel