Tizen 2.1 base
[framework/web/webkit-efl.git] / Source / WebKit2 / UIProcess / API / efl / tizen / Drag.cpp
1 /*
2  * Copyright (C) 2012 Samsung Electronics
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27
28 #if ENABLE(TIZEN_DRAG_SUPPORT)
29 #include "Drag.h"
30
31 #include "ewk_view.h"
32 #include <WebCore/DragActions.h>
33 #include <WebCore/DragData.h>
34 #include <WebCore/DragSession.h>
35 #include <wtf/text/CString.h>
36
37
38 using namespace WebCore;
39
40 namespace WebKit {
41
42 Drag::Drag(WebPageProxy* page)
43       : m_page(page)
44       , m_isDragMode(false)
45       , m_dragStorageName("Drag")
46       , m_dragData(0)
47 {
48     ASSERT(viewWidget);
49
50     m_Handle = new DragHandle(m_page->viewWidget(), EDJE_DIR"/Drag.edj", "drag_support", this);
51 }
52
53 Drag::~Drag()
54 {
55     delete m_Handle;
56 }
57
58 WebFrameProxy* Drag::focusedOrMainFrame()
59 {
60     WebFrameProxy* frame = m_page->focusedFrame();
61     if(!frame)
62         frame = m_page->mainFrame();
63
64     return frame;
65 }
66
67 void Drag::setDragMode(bool isDragMode)
68 {
69     if (!isDragMode)
70         hide();
71
72     m_isDragMode = isDragMode;
73 }
74
75 void Drag::hide()
76 {
77     IntPoint viewPoint = EwkViewImpl::fromEvasObject(m_page->viewWidget())->transformFromScene().mapPoint(m_Handle->position());
78
79     DragData* dragData = new DragData(m_dragData->platformData(), viewPoint,
80         viewPoint, m_dragData->draggingSourceOperationMask(), m_dragData->flags());
81
82     m_page->dragExited(dragData ,m_dragStorageName);
83     m_Handle->hide();
84 }
85
86 void Drag::Show()
87 {
88     m_Handle->move(m_savePoint);
89     m_Handle->show();
90 }
91
92 // handle callbacks
93 void Drag::handleMouseMove(DragHandle* handle)
94 {
95     IntPoint viewPoint = EwkViewImpl::fromEvasObject(m_page->viewWidget())->transformFromScene().mapPoint(handle->position());
96
97     DragData* dragData = new DragData(m_dragData->platformData(), viewPoint,
98         viewPoint, m_dragData->draggingSourceOperationMask(), m_dragData->flags());
99
100     m_page->dragUpdated(dragData ,m_dragStorageName);
101
102     DragSession dragSession = m_page->dragSession();
103     if (dragSession.operation != DragSourceActionNone)
104         handle->updateHandleIcon(true);
105      else
106         handle->updateHandleIcon(false);
107
108     m_Handle->move(handle->position());
109     delete(dragData);
110 }
111
112 void Drag::handleMouseUp(DragHandle* handle)
113 {
114     IntPoint viewPoint = EwkViewImpl::fromEvasObject(m_page->viewWidget())->transformFromScene().mapPoint(handle->position());
115
116     DragData* dragData = new DragData(m_dragData->platformData(), viewPoint,
117         viewPoint, m_dragData->draggingSourceOperationMask(), m_dragData->flags());
118
119     m_page->dragUpdated(dragData ,m_dragStorageName);
120
121     DragSession dragSession = m_page->dragSession();
122     if (dragSession.operation != DragSourceActionNone) {
123         m_page->performDrag(dragData, m_dragStorageName);
124         setDragMode(false);
125         m_Handle->hide();
126     }
127     delete(dragData);
128 }
129 } // namespace WebKit
130
131 #endif // TIZEN_DRAG_SUPPORT