From 06f5dda19bf6224fea8d1a52dff98f17734b5f0f Mon Sep 17 00:00:00 2001 From: thiep ha Date: Wed, 30 May 2012 12:18:48 +0000 Subject: [PATCH] From: thiep ha Subject: Re: [E-devel] [Patch] [elm_entry] New APIs for user style Thank you for your comments. I would like to send you the modified patch. Followings are my modification: - Add my part to ChangeLog, AUTHORS files as Raster's comment. - Add const to the parameter of elm_entry_text_style_user_peek and example for pop and peek to test_entry_style_user as Daniel's comment. SVN revision: 71557 --- legacy/elementary/AUTHORS | 1 + legacy/elementary/ChangeLog | 5 ++ legacy/elementary/src/bin/test.c | 2 + legacy/elementary/src/bin/test_entry.c | 73 ++++++++++++++++++++++++++ legacy/elementary/src/lib/elm_entry.c | 29 ++++++++++ legacy/elementary/src/lib/elm_entry.h | 30 +++++++++++ 6 files changed, 140 insertions(+) diff --git a/legacy/elementary/AUTHORS b/legacy/elementary/AUTHORS index 8ae659ef2f..f2210dd517 100644 --- a/legacy/elementary/AUTHORS +++ b/legacy/elementary/AUTHORS @@ -58,3 +58,4 @@ M.V.K. Sumanth Jérôme Pinot Davide Andreoli (davemds) Michal Pakula vel Rutka +Thiep Ha diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index 0c3d73a2b5..98cc092630 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -124,3 +124,8 @@ 2012-05-30 Mike Blumenkrantz * Fix even/odd signals for genlist items + +2012-05-30 Thiep Ha + + * Entry: Add 3 APIs which are elm_entry_text_style_user_push/pop/peek + and test functions for these APIs. diff --git a/legacy/elementary/src/bin/test.c b/legacy/elementary/src/bin/test.c index b01eae35cb..8db56389d0 100644 --- a/legacy/elementary/src/bin/test.c +++ b/legacy/elementary/src/bin/test.c @@ -43,6 +43,7 @@ void test_layout2(void *data, Evas_Object *obj, void *event_info); void test_hover(void *data, Evas_Object *obj, void *event_info); void test_hover2(void *data, Evas_Object *obj, void *event_info); void test_entry(void *data, Evas_Object *obj, void *event_info); +void test_entry_style_user(void *data, Evas_Object *obj, void *event_info); void test_entry_scrolled(void *data, Evas_Object *obj, void *event_info); void test_entry3(void *data, Evas_Object *obj, void *event_info); void test_entry4(void *data, Evas_Object *obj, void *event_info); @@ -484,6 +485,7 @@ add_tests: //------------------------------// ADD_TEST(NULL, "Entries", "Entry", test_entry); + ADD_TEST(NULL, "Entries", "Entry Style", test_entry_style_user); ADD_TEST(NULL, "Entries", "Entry Scrolled", test_entry_scrolled); ADD_TEST(NULL, "Entries", "Entry 3", test_entry3); ADD_TEST(NULL, "Entries", "Entry 4", test_entry4); diff --git a/legacy/elementary/src/bin/test_entry.c b/legacy/elementary/src/bin/test_entry.c index f62213e150..cb1c84a2a8 100644 --- a/legacy/elementary/src/bin/test_entry.c +++ b/legacy/elementary/src/bin/test_entry.c @@ -702,6 +702,79 @@ my_ent_bt_pas(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED elm_entry_selection_paste(en); } +static void +ent_bt_style_user_peek(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + const char* cur_style = elm_entry_text_style_user_peek(en); + if (cur_style) + printf("Current style user: %s\n", cur_style); + else + printf("Style user stack is empty.\n"); +} + +static void +ent_bt_style_user_pop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_text_style_user_pop(en); + printf("Style user popped\n"); +} + +void +test_entry_style_user(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win, *bx, *en, *bt, *bt2; + + win = elm_win_util_standard_add("entry-style", "Entry Style"); + elm_win_autodel_set(win, EINA_TRUE); + evas_object_resize(win, 300, 300); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + + en = elm_entry_add(win); + elm_entry_line_wrap_set(en, ELM_WRAP_MIXED); + + elm_entry_text_style_user_push(en, "DEFAULT='font_size=40 color=#FF0000'"); + elm_object_text_set(en, "Testing Text"); + + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, en); + evas_object_resize(en, 200, 200); + evas_object_show(en); + + bt = elm_button_add(win); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(bt, "Peek"); + evas_object_smart_callback_add(bt, "clicked", ent_bt_style_user_peek, en); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt2 = elm_button_add(win); + evas_object_size_hint_weight_set(bt2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(bt2, "Pop"); + evas_object_smart_callback_add(bt2, "clicked", ent_bt_style_user_pop, en); + evas_object_size_hint_weight_set(bt2, 0.0, 0.0); + evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt2); + evas_object_propagate_events_set(bt2, 0); + elm_object_focus_allow_set(bt2, 0); + evas_object_show(bt2); + + elm_object_focus_set(en, EINA_TRUE); + evas_object_show(win); +} + + void test_entry3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { diff --git a/legacy/elementary/src/lib/elm_entry.c b/legacy/elementary/src/lib/elm_entry.c index ddc90ee652..b8685eb83a 100644 --- a/legacy/elementary/src/lib/elm_entry.c +++ b/legacy/elementary/src/lib/elm_entry.c @@ -2550,6 +2550,35 @@ elm_entry_add(Evas_Object *parent) return obj; } +EAPI void +elm_entry_text_style_user_push(Evas_Object *obj, const char *style) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + edje_object_part_text_style_user_push(wd->ent, "elm.text", style); + _theme_hook(obj); +} + +EAPI void +elm_entry_text_style_user_pop(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + edje_object_part_text_style_user_pop(wd->ent, "elm.text"); + _theme_hook(obj); +} + +EAPI const char* +elm_entry_text_style_user_peek(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return NULL; + return edje_object_part_text_style_user_peek(wd->ent, "elm.text"); +} + EAPI void elm_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line) { diff --git a/legacy/elementary/src/lib/elm_entry.h b/legacy/elementary/src/lib/elm_entry.h index f50dfd6001..8c271b27d7 100644 --- a/legacy/elementary/src/lib/elm_entry.h +++ b/legacy/elementary/src/lib/elm_entry.h @@ -469,6 +469,36 @@ typedef Edje_Entry_Change_Info Elm_Entry_Change_Info; */ EAPI Evas_Object *elm_entry_add(Evas_Object *parent); +/** + * Push the style to the top of user style stack. + * If there is styles in the user style stack, the properties in the top style + * of user style stack will replace the properties in current theme. + * The input style is specified in format tag='property=value' (i.e. DEFAULT='font=Sans font_size=60'hilight=' + font_weight=Bold'). + * + * @param obj The entry object + * @param style The style user to push + */ +EAPI void elm_entry_text_style_user_push(Evas_Object *obj, const char *style); + +/** + * Remove the style in the top of user style stack. + * + * @param obj The entry object + * + * @see elm_entry_text_style_user_push() + */ +EAPI void elm_entry_text_style_user_pop(Evas_Object *obj); + +/** + * Retrieve the style on the top of user style stack. + * + * @param obj The entry object + * @return style on the top of user style stack if exist, otherwise NULL. + * + * @see elm_entry_text_style_user_push() + */ +EAPI const char* elm_entry_text_style_user_peek(const Evas_Object *obj); + /** * Sets the entry to single line mode. *