diff options
author | Youngbok Shin <youngb.shin@samsung.com> | 2014-01-10 16:37:55 +0900 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2014-01-10 16:39:06 +0900 |
commit | 6c12d740087ce54e9af59333c0e23dbc129882e7 (patch) | |
tree | 97bccaa5c9ce5cd4d007ab06006b38c82904adb3 | |
parent | b15e2cfc45105640078f004345593aacd68a96ee (diff) | |
download | elementary-6c12d740087ce54e9af59333c0e23dbc129882e7.tar.gz |
When the viewport is resized, the entry size will be recalculate.
Using the elm_scrollable_interface_content_viewport_resize_cb_set in
scrollable entry widget. this only happens in mobile profile when you
drag the content with your finger left/right when the content is
smaller than the gap between icons.
This accepts D187
-rw-r--r-- | src/bin/test_entry.c | 66 | ||||
-rw-r--r-- | src/lib/elm_entry.c | 33 |
2 files changed, 79 insertions, 20 deletions
diff --git a/src/bin/test_entry.c b/src/bin/test_entry.c index 4327a7d1c..c6483d88f 100644 --- a/src/bin/test_entry.c +++ b/src/bin/test_entry.c @@ -286,10 +286,24 @@ _entry_rejected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EI printf("REJECTED: This entry rejects the following character set: [%s]\n", accept_set->rejected); } +static void +_end_show_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *en = data; + elm_entry_end_visible_set(en, EINA_TRUE); +} + +static void +_end_hide_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *en = data; + elm_entry_end_visible_set(en, EINA_FALSE); +} + void test_entry_scrolled(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *win, *bx, *bx2, *bt, *en, *en_p, *sp; + Evas_Object *win, *bx, *bx2, *bx3, *bt, *en, *en_p, *sp, *entry; static Elm_Entry_Filter_Accept_Set digits_filter_data, digits_filter_data2; static Elm_Entry_Filter_Limit_Size limit_filter_data, limit_filter_data2; @@ -449,27 +463,27 @@ test_entry_scrolled(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void * elm_box_pack_end(bx, en_p); /* entry with icon/end widgets*/ - en = elm_entry_add(win); - elm_entry_scrollable_set(en, EINA_TRUE); - elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); - elm_entry_single_line_set(en, EINA_TRUE); - 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); + entry = elm_entry_add(win); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_single_line_set(entry, EINA_TRUE); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); 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, 128, 0, 0, 128); evas_object_show(bt); - elm_object_part_content_set(en, "icon", bt); + elm_object_part_content_set(entry, "icon", bt); bt = elm_icon_add(win); elm_icon_standard_set(bt, "delete"); 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(en, "end", bt); - elm_object_text_set(en, "entry with icon and end objects"); - evas_object_show(en); - elm_box_pack_end(bx, en); + elm_object_part_content_set(entry, "end", bt); + elm_object_text_set(entry, "entry with icon and end objects. For the test of show/hide end, text should be long long..."); + evas_object_show(entry); + elm_box_pack_end(bx, entry); /* markup entry */ en = elm_entry_add(win); @@ -551,6 +565,34 @@ test_entry_scrolled(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void * elm_box_pack_end(bx, bx2); evas_object_show(bx2); + bx3 = elm_box_add(win); + elm_box_horizontal_set(bx3, EINA_TRUE); + evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "End Show"); + evas_object_smart_callback_add(bt, "clicked", _end_show_cb, entry); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx3, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "End Hide"); + evas_object_smart_callback_add(bt, "clicked", _end_hide_cb, entry); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx3, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx3); + evas_object_show(bx3); + elm_object_focus_set(win, EINA_TRUE); evas_object_resize(win, 320, 300); evas_object_show(win); diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c index e460d9043..bf380664c 100644 --- a/src/lib/elm_entry.c +++ b/src/lib/elm_entry.c @@ -2952,28 +2952,34 @@ _entry_selection_callbacks_register(Evas_Object *obj) } static void -_resize_cb(void *data, - Evas *e EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) +_elm_entry_resize_internal(Evas_Object *obj) { - ELM_ENTRY_DATA_GET(data, sd); + ELM_ENTRY_DATA_GET(obj, sd); if (sd->line_wrap) { - elm_layout_sizing_eval(data); + elm_layout_sizing_eval(obj); } else if (sd->scroll) { Evas_Coord vw = 0, vh = 0; - eo_do(data, elm_scrollable_interface_content_viewport_size_get(&vw, &vh)); + eo_do(obj, elm_scrollable_interface_content_viewport_size_get(&vw, &vh)); if (vw < sd->ent_mw) vw = sd->ent_mw; if (vh < sd->ent_mh) vh = sd->ent_mh; evas_object_resize(sd->entry_edje, vw, vh); } - if (sd->hoversel) _hoversel_position(data); + if (sd->hoversel) _hoversel_position(obj); +} + +static void +_resize_cb(void *data, + Evas *e EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + _elm_entry_resize_internal(data); } Evas_Coord ox, oy; @@ -3355,6 +3361,9 @@ _elm_entry_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) if (sd->auto_save) _save_do(obj); } + if (sd->scroll) + eo_do(obj, elm_scrollable_interface_content_viewport_resize_cb_set(NULL)); + elm_entry_anchor_hover_end(obj); elm_entry_anchor_hover_parent_set(obj, NULL); @@ -4998,6 +5007,13 @@ _cnp_mode_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) if (ret) *ret = sd->cnp_mode; } +static void +_elm_entry_content_viewport_resize_cb(Evas_Object *obj, + Evas_Coord w EINA_UNUSED, Evas_Coord h EINA_UNUSED) +{ + _elm_entry_resize_internal(obj); +} + EAPI void elm_entry_scrollable_set(Evas_Object *obj, Eina_Bool scroll) @@ -5050,6 +5066,7 @@ _scrollable_set(Eo *obj, void *_pd, va_list *list) else eo_do(obj, elm_scrollable_interface_policy_set(sd->policy_h, sd->policy_v)); eo_do(obj, elm_scrollable_interface_content_set(sd->entry_edje)); + eo_do(obj, elm_scrollable_interface_content_viewport_resize_cb_set(_elm_entry_content_viewport_resize_cb)); elm_widget_on_show_region_hook_set(obj, _show_region_hook, NULL); } else |