1 /* 2 * Copyright (C) 2006 Dirk Mueller <mueller (at) kde.org> 3 * Copyright (C) 2006 George Staikos <staikos (at) kde.org> 4 * Copyright (C) 2006 Charles Samuels <charles (at) 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 46 Cursor::Cursor(PlatformCursor p) 47 { 48 m_platformCursor = eina_stringshare_add(p); 49 } 50 51 Cursor::Cursor(const Cursor& other) 52 { 53 m_platformCursor = eina_stringshare_ref(other.m_platformCursor); 54 } 55 56 Cursor::~Cursor() 57 { 58 if (m_platformCursor) { 59 eina_stringshare_del(m_platformCursor); 60 m_platformCursor = 0; 61 } 62 } 63 64 Cursor::Cursor(Image* image, const IntPoint& hotspot) 65 : m_platformCursor(0) 66 { 67 notImplemented(); 68 } 69 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: 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 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 184 Cursors* Cursors::self() 185 { 186 if (!s_self) 187 s_self = new Cursors(); 188 189 return s_self; 190 } 191 192 } 193 194 const Cursor& pointerCursor() 195 { 196 return Cursors::self()->PointerCursor; 197 } 198 199 const Cursor& moveCursor() 200 { 201 return Cursors::self()->MoveCursor; 202 } 203 204 const Cursor& crossCursor() 205 { 206 return Cursors::self()->CrossCursor; 207 } 208 209 const Cursor& handCursor() 210 { 211 return Cursors::self()->HandCursor; 212 } 213 214 const Cursor& iBeamCursor() 215 { 216 return Cursors::self()->IBeamCursor; 217 } 218 219 const Cursor& waitCursor() 220 { 221 return Cursors::self()->WaitCursor; 222 } 223 224 const Cursor& helpCursor() 225 { 226 return Cursors::self()->HelpCursor; 227 } 228 229 const Cursor& eastResizeCursor() 230 { 231 return Cursors::self()->EastResizeCursor; 232 } 233 234 const Cursor& northResizeCursor() 235 { 236 return Cursors::self()->NorthResizeCursor; 237 } 238 239 const Cursor& northEastResizeCursor() 240 { 241 return Cursors::self()->NorthEastResizeCursor; 242 } 243 244 const Cursor& northWestResizeCursor() 245 { 246 return Cursors::self()->NorthWestResizeCursor; 247 } 248 249 const Cursor& southResizeCursor() 250 { 251 return Cursors::self()->SouthResizeCursor; 252 } 253 254 const Cursor& southEastResizeCursor() 255 { 256 return Cursors::self()->SouthEastResizeCursor; 257 } 258 259 const Cursor& southWestResizeCursor() 260 { 261 return Cursors::self()->SouthWestResizeCursor; 262 } 263 264 const Cursor& westResizeCursor() 265 { 266 return Cursors::self()->WestResizeCursor; 267 } 268 269 const Cursor& northSouthResizeCursor() 270 { 271 return Cursors::self()->NorthSouthResizeCursor; 272 } 273 274 const Cursor& eastWestResizeCursor() 275 { 276 return Cursors::self()->EastWestResizeCursor; 277 } 278 279 const Cursor& northEastSouthWestResizeCursor() 280 { 281 return Cursors::self()->NorthEastSouthWestResizeCursor; 282 } 283 284 const Cursor& northWestSouthEastResizeCursor() 285 { 286 return Cursors::self()->NorthWestSouthEastResizeCursor; 287 } 288 289 const Cursor& columnResizeCursor() 290 { 291 return Cursors::self()->ColumnResizeCursor; 292 } 293 294 const Cursor& rowResizeCursor() 295 { 296 return Cursors::self()->RowResizeCursor; 297 } 298 299 const Cursor& middlePanningCursor() 300 { 301 return Cursors::self()->MiddlePanningCursor; 302 } 303 304 const Cursor& eastPanningCursor() 305 { 306 return Cursors::self()->EastPanningCursor; 307 } 308 309 const Cursor& northPanningCursor() 310 { 311 return Cursors::self()->NorthPanningCursor; 312 } 313 314 const Cursor& northEastPanningCursor() 315 { 316 return Cursors::self()->NorthEastPanningCursor; 317 } 318 319 const Cursor& northWestPanningCursor() 320 { 321 return Cursors::self()->NorthWestPanningCursor; 322 } 323 324 const Cursor& southPanningCursor() 325 { 326 return Cursors::self()->SouthPanningCursor; 327 } 328 329 const Cursor& southEastPanningCursor() 330 { 331 return Cursors::self()->SouthEastPanningCursor; 332 } 333 334 const Cursor& southWestPanningCursor() 335 { 336 return Cursors::self()->SouthWestPanningCursor; 337 } 338 339 const Cursor& westPanningCursor() 340 { 341 return Cursors::self()->WestPanningCursor; 342 } 343 344 const Cursor& verticalTextCursor() 345 { 346 return Cursors::self()->VerticalTextCursor; 347 } 348 349 const Cursor& cellCursor() 350 { 351 return Cursors::self()->CellCursor; 352 } 353 354 const Cursor& contextMenuCursor() 355 { 356 return Cursors::self()->ContextMenuCursor; 357 } 358 359 const Cursor& noDropCursor() 360 { 361 return Cursors::self()->NoDropCursor; 362 } 363 364 const Cursor& copyCursor() 365 { 366 return Cursors::self()->CopyCursor; 367 } 368 369 const Cursor& progressCursor() 370 { 371 return Cursors::self()->ProgressCursor; 372 } 373 374 const Cursor& aliasCursor() 375 { 376 return Cursors::self()->AliasCursor; 377 } 378 379 const Cursor& noneCursor() 380 { 381 return Cursors::self()->NoneCursor; 382 } 383 384 const Cursor& notAllowedCursor() 385 { 386 return Cursors::self()->NotAllowedCursor; 387 } 388 389 const Cursor& zoomInCursor() 390 { 391 return Cursors::self()->ZoomInCursor; 392 } 393 394 const Cursor& zoomOutCursor() 395 { 396 return Cursors::self()->ZoomOutCursor; 397 } 398 399 const Cursor& grabCursor() 400 { 401 return Cursors::self()->GrabCursor; 402 } 403 404 const Cursor& grabbingCursor() 405 { 406 return Cursors::self()->GrabbingCursor; 407 } 408 409 } 410