Get rid of the unused function nameForCursorType()
[WebKit-https.git] / Source / WebCore / platform / Cursor.h
1 /*
2  * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
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 COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef Cursor_h
27 #define Cursor_h
28
29 #include "Image.h"
30 #include "IntPoint.h"
31 #include <wtf/RefPtr.h>
32
33 #if PLATFORM(WIN)
34 typedef struct HICON__* HICON;
35 typedef HICON HCURSOR;
36 #include <wtf/PassRefPtr.h>
37 #include <wtf/RefCounted.h>
38 #elif PLATFORM(MAC)
39 #include <wtf/RetainPtr.h>
40 #elif PLATFORM(GTK)
41 #include "GRefPtrGtk.h"
42 #elif PLATFORM(QT)
43 #include <QCursor>
44 #elif PLATFORM(CHROMIUM)
45 #include "PlatformCursor.h"
46 #endif
47
48 #if PLATFORM(MAC)
49 #ifdef __OBJC__
50 @class NSCursor;
51 #else
52 class NSCursor;
53 #endif
54 #endif
55
56 #if PLATFORM(WX)
57 class wxCursor;
58 #endif
59
60 #if PLATFORM(WIN)
61 typedef struct HICON__ *HICON;
62 typedef HICON HCURSOR;
63 #endif
64
65 #if PLATFORM(WIN) || PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL)
66 #define WTF_USE_LAZY_NATIVE_CURSOR 1
67 #endif
68
69 namespace WebCore {
70
71     class Image;
72
73 #if PLATFORM(WIN)
74     class SharedCursor : public RefCounted<SharedCursor> {
75     public:
76         static PassRefPtr<SharedCursor> create(HCURSOR nativeCursor) { return adoptRef(new SharedCursor(nativeCursor)); }
77         ~SharedCursor();
78         HCURSOR nativeCursor() const { return m_nativeCursor; }
79     private:
80         SharedCursor(HCURSOR nativeCursor) : m_nativeCursor(nativeCursor) { }
81         HCURSOR m_nativeCursor;
82     };
83     typedef RefPtr<SharedCursor> PlatformCursor;
84 #elif PLATFORM(MAC)
85     typedef NSCursor *PlatformCursor;
86 #elif PLATFORM(GTK)
87     typedef GRefPtr<GdkCursor> PlatformCursor;
88 #elif PLATFORM(EFL)
89     typedef const char* PlatformCursor;
90 #elif PLATFORM(QT) && !defined(QT_NO_CURSOR)
91     // Do not need to be shared but need to be created dynamically via ensurePlatformCursor.
92     typedef QCursor* PlatformCursor;
93 #elif PLATFORM(WX)
94     typedef wxCursor* PlatformCursor;
95 #elif PLATFORM(CHROMIUM)
96     // See PlatformCursor.h
97 #else
98     typedef void* PlatformCursor;
99 #endif
100
101     class Cursor {
102     public:
103         enum Type {
104             Pointer,
105             Cross,
106             Hand,
107             IBeam,
108             Wait,
109             Help,
110             EastResize,
111             NorthResize,
112             NorthEastResize,
113             NorthWestResize,
114             SouthResize,
115             SouthEastResize,
116             SouthWestResize,
117             WestResize,
118             NorthSouthResize,
119             EastWestResize,
120             NorthEastSouthWestResize,
121             NorthWestSouthEastResize,
122             ColumnResize,
123             RowResize,
124             MiddlePanning,
125             EastPanning,
126             NorthPanning,
127             NorthEastPanning,
128             NorthWestPanning,
129             SouthPanning,
130             SouthEastPanning,
131             SouthWestPanning,
132             WestPanning,
133             Move,
134             VerticalText,
135             Cell,
136             ContextMenu,
137             Alias,
138             Progress,
139             NoDrop,
140             Copy,
141             None,
142             NotAllowed,
143             ZoomIn,
144             ZoomOut,
145             Grab,
146             Grabbing,
147             Custom
148         };
149
150         static const Cursor& fromType(Cursor::Type);
151
152         Cursor()
153             : m_platformCursor(0)
154         {
155         }
156
157         Cursor(Image*, const IntPoint& hotSpot);
158         Cursor(const Cursor&);
159         ~Cursor();
160         Cursor& operator=(const Cursor&);
161
162 #if USE(LAZY_NATIVE_CURSOR)
163         Cursor(Type);
164         Type type() const { return m_type; }
165         Image* image() const { return m_image.get(); }
166         const IntPoint& hotSpot() const { return m_hotSpot; }
167         PlatformCursor platformCursor() const;
168 #else
169         Cursor(PlatformCursor);
170         PlatformCursor impl() const { return m_platformCursor; }
171 #endif
172
173      private:
174 #if USE(LAZY_NATIVE_CURSOR)
175         void ensurePlatformCursor() const;
176
177         Type m_type;
178         RefPtr<Image> m_image;
179         IntPoint m_hotSpot;
180 #endif
181
182 #if !PLATFORM(MAC)
183         mutable PlatformCursor m_platformCursor;
184 #else
185         mutable RetainPtr<NSCursor> m_platformCursor;
186 #endif
187     };
188
189     IntPoint determineHotSpot(Image*, const IntPoint& specifiedHotSpot);
190     
191     const Cursor& pointerCursor();
192     const Cursor& crossCursor();
193     const Cursor& handCursor();
194     const Cursor& moveCursor();
195     const Cursor& iBeamCursor();
196     const Cursor& waitCursor();
197     const Cursor& helpCursor();
198     const Cursor& eastResizeCursor();
199     const Cursor& northResizeCursor();
200     const Cursor& northEastResizeCursor();
201     const Cursor& northWestResizeCursor();
202     const Cursor& southResizeCursor();
203     const Cursor& southEastResizeCursor();
204     const Cursor& southWestResizeCursor();
205     const Cursor& westResizeCursor();
206     const Cursor& northSouthResizeCursor();
207     const Cursor& eastWestResizeCursor();
208     const Cursor& northEastSouthWestResizeCursor();
209     const Cursor& northWestSouthEastResizeCursor();
210     const Cursor& columnResizeCursor();
211     const Cursor& rowResizeCursor();
212     const Cursor& middlePanningCursor();
213     const Cursor& eastPanningCursor();
214     const Cursor& northPanningCursor();
215     const Cursor& northEastPanningCursor();
216     const Cursor& northWestPanningCursor();
217     const Cursor& southPanningCursor();
218     const Cursor& southEastPanningCursor();
219     const Cursor& southWestPanningCursor();
220     const Cursor& westPanningCursor();
221     const Cursor& verticalTextCursor();
222     const Cursor& cellCursor();
223     const Cursor& contextMenuCursor();
224     const Cursor& noDropCursor();
225     const Cursor& notAllowedCursor();
226     const Cursor& progressCursor();
227     const Cursor& aliasCursor();
228     const Cursor& zoomInCursor();
229     const Cursor& zoomOutCursor();
230     const Cursor& copyCursor();
231     const Cursor& noneCursor();
232     const Cursor& grabCursor();
233     const Cursor& grabbingCursor();
234
235 } // namespace WebCore
236
237 #endif // Cursor_h