Tizen 2.1 base
[framework/web/webkit-efl.git] / Source / WebKit2 / UIProcess / API / efl / tizen / TextSelectionHandle.h
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 #ifndef TextSelectionHandle_h
27 #define TextSelectionHandle_h
28
29 #if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
30
31 #include "TextSelection.h"
32 #include <Ecore.h>
33 #include <Evas.h>
34 #include <WebCore/IntPoint.h>
35 #include <wtf/text/CString.h>
36 #include <wtf/text/WTFString.h>
37
38 namespace WebKit {
39
40 class TextSelection;
41
42 class TextSelectionHandle {
43 public:
44     TextSelectionHandle(Evas_Object* object, const char* path, const char* part, bool isLeft, TextSelection* textSelection);
45     ~TextSelectionHandle();
46
47     void move(const WebCore::IntPoint& point);
48     void show();
49     void hide();
50     bool isLeft() const { return m_isLeft; }
51     bool isRight() const { return !m_isLeft; }
52     const WebCore::IntPoint position() const { return m_position; }
53     void setBasePositionForMove(const WebCore::IntPoint& position) { m_basePositionForMove = position; }
54     bool isMouseDowned() { return m_isMouseDowned; }
55 #if ENABLE(TIZEN_WEBKIT2_FOR_MOVING_TEXT_SELECTION_HANDLE_FROM_OSP)
56     const WebCore::IntRect getHandleRect();
57 #endif
58
59     void mouseDown(const WebCore::IntPoint& point);
60     void mouseMove(const WebCore::IntPoint& point);
61     void mouseUp();
62
63 private:
64     // callbacks
65     static void onMouseDown(void*, Evas*, Evas_Object*, void*);
66     static void onMouseMove(void*, Evas*, Evas_Object*, void*);
67     static void onMouseUp(void*, Evas*, Evas_Object*, void*);
68     static void update(void*);
69
70     void setFirstDownMousePosition(const WebCore::IntPoint& position) { m_firstDownMousePosition = position; }
71     void setMousePosition(const WebCore::IntPoint& position) { m_mousePosition = position; }
72     bool setIsMouseDowned(bool isMouseDowned) { return m_isMouseDowned = isMouseDowned; }
73
74 private:
75     Evas_Object* m_icon;
76     WebCore::IntPoint m_mousePosition;
77     static Ecore_Job* s_job;
78     bool m_isLeft;
79     TextSelection* m_textSelection;
80     WebCore::IntPoint m_position;
81     WebCore::IntPoint m_firstDownMousePosition;
82     WebCore::IntPoint m_basePositionForMove;
83     bool m_isMouseDowned;
84 };
85
86 } // namespace WebKit
87
88 #endif // TIZEN_WEBKIT2_TEXT_SELECTION
89 #endif // TextSelectionHandle_h