diff options
author | Jean Pierre Cimalando <jp-dev@inbox.ru> | 2020-06-01 13:03:16 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-06-13 17:18:26 +0200 |
commit | 2f90b716c29a623b4ec090bb455d2c49b4062f98 (patch) | |
tree | 089d8eee976a0244b56fc103805454aef43ef401 /pugl/detail/mac.m | |
parent | 81f9debf519c4b54e713a7a36a4ac474340d18fb (diff) | |
download | pugl-2f90b716c29a623b4ec090bb455d2c49b4062f98.tar.gz pugl-2f90b716c29a623b4ec090bb455d2c49b4062f98.tar.bz2 pugl-2f90b716c29a623b4ec090bb455d2c49b4062f98.zip |
Add puglSetCursor()
Diffstat (limited to 'pugl/detail/mac.m')
-rw-r--r-- | pugl/detail/mac.m | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/pugl/detail/mac.m b/pugl/detail/mac.m index da9de20..3bf7cdf 100644 --- a/pugl/detail/mac.m +++ b/pugl/detail/mac.m @@ -343,11 +343,15 @@ handleCrossing(PuglWrapperView* view, NSEvent* event, const PuglEventType type) - (void) mouseEntered:(NSEvent*)event { handleCrossing(self, event, PUGL_POINTER_IN); + [puglview->impl->cursor set]; + puglview->impl->mouseTracked = true; } - (void) mouseExited:(NSEvent*)event { + [[NSCursor arrowCursor] set]; handleCrossing(self, event, PUGL_POINTER_OUT); + puglview->impl->mouseTracked = false; } - (void) mouseMoved:(NSEvent*)event @@ -807,7 +811,11 @@ puglGetNativeWorld(PuglWorld* PUGL_UNUSED(world)) PuglInternals* puglInitViewInternals(void) { - return (PuglInternals*)calloc(1, sizeof(PuglInternals)); + PuglInternals* impl = (PuglInternals*)calloc(1, sizeof(PuglInternals)); + + impl->cursor = [NSCursor arrowCursor]; + + return impl; } static NSLayoutConstraint* @@ -1309,6 +1317,47 @@ puglGetClipboard(PuglView* const view, return puglGetInternalClipboard(view, type, len); } +static NSCursor* +puglGetNsCursor(const PuglCursor cursor) +{ + switch (cursor) { + case PUGL_CURSOR_ARROW: + return [NSCursor arrowCursor]; + case PUGL_CURSOR_CARET: + return [NSCursor IBeamCursor]; + case PUGL_CURSOR_CROSSHAIR: + return [NSCursor crosshairCursor]; + case PUGL_CURSOR_HAND: + return [NSCursor pointingHandCursor]; + case PUGL_CURSOR_NO: + return [NSCursor operationNotAllowedCursor]; + case PUGL_CURSOR_LEFT_RIGHT: + return [NSCursor resizeLeftRightCursor]; + case PUGL_CURSOR_UP_DOWN: + return [NSCursor resizeUpDownCursor]; + } + + return NULL; +} + +PuglStatus +puglSetCursor(PuglView* view, PuglCursor cursor) +{ + PuglInternals* const impl = view->impl; + NSCursor* const cur = puglGetNsCursor(cursor); + if (!cur) { + return PUGL_FAILURE; + } + + impl->cursor = cur; + + if (impl->mouseTracked) { + [cur set]; + } + + return PUGL_SUCCESS; +} + PuglStatus puglSetClipboard(PuglView* const view, const char* const type, |