[elm_entry] Fix selection handler cut issue at edges
authorSubodhKumar <s7158.kumar@samsung.com>
Mon, 7 Nov 2016 08:41:31 +0000 (14:11 +0530)
committerJinYong Park <j4939.park@samsung.com>
Tue, 22 Nov 2016 10:46:57 +0000 (19:46 +0900)
@tizen_fix

Change-Id: I6e01f69d496beef26364c0d22ad071fa6567dc38
Signed-off-by: SubodhKumar <s7158.kumar@samsung.com>
src/lib/elm_entry.c

index 79e6aa2e31e7bb813e7ee03f99bb3e3568e8ae57..16b0c2a0317bfaf3b4cb61d35cbcbeb3d4d17d9e 100644 (file)
@@ -1358,15 +1358,39 @@ _update_selection_handler(Evas_Object *obj)
              evas_object_move(sd->start_handler, hx, hy);
           }
         // TIZEN ONLY (20150901): Show start sel handler on top by default
-        if (ent_y + sy - hh < layrect.y)
+        Evas_Coord handler_width;
+        edje_object_part_geometry_get(sd->start_handler, "handle",
+                                          NULL, NULL, &handler_width, NULL);
+        if (ent_y + sy - hh < layrect.y || ent_y + sy < rect->y)
           {
              hy--;
-             edje_object_signal_emit(sd->start_handler, "elm,state,bottom", "elm");
+             if ((hx + sw <= layrect.x + handler_width) && (hx + sw <= rect->x + handler_width))
+               {
+                  edje_object_signal_emit(sd->start_handler, "elm,state,bottom,reversed", "elm");
+               }
+             else
+               {
+                  edje_object_signal_emit(sd->start_handler, "elm,state,bottom", "elm");
+               }
           }
         else
           {
-             edje_object_signal_emit(sd->start_handler, "elm,state,top", "elm");
-             hy = hy - sh;
+             if ((hx + ew <= layrect.x + handler_width) && (hx + ew <= rect->x + handler_width))
+               {
+                  edje_object_signal_emit(sd->start_handler, "elm,state,top,reversed", "elm");
+               }
+             else
+               {
+                  edje_object_signal_emit(sd->start_handler, "elm,state,top", "elm");
+               }
+             if (start_pos < end_pos)
+               {
+                  hy = hy - sh;
+               }
+             else
+               {
+                  hy = hy - eh;
+               }
              evas_object_move(sd->start_handler, hx, hy);
           }
         edje_object_message_signal_process(sd->start_handler);
@@ -1410,16 +1434,41 @@ _update_selection_handler(Evas_Object *obj)
              evas_object_move(sd->end_handler, hx, hy);
           }
         // TIZEN ONLY (20150723): Show sel handler on top
+        edje_object_part_geometry_get(sd->end_handler, "handle",
+                                          NULL, NULL, &handler_width, NULL);
         if (hy + hh > layrect.y + layrect.h)
           {
-             edje_object_signal_emit(sd->end_handler, "elm,state,top", "elm");
-             hy = hy - sh;
+             if ((hx + ew >= layrect.x + layrect.w - handler_width) &&
+                                     (hx +ew >= rect->x + rect->w - handler_width))
+               {
+                  edje_object_signal_emit(sd->end_handler, "elm,state,top,reversed", "elm");
+               }
+             else
+               {
+                  edje_object_signal_emit(sd->end_handler, "elm,state,top", "elm");
+               }
+             if (start_pos < end_pos)
+               {
+                  hy = hy - eh;
+               }
+             else
+               {
+                  hy = hy - sh;
+               }
              evas_object_move(sd->end_handler, hx, hy);
           }
         else
           {
              hy--;
-             edje_object_signal_emit(sd->end_handler, "elm,state,bottom", "elm");
+             if ((hx + sw >= layrect.x + layrect.w - handler_width) &&
+                                (hx + sw >= rect->x + rect->w - handler_width))
+               {
+                  edje_object_signal_emit(sd->end_handler, "elm,state,bottom,reversed", "elm");
+               }
+             else
+               {
+                  edje_object_signal_emit(sd->end_handler, "elm,state,bottom", "elm");
+               }
           }
         edje_object_message_signal_process(sd->end_handler);
         //