@@ -26,7 +26,7 @@ | |||||
#if JUCE_MAC || JUCE_IOS | #if JUCE_MAC || JUCE_IOS | ||||
#include <juce_audio_basics/native/juce_mac_CoreAudioLayouts.h> | #include <juce_audio_basics/native/juce_mac_CoreAudioLayouts.h> | ||||
#include <juce_core/native/juce_osx_ObjCHelpers.h> | |||||
#include <juce_core/native/juce_mac_CFHelpers.h> | |||||
namespace juce | namespace juce | ||||
{ | { | ||||
@@ -23,17 +23,16 @@ | |||||
============================================================================== | ============================================================================== | ||||
*/ | */ | ||||
#if JucePlugin_Build_VST3 && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) | |||||
#include <juce_core/system/juce_CompilerWarnings.h> | |||||
#include <juce_core/system/juce_TargetPlatform.h> | #include <juce_core/system/juce_TargetPlatform.h> | ||||
#include <juce_core/system/juce_CompilerWarnings.h> | |||||
#if JUCE_MAC | |||||
#include <CoreFoundation/CoreFoundation.h> | |||||
#include <juce_core/native/juce_osx_ObjCHelpers.h> | |||||
#endif | |||||
//============================================================================== | |||||
#if JucePlugin_Build_VST3 && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) | |||||
#if JUCE_PLUGINHOST_VST3 | #if JUCE_PLUGINHOST_VST3 | ||||
#if JUCE_MAC | |||||
#include <CoreFoundation/CoreFoundation.h> | |||||
#endif | |||||
#undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY | #undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY | ||||
#define JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY 1 | #define JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY 1 | ||||
#endif | #endif | ||||
@@ -80,6 +79,10 @@ | |||||
std::vector<std::pair<int, std::function<void (int)>>> getFdReadCallbacks(); | std::vector<std::pair<int, std::function<void (int)>>> getFdReadCallbacks(); | ||||
#endif | #endif | ||||
#if JUCE_MAC | |||||
#include <juce_core/native/juce_mac_CFHelpers.h> | |||||
#endif | |||||
namespace juce | namespace juce | ||||
{ | { | ||||
@@ -340,7 +340,7 @@ JUCE_END_IGNORE_WARNINGS_MSVC | |||||
#include "memory/juce_AllocationHooks.h" | #include "memory/juce_AllocationHooks.h" | ||||
#if JUCE_CORE_INCLUDE_OBJC_HELPERS && (JUCE_MAC || JUCE_IOS) | #if JUCE_CORE_INCLUDE_OBJC_HELPERS && (JUCE_MAC || JUCE_IOS) | ||||
#include "native/juce_osx_ObjCHelpers.h" | |||||
#include "native/juce_mac_ObjCHelpers.h" | |||||
#endif | #endif | ||||
#if JUCE_CORE_INCLUDE_COM_SMART_PTR && JUCE_WINDOWS | #if JUCE_CORE_INCLUDE_COM_SMART_PTR && JUCE_WINDOWS | ||||
@@ -0,0 +1,63 @@ | |||||
/* | |||||
============================================================================== | |||||
This file is part of the JUCE library. | |||||
Copyright (c) 2020 - Raw Material Software Limited | |||||
JUCE is an open source library subject to commercial or open-source | |||||
licensing. | |||||
The code included in this file is provided under the terms of the ISC license | |||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission | |||||
To use, copy, modify, and/or distribute this software for any purpose with or | |||||
without fee is hereby granted provided that the above copyright notice and | |||||
this permission notice appear in all copies. | |||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||||
DISCLAIMED. | |||||
============================================================================== | |||||
*/ | |||||
/* This file contains a few helper functions that are used internally but which | |||||
need to be kept away from the public headers because they use obj-C symbols. | |||||
*/ | |||||
namespace juce | |||||
{ | |||||
template <typename CFType> | |||||
struct CFObjectDeleter | |||||
{ | |||||
void operator() (CFType object) const noexcept | |||||
{ | |||||
if (object != nullptr) | |||||
CFRelease (object); | |||||
} | |||||
}; | |||||
template <typename CFType> | |||||
using CFUniquePtr = std::unique_ptr<typename std::remove_pointer<CFType>::type, CFObjectDeleter<CFType>>; | |||||
template <typename CFType> | |||||
struct CFObjectHolder | |||||
{ | |||||
CFObjectHolder() = default; | |||||
CFObjectHolder (const CFObjectHolder&) = delete; | |||||
CFObjectHolder (CFObjectHolder&&) = delete; | |||||
CFObjectHolder& operator= (const CFObjectHolder&) = delete; | |||||
CFObjectHolder& operator= (CFObjectHolder&&) = delete; | |||||
~CFObjectHolder() noexcept | |||||
{ | |||||
if (object != nullptr) | |||||
CFRelease (object); | |||||
} | |||||
// Public to facilitate passing the pointer address to functions | |||||
CFType object = nullptr; | |||||
}; | |||||
} // namespace juce |
@@ -20,6 +20,8 @@ | |||||
============================================================================== | ============================================================================== | ||||
*/ | */ | ||||
#include "juce_mac_CFHelpers.h" | |||||
/* This file contains a few helper functions that are used internally but which | /* This file contains a few helper functions that are used internally but which | ||||
need to be kept away from the public headers because they use obj-C symbols. | need to be kept away from the public headers because they use obj-C symbols. | ||||
*/ | */ | ||||
@@ -240,40 +242,6 @@ struct NSObjectDeleter | |||||
template <typename NSType> | template <typename NSType> | ||||
using NSUniquePtr = std::unique_ptr<NSType, NSObjectDeleter>; | using NSUniquePtr = std::unique_ptr<NSType, NSObjectDeleter>; | ||||
template <typename CFType> | |||||
struct CFObjectDeleter | |||||
{ | |||||
void operator() (CFType object) const noexcept | |||||
{ | |||||
if (object != nullptr) | |||||
CFRelease (object); | |||||
} | |||||
}; | |||||
template <typename CFType> | |||||
using CFUniquePtr = std::unique_ptr<typename std::remove_pointer<CFType>::type, CFObjectDeleter<CFType>>; | |||||
template <typename CFType> | |||||
struct CFObjectHolder | |||||
{ | |||||
CFObjectHolder() = default; | |||||
CFObjectHolder (const CFObjectHolder&) = delete; | |||||
CFObjectHolder (CFObjectHolder&&) = delete; | |||||
CFObjectHolder& operator= (const CFObjectHolder&) = delete; | |||||
CFObjectHolder& operator= (CFObjectHolder&&) = delete; | |||||
~CFObjectHolder() noexcept | |||||
{ | |||||
if (object != nullptr) | |||||
CFRelease (object); | |||||
} | |||||
// Public to facilitate passing the pointer address to functions | |||||
CFType object = nullptr; | |||||
}; | |||||
//============================================================================== | //============================================================================== | ||||
template <typename SuperclassType> | template <typename SuperclassType> | ||||
struct ObjCClass | struct ObjCClass |