Browse Source

macOS: Use available keyword instead of preprocessor version checks where possible

v6.1.6
ed 4 years ago
parent
commit
a435026b24
8 changed files with 115 additions and 96 deletions
  1. +11
    -7
      modules/juce_core/native/juce_mac_Files.mm
  2. +22
    -15
      modules/juce_graphics/native/juce_mac_Fonts.mm
  3. +11
    -8
      modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm
  4. +9
    -6
      modules/juce_gui_basics/native/juce_mac_FileChooser.mm
  5. +12
    -5
      modules/juce_gui_basics/native/juce_mac_MainMenu.mm
  6. +15
    -13
      modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm
  7. +6
    -7
      modules/juce_gui_basics/native/juce_mac_Windowing.mm
  8. +29
    -35
      modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm

+ 11
- 7
modules/juce_core/native/juce_mac_Files.mm View File

@@ -285,13 +285,17 @@ bool File::moveToTrash() const
JUCE_AUTORELEASEPOOL JUCE_AUTORELEASEPOOL
{ {
#if (defined (__IPHONE_11_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_11_0) \
|| (defined (MAC_OS_X_VERSION_10_8) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8)
NSError* error = nil;
return [[NSFileManager defaultManager] trashItemAtURL: createNSURLFromFile (*this)
resultingItemURL: nil
error: &error];
#elif JUCE_IOS
#if JUCE_MAC || (JUCE_IOS && (defined (__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0))
if (@available (macOS 10.8, iOS 11.0, *))
{
NSError* error = nil;
return [[NSFileManager defaultManager] trashItemAtURL: createNSURLFromFile (*this)
resultingItemURL: nil
error: &error];
}
#endif
#if JUCE_IOS
return deleteFile(); return deleteFile();
#else #else
[[NSWorkspace sharedWorkspace] recycleURLs: [NSArray arrayWithObject: createNSURLFromFile (*this)] [[NSWorkspace sharedWorkspace] recycleURLs: [NSArray arrayWithObject: createNSURLFromFile (*this)]


+ 22
- 15
modules/juce_graphics/native/juce_mac_Fonts.mm View File

@@ -159,20 +159,30 @@ namespace CoreTextTypeLayout
//============================================================================== //==============================================================================
static CTTextAlignment getTextAlignment (const AttributedString& text) static CTTextAlignment getTextAlignment (const AttributedString& text)
{ {
switch (text.getJustification().getOnlyHorizontalFlags())
const auto flags = text.getJustification().getOnlyHorizontalFlags();
if (@available (macOS 10.8, *))
{
switch (flags)
{
case Justification::right: return kCTTextAlignmentRight;
case Justification::horizontallyCentred: return kCTTextAlignmentCenter;
case Justification::horizontallyJustified: return kCTTextAlignmentJustified;
default: return kCTTextAlignmentLeft;
}
}
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations")
switch (flags)
{ {
#if defined (MAC_OS_X_VERSION_10_8) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
case Justification::right: return kCTTextAlignmentRight;
case Justification::horizontallyCentred: return kCTTextAlignmentCenter;
case Justification::horizontallyJustified: return kCTTextAlignmentJustified;
default: return kCTTextAlignmentLeft;
#else
case Justification::right: return kCTRightTextAlignment; case Justification::right: return kCTRightTextAlignment;
case Justification::horizontallyCentred: return kCTCenterTextAlignment; case Justification::horizontallyCentred: return kCTCenterTextAlignment;
case Justification::horizontallyJustified: return kCTJustifiedTextAlignment; case Justification::horizontallyJustified: return kCTJustifiedTextAlignment;
default: return kCTLeftTextAlignment; default: return kCTLeftTextAlignment;
#endif
} }
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
} }
static CTLineBreakMode getLineBreakMode (const AttributedString& text) static CTLineBreakMode getLineBreakMode (const AttributedString& text)
@@ -572,10 +582,8 @@ public:
if (fontRef != nullptr) if (fontRef != nullptr)
{ {
#if JUCE_MAC && defined (MAC_OS_X_VERSION_10_8) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8
if (SystemStats::getOperatingSystemType() >= SystemStats::OperatingSystemType::MacOSX_10_11)
if (@available (macOS 10.11, *))
canBeUsedForLayout = CTFontManagerRegisterGraphicsFont (fontRef, nullptr); canBeUsedForLayout = CTFontManagerRegisterGraphicsFont (fontRef, nullptr);
#endif
ctFontRef.reset (CTFontCreateWithGraphicsFont (fontRef, referenceFontSize, nullptr, nullptr)); ctFontRef.reset (CTFontCreateWithGraphicsFont (fontRef, referenceFontSize, nullptr, nullptr));
@@ -618,10 +626,9 @@ public:
{ {
if (fontRef != nullptr) if (fontRef != nullptr)
{ {
#if JUCE_MAC && defined (MAC_OS_X_VERSION_10_8) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8
if (dataCopy.getSize() != 0)
CTFontManagerUnregisterGraphicsFont (fontRef, nullptr);
#endif
if (@available (macOS 10.8, *))
if (dataCopy.getSize() != 0)
CTFontManagerUnregisterGraphicsFont (fontRef, nullptr);
CGFontRelease (fontRef); CGFontRelease (fontRef);
} }


+ 11
- 8
modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm View File

@@ -33,12 +33,6 @@ namespace juce
using NSAccessibilityNotificationName = NSString*; using NSAccessibilityNotificationName = NSString*;
#endif #endif
#if (! defined MAC_OS_X_VERSION_10_9) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9
const NSAccessibilityNotificationName NSAccessibilityLayoutChangedNotificationJuce = @"AXLayoutChanged";
#else
const NSAccessibilityNotificationName NSAccessibilityLayoutChangedNotificationJuce = NSAccessibilityLayoutChangedNotification;
#endif
#define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 #define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new")
@@ -887,6 +881,15 @@ static void sendHandlerNotification (const AccessibilityHandler& handler,
} }
} }
static NSAccessibilityNotificationName layoutChangedNotification()
{
if (@available (macOS 10.9, *))
return NSAccessibilityLayoutChangedNotification;
static NSString* layoutChangedString = @"AXLayoutChanged";
return layoutChangedString;
}
void notifyAccessibilityEventInternal (const AccessibilityHandler& handler, InternalAccessibilityEvent eventType) void notifyAccessibilityEventInternal (const AccessibilityHandler& handler, InternalAccessibilityEvent eventType)
{ {
auto notification = [eventType] auto notification = [eventType]
@@ -895,7 +898,7 @@ void notifyAccessibilityEventInternal (const AccessibilityHandler& handler, Inte
{ {
case InternalAccessibilityEvent::elementCreated: return NSAccessibilityCreatedNotification; case InternalAccessibilityEvent::elementCreated: return NSAccessibilityCreatedNotification;
case InternalAccessibilityEvent::elementDestroyed: return NSAccessibilityUIElementDestroyedNotification; case InternalAccessibilityEvent::elementDestroyed: return NSAccessibilityUIElementDestroyedNotification;
case InternalAccessibilityEvent::elementMovedOrResized: return NSAccessibilityLayoutChangedNotificationJuce;
case InternalAccessibilityEvent::elementMovedOrResized: return layoutChangedNotification();
case InternalAccessibilityEvent::focusChanged: return NSAccessibilityFocusedUIElementChangedNotification; case InternalAccessibilityEvent::focusChanged: return NSAccessibilityFocusedUIElementChangedNotification;
case InternalAccessibilityEvent::windowOpened: return NSAccessibilityWindowCreatedNotification; case InternalAccessibilityEvent::windowOpened: return NSAccessibilityWindowCreatedNotification;
case InternalAccessibilityEvent::windowClosed: break; case InternalAccessibilityEvent::windowClosed: break;
@@ -919,7 +922,7 @@ void AccessibilityHandler::notifyAccessibilityEvent (AccessibilityEvent eventTyp
case AccessibilityEvent::textChanged: case AccessibilityEvent::textChanged:
case AccessibilityEvent::valueChanged: return NSAccessibilityValueChangedNotification; case AccessibilityEvent::valueChanged: return NSAccessibilityValueChangedNotification;
case AccessibilityEvent::titleChanged: return NSAccessibilityTitleChangedNotification; case AccessibilityEvent::titleChanged: return NSAccessibilityTitleChangedNotification;
case AccessibilityEvent::structureChanged: return NSAccessibilityLayoutChangedNotificationJuce;
case AccessibilityEvent::structureChanged: return layoutChangedNotification();
} }
return NSAccessibilityNotificationName{}; return NSAccessibilityNotificationName{};


+ 9
- 6
modules/juce_gui_basics/native/juce_mac_FileChooser.mm View File

@@ -219,12 +219,15 @@ private:
exitModalState (0); exitModalState (0);
if (panel != nil && result ==
#if defined (MAC_OS_X_VERSION_10_9) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9
NSModalResponseOK)
#else
NSFileHandlingPanelOKButton)
#endif
const auto okResult = []() -> NSInteger
{
if (@available (macOS 10.9, *))
return NSModalResponseOK;
return NSFileHandlingPanelOKButton;
}();
if (panel != nil && result == okResult)
{ {
auto addURLResult = [&chooserResults] (NSURL* urlToAdd) auto addURLResult = [&chooserResults] (NSURL* urlToAdd)
{ {


+ 12
- 5
modules/juce_gui_basics/native/juce_mac_MainMenu.mm View File

@@ -364,11 +364,18 @@ private:
{ {
NSArray* array = nil; NSArray* array = nil;
#if (! defined (MAC_OS_X_VERSION_10_8)) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_8
[menuNib instantiateNibWithOwner: NSApp topLevelObjects: &array];
#else
[menuNib instantiateWithOwner: NSApp topLevelObjects: &array];
#endif
if (@available (macOS 10.11, *))
{
[menuNib instantiateWithOwner: NSApp
topLevelObjects: &array];
}
else
{
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations")
[menuNib instantiateNibWithOwner: NSApp
topLevelObjects: &array];
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
}
for (id object in array) for (id object in array)
{ {


+ 15
- 13
modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm View File

@@ -70,12 +70,14 @@ public:
[view setPostsFrameChangedNotifications: YES]; [view setPostsFrameChangedNotifications: YES];
#if defined (MAC_OS_X_VERSION_10_8) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8) \
&& USE_COREGRAPHICS_RENDERING && JUCE_COREGRAPHICS_DRAW_ASYNC
#if USE_COREGRAPHICS_RENDERING && JUCE_COREGRAPHICS_DRAW_ASYNC
if (! getComponentAsyncLayerBackedViewDisabled (component)) if (! getComponentAsyncLayerBackedViewDisabled (component))
{ {
[view setWantsLayer: YES];
[[view layer] setDrawsAsynchronously: YES];
if (@available (macOS 10.8, *))
{
[view setWantsLayer: YES];
[[view layer] setDrawsAsynchronously: YES];
}
} }
#endif #endif
@@ -107,9 +109,8 @@ public:
if (! [window isOpaque]) if (! [window isOpaque])
[window setBackgroundColor: [NSColor clearColor]]; [window setBackgroundColor: [NSColor clearColor]];
#if defined (MAC_OS_X_VERSION_10_9) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9)
[view setAppearance: [NSAppearance appearanceNamed: NSAppearanceNameAqua]];
#endif
if (@available (macOS 10.9, *))
[view setAppearance: [NSAppearance appearanceNamed: NSAppearanceNameAqua]];
[window setHasShadow: ((windowStyleFlags & windowHasDropShadow) != 0)]; [window setHasShadow: ((windowStyleFlags & windowHasDropShadow) != 0)];
@@ -851,12 +852,13 @@ public:
if (r.size.width < 1.0f || r.size.height < 1.0f) if (r.size.width < 1.0f || r.size.height < 1.0f)
return; return;
auto cg = (CGContextRef) [[NSGraphicsContext currentContext]
#if (defined (MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10)
CGContext];
#else
graphicsPort];
#endif
auto cg = []
{
if (@available (macOS 10.10, *))
return (CGContextRef) [[NSGraphicsContext currentContext] CGContext];
return (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
}();
if (! component.isOpaque()) if (! component.isOpaque())
CGContextClearRect (cg, CGContextGetClipBoundingBox (cg)); CGContextClearRect (cg, CGContextGetClipBoundingBox (cg));


+ 6
- 7
modules/juce_gui_basics/native/juce_mac_Windowing.mm View File

@@ -577,13 +577,12 @@ static void selectImageForDrawing (const Image& image)
{ {
[NSGraphicsContext saveGraphicsState]; [NSGraphicsContext saveGraphicsState];
#if (defined (MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10)
[NSGraphicsContext setCurrentContext: [NSGraphicsContext graphicsContextWithCGContext: juce_getImageContext (image)
flipped: false]];
#else
[NSGraphicsContext setCurrentContext: [NSGraphicsContext graphicsContextWithGraphicsPort: juce_getImageContext (image)
flipped: false]];
#endif
if (@available (macOS 10.10, *))
[NSGraphicsContext setCurrentContext: [NSGraphicsContext graphicsContextWithCGContext: juce_getImageContext (image)
flipped: false]];
else
[NSGraphicsContext setCurrentContext: [NSGraphicsContext graphicsContextWithGraphicsPort: juce_getImageContext (image)
flipped: false]];
} }
static void releaseImageAfterDrawing() static void releaseImageAfterDrawing()


+ 29
- 35
modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm View File

@@ -27,41 +27,37 @@ namespace juce
{ {
#if JUCE_IOS || (defined (MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10) #if JUCE_IOS || (defined (MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10)
#define JUCE_USE_WKWEBVIEW 1 #define JUCE_USE_WKWEBVIEW 1
#endif
#if (defined (MAC_OS_X_VERSION_10_11) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11)
#define WKWEBVIEW_WEBVIEWDIDCLOSE_SUPPORTED 1
#endif
#if (defined (MAC_OS_X_VERSION_10_12) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)
#define WKWEBVIEW_OPENPANEL_SUPPORTED 1
#endif
#if (defined (MAC_OS_X_VERSION_10_12) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)
#define WKWEBVIEW_OPENPANEL_SUPPORTED 1
#endif #endif
static NSURL* appendParametersToFileURL (const URL& url, NSURL* fileUrl) static NSURL* appendParametersToFileURL (const URL& url, NSURL* fileUrl)
{ {
#if JUCE_IOS || (defined (MAC_OS_X_VERSION_10_9) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9)
const auto parameterNames = url.getParameterNames();
const auto parameterValues = url.getParameterValues();
if (@available (macOS 10.9, *))
{
const auto parameterNames = url.getParameterNames();
const auto parameterValues = url.getParameterValues();
jassert (parameterNames.size() == parameterValues.size());
jassert (parameterNames.size() == parameterValues.size());
if (parameterNames.isEmpty())
return fileUrl;
if (parameterNames.isEmpty())
return fileUrl;
NSUniquePtr<NSURLComponents> components ([[NSURLComponents alloc] initWithURL: fileUrl resolvingAgainstBaseURL: NO]);
NSUniquePtr<NSMutableArray> queryItems ([[NSMutableArray alloc] init]);
NSUniquePtr<NSURLComponents> components ([[NSURLComponents alloc] initWithURL: fileUrl resolvingAgainstBaseURL: NO]);
NSUniquePtr<NSMutableArray> queryItems ([[NSMutableArray alloc] init]);
for (int i = 0; i < parameterNames.size(); ++i)
[queryItems.get() addObject: [NSURLQueryItem queryItemWithName: juceStringToNS (parameterNames[i])
value: juceStringToNS (parameterValues[i])]];
for (int i = 0; i < parameterNames.size(); ++i)
[queryItems.get() addObject: [NSURLQueryItem queryItemWithName: juceStringToNS (parameterNames[i])
value: juceStringToNS (parameterValues[i])]];
[components.get() setQueryItems: queryItems.get()];
[components.get() setQueryItems: queryItems.get()];
return [components.get() URL];
}
return [components.get() URL];
#else
const auto queryString = url.getQueryString(); const auto queryString = url.getQueryString();
if (queryString.isNotEmpty()) if (queryString.isNotEmpty())
@@ -69,18 +65,22 @@ static NSURL* appendParametersToFileURL (const URL& url, NSURL* fileUrl)
return [NSURL URLWithString: [fileUrlString stringByAppendingString: juceStringToNS (queryString)]]; return [NSURL URLWithString: [fileUrlString stringByAppendingString: juceStringToNS (queryString)]];
return fileUrl; return fileUrl;
#endif
} }
static NSMutableURLRequest* getRequestForURL (const String& url, const StringArray* headers, const MemoryBlock* postData) static NSMutableURLRequest* getRequestForURL (const String& url, const StringArray* headers, const MemoryBlock* postData)
{ {
NSString* urlString = juceStringToNS (url); NSString* urlString = juceStringToNS (url);
#if JUCE_IOS || (defined (MAC_OS_X_VERSION_10_9) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9)
urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters: [NSCharacterSet URLQueryAllowedCharacterSet]];
#else
urlString = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
#endif
if (@available (macOS 10.9, *))
{
urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters: [NSCharacterSet URLQueryAllowedCharacterSet]];
}
else
{
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations")
urlString = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
}
if (NSURL* nsURL = [NSURL URLWithString: urlString]) if (NSURL* nsURL = [NSURL URLWithString: urlString])
{ {
@@ -177,11 +177,7 @@ struct WebViewDelegateClass : public ObjCClass<NSObject>
addMethod (@selector (webView:didFinishNavigation:), didFinishNavigation, "v@:@@"); addMethod (@selector (webView:didFinishNavigation:), didFinishNavigation, "v@:@@");
addMethod (@selector (webView:didFailNavigation:withError:), didFailNavigation, "v@:@@@"); addMethod (@selector (webView:didFailNavigation:withError:), didFailNavigation, "v@:@@@");
addMethod (@selector (webView:didFailProvisionalNavigation:withError:), didFailProvisionalNavigation, "v@:@@@"); addMethod (@selector (webView:didFailProvisionalNavigation:withError:), didFailProvisionalNavigation, "v@:@@@");
#if WKWEBVIEW_WEBVIEWDIDCLOSE_SUPPORTED
addMethod (@selector (webViewDidClose:), webViewDidClose, "v@:@"); addMethod (@selector (webViewDidClose:), webViewDidClose, "v@:@");
#endif
addMethod (@selector (webView:createWebViewWithConfiguration:forNavigationAction: addMethod (@selector (webView:createWebViewWithConfiguration:forNavigationAction:
windowFeatures:), createWebView, "@@:@@@@"); windowFeatures:), createWebView, "@@:@@@@");
@@ -233,12 +229,10 @@ private:
displayError (getOwner (self), error); displayError (getOwner (self), error);
} }
#if WKWEBVIEW_WEBVIEWDIDCLOSE_SUPPORTED
static void webViewDidClose (id self, SEL, WKWebView*) static void webViewDidClose (id self, SEL, WKWebView*)
{ {
getOwner (self)->windowCloseRequest(); getOwner (self)->windowCloseRequest();
} }
#endif
static WKWebView* createWebView (id self, SEL, WKWebView*, WKWebViewConfiguration*, static WKWebView* createWebView (id self, SEL, WKWebView*, WKWebViewConfiguration*,
WKNavigationAction* navigationAction, WKWindowFeatures*) WKNavigationAction* navigationAction, WKWindowFeatures*)


Loading…
Cancel
Save