summaryrefslogtreecommitdiff
path: root/src/SFML/Window/OSX/CursorImpl.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/SFML/Window/OSX/CursorImpl.mm')
-rw-r--r--src/SFML/Window/OSX/CursorImpl.mm54
1 files changed, 36 insertions, 18 deletions
diff --git a/src/SFML/Window/OSX/CursorImpl.mm b/src/SFML/Window/OSX/CursorImpl.mm
index ed905ef..cb6c592 100644
--- a/src/SFML/Window/OSX/CursorImpl.mm
+++ b/src/SFML/Window/OSX/CursorImpl.mm
@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////
//
// SFML - Simple and Fast Multimedia Library
-// Copyright (C) 2007-2018 Marco Antognini (antognini.marco@gmail.com),
+// Copyright (C) 2007-2023 Marco Antognini (antognini.marco@gmail.com),
// Laurent Gomila (laurent@sfml-dev.org)
//
// This software is provided 'as-is', without any express or implied warranty.
@@ -27,8 +27,8 @@
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Window/OSX/CursorImpl.hpp>
+#include <SFML/Window/OSX/AutoreleasePoolWrapper.hpp>
-#import <SFML/Window/OSX/AutoreleasePoolWrapper.h>
#import <SFML/Window/OSX/NSImage+raw.h>
#import <AppKit/AppKit.h>
@@ -56,14 +56,14 @@ namespace priv
CursorImpl::CursorImpl() :
m_cursor(nil)
{
- // Just ask for a pool
- ensureThreadHasPool();
+
}
////////////////////////////////////////////////////////////
CursorImpl::~CursorImpl()
{
+ AutoreleasePool pool;
[m_cursor release];
}
@@ -71,7 +71,12 @@ CursorImpl::~CursorImpl()
////////////////////////////////////////////////////////////
bool CursorImpl::loadFromPixels(const Uint8* pixels, Vector2u size, Vector2u hotspot)
{
- [m_cursor release];
+ AutoreleasePool pool;
+ if (m_cursor)
+ {
+ [m_cursor release];
+ m_cursor = nil;
+ }
NSSize nssize = NSMakeSize(size.x, size.y);
NSImage* image = [NSImage imageWithRawData:pixels andSize:nssize];
@@ -85,41 +90,54 @@ bool CursorImpl::loadFromPixels(const Uint8* pixels, Vector2u size, Vector2u hot
////////////////////////////////////////////////////////////
bool CursorImpl::loadFromSystem(Cursor::Type type)
{
- [m_cursor release];
+ AutoreleasePool pool;
+ NSCursor* newCursor = nil;
switch (type)
{
default: return false;
- case Cursor::Arrow: m_cursor = [NSCursor arrowCursor]; break;
- case Cursor::Text: m_cursor = [NSCursor IBeamCursor]; break;
- case Cursor::Hand: m_cursor = [NSCursor pointingHandCursor]; break;
- case Cursor::SizeHorizontal: m_cursor = [NSCursor resizeLeftRightCursor]; break;
- case Cursor::SizeVertical: m_cursor = [NSCursor resizeUpDownCursor]; break;
- case Cursor::Cross: m_cursor = [NSCursor crosshairCursor]; break;
- case Cursor::NotAllowed: m_cursor = [NSCursor operationNotAllowedCursor]; break;
+ case Cursor::Arrow: newCursor = [NSCursor arrowCursor]; break;
+ case Cursor::Text: newCursor = [NSCursor IBeamCursor]; break;
+ case Cursor::Hand: newCursor = [NSCursor pointingHandCursor]; break;
+ case Cursor::SizeHorizontal: newCursor = [NSCursor resizeLeftRightCursor]; break;
+ case Cursor::SizeVertical: newCursor = [NSCursor resizeUpDownCursor]; break;
+ case Cursor::Cross: newCursor = [NSCursor crosshairCursor]; break;
+ case Cursor::NotAllowed: newCursor = [NSCursor operationNotAllowedCursor]; break;
+ case Cursor::SizeLeft: newCursor = [NSCursor resizeLeftRightCursor]; break;
+ case Cursor::SizeRight: newCursor = [NSCursor resizeLeftRightCursor]; break;
+ case Cursor::SizeTop: newCursor = [NSCursor resizeUpDownCursor]; break;
+ case Cursor::SizeBottom: newCursor = [NSCursor resizeUpDownCursor]; break;
// These cursor types are undocumented, may not be available on some platforms
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
+ case Cursor::SizeTopRight:
+ case Cursor::SizeBottomLeft:
case Cursor::SizeBottomLeftTopRight:
- m_cursor = loadFromSelector(@selector(_windowResizeNorthEastSouthWestCursor));
+ newCursor = loadFromSelector(@selector(_windowResizeNorthEastSouthWestCursor));
break;
+ case Cursor::SizeTopLeft:
+ case Cursor::SizeBottomRight:
case Cursor::SizeTopLeftBottomRight:
- m_cursor = loadFromSelector(@selector(_windowResizeNorthWestSouthEastCursor));
+ newCursor = loadFromSelector(@selector(_windowResizeNorthWestSouthEastCursor));
break;
case Cursor::Help:
- m_cursor = loadFromSelector(@selector(_helpCursor));
+ newCursor = loadFromSelector(@selector(_helpCursor));
break;
#pragma clang diagnostic pop
}
- if (m_cursor)
+ if (newCursor)
+ {
+ [m_cursor release];
+ m_cursor = newCursor;
[m_cursor retain];
+ }
- return m_cursor != nil;
+ return newCursor != nil;
}