From e4ceea799ff7115bf108bfebd681e7b9aa3eaa7d Mon Sep 17 00:00:00 2001 From: Raffaele Sena Date: Tue, 11 Jun 2019 18:15:52 -0700 Subject: [PATCH] Implemented SetCursor for most of the available MacOS cursors. See https://github.com/ultralight-ux/Ultralight/issues/133 --- src/mac/WindowMac.mm | 119 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 114 insertions(+), 5 deletions(-) diff --git a/src/mac/WindowMac.mm b/src/mac/WindowMac.mm index d1ac8dd..29e8047 100644 --- a/src/mac/WindowMac.mm +++ b/src/mac/WindowMac.mm @@ -1,5 +1,6 @@ #include "WindowMac.h" #include +#include #include "AppMac.h" #import "Cocoa/Cocoa.h" #import "ViewController.h" @@ -30,15 +31,15 @@ [window_ makeKeyAndOrderFront:NSApp]; [window_ setOrderedIndex:0]; [NSApp activateIgnoringOtherApps:YES]; - + controller_ = [[ViewController alloc] init]; [controller_ initWithWindow:this frame:frame]; [window_ setContentViewController:controller_]; - + delegate_ = [[WindowDelegate alloc] init]; [delegate_ initWithWindow:this]; [window_ setDelegate:delegate_]; - + // Move app to foreground ProcessSerialNumber psn = {0, kCurrentProcess}; TransformProcessType(&psn, kProcessTransformToForegroundApplication); @@ -64,6 +65,114 @@ } void WindowMac::SetCursor(ultralight::Cursor cursor) { + switch (cursor) { + case ultralight::kCursor_Pointer: + [[NSCursor arrowCursor] set]; + break; + + case ultralight::kCursor_Cross: + [[NSCursor crosshairCursor] set]; + break; + + case ultralight::kCursor_Hand: + [[NSCursor pointingHandCursor] set]; + break; + + case ultralight::kCursor_IBeam: + [[NSCursor IBeamCursor] set]; + break; + + case ultralight::kCursor_Wait: + break; + + + case ultralight::kCursor_Help: + break; + + case ultralight::kCursor_EastResize: + [[NSCursor resizeRightCursor] set]; + break; + + case ultralight::kCursor_NorthResize: + [[NSCursor resizeUpCursor] set]; + break; + + case ultralight::kCursor_NorthEastResize: + break; + + case ultralight::kCursor_NorthWestResize: + break; + + case ultralight::kCursor_SouthResize: + [[NSCursor resizeDownCursor] set]; + break; + + case ultralight::kCursor_SouthEastResize: + break; + + case ultralight::kCursor_SouthWestResize: + break; + + + case ultralight::kCursor_WestResize: + [[NSCursor resizeLeftCursor] set]; + break; + + case ultralight::kCursor_NorthSouthResize: + [[NSCursor resizeUpDownCursor] set]; + break; + + case ultralight::kCursor_EastWestResize: + [[NSCursor resizeLeftRightCursor] set]; + break; + + case ultralight::kCursor_NorthEastSouthWestResize: + case ultralight::kCursor_NorthWestSouthEastResize: + case ultralight::kCursor_ColumnResize: + case ultralight::kCursor_RowResize: + case ultralight::kCursor_MiddlePanning: + case ultralight::kCursor_EastPanning: + case ultralight::kCursor_NorthPanning: + case ultralight::kCursor_NorthEastPanning: + case ultralight::kCursor_NorthWestPanning: + case ultralight::kCursor_SouthPanning: + case ultralight::kCursor_SouthEastPanning: + case ultralight::kCursor_SouthWestPanning: + case ultralight::kCursor_Move: + case ultralight::kCursor_WestPanning: + break; + + case ultralight::kCursor_VerticalText: + [[NSCursor IBeamCursorForVerticalLayout] set]; + break; + + case ultralight::kCursor_Cell: + break; + + case ultralight::kCursor_ContextMenu: + [[NSCursor contextualMenuCursor] set]; + break; + + case ultralight::kCursor_Alias: + case ultralight::kCursor_Progress: + case ultralight::kCursor_NoDrop: + case ultralight::kCursor_Copy: + case ultralight::kCursor_None: + break; + + case ultralight::kCursor_NotAllowed: + [[NSCursor operationNotAllowedCursor] set]; + break; + + case ultralight::kCursor_ZoomIn: + case ultralight::kCursor_ZoomOut: + case ultralight::kCursor_Grab: + case ultralight::kCursor_Grabbing: + break; + + default: + break; + } } void WindowMac::Close() { @@ -79,13 +188,13 @@ void WindowMac::OnResize(uint32_t width, uint32_t height) { [controller_ metalView].drawableSize = CGSizeMake(DeviceToPixels((int)width), DeviceToPixels((int)height)); - + if (listener_) listener_->OnResize(width, height); if (app_listener_) app_listener_->OnResize(width, height); } - + MTKView* WindowMac::view() { return [controller_ metalView]; }