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
This commit is contained in:
Youngbok Shin 2014-01-10 16:37:55 +09:00 committed by Carsten Haitzler (Rasterman)
parent 55d26bd52e
commit d91f85c967
2 changed files with 79 additions and 20 deletions

View File

@ -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);

View File

@ -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