Changeset 63339 in webkit
- Timestamp:
- Jul 14, 2010 11:54:34 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 63 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r63338 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 - Converted Mac and Windows Cursor implementations to lazily 9 create the platform cursor. 10 - Add HostWindow function to set the cursor and use it from Widget::setCursor. 11 - Rework Windows cursor code to use fewer global variables. 12 13 * WebCore.exp.in: Updated 14 * loader/EmptyClients.h: 15 (WebCore::EmptyChromeClient::setCursor): 16 (WebCore::EmptyChromeClient::setLastSetCursorToCurrentCursor): 17 Added empty implementations. 18 19 * page/Chrome.cpp: 20 (WebCore::Chrome::setCursor): 21 * page/Chrome.h: 22 * page/ChromeClient.h: 23 Change existing setCursor() function to take a Cursor instead of a 24 PlatformCursorHandle. Added setLastSetCursorToCurrentCursor. 25 26 * platform/Cursor.cpp: 27 * platform/Cursor.h: 28 Added Cursor Type and the option of lazily creating the native cursor 29 (used on Mac and Windows for now). 30 31 * platform/HostWindow.h: 32 Add setCursor. 33 34 * platform/mac/CursorMac.mm: 35 (WebCore::createCustomCursor): This no longer needs to call determineHotSpot 36 as that is done when on construction of the cursor now and the hotSpot passed 37 in is correct. 38 (WebCore::Cursor::ensurePlatformCursor): 39 (WebCore::Cursor::Cursor): 40 (WebCore::Cursor::~Cursor): 41 (WebCore::Cursor::operator=): 42 (WebCore::Cursor::platformCursor): 43 Convert to lazily creating the native cursor on the first request and 44 storing the type. 45 46 * platform/mac/WidgetMac.mm: 47 (WebCore::Widget::setCursor): 48 Use HostWindow::setCursor to set the cursor. This in turn will call the 49 ChromeClient. 50 51 * platform/win/CursorWin.cpp: 52 (WebCore::createSharedCursor): 53 (WebCore::loadSharedCursor): 54 (WebCore::loadCursorByName): 55 (WebCore::Cursor::ensurePlatformCursor): 56 (WebCore::SharedCursor::~SharedCursor): 57 (WebCore::Cursor::Cursor): 58 (WebCore::Cursor::~Cursor): 59 (WebCore::Cursor::operator=): 60 (WebCore::Cursor::platformCursor): 61 Convert to lazily creating the native cursor on the first request and 62 storing the type. 63 64 * platform/win/WidgetWin.cpp: 65 (WebCore::Widget::setCursor): 66 Use HostWindow::setCursor to set the cursor. This in turn will call the 67 ChromeClient. 68 69 * plugins/win/PluginViewWin.cpp: 70 (WebCore::PluginView::handleMouseEvent): 71 Use the new setLastSetCursorToCurrentCursor client function to ensure 72 the cursor is properly updated when over a plugin. 73 74 * platform/chromium/CursorChromium.cpp: 75 * platform/efl/CursorEfl.cpp: 76 * platform/gtk/CursorGtk.cpp: 77 * platform/haiku/CursorHaiku.cpp: 78 * platform/wince/CursorWince.cpp: 79 * platform/wx/CursorWx.cpp: 80 * platform/qt/CursorQt.cpp: 81 Change m_impl -> m_platformCursor. 82 1 83 2010-07-13 Eric Seidel <eric@webkit.org> 2 84 -
trunk/WebCore/WebCore.exp.in
r63335 r63339 395 395 __ZN7WebCore17HTMLPlugInElement11getNPObjectEv 396 396 __ZN7WebCore17HistoryController26saveDocumentAndScrollStateEv 397 __ZN7WebCore17nameForCursorTypeENS_6Cursor4TypeE 397 398 __ZN7WebCore18deprecatedParseURLERKNS_6StringE 398 399 __ZN7WebCore18isStartOfParagraphERKNS_15VisiblePositionE … … 542 543 __ZN7WebCore5RangeD1Ev 543 544 __ZN7WebCore5cacheEv 545 __ZN7WebCore6Cursor8fromTypeENS0_4TypeE 546 __ZN7WebCore6CursorD1Ev 547 __ZN7WebCore6CursoraSERKS0_ 544 548 __ZN7WebCore6Editor10applyStyleEPNS_19CSSStyleDeclarationENS_10EditActionE 545 549 __ZN7WebCore6Editor10insertTextERKNS_6StringEPNS_5EventE … … 934 938 __ZNK7WebCore5Range9firstNodeEv 935 939 __ZNK7WebCore6Chrome12createWindowEPNS_5FrameERKNS_16FrameLoadRequestERKNS_14WindowFeaturesE 940 __ZNK7WebCore6Cursor14platformCursorEv 936 941 __ZNK7WebCore6Editor13canEditRichlyEv 937 942 __ZNK7WebCore6Editor16compositionRangeEv -
trunk/WebCore/loader/EmptyClients.h
r61113 r63339 154 154 virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; } 155 155 156 virtual bool setCursor(PlatformCursorHandle) { return false;}156 virtual void setCursor(const Cursor&) { } 157 157 158 158 virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {} … … 167 167 #endif 168 168 169 #if PLATFORM(WIN) 170 virtual void setLastSetCursorToCurrentCursor() { } 171 #endif 169 172 #if ENABLE(TOUCH_EVENTS) 170 173 virtual void needTouchEvents(bool) { } -
trunk/WebCore/page/Chrome.cpp
r62834 r63339 427 427 } 428 428 429 bool Chrome::setCursor(PlatformCursorHandlecursor)430 { 431 returnm_client->setCursor(cursor);429 void Chrome::setCursor(const Cursor& cursor) 430 { 431 m_client->setCursor(cursor); 432 432 } 433 433 -
trunk/WebCore/page/Chrome.h
r62834 r63339 70 70 virtual PlatformPageClient platformPageClient() const; 71 71 virtual void scrollbarsModeDidChange() const; 72 virtual void setCursor(const Cursor&); 72 73 73 74 void scrollRectIntoView(const IntRect&) const; … … 136 137 void chooseIconForFiles(const Vector<String>&, FileChooser*); 137 138 138 bool setCursor(PlatformCursorHandle);139 140 139 #if PLATFORM(MAC) 141 140 void focusNSView(NSView*); -
trunk/WebCore/page/ChromeClient.h
r62875 r63339 136 136 virtual IntRect windowToScreen(const IntRect&) const = 0; 137 137 virtual PlatformPageClient platformPageClient() const = 0; 138 virtual void scrollbarsModeDidChange() const = 0; 139 virtual void setCursor(const Cursor&) = 0; 140 // End methods used by HostWindow. 141 138 142 virtual void contentsSizeChanged(Frame*, const IntSize&) const = 0; 139 143 virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const = 0; // Currently only Mac has a non empty implementation. 140 // End methods used by HostWindow. 141 142 virtual void scrollbarsModeDidChange() const = 0; 144 143 145 virtual bool shouldMissingPluginMessageBeButton() const { return false; } 144 146 virtual void missingPluginButtonClicked(Element*) const { } … … 194 196 // Asynchronous request to load an icon for specified filenames. 195 197 virtual void chooseIconForFiles(const Vector<String>&, FileChooser*) = 0; 196 197 virtual bool setCursor(PlatformCursorHandle) = 0;198 198 199 199 // Notification that the given form element has changed. This function … … 237 237 #endif 238 238 239 #if PLATFORM(WIN) 240 virtual void setLastSetCursorToCurrentCursor() = 0; 241 #endif 242 239 243 #if ENABLE(TOUCH_EVENTS) 240 244 virtual void needTouchEvents(bool) = 0; -
trunk/WebCore/platform/Cursor.cpp
r60849 r63339 47 47 } 48 48 49 } 49 const Cursor& Cursor::fromType(Cursor::Type type) 50 { 51 switch (type) { 52 case Cursor::Pointer: 53 return pointerCursor(); 54 case Cursor::Cross: 55 return crossCursor(); 56 case Cursor::Hand: 57 return handCursor(); 58 case Cursor::IBeam: 59 return iBeamCursor(); 60 case Cursor::Wait: 61 return waitCursor(); 62 case Cursor::Help: 63 return helpCursor(); 64 case Cursor::EastResize: 65 return eastResizeCursor(); 66 case Cursor::NorthResize: 67 return northResizeCursor(); 68 case Cursor::NorthEastResize: 69 return northEastResizeCursor(); 70 case Cursor::NorthWestResize: 71 return northWestResizeCursor(); 72 case Cursor::SouthResize: 73 return southResizeCursor(); 74 case Cursor::SouthEastResize: 75 return southEastResizeCursor(); 76 case Cursor::SouthWestResize: 77 return southWestResizeCursor(); 78 case Cursor::WestResize: 79 return westResizeCursor(); 80 case Cursor::NorthSouthResize: 81 return northSouthResizeCursor(); 82 case Cursor::EastWestResize: 83 return eastWestResizeCursor(); 84 case Cursor::NorthEastSouthWestResize: 85 return northEastSouthWestResizeCursor(); 86 case Cursor::NorthWestSouthEastResize: 87 return northWestSouthEastResizeCursor(); 88 case Cursor::ColumnResize: 89 return columnResizeCursor(); 90 case Cursor::RowResize: 91 return rowResizeCursor(); 92 case Cursor::MiddlePanning: 93 return middlePanningCursor(); 94 case Cursor::EastPanning: 95 return eastPanningCursor(); 96 case Cursor::NorthPanning: 97 return northPanningCursor(); 98 case Cursor::NorthEastPanning: 99 return northEastPanningCursor(); 100 case Cursor::NorthWestPanning: 101 return northWestPanningCursor(); 102 case Cursor::SouthPanning: 103 return southPanningCursor(); 104 case Cursor::SouthEastPanning: 105 return southEastPanningCursor(); 106 case Cursor::SouthWestPanning: 107 return southWestPanningCursor(); 108 case Cursor::WestPanning: 109 return westPanningCursor(); 110 case Cursor::Move: 111 return moveCursor(); 112 case Cursor::VerticalText: 113 return verticalTextCursor(); 114 case Cursor::Cell: 115 return cellCursor(); 116 case Cursor::ContextMenu: 117 return contextMenuCursor(); 118 case Cursor::Alias: 119 return aliasCursor(); 120 case Cursor::Progress: 121 return progressCursor(); 122 case Cursor::NoDrop: 123 return noDropCursor(); 124 case Cursor::Copy: 125 return copyCursor(); 126 case Cursor::None: 127 return noneCursor(); 128 case Cursor::NotAllowed: 129 return notAllowedCursor(); 130 case Cursor::ZoomIn: 131 return zoomInCursor(); 132 case Cursor::ZoomOut: 133 return zoomOutCursor(); 134 case Cursor::Grab: 135 return grabCursor(); 136 case Cursor::Grabbing: 137 return grabbingCursor(); 138 case Cursor::Custom: 139 ASSERT_NOT_REACHED(); 140 } 141 return pointerCursor(); 142 } 143 144 const char* nameForCursorType(Cursor::Type type) 145 { 146 switch (type) { 147 case Cursor::Pointer: 148 return "Pointer"; 149 case Cursor::Cross: 150 return "Cross"; 151 case Cursor::Hand: 152 return "Hand"; 153 case Cursor::IBeam: 154 return "IBeam"; 155 case Cursor::Wait: 156 return "Wait"; 157 case Cursor::Help: 158 return "Help"; 159 case Cursor::EastResize: 160 return "EastResize"; 161 case Cursor::NorthResize: 162 return "NorthResize"; 163 case Cursor::NorthEastResize: 164 return "NorthEastResize"; 165 case Cursor::NorthWestResize: 166 return "NorthWestResize"; 167 case Cursor::SouthResize: 168 return "SouthResize"; 169 case Cursor::SouthEastResize: 170 return "SouthEastResize"; 171 case Cursor::SouthWestResize: 172 return "SouthWestResize"; 173 case Cursor::WestResize: 174 return "WestResize"; 175 case Cursor::NorthSouthResize: 176 return "NorthSouthResize"; 177 case Cursor::EastWestResize: 178 return "EastWestResize"; 179 case Cursor::NorthEastSouthWestResize: 180 return "NorthEastSouthWestResize"; 181 case Cursor::NorthWestSouthEastResize: 182 return "NorthWestSouthEastResize"; 183 case Cursor::ColumnResize: 184 return "ColumnResize"; 185 case Cursor::RowResize: 186 return "RowResize"; 187 case Cursor::MiddlePanning: 188 return "MiddlePanning"; 189 case Cursor::EastPanning: 190 return "EastPanning"; 191 case Cursor::NorthPanning: 192 return "NorthPanning"; 193 case Cursor::NorthEastPanning: 194 return "NorthEastPanning"; 195 case Cursor::NorthWestPanning: 196 return "NorthWestPanning"; 197 case Cursor::SouthPanning: 198 return "SouthPanning"; 199 case Cursor::SouthEastPanning: 200 return "SouthEastPanning"; 201 case Cursor::SouthWestPanning: 202 return "SouthWestPanning"; 203 case Cursor::WestPanning: 204 return "WestPanning"; 205 case Cursor::Move: 206 return "Move"; 207 case Cursor::VerticalText: 208 return "VerticalText"; 209 case Cursor::Cell: 210 return "Cell"; 211 case Cursor::ContextMenu: 212 return "ContextMenu"; 213 case Cursor::Alias: 214 return "Alias"; 215 case Cursor::Progress: 216 return "Progress"; 217 case Cursor::NoDrop: 218 return "NoDrop"; 219 case Cursor::Copy: 220 return "Copy"; 221 case Cursor::None: 222 return "None"; 223 case Cursor::NotAllowed: 224 return "NotAllowed"; 225 case Cursor::ZoomIn: 226 return "ZoomIn"; 227 case Cursor::ZoomOut: 228 return "ZoomOut"; 229 case Cursor::Grab: 230 return "Grab"; 231 case Cursor::Grabbing: 232 return "Grabbing"; 233 case Cursor::Custom: 234 return "Custom"; 235 } 236 237 return "ERROR"; 238 } 239 240 #if USE(LAZY_NATIVE_CURSOR) 241 242 Cursor::Cursor(Image* image, const IntPoint& hotSpot) 243 : m_type(Custom) 244 , m_image(image) 245 , m_hotSpot(determineHotSpot(image, hotSpot)) 246 , m_platformCursor(0) 247 { 248 } 249 250 Cursor::Cursor(Type type) 251 : m_type(type) 252 , m_platformCursor(0) 253 { 254 } 255 256 PlatformCursor Cursor::platformCursor() const 257 { 258 ensurePlatformCursor(); 259 return m_platformCursor; 260 } 261 262 const Cursor& pointerCursor() 263 { 264 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Pointer)); 265 return c; 266 } 267 268 const Cursor& crossCursor() 269 { 270 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Cross)); 271 return c; 272 } 273 274 const Cursor& handCursor() 275 { 276 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Hand)); 277 return c; 278 } 279 280 const Cursor& moveCursor() 281 { 282 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Move)); 283 return c; 284 } 285 286 const Cursor& verticalTextCursor() 287 { 288 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::VerticalText)); 289 return c; 290 } 291 292 const Cursor& cellCursor() 293 { 294 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Cell)); 295 return c; 296 } 297 298 const Cursor& contextMenuCursor() 299 { 300 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::ContextMenu)); 301 return c; 302 } 303 304 const Cursor& aliasCursor() 305 { 306 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Alias)); 307 return c; 308 } 309 310 const Cursor& zoomInCursor() 311 { 312 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::ZoomIn)); 313 return c; 314 } 315 316 const Cursor& zoomOutCursor() 317 { 318 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::ZoomOut)); 319 return c; 320 } 321 322 const Cursor& copyCursor() 323 { 324 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Copy)); 325 return c; 326 } 327 328 const Cursor& noneCursor() 329 { 330 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::None)); 331 return c; 332 } 333 334 const Cursor& progressCursor() 335 { 336 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Progress)); 337 return c; 338 } 339 340 const Cursor& noDropCursor() 341 { 342 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NoDrop)); 343 return c; 344 } 345 346 const Cursor& notAllowedCursor() 347 { 348 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NotAllowed)); 349 return c; 350 } 351 352 const Cursor& iBeamCursor() 353 { 354 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::IBeam)); 355 return c; 356 } 357 358 const Cursor& waitCursor() 359 { 360 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Wait)); 361 return c; 362 } 363 364 const Cursor& helpCursor() 365 { 366 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Help)); 367 return c; 368 } 369 370 const Cursor& eastResizeCursor() 371 { 372 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::EastResize)); 373 return c; 374 } 375 376 const Cursor& northResizeCursor() 377 { 378 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NorthResize)); 379 return c; 380 } 381 382 const Cursor& northEastResizeCursor() 383 { 384 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NorthEastResize)); 385 return c; 386 } 387 388 const Cursor& northWestResizeCursor() 389 { 390 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NorthWestResize)); 391 return c; 392 } 393 394 const Cursor& southResizeCursor() 395 { 396 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::SouthResize)); 397 return c; 398 } 399 400 const Cursor& southEastResizeCursor() 401 { 402 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::SouthEastResize)); 403 return c; 404 } 405 406 const Cursor& southWestResizeCursor() 407 { 408 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::SouthWestResize)); 409 return c; 410 } 411 412 const Cursor& westResizeCursor() 413 { 414 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::WestResize)); 415 return c; 416 } 417 418 const Cursor& northSouthResizeCursor() 419 { 420 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NorthSouthResize)); 421 return c; 422 } 423 424 const Cursor& eastWestResizeCursor() 425 { 426 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::EastWestResize)); 427 return c; 428 } 429 430 const Cursor& northEastSouthWestResizeCursor() 431 { 432 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NorthEastSouthWestResize)); 433 return c; 434 } 435 436 const Cursor& northWestSouthEastResizeCursor() 437 { 438 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NorthWestSouthEastResize)); 439 return c; 440 } 441 442 const Cursor& columnResizeCursor() 443 { 444 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::ColumnResize)); 445 return c; 446 } 447 448 const Cursor& rowResizeCursor() 449 { 450 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::RowResize)); 451 return c; 452 } 453 454 const Cursor& middlePanningCursor() 455 { 456 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::MiddlePanning)); 457 return c; 458 } 459 460 const Cursor& eastPanningCursor() 461 { 462 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::EastPanning)); 463 return c; 464 } 465 466 const Cursor& northPanningCursor() 467 { 468 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NorthPanning)); 469 return c; 470 } 471 472 const Cursor& northEastPanningCursor() 473 { 474 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NorthEastPanning)); 475 return c; 476 } 477 478 const Cursor& northWestPanningCursor() 479 { 480 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::NorthWestPanning)); 481 return c; 482 } 483 484 const Cursor& southPanningCursor() 485 { 486 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::SouthPanning)); 487 return c; 488 } 489 490 const Cursor& southEastPanningCursor() 491 { 492 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::SouthEastPanning)); 493 return c; 494 } 495 496 const Cursor& southWestPanningCursor() 497 { 498 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::SouthWestPanning)); 499 return c; 500 } 501 502 const Cursor& westPanningCursor() 503 { 504 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::WestPanning)); 505 return c; 506 } 507 508 const Cursor& grabCursor() 509 { 510 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Grab)); 511 return c; 512 } 513 514 const Cursor& grabbingCursor() 515 { 516 DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Grabbing)); 517 return c; 518 } 519 520 #endif 521 522 } // namespace WebCore -
trunk/WebCore/platform/Cursor.h
r60849 r63339 27 27 #define Cursor_h 28 28 29 #include "Image.h" 30 #include "IntPoint.h" 31 #include <wtf/RefPtr.h> 32 29 33 #if PLATFORM(WIN) 30 34 typedef struct HICON__* HICON; … … 32 36 #include <wtf/PassRefPtr.h> 33 37 #include <wtf/RefCounted.h> 34 #include <wtf/RefPtr.h>35 38 #elif PLATFORM(GTK) 36 39 typedef struct _GdkCursor GdkCursor; … … 60 63 #endif 61 64 65 #if PLATFORM(WIN) || PLATFORM(MAC) 66 #define WTF_USE_LAZY_NATIVE_CURSOR 1 67 #endif 68 62 69 namespace WebCore { 63 70 64 71 class Image; 65 class IntPoint;66 72 67 73 #if PLATFORM(WIN) … … 76 82 }; 77 83 typedef RefPtr<SharedCursor> PlatformCursor; 78 typedef HCURSOR PlatformCursorHandle;79 84 #elif PLATFORM(MAC) 80 85 typedef NSCursor* PlatformCursor; 81 typedef NSCursor* PlatformCursorHandle;82 86 #elif PLATFORM(GTK) 83 87 typedef GdkCursor* PlatformCursor; 84 typedef GdkCursor* PlatformCursorHandle;85 88 #elif PLATFORM(EFL) 86 89 typedef const char* PlatformCursor; 87 typedef const char* PlatformCursorHandle;88 90 #elif PLATFORM(QT) && !defined(QT_NO_CURSOR) 89 91 typedef QCursor PlatformCursor; 90 typedef QCursor* PlatformCursorHandle;91 92 #elif PLATFORM(WX) 92 93 typedef wxCursor* PlatformCursor; 93 typedef wxCursor* PlatformCursorHandle;94 94 #elif PLATFORM(CHROMIUM) 95 95 // See PlatformCursor.h 96 typedef void* PlatformCursorHandle;97 96 #elif PLATFORM(HAIKU) 98 97 typedef BCursor* PlatformCursor; 99 typedef BCursor* PlatformCursorHandle;100 98 #else 101 99 typedef void* PlatformCursor; 102 typedef void* PlatformCursorHandle;103 100 #endif 104 101 105 102 class Cursor { 106 103 public: 104 enum Type { 105 Pointer, 106 Cross, 107 Hand, 108 IBeam, 109 Wait, 110 Help, 111 EastResize, 112 NorthResize, 113 NorthEastResize, 114 NorthWestResize, 115 SouthResize, 116 SouthEastResize, 117 SouthWestResize, 118 WestResize, 119 NorthSouthResize, 120 EastWestResize, 121 NorthEastSouthWestResize, 122 NorthWestSouthEastResize, 123 ColumnResize, 124 RowResize, 125 MiddlePanning, 126 EastPanning, 127 NorthPanning, 128 NorthEastPanning, 129 NorthWestPanning, 130 SouthPanning, 131 SouthEastPanning, 132 SouthWestPanning, 133 WestPanning, 134 Move, 135 VerticalText, 136 Cell, 137 ContextMenu, 138 Alias, 139 Progress, 140 NoDrop, 141 Copy, 142 None, 143 NotAllowed, 144 ZoomIn, 145 ZoomOut, 146 Grab, 147 Grabbing, 148 Custom 149 }; 150 151 static const Cursor& fromType(Cursor::Type); 152 107 153 Cursor() 108 154 #if !PLATFORM(QT) && !PLATFORM(EFL) 109 : m_impl(0) 110 #endif 111 { } 155 : m_platformCursor(0) 156 #endif 157 { 158 } 112 159 113 160 Cursor(Image*, const IntPoint& hotSpot); … … 116 163 Cursor& operator=(const Cursor&); 117 164 165 #if USE(LAZY_NATIVE_CURSOR) 166 Cursor(Type); 167 Type type() const { return m_type; } 168 Image* image() const { return m_image.get(); } 169 const IntPoint& hotSpot() const { return m_hotSpot; } 170 PlatformCursor platformCursor() const; 171 #else 118 172 Cursor(PlatformCursor); 119 PlatformCursor impl() const { return m_impl; } 173 PlatformCursor impl() const { return m_platformCursor; } 174 #endif 120 175 121 176 private: 122 PlatformCursor m_impl; 177 #if USE(LAZY_NATIVE_CURSOR) 178 void ensurePlatformCursor() const; 179 180 Type m_type; 181 RefPtr<Image> m_image; 182 IntPoint m_hotSpot; 183 #endif 184 185 mutable PlatformCursor m_platformCursor; 123 186 }; 124 187 125 188 IntPoint determineHotSpot(Image*, const IntPoint& specifiedHotSpot); 126 189 const char* nameForCursorType(Cursor::Type); 190 127 191 const Cursor& pointerCursor(); 128 192 const Cursor& crossCursor(); -
trunk/WebCore/platform/HostWindow.h
r58445 r63339 32 32 namespace WebCore { 33 33 34 class Cursor; 35 34 36 class HostWindow : public Noncopyable { 35 37 public: … … 57 59 // To notify WebKit of scrollbar mode changes. 58 60 virtual void scrollbarsModeDidChange() const = 0; 61 62 // Request that the cursor change. 63 virtual void setCursor(const Cursor&) = 0; 59 64 }; 60 65 -
trunk/WebCore/platform/chromium/CursorChromium.cpp
r39903 r63339 35 35 36 36 Cursor::Cursor(const Cursor& other) 37 : m_ impl(other.m_impl)37 : m_platformCursor(other.m_platformCursor) 38 38 { 39 39 } 40 40 41 41 Cursor::Cursor(Image* image, const IntPoint& hotSpot) 42 : m_ impl(image, hotSpot)42 : m_platformCursor(image, hotSpot) 43 43 { 44 44 } … … 50 50 Cursor& Cursor::operator=(const Cursor& other) 51 51 { 52 m_ impl = other.m_impl;52 m_platformCursor = other.m_platformCursor; 53 53 return *this; 54 54 } 55 55 56 56 Cursor::Cursor(PlatformCursor c) 57 : m_ impl(c)57 : m_platformCursor(c) 58 58 { 59 59 } -
trunk/WebCore/platform/efl/CursorEfl.cpp
r55344 r63339 46 46 Cursor::Cursor(PlatformCursor p) 47 47 { 48 m_ impl= eina_stringshare_add(p);48 m_platformCursor = eina_stringshare_add(p); 49 49 } 50 50 51 51 Cursor::Cursor(const Cursor& other) 52 52 { 53 m_ impl = eina_stringshare_ref(other.m_impl);53 m_platformCursor = eina_stringshare_ref(other.m_platformCursor); 54 54 } 55 55 56 56 Cursor::~Cursor() 57 57 { 58 if (m_ impl) {59 eina_stringshare_del(m_ impl);60 m_ impl= 0;58 if (m_platformCursor) { 59 eina_stringshare_del(m_platformCursor); 60 m_platformCursor = 0; 61 61 } 62 62 } 63 63 64 64 Cursor::Cursor(Image* image, const IntPoint& hotspot) 65 : m_ impl(0)65 : m_platformCursor(0) 66 66 { 67 67 notImplemented(); … … 70 70 Cursor& Cursor::operator=(const Cursor& other) 71 71 { 72 eina_stringshare_ref(other.m_ impl);73 eina_stringshare_del(m_ impl);74 m_ impl = other.m_impl;72 eina_stringshare_ref(other.m_platformCursor); 73 eina_stringshare_del(m_platformCursor); 74 m_platformCursor = other.m_platformCursor; 75 75 return *this; 76 76 } -
trunk/WebCore/platform/gtk/CursorGtk.cpp
r60849 r63339 58 58 59 59 Cursor::Cursor(const Cursor& other) 60 : m_ impl(other.m_impl)61 { 62 if (m_ impl)63 gdk_cursor_ref(m_ impl);60 : m_platformCursor(other.m_platformCursor) 61 { 62 if (m_platformCursor) 63 gdk_cursor_ref(m_platformCursor); 64 64 } 65 65 … … 68 68 IntPoint effectiveHotSpot = determineHotSpot(image, hotSpot); 69 69 GdkPixbuf* pixbuf = image->getGdkPixbuf(); 70 m_ impl= gdk_cursor_new_from_pixbuf(gdk_display_get_default(), pixbuf, effectiveHotSpot.x(), effectiveHotSpot.y());70 m_platformCursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), pixbuf, effectiveHotSpot.x(), effectiveHotSpot.y()); 71 71 g_object_unref(pixbuf); 72 72 } … … 74 74 Cursor::~Cursor() 75 75 { 76 if (m_ impl)77 gdk_cursor_unref(m_ impl);76 if (m_platformCursor) 77 gdk_cursor_unref(m_platformCursor); 78 78 } 79 79 80 80 Cursor& Cursor::operator=(const Cursor& other) 81 81 { 82 gdk_cursor_ref(other.m_ impl);83 gdk_cursor_unref(m_ impl);84 m_ impl = other.m_impl;82 gdk_cursor_ref(other.m_platformCursor); 83 gdk_cursor_unref(m_platformCursor); 84 m_platformCursor = other.m_platformCursor; 85 85 return *this; 86 86 } 87 87 88 88 Cursor::Cursor(GdkCursor* c) 89 : m_ impl(c)90 { 91 m_ impl= c;89 : m_platformCursor(c) 90 { 91 m_platformCursor = c; 92 92 93 93 // The GdkCursor may be NULL - the default cursor for the window. -
trunk/WebCore/platform/haiku/CursorHaiku.cpp
r57512 r63339 35 35 36 36 Cursor::Cursor(PlatformCursor cursor) 37 : m_ impl(cursor)37 : m_platformCursor(cursor) 38 38 { 39 39 } 40 40 41 41 Cursor::Cursor(const Cursor& other) 42 : m_ impl(0)42 : m_platformCursor(0) 43 43 { 44 44 *this = other; … … 47 47 Cursor::~Cursor() 48 48 { 49 delete m_ impl;49 delete m_platformCursor; 50 50 } 51 51 52 52 Cursor::Cursor(Image*, const IntPoint&) 53 : m_ impl(0)53 : m_platformCursor(0) 54 54 { 55 55 notImplemented(); … … 58 58 Cursor& Cursor::operator=(const Cursor& other) 59 59 { 60 delete m_ impl;61 m_ impl = other.m_impl ? new BCursor(*other.m_impl) : 0;60 delete m_platformCursor; 61 m_platformCursor = other.m_platformCursor ? new BCursor(*other.m_platformCursor) : 0; 62 62 return *this; 63 63 } -
trunk/WebCore/platform/mac/CursorMac.mm
r60849 r63339 29 29 #import "BlockExceptions.h" 30 30 #import "FoundationExtras.h" 31 #import "Image.h"32 #import "IntPoint.h"33 31 #import <wtf/StdLibExtras.h> 34 32 … … 51 49 return 0; 52 50 BEGIN_BLOCK_OBJC_EXCEPTIONS; 53 return [[NSCursor alloc] initWithImage:img hotSpot: determineHotSpot(image, hotSpot)];51 return [[NSCursor alloc] initWithImage:img hotSpot:hotSpot]; 54 52 END_BLOCK_OBJC_EXCEPTIONS; 55 53 return 0; … … 77 75 } 78 76 79 Cursor::Cursor(Image* image, const IntPoint& hotSpot) 80 : m_impl(HardRetainWithNSRelease(createCustomCursor(image, hotSpot))) 81 { 77 void Cursor::ensurePlatformCursor() const 78 { 79 if (m_platformCursor) 80 return; 81 82 switch (m_type) { 83 case Cursor::Pointer: 84 m_platformCursor = HardRetain([NSCursor arrowCursor]); 85 break; 86 case Cursor::Cross: 87 m_platformCursor = HardRetain(leakNamedCursor("crossHairCursor", 11, 11)); 88 break; 89 case Cursor::Hand: 90 m_platformCursor = HardRetain(leakNamedCursor("linkCursor", 6, 1)); 91 break; 92 case Cursor::IBeam: 93 m_platformCursor = HardRetain([NSCursor IBeamCursor]); 94 break; 95 case Cursor::Wait: 96 m_platformCursor = HardRetain(leakNamedCursor("waitCursor", 7, 7)); 97 break; 98 case Cursor::Help: 99 m_platformCursor = HardRetain(leakNamedCursor("helpCursor", 8, 8)); 100 break; 101 case Cursor::Move: 102 case Cursor::MiddlePanning: 103 m_platformCursor = HardRetain(leakNamedCursor("moveCursor", 7, 7)); 104 break; 105 case Cursor::EastResize: 106 case Cursor::EastPanning: 107 m_platformCursor = HardRetain(leakNamedCursor("eastResizeCursor", 14, 7)); 108 break; 109 case Cursor::NorthResize: 110 case Cursor::NorthPanning: 111 m_platformCursor = HardRetain(leakNamedCursor("northResizeCursor", 7, 1)); 112 break; 113 case Cursor::NorthEastResize: 114 case Cursor::NorthEastPanning: 115 m_platformCursor = HardRetain(leakNamedCursor("northEastResizeCursor", 14, 1)); 116 break; 117 case Cursor::NorthWestResize: 118 case Cursor::NorthWestPanning: 119 m_platformCursor = HardRetain(leakNamedCursor("northWestResizeCursor", 0, 0)); 120 break; 121 case Cursor::SouthResize: 122 case Cursor::SouthPanning: 123 m_platformCursor = HardRetain(leakNamedCursor("southResizeCursor", 7, 14)); 124 break; 125 case Cursor::SouthEastResize: 126 case Cursor::SouthEastPanning: 127 m_platformCursor = HardRetain(leakNamedCursor("southEastResizeCursor", 14, 14)); 128 break; 129 case Cursor::SouthWestResize: 130 case Cursor::SouthWestPanning: 131 m_platformCursor = HardRetain(leakNamedCursor("southWestResizeCursor", 1, 14)); 132 break; 133 case Cursor::WestResize: 134 m_platformCursor = HardRetain(leakNamedCursor("westResizeCursor", 1, 7)); 135 break; 136 case Cursor::NorthSouthResize: 137 m_platformCursor = HardRetain(leakNamedCursor("northSouthResizeCursor", 7, 7)); 138 break; 139 case Cursor::EastWestResize: 140 case Cursor::WestPanning: 141 m_platformCursor = HardRetain(leakNamedCursor("eastWestResizeCursor", 7, 7)); 142 break; 143 case Cursor::NorthEastSouthWestResize: 144 m_platformCursor = HardRetain(leakNamedCursor("northEastSouthWestResizeCursor", 7, 7)); 145 break; 146 case Cursor::NorthWestSouthEastResize: 147 m_platformCursor = HardRetain(leakNamedCursor("northWestSouthEastResizeCursor", 7, 7)); 148 break; 149 case Cursor::ColumnResize: 150 m_platformCursor = [NSCursor resizeLeftRightCursor]; 151 break; 152 case Cursor::RowResize: 153 m_platformCursor = [NSCursor resizeUpDownCursor]; 154 break; 155 case Cursor::VerticalText: 156 m_platformCursor = HardRetain(leakNamedCursor("verticalTextCursor", 7, 7)); 157 break; 158 case Cursor::Cell: 159 m_platformCursor = HardRetain(leakNamedCursor("cellCursor", 7, 7)); 160 break; 161 case Cursor::ContextMenu: 162 m_platformCursor = HardRetain(leakNamedCursor("contextMenuCursor", 3, 2)); 163 break; 164 case Cursor::Alias: 165 m_platformCursor = HardRetain(leakNamedCursor("aliasCursor", 11, 3)); 166 break; 167 case Cursor::Progress: 168 m_platformCursor = HardRetain(leakNamedCursor("progressCursor", 3, 2)); 169 break; 170 case Cursor::NoDrop: 171 m_platformCursor = HardRetain(leakNamedCursor("noDropCursor", 3, 1)); 172 break; 173 case Cursor::Copy: 174 m_platformCursor = HardRetain(leakNamedCursor("copyCursor", 3, 2)); 175 break; 176 case Cursor::None: 177 m_platformCursor = HardRetain(leakNamedCursor("noneCursor", 7, 7)); 178 break; 179 case Cursor::NotAllowed: 180 m_platformCursor = HardRetain(leakNamedCursor("notAllowedCursor", 11, 11)); 181 break; 182 case Cursor::ZoomIn: 183 m_platformCursor = HardRetain(leakNamedCursor("zoomInCursor", 7, 7)); 184 break; 185 case Cursor::ZoomOut: 186 m_platformCursor = HardRetain(leakNamedCursor("zoomOutCursor", 7, 7)); 187 break; 188 case Cursor::Grab: 189 m_platformCursor = HardRetain([NSCursor openHandCursor]); 190 break; 191 case Cursor::Grabbing: 192 m_platformCursor = HardRetain([NSCursor closedHandCursor]); 193 break; 194 case Cursor::Custom: 195 m_platformCursor = HardRetainWithNSRelease(createCustomCursor(m_image.get(), m_hotSpot)); 196 break; 197 } 82 198 } 83 199 84 200 Cursor::Cursor(const Cursor& other) 85 : m_impl(HardRetain(other.m_impl)) 86 { 201 : m_type(other.m_type) 202 , m_image(other.m_image) 203 , m_hotSpot(other.m_hotSpot) 204 , m_platformCursor(HardRetain(other.m_platformCursor)) 205 { 206 } 207 208 Cursor& Cursor::operator=(const Cursor& other) 209 { 210 m_type = other.m_type; 211 m_image = other.m_image; 212 m_hotSpot = other.m_hotSpot; 213 214 HardRetain(other.m_platformCursor); 215 HardRelease(m_platformCursor); 216 m_platformCursor = other.m_platformCursor; 217 return *this; 87 218 } 88 219 89 220 Cursor::~Cursor() 90 221 { 91 HardRelease(m_impl); 92 } 93 94 Cursor& Cursor::operator=(const Cursor& other) 95 { 96 HardRetain(other.m_impl); 97 HardRelease(m_impl); 98 m_impl = other.m_impl; 99 return *this; 100 } 101 102 Cursor::Cursor(NSCursor* c) 103 : m_impl(HardRetain(c)) 104 { 105 } 106 107 const Cursor& pointerCursor() 108 { 109 DEFINE_STATIC_LOCAL(Cursor, c, ([NSCursor arrowCursor])); 110 return c; 111 } 112 113 const Cursor& crossCursor() 114 { 115 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("crossHairCursor", 11, 11))); 116 return c; 117 } 118 119 const Cursor& handCursor() 120 { 121 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("linkCursor", 6, 1))); 122 return c; 123 } 124 125 const Cursor& moveCursor() 126 { 127 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("moveCursor", 7, 7))); 128 return c; 129 } 130 131 const Cursor& verticalTextCursor() 132 { 133 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("verticalTextCursor", 7, 7))); 134 return c; 135 } 136 137 const Cursor& cellCursor() 138 { 139 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("cellCursor", 7, 7))); 140 return c; 141 } 142 143 const Cursor& contextMenuCursor() 144 { 145 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("contextMenuCursor", 3, 2))); 146 return c; 147 } 148 149 const Cursor& aliasCursor() 150 { 151 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("aliasCursor", 11, 3))); 152 return c; 153 } 154 155 const Cursor& zoomInCursor() 156 { 157 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("zoomInCursor", 7, 7))); 158 return c; 159 } 160 161 const Cursor& zoomOutCursor() 162 { 163 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("zoomOutCursor", 7, 7))); 164 return c; 165 } 166 167 const Cursor& copyCursor() 168 { 169 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("copyCursor", 3, 2))); 170 return c; 171 } 172 173 const Cursor& noneCursor() 174 { 175 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("noneCursor", 7, 7))); 176 return c; 177 } 178 179 const Cursor& progressCursor() 180 { 181 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("progressCursor", 3, 2))); 182 return c; 183 } 184 185 const Cursor& noDropCursor() 186 { 187 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("noDropCursor", 3, 1))); 188 return c; 189 } 190 191 const Cursor& notAllowedCursor() 192 { 193 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("notAllowedCursor", 11, 11))); 194 return c; 195 } 196 197 const Cursor& iBeamCursor() 198 { 199 DEFINE_STATIC_LOCAL(Cursor, c, ([NSCursor IBeamCursor])); 200 return c; 201 } 202 203 const Cursor& waitCursor() 204 { 205 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("waitCursor", 7, 7))); 206 return c; 207 } 208 209 const Cursor& helpCursor() 210 { 211 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("helpCursor", 8, 8))); 212 return c; 213 } 214 215 const Cursor& eastResizeCursor() 216 { 217 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("eastResizeCursor", 14, 7))); 218 return c; 219 } 220 221 const Cursor& northResizeCursor() 222 { 223 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("northResizeCursor", 7, 1))); 224 return c; 225 } 226 227 const Cursor& northEastResizeCursor() 228 { 229 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("northEastResizeCursor", 14, 1))); 230 return c; 231 } 232 233 const Cursor& northWestResizeCursor() 234 { 235 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("northWestResizeCursor", 0, 0))); 236 return c; 237 } 238 239 const Cursor& southResizeCursor() 240 { 241 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("southResizeCursor", 7, 14))); 242 return c; 243 } 244 245 const Cursor& southEastResizeCursor() 246 { 247 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("southEastResizeCursor", 14, 14))); 248 return c; 249 } 250 251 const Cursor& southWestResizeCursor() 252 { 253 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("southWestResizeCursor", 1, 14))); 254 return c; 255 } 256 257 const Cursor& westResizeCursor() 258 { 259 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("westResizeCursor", 1, 7))); 260 return c; 261 } 262 263 const Cursor& northSouthResizeCursor() 264 { 265 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("northSouthResizeCursor", 7, 7))); 266 return c; 267 } 268 269 const Cursor& eastWestResizeCursor() 270 { 271 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("eastWestResizeCursor", 7, 7))); 272 return c; 273 } 274 275 const Cursor& northEastSouthWestResizeCursor() 276 { 277 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("northEastSouthWestResizeCursor", 7, 7))); 278 return c; 279 } 280 281 const Cursor& northWestSouthEastResizeCursor() 282 { 283 DEFINE_STATIC_LOCAL(Cursor, c, (leakNamedCursor("northWestSouthEastResizeCursor", 7, 7))); 284 return c; 285 } 286 287 const Cursor& columnResizeCursor() 288 { 289 DEFINE_STATIC_LOCAL(Cursor, c, ([NSCursor resizeLeftRightCursor])); 290 return c; 291 } 292 293 const Cursor& rowResizeCursor() 294 { 295 DEFINE_STATIC_LOCAL(Cursor, c, ([NSCursor resizeUpDownCursor])); 296 return c; 297 } 298 299 const Cursor& middlePanningCursor() 300 { 301 return moveCursor(); 302 } 303 304 const Cursor& eastPanningCursor() 305 { 306 return eastResizeCursor(); 307 } 308 309 const Cursor& northPanningCursor() 310 { 311 return northResizeCursor(); 312 } 313 314 const Cursor& northEastPanningCursor() 315 { 316 return northEastResizeCursor(); 317 } 318 319 const Cursor& northWestPanningCursor() 320 { 321 return northWestResizeCursor(); 322 } 323 324 const Cursor& southPanningCursor() 325 { 326 return southResizeCursor(); 327 } 328 329 const Cursor& southEastPanningCursor() 330 { 331 return southEastResizeCursor(); 332 } 333 334 const Cursor& southWestPanningCursor() 335 { 336 return southWestResizeCursor(); 337 } 338 339 const Cursor& westPanningCursor() 340 { 341 return westResizeCursor(); 342 } 343 344 const Cursor& grabCursor() 345 { 346 DEFINE_STATIC_LOCAL(Cursor, c, ([NSCursor openHandCursor])); 347 return c; 348 } 349 350 const Cursor& grabbingCursor() 351 { 352 DEFINE_STATIC_LOCAL(Cursor, c, ([NSCursor closedHandCursor])); 353 return c; 354 } 355 356 } 222 HardRelease(m_platformCursor); 223 } 224 225 } // namespace WebCore -
trunk/WebCore/platform/mac/WidgetMac.mm
r58821 r63339 124 124 } 125 125 126 void Widget::setCursor(const Cursor& cursor) 127 { 128 if ([NSCursor currentCursor] == cursor.impl()) 129 return; 130 [cursor.impl() set]; 126 void Widget::setCursor(const Cursor& cursor) 127 { 128 ScrollView* view = root(); 129 if (!view) 130 return; 131 view->hostWindow()->setCursor(cursor); 131 132 } 132 133 -
trunk/WebCore/platform/qt/CursorQt.cpp
r60849 r63339 45 45 46 46 Cursor::Cursor(PlatformCursor p) 47 : m_ impl(p)47 : m_platformCursor(p) 48 48 { 49 49 } 50 50 51 51 Cursor::Cursor(const Cursor& other) 52 : m_ impl(other.m_impl)52 : m_platformCursor(other.m_platformCursor) 53 53 { 54 54 } … … 62 62 #ifndef QT_NO_CURSOR 63 63 IntPoint effectiveHotSpot = determineHotSpot(image, hotSpot); 64 m_ impl= QCursor(*(image->nativeImageForCurrentFrame()), effectiveHotSpot.x(), effectiveHotSpot.y());64 m_platformCursor = QCursor(*(image->nativeImageForCurrentFrame()), effectiveHotSpot.x(), effectiveHotSpot.y()); 65 65 #endif 66 66 } … … 68 68 Cursor& Cursor::operator=(const Cursor& other) 69 69 { 70 m_ impl = other.m_impl;70 m_platformCursor = other.m_platformCursor; 71 71 return *this; 72 72 } -
trunk/WebCore/platform/win/CursorWin.cpp
r60849 r63339 40 40 namespace WebCore { 41 41 42 Cursor::Cursor(const Cursor& other)43 : m_impl(other.m_impl)44 {45 }46 47 42 static inline bool supportsAlphaCursors() 48 43 { … … 53 48 } 54 49 55 Cursor::Cursor(Image* img, const IntPoint& hotSpot) 56 { 50 static PassRefPtr<SharedCursor> createSharedCursor(Image* img, const IntPoint& hotSpot) 51 { 52 RefPtr<SharedCursor> impl; 53 57 54 IntPoint effectiveHotSpot = determineHotSpot(img, hotSpot); 58 55 static bool doAlpha = supportsAlphaCursors(); … … 81 78 ii.hbmColor = hCursor.get(); 82 79 83 m_impl = SharedCursor::create(CreateIconIndirect(&ii));80 impl = SharedCursor::create(CreateIconIndirect(&ii)); 84 81 } else { 85 82 // Platform doesn't support alpha blended cursors, so we need … … 116 113 icon.hbmMask = andMask.get(); 117 114 icon.hbmColor = xorMask.get(); 118 m_impl = SharedCursor::create(CreateIconIndirect(&icon));115 impl = SharedCursor::create(CreateIconIndirect(&icon)); 119 116 120 117 DeleteDC(xorMaskDC); … … 123 120 DeleteDC(workingDC); 124 121 ReleaseDC(0, dc); 122 123 return impl.release(); 124 } 125 126 static PassRefPtr<SharedCursor> loadSharedCursor(HINSTANCE hInstance, LPCTSTR lpCursorName) 127 { 128 return SharedCursor::create(::LoadCursor(hInstance, lpCursorName)); 129 } 130 131 static PassRefPtr<SharedCursor> loadCursorByName(char* name, int x, int y) 132 { 133 IntPoint hotSpot(x, y); 134 RefPtr<Image> cursorImage(Image::loadPlatformResource(name)); 135 if (cursorImage && !cursorImage->isNull()) 136 return createSharedCursor(cursorImage.get(), hotSpot); 137 return loadSharedCursor(0, IDC_ARROW); 138 } 139 140 void Cursor::ensurePlatformCursor() const 141 { 142 if (m_platformCursor) 143 return; 144 145 switch (m_type) { 146 case Cursor::Pointer: 147 case Cursor::Cell: 148 case Cursor::ContextMenu: 149 case Cursor::Alias: 150 case Cursor::Copy: 151 case Cursor::None: 152 case Cursor::Grab: 153 case Cursor::Grabbing: 154 m_platformCursor = loadSharedCursor(0, IDC_ARROW); 155 break; 156 case Cursor::Cross: 157 m_platformCursor = loadSharedCursor(0, IDC_CROSS); 158 break; 159 case Cursor::Hand: 160 m_platformCursor = loadSharedCursor(0, IDC_HAND); 161 break; 162 case Cursor::IBeam: 163 m_platformCursor = loadSharedCursor(0, IDC_IBEAM); 164 break; 165 case Cursor::Wait: 166 m_platformCursor = loadSharedCursor(0, IDC_WAIT); 167 break; 168 case Cursor::Help: 169 m_platformCursor = loadSharedCursor(0, IDC_HELP); 170 break; 171 case Cursor::Move: 172 m_platformCursor = loadSharedCursor(0, IDC_SIZEALL); 173 break; 174 case Cursor::MiddlePanning: 175 m_platformCursor = loadCursorByName("panIcon", 8, 8); 176 break; 177 case Cursor::EastResize: 178 m_platformCursor = loadSharedCursor(0, IDC_SIZEWE); 179 break; 180 case Cursor::EastPanning: 181 m_platformCursor = loadCursorByName("panEastCursor", 7, 7); 182 break; 183 case Cursor::NorthResize: 184 m_platformCursor = loadSharedCursor(0, IDC_SIZENS); 185 break; 186 case Cursor::NorthPanning: 187 m_platformCursor = loadCursorByName("panNorthCursor", 7, 7); 188 break; 189 case Cursor::NorthEastResize: 190 m_platformCursor = loadSharedCursor(0, IDC_SIZENESW); 191 break; 192 case Cursor::NorthEastPanning: 193 m_platformCursor = loadCursorByName("panNorthEastCursor", 7, 7); 194 break; 195 case Cursor::NorthWestResize: 196 m_platformCursor = loadSharedCursor(0, IDC_SIZENWSE); 197 break; 198 case Cursor::NorthWestPanning: 199 m_platformCursor = loadCursorByName("panNorthWestCursor", 7, 7); 200 break; 201 case Cursor::SouthResize: 202 m_platformCursor = loadSharedCursor(0, IDC_SIZENS); 203 break; 204 case Cursor::SouthPanning: 205 m_platformCursor = loadCursorByName("panSouthCursor", 7, 7); 206 break; 207 case Cursor::SouthEastResize: 208 m_platformCursor = loadSharedCursor(0, IDC_SIZENWSE); 209 break; 210 case Cursor::SouthEastPanning: 211 m_platformCursor = loadCursorByName("panSouthEastCursor", 7, 7); 212 break; 213 case Cursor::SouthWestResize: 214 m_platformCursor = loadSharedCursor(0, IDC_SIZENESW); 215 break; 216 case Cursor::SouthWestPanning: 217 m_platformCursor = loadCursorByName("panSouthWestCursor", 7, 7); 218 break; 219 case Cursor::WestResize: 220 m_platformCursor = loadSharedCursor(0, IDC_SIZEWE); 221 break; 222 case Cursor::NorthSouthResize: 223 m_platformCursor = loadSharedCursor(0, IDC_SIZENS); 224 break; 225 case Cursor::EastWestResize: 226 m_platformCursor = loadSharedCursor(0, IDC_SIZEWE); 227 break; 228 case Cursor::WestPanning: 229 m_platformCursor = loadCursorByName("panWestCursor", 7, 7); 230 break; 231 case Cursor::NorthEastSouthWestResize: 232 m_platformCursor = loadSharedCursor(0, IDC_SIZENESW); 233 break; 234 case Cursor::NorthWestSouthEastResize: 235 m_platformCursor = loadSharedCursor(0, IDC_SIZENWSE); 236 break; 237 case Cursor::ColumnResize: 238 // FIXME: Windows does not have a standard column resize cursor <rdar://problem/5018591> 239 m_platformCursor = loadSharedCursor(0, IDC_SIZEWE); 240 break; 241 case Cursor::RowResize: 242 // FIXME: Windows does not have a standard row resize cursor <rdar://problem/5018591> 243 m_platformCursor = loadSharedCursor(0, IDC_SIZENS); 244 break; 245 case Cursor::VerticalText: 246 m_platformCursor = loadCursorByName("verticalTextCursor", 7, 7); 247 break; 248 case Cursor::Progress: 249 m_platformCursor = loadSharedCursor(0, IDC_APPSTARTING); 250 break; 251 case Cursor::NoDrop: 252 break; 253 case Cursor::NotAllowed: 254 m_platformCursor = loadSharedCursor(0, IDC_NO); 255 break; 256 case Cursor::ZoomIn: 257 m_platformCursor = loadCursorByName("zoomInCursor", 7, 7); 258 break; 259 case Cursor::ZoomOut: 260 m_platformCursor = loadCursorByName("zoomOutCursor", 7, 7); 261 break; 262 case Cursor::Custom: 263 m_platformCursor = createSharedCursor(m_image.get(), m_hotSpot); 264 break; 265 } 266 } 267 268 SharedCursor::~SharedCursor() 269 { 270 DestroyIcon(m_nativeCursor); 271 } 272 273 Cursor::Cursor(const Cursor& other) 274 : m_type(other.m_type) 275 , m_image(other.m_image) 276 , m_hotSpot(other.m_hotSpot) 277 , m_platformCursor(other.m_platformCursor) 278 { 279 } 280 281 Cursor& Cursor::operator=(const Cursor& other) 282 { 283 m_type = other.m_type; 284 m_image = other.m_image; 285 m_hotSpot = other.m_hotSpot; 286 m_platformCursor = other.m_platformCursor; 287 return *this; 125 288 } 126 289 … … 129 292 } 130 293 131 Cursor& Cursor::operator=(const Cursor& other) 132 { 133 m_impl = other.m_impl; 134 return *this; 135 } 136 137 Cursor::Cursor(PlatformCursor c) 138 : m_impl(c) 139 { 140 } 141 142 static Cursor loadCursorByName(char* name, int x, int y) 143 { 144 IntPoint hotSpot(x, y); 145 Cursor c; 146 RefPtr<Image> cursorImage(Image::loadPlatformResource(name)); 147 if (cursorImage && !cursorImage->isNull()) 148 c = Cursor(cursorImage.get(), hotSpot); 149 else 150 c = pointerCursor(); 151 return c; 152 } 153 154 static PassRefPtr<SharedCursor> loadSharedCursor(HINSTANCE hInstance, LPCTSTR lpCursorName) 155 { 156 return SharedCursor::create(LoadCursor(hInstance, lpCursorName)); 157 } 158 159 const Cursor& pointerCursor() 160 { 161 static Cursor c = loadSharedCursor(0, IDC_ARROW); 162 return c; 163 } 164 165 const Cursor& crossCursor() 166 { 167 static Cursor c = loadSharedCursor(0, IDC_CROSS); 168 return c; 169 } 170 171 const Cursor& handCursor() 172 { 173 static Cursor c = loadSharedCursor(0, IDC_HAND); 174 return c; 175 } 176 177 const Cursor& iBeamCursor() 178 { 179 static Cursor c = loadSharedCursor(0, IDC_IBEAM); 180 return c; 181 } 182 183 const Cursor& waitCursor() 184 { 185 static Cursor c = loadSharedCursor(0, IDC_WAIT); 186 return c; 187 } 188 189 const Cursor& helpCursor() 190 { 191 static Cursor c = loadSharedCursor(0, IDC_HELP); 192 return c; 193 } 194 195 const Cursor& eastResizeCursor() 196 { 197 static Cursor c = loadSharedCursor(0, IDC_SIZEWE); 198 return c; 199 } 200 201 const Cursor& northResizeCursor() 202 { 203 static Cursor c = loadSharedCursor(0, IDC_SIZENS); 204 return c; 205 } 206 207 const Cursor& northEastResizeCursor() 208 { 209 static Cursor c = loadSharedCursor(0, IDC_SIZENESW); 210 return c; 211 } 212 213 const Cursor& northWestResizeCursor() 214 { 215 static Cursor c = loadSharedCursor(0, IDC_SIZENWSE); 216 return c; 217 } 218 219 const Cursor& southResizeCursor() 220 { 221 static Cursor c = loadSharedCursor(0, IDC_SIZENS); 222 return c; 223 } 224 225 const Cursor& southEastResizeCursor() 226 { 227 static Cursor c = loadSharedCursor(0, IDC_SIZENWSE); 228 return c; 229 } 230 231 const Cursor& southWestResizeCursor() 232 { 233 static Cursor c = loadSharedCursor(0, IDC_SIZENESW); 234 return c; 235 } 236 237 const Cursor& westResizeCursor() 238 { 239 static Cursor c = loadSharedCursor(0, IDC_SIZEWE); 240 return c; 241 } 242 243 const Cursor& northSouthResizeCursor() 244 { 245 static Cursor c = loadSharedCursor(0, IDC_SIZENS); 246 return c; 247 } 248 249 const Cursor& eastWestResizeCursor() 250 { 251 static Cursor c = loadSharedCursor(0, IDC_SIZEWE); 252 return c; 253 } 254 255 const Cursor& northEastSouthWestResizeCursor() 256 { 257 static Cursor c = loadSharedCursor(0, IDC_SIZENESW); 258 return c; 259 } 260 261 const Cursor& northWestSouthEastResizeCursor() 262 { 263 static Cursor c = loadSharedCursor(0, IDC_SIZENWSE); 264 return c; 265 } 266 267 const Cursor& columnResizeCursor() 268 { 269 // FIXME: Windows does not have a standard column resize cursor <rdar://problem/5018591> 270 static Cursor c = loadSharedCursor(0, IDC_SIZEWE); 271 return c; 272 } 273 274 const Cursor& rowResizeCursor() 275 { 276 // FIXME: Windows does not have a standard row resize cursor <rdar://problem/5018591> 277 static Cursor c = loadSharedCursor(0, IDC_SIZENS); 278 return c; 279 } 280 281 const Cursor& middlePanningCursor() 282 { 283 static const Cursor c = loadCursorByName("panIcon", 8, 8); 284 return c; 285 } 286 287 const Cursor& eastPanningCursor() 288 { 289 static const Cursor c = loadCursorByName("panEastCursor", 7, 7); 290 return c; 291 } 292 293 const Cursor& northPanningCursor() 294 { 295 static const Cursor c = loadCursorByName("panNorthCursor", 7, 7); 296 return c; 297 } 298 299 const Cursor& northEastPanningCursor() 300 { 301 static const Cursor c = loadCursorByName("panNorthEastCursor", 7, 7); 302 return c; 303 } 304 305 const Cursor& northWestPanningCursor() 306 { 307 static const Cursor c = loadCursorByName("panNorthWestCursor", 7, 7); 308 return c; 309 } 310 311 const Cursor& southPanningCursor() 312 { 313 static const Cursor c = loadCursorByName("panSouthCursor", 7, 7); 314 return c; 315 } 316 317 const Cursor& southEastPanningCursor() 318 { 319 static const Cursor c = loadCursorByName("panSouthEastCursor", 7, 7); 320 return c; 321 } 322 323 const Cursor& southWestPanningCursor() 324 { 325 static const Cursor c = loadCursorByName("panSouthWestCursor", 7, 7); 326 return c; 327 } 328 329 const Cursor& westPanningCursor() 330 { 331 static const Cursor c = loadCursorByName("panWestCursor", 7, 7); 332 return c; 333 } 334 335 const Cursor& moveCursor() 336 { 337 static Cursor c = loadSharedCursor(0, IDC_SIZEALL); 338 return c; 339 } 340 341 const Cursor& verticalTextCursor() 342 { 343 static const Cursor c = loadCursorByName("verticalTextCursor", 7, 7); 344 return c; 345 } 346 347 const Cursor& cellCursor() 348 { 349 return pointerCursor(); 350 } 351 352 const Cursor& contextMenuCursor() 353 { 354 return pointerCursor(); 355 } 356 357 const Cursor& aliasCursor() 358 { 359 return pointerCursor(); 360 } 361 362 const Cursor& progressCursor() 363 { 364 static Cursor c = loadSharedCursor(0, IDC_APPSTARTING); 365 return c; 366 } 367 368 const Cursor& noDropCursor() 369 { 370 static Cursor c = loadSharedCursor(0, IDC_NO); 371 return c; 372 } 373 374 const Cursor& copyCursor() 375 { 376 return pointerCursor(); 377 } 378 379 const Cursor& noneCursor() 380 { 381 return pointerCursor(); 382 } 383 384 const Cursor& notAllowedCursor() 385 { 386 static Cursor c = loadSharedCursor(0, IDC_NO); 387 return c; 388 } 389 390 const Cursor& zoomInCursor() 391 { 392 static const Cursor c = loadCursorByName("zoomInCursor", 7, 7); 393 return c; 394 } 395 396 const Cursor& zoomOutCursor() 397 { 398 static const Cursor c = loadCursorByName("zoomOutCursor", 7, 7); 399 return c; 400 } 401 402 const Cursor& grabCursor() 403 { 404 return pointerCursor(); 405 } 406 407 const Cursor& grabbingCursor() 408 { 409 return pointerCursor(); 410 } 411 412 SharedCursor::~SharedCursor() 413 { 414 DestroyIcon(m_nativeCursor); 415 } 416 417 } 294 } // namespace WebCore -
trunk/WebCore/platform/win/WidgetWin.cpp
r58821 r63339 60 60 } 61 61 62 HCURSOR lastSetCursor = 0;63 62 bool ignoreNextSetCursor = false; 64 63 … … 72 71 } 73 72 74 if (!cursor.impl()->nativeCursor()) 73 ScrollView* view = root(); 74 if (!view) 75 75 return; 76 77 lastSetCursor = cursor.impl()->nativeCursor(); 78 79 ScrollView* view = root(); 80 if (!view || !view->isFrameView()) { 81 SetCursor(lastSetCursor); 82 return; 83 } 84 85 Frame* frame = static_cast<FrameView*>(view)->frame(); 86 if (!frame) { 87 SetCursor(lastSetCursor); 88 return; 89 } 90 91 Page* page = frame->page(); 92 if (!page) { 93 SetCursor(lastSetCursor); 94 return; 95 } 96 97 page->chrome()->setCursor(lastSetCursor); 76 view->hostWindow()->setCursor(cursor); 98 77 } 99 78 -
trunk/WebCore/platform/wince/CursorWince.cpp
r47135 r63339 39 39 40 40 Cursor::Cursor(const Cursor& other) 41 : m_ impl(other.m_impl)41 : m_platformCursor(other.m_platformCursor) 42 42 { 43 43 } 44 44 45 45 Cursor::Cursor(Image* img, const IntPoint& hotspot) 46 : m_ impl(CursorNone)46 : m_platformCursor(CursorNone) 47 47 { 48 48 } … … 54 54 Cursor& Cursor::operator=(const Cursor& other) 55 55 { 56 m_ impl = other.m_impl;56 m_platformCursor = other.m_platformCursor; 57 57 return *this; 58 58 } 59 59 60 60 Cursor::Cursor(PlatformCursor c) 61 : m_ impl(c)61 : m_platformCursor(c) 62 62 { 63 63 } -
trunk/WebCore/platform/wx/CursorWx.cpp
r48213 r63339 35 35 36 36 Cursor::Cursor(const Cursor& other) 37 : m_ impl(other.m_impl)37 : m_platformCursor(other.m_platformCursor) 38 38 { 39 39 } … … 41 41 Cursor::Cursor(Image* image, const IntPoint&) 42 42 { 43 m_ impl= 0;43 m_platformCursor = 0; 44 44 // FIXME: figure out why the below code causes a crash 45 //m_ impl= new wxCursor( image->getWxBitmap()->ConvertToImage() );45 //m_platformCursor = new wxCursor( image->getWxBitmap()->ConvertToImage() ); 46 46 } 47 47 … … 52 52 Cursor& Cursor::operator=(const Cursor& other) 53 53 { 54 m_ impl = other.m_impl;54 m_platformCursor = other.m_platformCursor; 55 55 return *this; 56 56 } 57 57 58 58 Cursor::Cursor(wxCursor* c) 59 : m_ impl(c)59 : m_platformCursor(c) 60 60 { 61 61 } -
trunk/WebCore/plugins/win/PluginViewWin.cpp
r59904 r63339 31 31 #include "BitmapImage.h" 32 32 #include "Bridge.h" 33 #include "Chrome.h" 34 #include "ChromeClient.h" 33 35 #include "Document.h" 34 36 #include "DocumentLoader.h" … … 657 659 658 660 #if !OS(WINCE) 659 extern HCURSOR lastSetCursor;660 661 extern bool ignoreNextSetCursor; 661 662 #endif … … 728 729 // and since we don't want that we set ignoreNextSetCursor to true here to prevent that. 729 730 ignoreNextSetCursor = true; 730 lastSetCursor = ::GetCursor(); 731 if (Page* page = m_parentFrame->page()) 732 page->chrome()->client()->setLastSetCursorToCurrentCursor(); 731 733 #endif 732 734 } -
trunk/WebKit/ChangeLog
r63290 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 * efl/WebCoreSupport/ChromeClientEfl.cpp: 9 (WebCore::ChromeClientEfl::setCursor): 10 * efl/WebCoreSupport/ChromeClientEfl.h: 11 Change prototype to match new one. 12 1 13 2010-07-14 Lucas De Marchi <lucas.demarchi@profusion.mobi> 2 14 -
trunk/WebKit/chromium/ChangeLog
r63332 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 * src/ChromeClientImpl.h: 9 (WebKit::ChromeClientImpl::setCursor): 10 Change prototype to match new one. 11 12 * src/WebPopupMenuImpl.cpp: 13 (WebKit::WebPopupMenuImpl::setCursor): 14 * src/WebPopupMenuImpl.h: 15 Add empty setCursor function to satisfy the HostWindow interface. 16 1 17 2010-07-13 Alexey Proskuryakov <ap@apple.com> 2 18 -
trunk/WebKit/chromium/src/ChromeClientImpl.h
r60934 r63339 127 127 virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>); 128 128 virtual void chooseIconForFiles(const Vector<WebCore::String>&, WebCore::FileChooser*); 129 virtual bool setCursor(WebCore::PlatformCursorHandle) { return false;}129 virtual void setCursor(const WebCore::Cursor&) { } 130 130 virtual void formStateDidChange(const WebCore::Node*); 131 131 virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks() { return 0; } -
trunk/WebKit/chromium/src/WebPopupMenuImpl.cpp
r62791 r63339 319 319 } 320 320 321 void WebPopupMenuImpl::setCursor(const Cursor&) 322 { 323 } 324 321 325 //----------------------------------------------------------------------------- 322 326 // WebCore::FramelessScrollViewClient -
trunk/WebKit/chromium/src/WebPopupMenuImpl.h
r62039 r63339 111 111 virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const; 112 112 virtual void scrollbarsModeDidChange() const; 113 virtual void setCursor(const WebCore::Cursor&); 113 114 114 115 // WebCore::FramelessScrollViewClient methods: -
trunk/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
r62666 r63339 438 438 } 439 439 440 bool ChromeClientEfl::setCursor(PlatformCursorHandle) 441 { 442 notImplemented(); 443 return false; 440 void ChromeClientEfl::setCursor(const Cursor&) 441 { 442 notImplemented(); 444 443 } 445 444 -
trunk/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
r62666 r63339 120 120 virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; } 121 121 122 virtual bool setCursor(PlatformCursorHandle);122 virtual void setCursor(const Cursor&); 123 123 124 124 virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {} -
trunk/WebKit/gtk/ChangeLog
r63128 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 * WebCoreSupport/ChromeClientGtk.cpp: 9 (WebKit::ChromeClient::setCursor): 10 * WebCoreSupport/ChromeClientGtk.h: 11 Change prototype to match new one. 12 1 13 2010-07-12 Martin Robinson <mrobinson@igalia.com> 2 14 -
trunk/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
r62329 r63339 592 592 } 593 593 594 bool ChromeClient::setCursor(PlatformCursorHandle)594 void ChromeClient::setCursor(const Cursor&) 595 595 { 596 596 notImplemented(); 597 return false;598 597 } 599 598 -
trunk/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
r57903 r63339 117 117 virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks() { return 0; } 118 118 119 virtual bool setCursor(WebCore::PlatformCursorHandle);119 virtual void setCursor(const WebCore::Cursor&); 120 120 121 121 virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const {} -
trunk/WebKit/haiku/ChangeLog
r61113 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 * WebCoreSupport/ChromeClientHaiku.cpp: 9 (WebCore::ChromeClientHaiku::setCursor): 10 * WebCoreSupport/ChromeClientHaiku.h: 11 Change prototype to match new one. 12 1 13 2010-06-14 Ilya Tikhonovsky <loislo@chromium.org> 2 14 -
trunk/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp
r57903 r63339 363 363 } 364 364 365 bool ChromeClientHaiku::setCursor(PlatformCursorHandle) 366 { 367 notImplemented(); 368 return false; 365 void ChromeClientHaiku::setCursor(const Cursor&) 366 { 367 notImplemented(); 369 368 } 370 369 -
trunk/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.h
r57903 r63339 141 141 void chooseIconForFiles(const Vector<String>&, FileChooser*); 142 142 143 bool setCursor(PlatformCursorHandle);143 void setCursor(const Cursor&); 144 144 145 145 // Notification that the given form element has changed. This function -
trunk/WebKit/mac/ChangeLog
r63271 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 * WebCoreSupport/WebChromeClient.h: 9 * WebCoreSupport/WebChromeClient.mm: 10 (WebChromeClient::setCursor): 11 * WebView/WebView.mm: 12 Implement cursor changing at the WebKit level for the sake of WebKit2. 13 This functionality is being moved from WidgetMac.mm. 14 (+[WebView _pointingHandCursor]): 15 Update to use platformCursor() instead of impl(). 16 1 17 2010-07-13 Simon Fraser <simon.fraser@apple.com> 2 18 -
trunk/WebKit/mac/WebCoreSupport/WebChromeClient.h
r62875 r63339 128 128 virtual void chooseIconForFiles(const Vector<WebCore::String>&, WebCore::FileChooser*); 129 129 130 virtual bool setCursor(WebCore::PlatformCursorHandle) { return false; }130 virtual void setCursor(const WebCore::Cursor&); 131 131 132 132 virtual WebCore::FloatRect customHighlightRect(WebCore::Node*, const WebCore::AtomicString& type, -
trunk/WebKit/mac/WebCoreSupport/WebChromeClient.mm
r62875 r63339 49 49 #import <WebCore/BlockExceptions.h> 50 50 #import <WebCore/Console.h> 51 #import <WebCore/Cursor.h> 51 52 #import <WebCore/Element.h> 52 53 #import <WebCore/FileChooser.h> … … 660 661 } 661 662 663 void WebChromeClient::setCursor(const WebCore::Cursor& cursor) 664 { 665 NSCursor *platformCursor = cursor.platformCursor(); 666 if ([NSCursor currentCursor] == platformCursor) 667 return; 668 [platformCursor set]; 669 } 670 662 671 KeyboardUIMode WebChromeClient::keyboardUIMode() 663 672 { -
trunk/WebKit/mac/WebView/WebView.mm
r63188 r63339 2221 2221 + (NSCursor *)_pointingHandCursor 2222 2222 { 2223 return handCursor(). impl();2223 return handCursor().platformCursor(); 2224 2224 } 2225 2225 -
trunk/WebKit/qt/ChangeLog
r63191 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 * WebCoreSupport/ChromeClientQt.cpp: 9 (WebCore::ChromeClientQt::setCursor): 10 * WebCoreSupport/ChromeClientQt.h: 11 Change prototype to match new one. 12 1 13 2010-07-07 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> 2 14 -
trunk/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
r61615 r63339 530 530 } 531 531 532 bool ChromeClientQt::setCursor(PlatformCursorHandle) 533 { 534 notImplemented(); 535 return false; 532 void ChromeClientQt::setCursor(const Cursor&) 533 { 534 notImplemented(); 536 535 } 537 536 -
trunk/WebKit/qt/WebCoreSupport/ChromeClientQt.h
r61342 r63339 162 162 virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; } 163 163 164 virtual bool setCursor(PlatformCursorHandle);164 virtual void setCursor(const Cursor&); 165 165 166 166 virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {} -
trunk/WebKit/win/ChangeLog
r63223 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 * WebCoreSupport/WebChromeClient.cpp: 9 (WebChromeClient::setCursor): 10 We now need to grab the native cursor out of the WebCore cursor. 11 12 (WebChromeClient::setLastSetCursorToCurrentCursor): 13 Sets the WebView's "last set cursor" to be the current cursor so that 14 the cursor is set correctly for plugins. 15 * WebCoreSupport/WebChromeClient.h: 16 * WebView.cpp: 17 (WebView::WebView): 18 (WebView::WebViewWndProc): 19 * WebView.h: 20 (WebView::setLastCursor): 21 Change the "last set cursor" to be stored as a member instead of a global. 22 1 23 2010-07-13 Steve Falkenburg <sfalken@apple.com> 2 24 -
trunk/WebKit/win/WebCoreSupport/WebChromeClient.cpp
r62875 r63339 783 783 } 784 784 785 bool WebChromeClient::setCursor(PlatformCursorHandle cursor) 786 { 787 if (!cursor) 788 return false; 785 void WebChromeClient::setCursor(const Cursor& cursor) 786 { 787 HCURSOR platformCursor = cursor.platformCursor()->nativeCursor(); 788 if (!platformCursor) 789 return; 789 790 790 791 if (COMPtr<IWebUIDelegate> delegate = uiDelegate()) { 791 792 COMPtr<IWebUIDelegatePrivate> delegatePrivate(Query, delegate); 792 793 if (delegatePrivate) { 793 if (SUCCEEDED(delegatePrivate->webViewSetCursor(m_webView, reinterpret_cast<OLE_HANDLE>( cursor))))794 return true;794 if (SUCCEEDED(delegatePrivate->webViewSetCursor(m_webView, reinterpret_cast<OLE_HANDLE>(platformCursor)))) 795 return; 795 796 } 796 797 } 797 798 798 ::SetCursor(cursor); 799 return true; 799 m_webView->setLastCursor(platformCursor); 800 ::SetCursor(platformCursor); 801 return; 802 } 803 804 void WebChromeClient::setLastSetCursorToCurrentCursor() 805 { 806 m_webView->setLastCursor(::GetCursor()); 800 807 } 801 808 -
trunk/WebKit/win/WebCoreSupport/WebChromeClient.h
r62875 r63339 131 131 virtual void chooseIconForFiles(const Vector<WebCore::String>&, WebCore::FileChooser*); 132 132 133 virtual bool setCursor(WebCore::PlatformCursorHandle cursor); 133 virtual void setCursor(const WebCore::Cursor&); 134 virtual void setLastSetCursorToCurrentCursor(); 134 135 135 136 WebView* webView() const { return m_webView; } -
trunk/WebKit/win/WebView.cpp
r62876 r63339 345 345 #endif 346 346 , m_nextDisplayIsSynchronous(false) 347 , m_lastSetCursor(0) 347 348 { 348 349 JSC::initializeThreading(); … … 1971 1972 1972 1973 return !!RegisterClassEx(&wcex); 1973 }1974 1975 namespace WebCore {1976 extern HCURSOR lastSetCursor;1977 1974 } 1978 1975 … … 2251 2248 break; 2252 2249 case WM_SETCURSOR: 2253 if (handled = webView->page()->chrome()->setCursor(lastSetCursor)) 2254 break; 2255 2256 __fallthrough; 2250 handled = ::SetCursor(webView->m_lastSetCursor); 2251 break; 2257 2252 case WM_VSCROLL: 2258 2253 handled = webView->verticalScroll(wParam, lParam); -
trunk/WebKit/win/WebView.h
r60722 r63339 904 904 void exitFullscreen(); 905 905 906 void setLastCursor(HCURSOR cursor) { m_lastSetCursor = cursor; } 907 906 908 private: 907 909 void setZoomMultiplier(float multiplier, bool isTextOnly); … … 1043 1045 1044 1046 bool m_nextDisplayIsSynchronous; 1047 1048 HCURSOR m_lastSetCursor; 1045 1049 }; 1046 1050 -
trunk/WebKit/wx/ChangeLog
r62690 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 * WebKitSupport/ChromeClientWx.cpp: 9 (WebCore::ChromeClientWx::setCursor): 10 * WebKitSupport/ChromeClientWx.h: 11 Change prototype to match new one. 12 1 13 2010-07-07 Kevin Ollivier <kevino@theolliviers.com> 2 14 -
trunk/WebKit/wx/WebKitSupport/ChromeClientWx.cpp
r57903 r63339 448 448 } 449 449 450 bool ChromeClientWx::setCursor(PlatformCursorHandle) 451 { 452 notImplemented(); 453 return false; 450 void ChromeClientWx::setCursor(const Cursor&) 451 { 452 notImplemented(); 454 453 } 455 454 -
trunk/WebKit/wx/WebKitSupport/ChromeClientWx.h
r57903 r63339 135 135 virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; } 136 136 137 virtual bool setCursor(PlatformCursorHandle);137 virtual void setCursor(const Cursor&); 138 138 139 139 virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {} -
trunk/WebKit2/ChangeLog
r63335 r63339 1 2010-07-14 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=42232 6 Make changing Cursors work in WebKit2. 7 8 * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h: 9 Add SetCursor message. 10 11 * Shared/WebCoreArgumentCoders.h: 12 Add encoding/decoding of Cursors. For now we don't support Custom 13 cursors. 14 15 * UIProcess/API/mac/PageClientImpl.h: 16 * UIProcess/API/mac/PageClientImpl.mm: 17 (WebKit::PageClientImpl::setCursor): 18 * UIProcess/PageClient.h: 19 Add pass through functions to get the cursor from the WebPageProxy 20 to the WKView. 21 22 * UIProcess/API/mac/WKView.mm: 23 (-[WKView _setCursor:]): 24 * UIProcess/API/mac/WKViewInternal.h: 25 Implement changing the cursor. 26 27 * UIProcess/WebPageProxy.cpp: 28 (WebKit::WebPageProxy::didReceiveMessage): 29 (WebKit::WebPageProxy::setCursor): 30 * UIProcess/WebPageProxy.h: 31 Decode the cursor. 32 33 * UIProcess/win/WebView.cpp: 34 (WebKit::WebView::wndProc): 35 (WebKit::WebView::WebView): 36 (WebKit::WebView::onSetCursor): 37 (WebKit::WebView::setCursor): 38 * UIProcess/win/WebView.h: 39 Implement changing the cursor. 40 41 * WebProcess/WebCoreSupport/WebChromeClient.cpp: 42 (WebKit::WebChromeClient::setCursor): 43 (WebKit::WebChromeClient::setLastSetCursorToCurrentCursor): 44 * WebProcess/WebCoreSupport/WebChromeClient.h: 45 Encode the cursor when setCursor is called. 46 1 47 2010-07-13 Anders Carlsson <andersca@apple.com> 2 48 -
trunk/WebKit2/Shared/CoreIPCSupport/WebPageProxyMessageKinds.h
r62996 r63339 64 64 DidStartProvisionalLoadForFrame, 65 65 DidUpdateHistoryTitle, 66 SetCursor, 66 67 SetToolTip, 67 68 TakeFocus, -
trunk/WebKit2/Shared/WebCoreArgumentCoders.h
r61725 r63339 31 31 #include "ArgumentEncoder.h" 32 32 #include "Arguments.h" 33 #include <WebCore/Cursor.h> 33 34 #include <WebCore/FloatRect.h> 34 35 #include <WebCore/IntRect.h> … … 111 112 }; 112 113 114 template<> struct ArgumentCoder<WebCore::Cursor> { 115 static void encode(ArgumentEncoder* encoder, const WebCore::Cursor& cursor) 116 { 117 // FIXME: Support custom cursors. 118 if (cursor.type() == WebCore::Cursor::Custom) 119 encoder->encode(static_cast<uint32_t>(WebCore::Cursor::Pointer)); 120 else 121 encoder->encode(static_cast<uint32_t>(cursor.type())); 122 } 123 124 static bool decode(ArgumentDecoder* decoder, WebCore::Cursor& cursor) 125 { 126 uint32_t typeInt; 127 if (!decoder->decode(typeInt)) 128 return false; 129 130 WebCore::Cursor::Type type = static_cast<WebCore::Cursor::Type>(typeInt); 131 ASSERT(type != WebCore::Cursor::Custom); 132 133 cursor = WebCore::Cursor::fromType(type); 134 return true; 135 } 136 }; 137 113 138 } // namespace CoreIPC 114 139 -
trunk/WebKit2/UIProcess/API/mac/PageClientImpl.h
r61228 r63339 47 47 virtual void takeFocus(bool direction); 48 48 virtual void toolTipChanged(const WebCore::String& oldToolTip, const WebCore::String& newToolTip); 49 49 virtual void setCursor(const WebCore::Cursor&); 50 50 51 WKView* m_wkView; 51 52 }; -
trunk/WebKit2/UIProcess/API/mac/PageClientImpl.mm
r61228 r63339 29 29 #import "WKStringCF.h" 30 30 #import "WKViewInternal.h" 31 #import <WebCore/Cursor.h> 31 32 #import <WebCore/FoundationExtras.h> 32 33 #import <WebCore/PlatformString.h> … … 70 71 } 71 72 73 void PageClientImpl::setCursor(const WebCore::Cursor& cursor) 74 { 75 [m_wkView _setCursor:cursor.platformCursor()]; 76 } 77 72 78 } // namespace WebKit -
trunk/WebKit2/UIProcess/API/mac/WKView.mm
r63157 r63339 320 320 } 321 321 322 - (void)_setCursor:(NSCursor *)cursor 323 { 324 if ([NSCursor currentCursor] == cursor) 325 return; 326 [cursor set]; 327 } 322 328 323 329 // Any non-zero value will do, but using something recognizable might help us debug some day. -
trunk/WebKit2/UIProcess/API/mac/WKViewInternal.h
r62320 r63339 31 31 - (void)_takeFocus:(BOOL)direction; 32 32 - (void)_toolTipChangedFrom:(NSString *)oldToolTip to:(NSString *)newToolTip; 33 - (void)_setCursor:(NSCursor *)cursor; 33 34 34 35 #if USE(ACCELERATED_COMPOSITING) -
trunk/WebKit2/UIProcess/PageClient.h
r58714 r63339 29 29 namespace WebCore { 30 30 class String; 31 class Cursor; 31 32 } 32 33 … … 42 43 virtual void takeFocus(bool direction) = 0; 43 44 virtual void toolTipChanged(const WebCore::String&, const WebCore::String&) = 0; 45 46 virtual void setCursor(const WebCore::Cursor&) = 0; 44 47 }; 45 48 -
trunk/WebKit2/UIProcess/WebPageProxy.cpp
r63049 r63339 532 532 break; 533 533 } 534 case WebPageProxyMessage::SetCursor: { 535 Cursor cursor; 536 if (!arguments.decode(cursor)) 537 return; 538 setCursor(cursor); 539 break; 540 } 534 541 case WebPageProxyMessage::ShowPage: { 535 542 showPage(); … … 844 851 } 845 852 853 void WebPageProxy::setCursor(const WebCore::Cursor& cursor) 854 { 855 m_pageClient->setCursor(cursor); 856 } 857 846 858 void WebPageProxy::didReceiveEvent(WebEvent::Type type) 847 859 { -
trunk/WebKit2/UIProcess/WebPageProxy.h
r63049 r63339 53 53 namespace WebCore { 54 54 class IntSize; 55 class Cursor; 55 56 } 56 57 … … 191 192 void takeFocus(bool direction); 192 193 void setToolTip(const WebCore::String&); 194 void setCursor(const WebCore::Cursor&); 193 195 194 196 void didReceiveEvent(WebEvent::Type); 195 197 void didRunJavaScriptInMainFrame(const WebCore::String&, uint64_t); 196 198 void didGetRenderTreeExternalRepresentation(const WebCore::String&, uint64_t); 199 197 200 198 201 #if PLATFORM(WIN) -
trunk/WebKit2/UIProcess/win/WebView.cpp
r61589 r63339 130 130 lResult = onShowWindowEvent(hWnd, message, wParam, lParam, handled); 131 131 break; 132 case WM_SETCURSOR: 133 lResult = onSetCursor(hWnd, message, wParam, lParam, handled); 134 break; 132 135 default: 133 136 handled = false; … … 171 174 , m_topLevelParentWindow(0) 172 175 , m_toolTipWindow(0) 176 , m_lastCursorSet(0) 173 177 , m_trackingMouseLeave(false) 174 178 , m_isBeingDestroyed(false) … … 409 413 } 410 414 415 LRESULT WebView::onSetCursor(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, bool& handled) 416 { 417 handled = ::SetCursor(m_lastCursorSet); 418 return 0; 419 } 420 411 421 bool WebView::isActive() 412 422 { … … 534 544 } 535 545 546 void WebView::setCursor(const WebCore::Cursor& cursor) 547 { 548 HCURSOR platformCursor = cursor.platformCursor()->nativeCursor(); 549 if (!platformCursor) 550 return; 551 552 m_lastCursorSet = platformCursor; 553 ::SetCursor(platformCursor); 554 } 555 536 556 // WebCore::WindowMessageListener 537 557 -
trunk/WebKit2/UIProcess/win/WebView.h
r60691 r63339 77 77 LRESULT onTimerEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled); 78 78 LRESULT onShowWindowEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled); 79 LRESULT onSetCursor(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled); 79 80 80 81 bool isActive(); … … 94 95 virtual void takeFocus(bool direction); 95 96 virtual void toolTipChanged(const WebCore::String&, const WebCore::String&); 97 virtual void setCursor(const WebCore::Cursor&); 96 98 97 99 // WebCore::WindowMessageListener … … 104 106 HWND m_toolTipWindow; 105 107 108 HCURSOR m_lastCursorSet; 109 106 110 bool m_trackingMouseLeave; 107 111 bool m_isBeingDestroyed; -
trunk/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
r62866 r63339 417 417 } 418 418 419 bool WebChromeClient::setCursor(PlatformCursorHandle) 420 { 421 notImplemented(); 422 return false; 419 void WebChromeClient::setCursor(const Cursor& cursor) 420 { 421 WebProcess::shared().connection()->send(WebPageProxyMessage::SetCursor, m_page->pageID(), CoreIPC::In(cursor)); 423 422 } 424 423 … … 478 477 #endif 479 478 479 #if PLATFORM(WIN) 480 void WebChromeClient::setLastSetCursorToCurrentCursor() 481 { 482 } 483 #endif 484 485 480 486 } // namespace WebKit -
trunk/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h
r62428 r63339 152 152 virtual void chooseIconForFiles(const Vector<WebCore::String>&, WebCore::FileChooser*); 153 153 154 virtual bool setCursor(WebCore::PlatformCursorHandle);154 virtual void setCursor(const WebCore::Cursor&); 155 155 156 156 // Notification that the given form element has changed. This function … … 176 176 virtual void needTouchEvents(bool); 177 177 #endif 178 178 179 #if PLATFORM(WIN) 180 virtual void setLastSetCursorToCurrentCursor(); 181 #endif 182 179 183 WebCore::String m_cachedToolTip; 180 184 WebPage* m_page;
Note: See TracChangeset
for help on using the changeset viewer.