From 6d56e488dc0de52ecc4c1a62603669f4c2742c55 Mon Sep 17 00:00:00 2001 From: hogliux Date: Mon, 12 Sep 2016 17:29:20 +0100 Subject: [PATCH] Add support for retina mouse cursors on OS X --- .../native/juce_mac_MouseCursor.mm | 21 +++++++++---------- .../native/juce_mac_SystemTrayIcon.cpp | 2 +- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm b/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm index 09a63d8af6..4811c2fa48 100644 --- a/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm +++ b/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm @@ -27,25 +27,24 @@ //============================================================================== namespace MouseCursorHelpers { - NSImage* createNSImage (const Image&); - NSImage* createNSImage (const Image& image) + NSImage* createNSImage (const Image&, float scaleFactor = 1.f); + NSImage* createNSImage (const Image& image, float scaleFactor) { JUCE_AUTORELEASEPOOL { NSImage* im = [[NSImage alloc] init]; - [im setSize: NSMakeSize (image.getWidth(), image.getHeight())]; - [im lockFocus]; + const NSSize requiredSize = NSMakeSize (image.getWidth() / scaleFactor, image.getHeight() / scaleFactor); + [im setSize: requiredSize]; CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB(); - CGImageRef imageRef = juce_createCoreGraphicsImage (image, colourSpace, false); + CGImageRef imageRef = juce_createCoreGraphicsImage (image, colourSpace, true); CGColorSpaceRelease (colourSpace); - CGContextRef cg = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort]; - CGContextDrawImage (cg, convertToCGRect (image.getBounds()), imageRef); - + NSBitmapImageRep* imageRep = [[NSBitmapImageRep alloc] initWithCGImage: imageRef]; + [imageRep setSize: requiredSize]; + [im addRepresentation: imageRep]; + [imageRep release]; CGImageRelease (imageRef); - [im unlockFocus]; - return im; } } @@ -104,7 +103,7 @@ namespace MouseCursorHelpers void* CustomMouseCursorInfo::create() const { - return MouseCursorHelpers::fromNSImage (MouseCursorHelpers::createNSImage (image), + return MouseCursorHelpers::fromNSImage (MouseCursorHelpers::createNSImage (image, scaleFactor), NSMakePoint (hotspot.x, hotspot.y)); } diff --git a/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp b/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp index c04e109041..21daad4369 100644 --- a/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp +++ b/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp @@ -24,7 +24,7 @@ namespace MouseCursorHelpers { - extern NSImage* createNSImage (const Image&); + extern NSImage* createNSImage (const Image&, float scaleFactor = 1.f); } extern NSMenu* createNSMenu (const PopupMenu&, const String& name, int topLevelMenuId,