diff --git a/legacy/elementary/data/themes/widgets/entry.edc b/legacy/elementary/data/themes/widgets/entry.edc index 8ab0268108..6fbee9d964 100644 --- a/legacy/elementary/data/themes/widgets/entry.edc +++ b/legacy/elementary/data/themes/widgets/entry.edc @@ -718,11 +718,34 @@ group { name: "elm/entry/base/default"; tag: "preedit" "+ underline=on underline_color=#000"; tag: "preedit_sel" "+ backing=on backing_color=#000 color=#FFFFFF"; } + style { name: "entry_textblock_guide_style"; + base: "font=Sans font_size=10 color=#00000040 wrap=word text_class=entry left_margin=4 right_margin=4 ellipsis=0.0"; + tag: "em" "+ font_style=Oblique"; + tag: "hilight" "+ font_weight=Bold"; + } } data { // item: context_menu_orientation "horizontal"; } parts { + part { name: "elm.guide"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.to: "elm.text"; + rel2.to: "elm.text"; + text { + style: "entry_textblock_guide_style"; + min: 0 1; + align: 0.0 0.0; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } part { name: "elm.text"; type: TEXTBLOCK; mouse_events: 1; @@ -773,6 +796,18 @@ group { name: "elm/entry/base/default"; action: STATE_SET "default" 0.0; target: "elm.text"; } + program { name: "gdisable"; + signal: "elm,guide,disabled"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "elm.guide"; + } + program { name: "genable"; + signal: "elm,guide,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.guide"; + } } } @@ -796,8 +831,31 @@ group { name: "elm/entry/base-mixedwrap/default"; tag: "preedit" "+ underline=on underline_color=#000"; tag: "preedit_sel" "+ backing=on backing_color=#000 color=#FFFFFF"; } + style { name: "entry_textblock_guide_style_mixedwrap"; + base: "font=Sans font_size=10 color=#00000040 wrap=mixed text_class=entry left_margin=4 right_margin=4 ellipsis=0.0"; + tag: "em" "+ font_style=Oblique"; + tag: "hilight" "+ font_weight=Bold"; + } } parts { + part { name: "elm.guide"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.to: "elm.text"; + rel2.to: "elm.text"; + text { + style: "entry_textblock_guide_style_mixedwrap"; + min: 0 1; + align: 0.0 0.0; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } part { name: "elm.text"; description { state: "default" 0.0; fixed: 1 0; @@ -838,8 +896,31 @@ group { name: "elm/entry/base-charwrap/default"; tag: "preedit" "+ underline=on underline_color=#000"; tag: "preedit_sel" "+ backing=on backing_color=#000 color=#FFFFFF"; } + style { name: "entry_textblock_guide_style_charwrap"; + base: "font=Sans font_size=10 color=#00000040 wrap=char text_class=entry left_margin=4 right_margin=4 ellipsis=0.0"; + tag: "em" "+ font_style=Oblique"; + tag: "hilight" "+ font_weight=Bold"; + } } parts { + part { name: "elm.guide"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.to: "elm.text"; + rel2.to: "elm.text"; + text { + style: "entry_textblock_guide_style_charwrap"; + min: 0 1; + align: 0.0 0.0; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } part { name: "elm.text"; description { state: "default" 0.0; fixed: 1 0; @@ -863,6 +944,24 @@ group { name: "elm/entry/base-charwrap/default"; group { name: "elm/entry/base-nowrap/default"; inherit: "elm/entry/base/default"; parts { + part { name: "elm.guide"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.to: "elm.text"; + rel2.to: "elm.text"; + text { + style: "entry_textblock_guide_style"; + min: 0 1; + align: 0.0 0.0; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } part { name: "elm.text"; description { state: "default" 0.0; text { @@ -902,8 +1001,31 @@ group { name: "elm/entry/base-single/default"; tag: "preedit" "+ underline=on underline_color=#000"; tag: "preedit_sel" "+ backing=on backing_color=#000 color=#FFFFFF"; } + style { name: "entry_single_textblock_guide_style"; + base: "font=Sans font_size=10 color=#00000080 wrap=none text_class=entry left_margin=4 right_margin=4 ellipsis=0.0"; + tag: "em" "+ font_style=Oblique"; + tag: "hilight" "+ font_weight=Bold"; + } } parts { + part { name: "elm.guide"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.to: "elm.text"; + rel2.to: "elm.text"; + text { + style: "entry_single_textblock_guide_style"; + min: 0 1; + align: 0.0 0.0; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } part { name: "elm.text"; multiline: 0; description { state: "default" 0.0; @@ -1057,6 +1179,24 @@ group { name: "elm/entry/base-nowrap-noedit/default"; group { name: "elm/entry/base-password/default"; inherit: "elm/entry/base/default"; parts { + part { name: "elm.guide"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.to: "elm.text"; + rel2.to: "elm.text"; + text { + style: "entry_single_textblock_guide_style"; + min: 0 1; + align: 0.0 0.0; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } part { name: "elm.text"; entry_mode: PASSWORD; multiline: 0; diff --git a/legacy/elementary/src/bin/test_entry.c b/legacy/elementary/src/bin/test_entry.c index f01617934b..3d786c62bf 100644 --- a/legacy/elementary/src/bin/test_entry.c +++ b/legacy/elementary/src/bin/test_entry.c @@ -2039,13 +2039,13 @@ test_entry8(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info bt = elm_icon_add(win); elm_icon_standard_set(bt, "home"); evas_object_size_hint_min_set(bt, 48, 48); - evas_object_color_set(bt, 255, 0, 0, 128); + evas_object_color_set(bt, 128, 0, 0, 128); evas_object_show(bt); elm_object_part_content_set(en3, "icon", bt); bt = elm_icon_add(win); elm_icon_standard_set(bt, "delete"); - evas_object_color_set(bt, 255, 0, 0, 128); + evas_object_color_set(bt, 128, 0, 0, 128); evas_object_size_hint_min_set(bt, 48, 48); evas_object_show(bt); elm_object_part_content_set(en3, "end", bt); @@ -2074,6 +2074,7 @@ test_entry8(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info evas_object_show(rect); en4 = elm_entry_add(win); + elm_object_part_text_set(en4, "guide", "Type in here"); elm_entry_scrollable_set(en4, EINA_TRUE); elm_entry_bounce_set(en4, EINA_TRUE, EINA_TRUE); elm_entry_autocapital_type_set(en4, EINA_TRUE); diff --git a/legacy/elementary/src/lib/elm_entry.c b/legacy/elementary/src/lib/elm_entry.c index 6affc3b6cd..141cd6762c 100644 --- a/legacy/elementary/src/lib/elm_entry.c +++ b/legacy/elementary/src/lib/elm_entry.c @@ -81,6 +81,7 @@ struct _Widget_Data Eina_Bool prediction_allow : 1; Eina_Bool input_panel_return_key_disabled : 1; Eina_Bool autoreturnkey : 1; + Eina_Bool havetext : 1; Elm_Cnp_Mode cnp_mode : 2; }; @@ -379,6 +380,18 @@ _delay_write(void *data) return ECORE_CALLBACK_CANCEL; } +static void +_elm_entry_update_guide(Evas_Object *obj, Eina_Bool havetext) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + if ((havetext) && (!wd->havetext)) + edje_object_signal_emit(wd->ent, "elm,guide,disabled", "elm"); + else if ((!havetext) && (wd->havetext)) + edje_object_signal_emit(wd->ent, "elm,guide,enabled", "elm"); + wd->havetext = havetext; +} + static Elm_Entry_Markup_Filter * _filter_new(Elm_Entry_Filter_Cb func, void *data) { @@ -588,6 +601,8 @@ _theme_hook(Evas_Object *obj) elm_widget_highlight_in_theme_set(obj, EINA_FALSE); } _sizing_eval(obj); + wd->havetext = !wd->havetext; + _elm_entry_update_guide(obj, !wd->havetext); evas_event_thaw(evas_object_evas_get(obj)); evas_event_thaw_eval(evas_object_evas_get(obj)); } @@ -1555,6 +1570,7 @@ _entry_changed_common_handling(void *data, const char *event) { Widget_Data *wd = elm_widget_data_get(data); Evas_Coord minh; + const char *text; if (!wd) return; evas_event_freeze(evas_object_evas_get(data)); wd->changed = EINA_TRUE; @@ -1579,6 +1595,14 @@ _entry_changed_common_handling(void *data, const char *event) * any access to wd after this could be invalid */ evas_object_smart_callback_call(data, event, NULL); _check_enable_return_key(data); + text = edje_object_part_text_get(wd->ent, "elm.text"); + if (text) + { + if (text[0]) + _elm_entry_update_guide(data, EINA_TRUE); + else + _elm_entry_update_guide(data, EINA_FALSE); + } } static void @@ -2181,6 +2205,8 @@ _text_append_idler(void *data) evas_event_thaw(evas_object_evas_get(obj)); evas_event_thaw_eval(evas_object_evas_get(obj)); + _elm_entry_update_guide(obj, EINA_TRUE); + /* If there's still more to go, renew the idler, else, cleanup */ if (wd->append_text_position < wd->append_text_len) { @@ -2277,9 +2303,14 @@ _elm_entry_text_set(Evas_Object *obj, const char *item, const char *entry) if (!wd) return; evas_event_freeze(evas_object_evas_get(obj)); if (!entry) entry = ""; - if (item && strcmp(item, "default")) + if (item) { - edje_object_part_text_set(wd->ent, item, entry); + if (!strcmp(item, "guide")) + edje_object_part_text_set(wd->ent, "elm.guide", entry); + else + edje_object_part_text_set(wd->ent, item, entry); + evas_event_thaw(evas_object_evas_get(obj)); + evas_event_thaw_eval(evas_object_evas_get(obj)); return; } @@ -2317,6 +2348,10 @@ _elm_entry_text_set(Evas_Object *obj, const char *item, const char *entry) { edje_object_part_text_set(wd->ent, "elm.text", entry); } + if ((entry) && (entry[0])) + _elm_entry_update_guide(obj, EINA_TRUE); + else + _elm_entry_update_guide(obj, EINA_FALSE); evas_event_thaw(evas_object_evas_get(obj)); evas_event_thaw_eval(evas_object_evas_get(obj)); }