1 /*
2 * Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
3 * Copyright (C) 2006 George Staikos <staikos@kde.org>
4 * Copyright (C) 2006 Charles Samuels <charles@kde.org>
5 * Copyright (C) 2008 Holger Hans Peter Freyther
6 * Copyright (C) 2008 Kenneth Rohde Christiansen
7 * Copyright (C) 2009-2010 ProFUSION embedded systems
8 * Copyright (C) 2009-2010 Samsung Electronics
9 *
10 * All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 * notice, this list of conditions and the following disclaimer in the
19 * documentation and/or other materials provided with the distribution.
20 *
21 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
25 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
29 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34 #include "config.h"
35 #include "Cursor.h"
36
37 #include "NotImplemented.h"
38
39 #include <Edje.h>
40 #include <Evas.h>
41 #include <stdio.h>
42 #include <wtf/Assertions.h>
43
44 namespace WebCore {
45
Cursor(PlatformCursor p)46 Cursor::Cursor(PlatformCursor p)
47 {
48 m_platformCursor = eina_stringshare_add(p);
49 }
50
Cursor(const Cursor & other)51 Cursor::Cursor(const Cursor& other)
52 {
53 m_platformCursor = eina_stringshare_ref(other.m_platformCursor);
54 }
55
~Cursor()56 Cursor::~Cursor()
57 {
58 if (m_platformCursor) {
59 eina_stringshare_del(m_platformCursor);
60 m_platformCursor = 0;
61 }
62 }
63
Cursor(Image * image,const IntPoint & hotspot)64 Cursor::Cursor(Image* image, const IntPoint& hotspot)
65 : m_platformCursor(0)
66 {
67 notImplemented();
68 }
69
operator =(const Cursor & other)70 Cursor& Cursor::operator=(const Cursor& other)
71 {
72 eina_stringshare_ref(other.m_platformCursor);
73 eina_stringshare_del(m_platformCursor);
74 m_platformCursor = other.m_platformCursor;
75 return *this;
76 }
77
78 namespace {
79
80 class Cursors {
81 protected:
Cursors()82 Cursors()
83 : PointerCursor("cursor/pointer")
84 , MoveCursor("cursor/move")
85 , CrossCursor("cursor/cross")
86 , HandCursor("cursor/hand")
87 , IBeamCursor("cursor/i_beam")
88 , WaitCursor("cursor/wait")
89 , HelpCursor("cursor/help")
90 , EastResizeCursor("cursor/east_resize")
91 , NorthResizeCursor("cursor/north_resize")
92 , NorthEastResizeCursor("cursor/north_east_resize")
93 , NorthWestResizeCursor("cursor/north_west_resize")
94 , SouthResizeCursor("cursor/south_resize")
95 , SouthEastResizeCursor("cursor/south_east_resize")
96 , SouthWestResizeCursor("cursor/south_west_resize")
97 , WestResizeCursor("cursor/west_resize")
98 , NorthSouthResizeCursor("cursor/north_south_resize")
99 , EastWestResizeCursor("cursor/east_west_resize")
100 , NorthEastSouthWestResizeCursor("cursor/north_east_south_west_resize")
101 , NorthWestSouthEastResizeCursor("cursor/north_west_south_east_resize")
102 , ColumnResizeCursor("cursor/column_resize")
103 , RowResizeCursor("cursor/row_resize")
104 , MiddlePanningCursor("cursor/middle_panning")
105 , EastPanningCursor("cursor/east_panning")
106 , NorthPanningCursor("cursor/north_panning")
107 , NorthEastPanningCursor("cursor/north_east_panning")
108 , NorthWestPanningCursor("cursor/north_west_panning")
109 , SouthPanningCursor("cursor/south_panning")
110 , SouthEastPanningCursor("cursor/south_east_panning")
111 , SouthWestPanningCursor("cursor/south_west_panning")
112 , WestPanningCursor("cursor/west_panning")
113 , VerticalTextCursor("cursor/vertical_text")
114 , CellCursor("cursor/cell")
115 , ContextMenuCursor("cursor/context_menu")
116 , NoDropCursor("cursor/no_drop")
117 , CopyCursor("cursor/copy")
118 , ProgressCursor("cursor/progress")
119 , AliasCursor("cursor/alias")
120 , NoneCursor("cursor/none")
121 , NotAllowedCursor("cursor/not_allowed")
122 , ZoomInCursor("cursor/zoom_in")
123 , ZoomOutCursor("cursor/zoom_out")
124 , GrabCursor("cursor/grab")
125 , GrabbingCursor("cursor/grabbing")
126 {
127 }
128
~Cursors()129 ~Cursors()
130 {
131 }
132
133 public:
134 static Cursors* self();
135 static Cursors* s_self;
136
137 Cursor PointerCursor;
138 Cursor MoveCursor;
139 Cursor CrossCursor;
140 Cursor HandCursor;
141 Cursor IBeamCursor;
142 Cursor WaitCursor;
143 Cursor HelpCursor;
144 Cursor EastResizeCursor;
145 Cursor NorthResizeCursor;
146 Cursor NorthEastResizeCursor;
147 Cursor NorthWestResizeCursor;
148 Cursor SouthResizeCursor;
149 Cursor SouthEastResizeCursor;
150 Cursor SouthWestResizeCursor;
151 Cursor WestResizeCursor;
152 Cursor NorthSouthResizeCursor;
153 Cursor EastWestResizeCursor;
154 Cursor NorthEastSouthWestResizeCursor;
155 Cursor NorthWestSouthEastResizeCursor;
156 Cursor ColumnResizeCursor;
157 Cursor RowResizeCursor;
158 Cursor MiddlePanningCursor;
159 Cursor EastPanningCursor;
160 Cursor NorthPanningCursor;
161 Cursor NorthEastPanningCursor;
162 Cursor NorthWestPanningCursor;
163 Cursor SouthPanningCursor;
164 Cursor SouthEastPanningCursor;
165 Cursor SouthWestPanningCursor;
166 Cursor WestPanningCursor;
167 Cursor VerticalTextCursor;
168 Cursor CellCursor;
169 Cursor ContextMenuCursor;
170 Cursor NoDropCursor;
171 Cursor CopyCursor;
172 Cursor ProgressCursor;
173 Cursor AliasCursor;
174 Cursor NoneCursor;
175 Cursor NotAllowedCursor;
176 Cursor ZoomInCursor;
177 Cursor ZoomOutCursor;
178 Cursor GrabCursor;
179 Cursor GrabbingCursor;
180 };
181
182 Cursors* Cursors::s_self = 0;
183
self()184 Cursors* Cursors::self()
185 {
186 if (!s_self)
187 s_self = new Cursors();
188
189 return s_self;
190 }
191
192 }
193
pointerCursor()194 const Cursor& pointerCursor()
195 {
196 return Cursors::self()->PointerCursor;
197 }
198
moveCursor()199 const Cursor& moveCursor()
200 {
201 return Cursors::self()->MoveCursor;
202 }
203
crossCursor()204 const Cursor& crossCursor()
205 {
206 return Cursors::self()->CrossCursor;
207 }
208
handCursor()209 const Cursor& handCursor()
210 {
211 return Cursors::self()->HandCursor;
212 }
213
iBeamCursor()214 const Cursor& iBeamCursor()
215 {
216 return Cursors::self()->IBeamCursor;
217 }
218
waitCursor()219 const Cursor& waitCursor()
220 {
221 return Cursors::self()->WaitCursor;
222 }
223
helpCursor()224 const Cursor& helpCursor()
225 {
226 return Cursors::self()->HelpCursor;
227 }
228
eastResizeCursor()229 const Cursor& eastResizeCursor()
230 {
231 return Cursors::self()->EastResizeCursor;
232 }
233
northResizeCursor()234 const Cursor& northResizeCursor()
235 {
236 return Cursors::self()->NorthResizeCursor;
237 }
238
northEastResizeCursor()239 const Cursor& northEastResizeCursor()
240 {
241 return Cursors::self()->NorthEastResizeCursor;
242 }
243
northWestResizeCursor()244 const Cursor& northWestResizeCursor()
245 {
246 return Cursors::self()->NorthWestResizeCursor;
247 }
248
southResizeCursor()249 const Cursor& southResizeCursor()
250 {
251 return Cursors::self()->SouthResizeCursor;
252 }
253
southEastResizeCursor()254 const Cursor& southEastResizeCursor()
255 {
256 return Cursors::self()->SouthEastResizeCursor;
257 }
258
southWestResizeCursor()259 const Cursor& southWestResizeCursor()
260 {
261 return Cursors::self()->SouthWestResizeCursor;
262 }
263
westResizeCursor()264 const Cursor& westResizeCursor()
265 {
266 return Cursors::self()->WestResizeCursor;
267 }
268
northSouthResizeCursor()269 const Cursor& northSouthResizeCursor()
270 {
271 return Cursors::self()->NorthSouthResizeCursor;
272 }
273
eastWestResizeCursor()274 const Cursor& eastWestResizeCursor()
275 {
276 return Cursors::self()->EastWestResizeCursor;
277 }
278
northEastSouthWestResizeCursor()279 const Cursor& northEastSouthWestResizeCursor()
280 {
281 return Cursors::self()->NorthEastSouthWestResizeCursor;
282 }
283
northWestSouthEastResizeCursor()284 const Cursor& northWestSouthEastResizeCursor()
285 {
286 return Cursors::self()->NorthWestSouthEastResizeCursor;
287 }
288
columnResizeCursor()289 const Cursor& columnResizeCursor()
290 {
291 return Cursors::self()->ColumnResizeCursor;
292 }
293
rowResizeCursor()294 const Cursor& rowResizeCursor()
295 {
296 return Cursors::self()->RowResizeCursor;
297 }
298
middlePanningCursor()299 const Cursor& middlePanningCursor()
300 {
301 return Cursors::self()->MiddlePanningCursor;
302 }
303
eastPanningCursor()304 const Cursor& eastPanningCursor()
305 {
306 return Cursors::self()->EastPanningCursor;
307 }
308
northPanningCursor()309 const Cursor& northPanningCursor()
310 {
311 return Cursors::self()->NorthPanningCursor;
312 }
313
northEastPanningCursor()314 const Cursor& northEastPanningCursor()
315 {
316 return Cursors::self()->NorthEastPanningCursor;
317 }
318
northWestPanningCursor()319 const Cursor& northWestPanningCursor()
320 {
321 return Cursors::self()->NorthWestPanningCursor;
322 }
323
southPanningCursor()324 const Cursor& southPanningCursor()
325 {
326 return Cursors::self()->SouthPanningCursor;
327 }
328
southEastPanningCursor()329 const Cursor& southEastPanningCursor()
330 {
331 return Cursors::self()->SouthEastPanningCursor;
332 }
333
southWestPanningCursor()334 const Cursor& southWestPanningCursor()
335 {
336 return Cursors::self()->SouthWestPanningCursor;
337 }
338
westPanningCursor()339 const Cursor& westPanningCursor()
340 {
341 return Cursors::self()->WestPanningCursor;
342 }
343
verticalTextCursor()344 const Cursor& verticalTextCursor()
345 {
346 return Cursors::self()->VerticalTextCursor;
347 }
348
cellCursor()349 const Cursor& cellCursor()
350 {
351 return Cursors::self()->CellCursor;
352 }
353
contextMenuCursor()354 const Cursor& contextMenuCursor()
355 {
356 return Cursors::self()->ContextMenuCursor;
357 }
358
noDropCursor()359 const Cursor& noDropCursor()
360 {
361 return Cursors::self()->NoDropCursor;
362 }
363
copyCursor()364 const Cursor& copyCursor()
365 {
366 return Cursors::self()->CopyCursor;
367 }
368
progressCursor()369 const Cursor& progressCursor()
370 {
371 return Cursors::self()->ProgressCursor;
372 }
373
aliasCursor()374 const Cursor& aliasCursor()
375 {
376 return Cursors::self()->AliasCursor;
377 }
378
noneCursor()379 const Cursor& noneCursor()
380 {
381 return Cursors::self()->NoneCursor;
382 }
383
notAllowedCursor()384 const Cursor& notAllowedCursor()
385 {
386 return Cursors::self()->NotAllowedCursor;
387 }
388
zoomInCursor()389 const Cursor& zoomInCursor()
390 {
391 return Cursors::self()->ZoomInCursor;
392 }
393
zoomOutCursor()394 const Cursor& zoomOutCursor()
395 {
396 return Cursors::self()->ZoomOutCursor;
397 }
398
grabCursor()399 const Cursor& grabCursor()
400 {
401 return Cursors::self()->GrabCursor;
402 }
403
grabbingCursor()404 const Cursor& grabbingCursor()
405 {
406 return Cursors::self()->GrabbingCursor;
407 }
408
409 }
410