Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Unified Diff: webkit/glue/webcursor_mac.mm

Issue 7645026: Fix missing cursors. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/webcursor_mac.mm
diff --git a/webkit/glue/webcursor_mac.mm b/webkit/glue/webcursor_mac.mm
index 908f10c7be02403aacd365e3e6f888beb68a7712..a99892df39a458efcd8a4b898405c8a3a276a15f 100644
--- a/webkit/glue/webcursor_mac.mm
+++ b/webkit/glue/webcursor_mac.mm
@@ -8,6 +8,7 @@
#include <Carbon/Carbon.h>
#include "base/logging.h"
+#include "base/mac/mac_util.h"
#include "base/mac/scoped_cftyperef.h"
#include "base/memory/scoped_nsobject.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h"
@@ -23,6 +24,28 @@ using WebKit::WebCursorInfo;
using WebKit::WebImage;
using WebKit::WebSize;
+// Forward-declare symbols that are part of the 10.6 SDK.
Mark Mentovai 2011/08/15 16:00:08 Nit: These are declarations, not really anything e
Avi (use Gerrit) 2011/08/15 16:09:34 Done.
+#if !defined(MAC_OS_X_VERSION_10_6) || \
+ MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
+
+@interface NSCursor (SnowLeopardSDKDeclarations)
++ (NSCursor *)contextualMenuCursor;
Mark Mentovai 2011/08/15 16:00:08 Nit: This file uses NSCursor* style, no space.
Avi (use Gerrit) 2011/08/15 16:09:34 Done.
++ (NSCursor *)dragCopyCursor;
++ (NSCursor *)operationNotAllowedCursor;
+@end
+
+#endif // MAC_OS_X_VERSION_10_6
+
+// Forward-declare symbols that are part of the 10.7 SDK.
+#if !defined(MAC_OS_X_VERSION_10_7) || \
+ MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
+
+@interface NSCursor (LionSDKDeclarations)
++ (NSCursor *)IBeamCursorForVerticalLayout;
+@end
+
+#endif // MAC_OS_X_VERSION_10_7
+
namespace {
// TODO: This image fetch can (and probably should) be serviced by the resource
@@ -94,9 +117,14 @@ NSCursor* WebCursor::GetCursor() const {
case WebCursorInfo::TypePointer:
return [NSCursor arrowCursor];
case WebCursorInfo::TypeCross:
- return LoadCursor("crossHairCursor", 11, 11);
+ return [NSCursor crosshairCursor];
case WebCursorInfo::TypeHand:
- return LoadCursor("linkCursor", 6, 1);
+ // If >= 10.7, the pointingHandCursor has a shadow so use it. Otherwise
+ // use the custom one.
+ if (base::mac::IsOSLionOrLater())
+ return [NSCursor pointingHandCursor];
+ else
+ return LoadCursor("linkCursor", 6, 1);
case WebCursorInfo::TypeIBeam:
return [NSCursor IBeamCursor];
case WebCursorInfo::TypeWait:
@@ -143,11 +171,19 @@ NSCursor* WebCursor::GetCursor() const {
case WebCursorInfo::TypeMove:
return LoadCursor("moveCursor", 7, 7);
case WebCursorInfo::TypeVerticalText:
- return LoadCursor("verticalTextCursor", 7, 7);
+ // IBeamCursorForVerticalLayout is >= 10.7.
+ if ([NSCursor respondsToSelector:@selector(IBeamCursorForVerticalLayout)])
+ return [NSCursor IBeamCursorForVerticalLayout];
+ else
+ return LoadCursor("verticalTextCursor", 7, 7);
case WebCursorInfo::TypeCell:
return LoadCursor("cellCursor", 7, 7);
case WebCursorInfo::TypeContextMenu:
- return LoadCursor("contextMenuCursor", 3, 2);
+ // contextualMenuCursor is >= 10.6.
+ if ([NSCursor respondsToSelector:@selector(contextualMenuCursor)])
+ return [NSCursor contextualMenuCursor];
+ else
+ return LoadCursor("contextMenuCursor", 3, 2);
case WebCursorInfo::TypeAlias:
return LoadCursor("aliasCursor", 11, 3);
case WebCursorInfo::TypeProgress:
@@ -155,11 +191,17 @@ NSCursor* WebCursor::GetCursor() const {
case WebCursorInfo::TypeNoDrop:
return LoadCursor("noDropCursor", 3, 1);
case WebCursorInfo::TypeCopy:
- return LoadCursor("copyCursor", 3, 2);
+ // dragCopyCursor is >= 10.6.
+ if ([NSCursor respondsToSelector:@selector(dragCopyCursor)])
+ return [NSCursor dragCopyCursor];
+ else
+ return LoadCursor("copyCursor", 3, 2);
case WebCursorInfo::TypeNone:
return LoadCursor("noneCursor", 7, 7);
case WebCursorInfo::TypeNotAllowed:
- return LoadCursor("notAllowedCursor", 11, 11);
+ // Docs say that operationNotAllowedCursor is >= 10.6, and it's not in the
+ // 10.5 SDK, but later SDKs note that it really is available on 10.5.
Mark Mentovai 2011/08/15 16:00:08 Just be sure you test this.
Avi (use Gerrit) 2011/08/15 16:09:34 Tested.
+ return [NSCursor operationNotAllowedCursor];
case WebCursorInfo::TypeZoomIn:
return LoadCursor("zoomInCursor", 7, 7);
case WebCursorInfo::TypeZoomOut:
@@ -324,6 +366,18 @@ void WebCursor::InitFromNSCursor(NSCursor* cursor) {
cursor_info.type = WebCursorInfo::TypeGrab;
} else if ([cursor isEqual:[NSCursor closedHandCursor]]) {
cursor_info.type = WebCursorInfo::TypeGrabbing;
+ } else if ([cursor isEqual:[NSCursor operationNotAllowedCursor]]) {
+ cursor_info.type = WebCursorInfo::TypeNotAllowed;
+ } else if ([NSCursor respondsToSelector:@selector(dragCopyCursor)] &&
+ [cursor isEqual:[NSCursor dragCopyCursor]]) {
+ cursor_info.type = WebCursorInfo::TypeCopy;
+ } else if ([NSCursor respondsToSelector:@selector(contextualMenuCursor)] &&
+ [cursor isEqual:[NSCursor contextualMenuCursor]]) {
+ cursor_info.type = WebCursorInfo::TypeContextMenu;
+ } else if (
+ [NSCursor respondsToSelector:@selector(IBeamCursorForVerticalLayout)] &&
+ [cursor isEqual:[NSCursor IBeamCursorForVerticalLayout]]) {
+ cursor_info.type = WebCursorInfo::TypeVerticalText;
} else {
// Also handles the [NSCursor disappearingItemCursor] case. Quick-and-dirty
// image conversion; TODO(avi): do better.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698