Fixed a problem that drag image goes out of the screen and background image is broken.
authorbunam.jeon <bunam.jeon@samsung.com>
Tue, 20 Aug 2013 03:12:40 +0000 (12:12 +0900)
committerbunam.jeon <bunam.jeon@samsung.com>
Tue, 20 Aug 2013 07:26:56 +0000 (16:26 +0900)
[Title] Fixed a problem that drag image goes out of the screen and background image is broken.
[Issue#] N_SE-48750, N_SE-48893, N_SE-48922, N_SE-48981
[Problem] Drag image goes out of the screen and background image is broken.
[Cause] 1. Coordinate correction is not.
2. Property of the border has changed.
[Solution] 1. Corrected the coordinates.
   2. Change the property that have been modified.

Change-Id: I735ce90b041c231aace5e4f3ec937085dda36fac

Source/WebKit2/UIProcess/API/efl/tizen/Drag.cpp
Source/WebKit2/UIProcess/API/efl/tizen/Drag.edc
Source/WebKit2/UIProcess/API/efl/tizen/DragHandle.cpp
Source/WebKit2/UIProcess/API/efl/tizen/DragHandle.h

index 32568b6..3c24476 100755 (executable)
@@ -107,7 +107,7 @@ void Drag::handleMouseMove(DragHandle* handle)
     m_viewImpl->page()->dragUpdated(dragData ,m_dragStorageName);
 
     DragSession dragSession = m_viewImpl->page()->dragSession();
-    if (dragSession.operation != DragOperationNone)
+    if (dragSession.operation != DragSourceActionNone)
         handle->updateHandleIcon(true);
      else
         handle->updateHandleIcon(false);
@@ -126,7 +126,7 @@ void Drag::handleMouseUp(DragHandle* handle)
     m_viewImpl->page()->dragUpdated(dragData ,m_dragStorageName);
 
     DragSession dragSession = m_viewImpl->page()->dragSession();
-    if (dragSession.operation != DragOperationNone) {
+    if (dragSession.operation != DragSourceActionNone) {
         m_viewImpl->page()->performDrag(dragData, m_dragStorageName);
         setDragMode(false);
         m_viewImpl->page()->dragEnded(viewPoint, viewPoint, m_dragData->draggingSourceOperationMask());
index e4ceaab..6271fc0 100755 (executable)
@@ -26,16 +26,15 @@ group {
                 scale: 1;
                 description {
                     state: "default" 0.0;
-                    fixed: 0 0;
+                    fixed: 1 1;
                     min: 110 100;
                     align: 0.0 0.0;
                     rel1 { relative: 0.0 0.0; to: "bg"; }
                     rel2 { relative: 1.0 1.0; to: "bg"; }
                     image {
                         normal: "I01_drag_item_bg.png";
-                        border: 34 34 24 34;
+                        border: 12 12 12 12;
                     }
-                    image.middle: 1;
                     fill.smooth: 0;
                 }
             }
index b37c7e4..2c8cd19 100755 (executable)
@@ -37,6 +37,8 @@ namespace WebKit {
 const int s_iconOffset = 90;
 const int s_widthMargin = 20;
 const int s_heightMargin = 10;
+const int s_cancelImageXMargin = 26;
+const int s_cancelImageYMargin = 36;
 const double s_minIconWidth = 110;
 const double s_minIconHeight = 100;
 const double s_minImageLength = 90;
@@ -44,7 +46,8 @@ const double s_maxImageLength = 300;
 
 
 DragHandle::DragHandle(Evas_Object* object, const String& theme, const String& path, Drag* drag)
-    : m_drag(drag)
+    : m_view(object)
+    , m_drag(drag)
     , m_dragJob(0)
 {
     Evas_Object* topWidget = elm_object_top_widget_get(elm_object_parent_widget_get(object));
@@ -60,8 +63,6 @@ DragHandle::DragHandle(Evas_Object* object, const String& theme, const String& p
     if (!elm_layout_file_set(m_icon, theme.utf8().data(), path.utf8().data()) || !elm_layout_file_set(m_cancelIcon, theme.utf8().data(), "drag_cancel"))
         return;
 
-    evas_object_smart_member_add(m_icon, object);
-
     evas_object_propagate_events_set(m_icon, false);
     evas_object_event_callback_add(m_icon, EVAS_CALLBACK_MOUSE_DOWN, mouseDown, this);
     evas_object_event_callback_add(m_icon, EVAS_CALLBACK_MOUSE_MOVE, mouseMove, this);
@@ -95,8 +96,25 @@ DragHandle::~DragHandle()
 void DragHandle::move(const IntPoint& point)
 {
     if (m_icon) {
-        evas_object_move(m_icon, point.x() - m_dragImageWidth / 2, point.y() - m_dragImageHeight / 2);
-        evas_object_move(m_cancelIcon, point.x() - (m_dragImageWidth / 2) - 26, point.y() - (m_dragImageHeight / 2) - 36);
+        Evas_Coord x, y, width, height;
+        evas_object_geometry_get(m_view, &x, &y, &width, &height);
+
+        double dragX, dragY;
+        if ((point.x() - m_dragImageWidth / 2) < s_cancelImageXMargin)
+            dragX = s_cancelImageXMargin;
+        else if ((point.x() - m_dragImageWidth / 2) > (width - m_dragImageWidth))
+            dragX = width - m_dragImageWidth;
+        else
+            dragX = point.x() - m_dragImageWidth / 2;
+        if ((point.y() - m_dragImageHeight / 2) < (y + s_cancelImageYMargin))
+            dragY = y + s_cancelImageYMargin;
+        else if ((point.y() - m_dragImageHeight / 2) > (y + height - m_dragImageHeight))
+            dragY = y + height - m_dragImageHeight;
+        else
+            dragY = point.y() - m_dragImageHeight / 2;
+
+        evas_object_move(m_icon, dragX, dragY);
+        evas_object_move(m_cancelIcon, dragX - s_cancelImageXMargin, dragY - s_cancelImageYMargin);
     }
 }
 
@@ -138,7 +156,10 @@ void DragHandle::show()
             evas_object_image_filled_set(m_dragImage, EINA_TRUE);
             evas_object_show(m_dragImage);
 
-            evas_object_resize(m_icon, m_dragImageWidth + s_widthMargin, m_dragImageHeight + s_heightMargin);
+            m_dragImageWidth += s_widthMargin;
+            m_dragImageHeight += s_heightMargin;
+
+            evas_object_resize(m_icon, m_dragImageWidth, m_dragImageHeight);
             elm_object_part_content_set(m_icon, "swallow", m_dragImage);
         } else {
             elm_object_signal_emit(m_icon, "dragndrop,image,hide", "dragndrop");
index d9b1492..7d5b1b5 100755 (executable)
@@ -61,6 +61,7 @@ private:
     void setMousePosition(const WebCore::IntPoint& position) { m_mousePosition = position; }
 
 private:
+    Evas_Object* m_view;
     Evas_Object* m_icon;
     Evas_Object* m_cancelIcon;
     Evas_Object* m_dragImage;