When the viewport is resized, the entry size will be recalculate.
authorYoungbok Shin <youngb.shin@samsung.com>
Fri, 10 Jan 2014 07:37:55 +0000 (16:37 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Fri, 10 Jan 2014 07:39:06 +0000 (16:39 +0900)
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

src/bin/test_entry.c
src/lib/elm_entry.c

index 4327a7d1c8758fec9f58b08af37b24b961c2ed7f..c6483d88ff1bd00c42ae587d4ab850570b8d5b04 100644 (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);
index e460d90434c2d01d95550a54cd4c6a3a07839a58..bf380664c4fcddc41aadfcb223ce59ac909f7294 100644 (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