| @@ -561,8 +561,8 @@ | |||
| LLVM_LTO = YES; | |||
| MACOSX_DEPLOYMENT_TARGET = 10.11; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | |||
| PRODUCT_NAME = "DemoRunner"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -642,8 +642,8 @@ | |||
| INSTALL_PATH = "$(HOME)/Applications"; | |||
| MACOSX_DEPLOYMENT_TARGET = 10.11; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | |||
| PRODUCT_NAME = "DemoRunner"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -564,8 +564,8 @@ | |||
| INSTALL_PATH = "$(HOME)/Applications"; | |||
| LLVM_LTO = YES; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | |||
| PRODUCT_NAME = "DemoRunner"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -645,8 +645,8 @@ | |||
| INFOPLIST_PREPROCESS = NO; | |||
| INSTALL_PATH = "$(HOME)/Applications"; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | |||
| PRODUCT_NAME = "DemoRunner"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -486,8 +486,8 @@ | |||
| LLVM_LTO = YES; | |||
| MACOSX_DEPLOYMENT_TARGET = 10.11; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; | |||
| PRODUCT_NAME = "AudioPluginHost"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -615,8 +615,8 @@ | |||
| INSTALL_PATH = "$(HOME)/Applications"; | |||
| MACOSX_DEPLOYMENT_TARGET = 10.11; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; | |||
| PRODUCT_NAME = "AudioPluginHost"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -494,8 +494,8 @@ | |||
| INSTALL_PATH = "$(HOME)/Applications"; | |||
| LLVM_LTO = YES; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; | |||
| PRODUCT_NAME = "Plugin Host"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -624,8 +624,8 @@ | |||
| INFOPLIST_PREPROCESS = NO; | |||
| INSTALL_PATH = "$(HOME)/Applications"; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; | |||
| PRODUCT_NAME = "Plugin Host"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -38,7 +38,9 @@ elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQU | |||
| $<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:OBJCXX>>: | |||
| -Wzero-as-null-pointer-constant -Wunused-private-field | |||
| -Woverloaded-virtual -Wreorder | |||
| -Winconsistent-missing-destructor-override>) | |||
| -Winconsistent-missing-destructor-override> | |||
| $<$<OR:$<COMPILE_LANGUAGE:OBJC>,$<COMPILE_LANGUAGE:OBJCXX>>: | |||
| -Wunguarded-availability -Wunguarded-availability-new>) | |||
| elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") | |||
| target_compile_options(juce_recommended_warning_flags INTERFACE | |||
| -Wall -Wextra -Wpedantic -Wstrict-aliasing -Wuninitialized | |||
| @@ -1170,8 +1170,8 @@ | |||
| INSTALL_PATH = "$(HOME)/Applications"; | |||
| MACOSX_DEPLOYMENT_TARGET = 10.12; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer; | |||
| PRODUCT_NAME = "Projucer"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -1239,8 +1239,8 @@ | |||
| INSTALL_PATH = "$(HOME)/Applications"; | |||
| MACOSX_DEPLOYMENT_TARGET = 10.12; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer; | |||
| PRODUCT_NAME = "Projucer"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -1577,6 +1577,7 @@ public: | |||
| s.set ("GCC_FAST_MATH", "YES"); | |||
| auto recommendedWarnings = config.getRecommendedCompilerWarningFlags(); | |||
| recommendedWarnings.common.addArray (recommendedWarnings.objc); | |||
| recommendedWarnings.cpp.addArray (recommendedWarnings.common); | |||
| struct XcodeWarningFlags | |||
| @@ -868,6 +868,9 @@ ProjectExporter::BuildConfiguration::BuildConfiguration (Project& p, const Value | |||
| llvmFlags.cpp.addArray ({ | |||
| "-Wunused-private-field", "-Winconsistent-missing-destructor-override" | |||
| }); | |||
| llvmFlags.objc.addArray ({ | |||
| "-Wunguarded-availability", "-Wunguarded-availability-new" | |||
| }); | |||
| auto& gccFlags = recommendedCompilerWarningFlags[CompilerNames::gcc] = BuildConfiguration::CompilerWarningFlags::getRecommendedForGCCAndLLVM(); | |||
| gccFlags.common.addArray ({ | |||
| @@ -289,8 +289,7 @@ public: | |||
| return result; | |||
| } | |||
| StringArray common; | |||
| StringArray cpp; | |||
| StringArray common, cpp, objc; | |||
| }; | |||
| CompilerWarningFlags getRecommendedCompilerWarningFlags() const; | |||
| @@ -451,8 +451,8 @@ | |||
| LLVM_LTO = YES; | |||
| MACOSX_DEPLOYMENT_TARGET = 10.10; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner; | |||
| PRODUCT_NAME = "UnitTestRunner"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -573,8 +573,8 @@ | |||
| INSTALL_PATH = "/usr/bin"; | |||
| MACOSX_DEPLOYMENT_TARGET = 10.10; | |||
| MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
| OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
| PRODUCT_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner; | |||
| PRODUCT_NAME = "UnitTestRunner"; | |||
| USE_HEADERMAP = NO; | |||
| @@ -82,10 +82,8 @@ namespace CoreMidiHelpers | |||
| struct Sender; | |||
| #if JUCE_HAS_NEW_COREMIDI_API | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
| template <> | |||
| struct Sender<ImplementationStrategy::onlyNew> : public SenderBase | |||
| struct API_AVAILABLE (macos (11.0), ios (14.0)) Sender<ImplementationStrategy::onlyNew> : public SenderBase | |||
| { | |||
| explicit Sender (MIDIEndpointRef ep) | |||
| : umpConverter (getProtocolForEndpoint (ep)) | |||
| @@ -177,8 +175,6 @@ namespace CoreMidiHelpers | |||
| send(); | |||
| } | |||
| }; | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| #if JUCE_HAS_OLD_COREMIDI_API | |||
| @@ -829,10 +825,8 @@ namespace CoreMidiHelpers | |||
| struct CreatorFunctions; | |||
| #if JUCE_HAS_NEW_COREMIDI_API | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
| template <> | |||
| struct CreatorFunctions<ImplementationStrategy::onlyNew> | |||
| struct API_AVAILABLE (macos (11.0), ios (14.0)) CreatorFunctions<ImplementationStrategy::onlyNew> | |||
| { | |||
| static OSStatus createInputPort (ump::PacketProtocol protocol, | |||
| MIDIClientRef client, | |||
| @@ -894,8 +888,6 @@ namespace CoreMidiHelpers | |||
| static_cast<MidiPortAndCallback*> (readProcRefCon)->handlePackets (*list); | |||
| } | |||
| }; | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| #if JUCE_HAS_OLD_COREMIDI_API | |||
| @@ -287,7 +287,7 @@ namespace AudioUnitFormatHelpers | |||
| NSBundle* bundle = [[NSBundle alloc] initWithPath: (NSString*) fileOrIdentifier.toCFString()]; | |||
| NSArray* audioComponents = [bundle objectForInfoDictionaryKey: @"AudioComponents"]; | |||
| NSDictionary* dict = audioComponents[0]; | |||
| NSDictionary* dict = [audioComponents objectAtIndex: 0]; | |||
| desc.componentManufacturer = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"manufacturer"])); | |||
| desc.componentType = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"type"])); | |||
| @@ -436,6 +436,14 @@ namespace AudioUnitFormatHelpers | |||
| */ | |||
| std::vector<size_t> channels; | |||
| }; | |||
| static bool isPluginAUv3 (const AudioComponentDescription& desc) | |||
| { | |||
| if (@available (macOS 10.11, *)) | |||
| return (desc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0; | |||
| return false; | |||
| } | |||
| } | |||
| //============================================================================== | |||
| @@ -656,7 +664,7 @@ public: | |||
| AudioComponentGetDescription (auComponent, &componentDesc); | |||
| isAUv3 = ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); | |||
| isAUv3 = AudioUnitFormatHelpers::isPluginAUv3 (componentDesc); | |||
| wantsMidiMessages = componentDesc.componentType == kAudioUnitType_MusicDevice | |||
| || componentDesc.componentType == kAudioUnitType_MusicEffect | |||
| @@ -2577,7 +2585,10 @@ private: | |||
| { | |||
| const auto viewSize = [&controller] | |||
| { | |||
| auto size = [controller preferredContentSize]; | |||
| auto size = CGSizeZero; | |||
| if (@available (macOS 10.11, *)) | |||
| size = [controller preferredContentSize]; | |||
| if (size.width == 0 || size.height == 0) | |||
| size = controller.view.frame.size; | |||
| @@ -2886,12 +2897,15 @@ void AudioUnitPluginFormat::createPluginInstance (const PluginDescription& desc, | |||
| auto callbackBlock = new AUAsyncInitializationCallback (rate, blockSize, std::move (callback)); | |||
| if ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0) | |||
| if (AudioUnitFormatHelpers::isPluginAUv3 (componentDesc)) | |||
| { | |||
| AudioComponentInstantiate (auComponent, kAudioComponentInstantiation_LoadOutOfProcess, | |||
| callbackBlock->getBlock()); | |||
| if (@available (macOS 10.11, *)) | |||
| { | |||
| AudioComponentInstantiate (auComponent, kAudioComponentInstantiation_LoadOutOfProcess, | |||
| callbackBlock->getBlock()); | |||
| return; | |||
| return; | |||
| } | |||
| } | |||
| AudioComponentInstance audioUnit; | |||
| @@ -2915,8 +2929,10 @@ bool AudioUnitPluginFormat::requiresUnblockedMessageThreadDuringCreation (const | |||
| pluginName, version, manufacturer)) | |||
| { | |||
| if (AudioComponent auComp = AudioComponentFindNext (nullptr, &componentDesc)) | |||
| { | |||
| if (AudioComponentGetDescription (auComp, &componentDesc) == noErr) | |||
| return ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); | |||
| return AudioUnitFormatHelpers::isPluginAUv3 (componentDesc); | |||
| } | |||
| } | |||
| return false; | |||
| @@ -2948,11 +2964,7 @@ StringArray AudioUnitPluginFormat::searchPathsForPlugins (const FileSearchPath&, | |||
| || desc.componentType == kAudioUnitType_Mixer | |||
| || desc.componentType == kAudioUnitType_MIDIProcessor) | |||
| { | |||
| ignoreUnused (allowPluginsWhichRequireAsynchronousInstantiation); | |||
| const auto isAUv3 = ((desc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); | |||
| if (allowPluginsWhichRequireAsynchronousInstantiation || ! isAUv3) | |||
| if (allowPluginsWhichRequireAsynchronousInstantiation || ! AudioUnitFormatHelpers::isPluginAUv3 (desc)) | |||
| result.add (AudioUnitFormatHelpers::createPluginIdentifier (desc)); | |||
| } | |||
| } | |||
| @@ -27,7 +27,7 @@ namespace juce | |||
| { | |||
| //============================================================================== | |||
| class BluetoothMidiPairingWindowClass : public ObjCClass<NSObject> | |||
| class API_AVAILABLE (macos (10.11)) BluetoothMidiPairingWindowClass : public ObjCClass<NSObject> | |||
| { | |||
| public: | |||
| struct Callbacks | |||
| @@ -117,7 +117,7 @@ private: | |||
| } | |||
| }; | |||
| class BluetoothMidiSelectorWindowHelper : public DeletedAtShutdown | |||
| class API_AVAILABLE (macos (10.11)) BluetoothMidiSelectorWindowHelper : public DeletedAtShutdown | |||
| { | |||
| public: | |||
| BluetoothMidiSelectorWindowHelper (ModalComponentManager::Callback* exitCallback, | |||
| @@ -528,8 +528,9 @@ void File::addToDock() const | |||
| File File::getContainerForSecurityApplicationGroupIdentifier (const String& appGroup) | |||
| { | |||
| if (auto* url = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: juceStringToNS (appGroup)]) | |||
| return File (nsStringToJuce ([url path])); | |||
| if (@available (macOS 10.8, *)) | |||
| if (auto* url = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: juceStringToNS (appGroup)]) | |||
| return File (nsStringToJuce ([url path])); | |||
| return File(); | |||
| } | |||
| @@ -393,7 +393,7 @@ JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| //============================================================================== | |||
| class URLConnectionState : public URLConnectionStateBase | |||
| class API_AVAILABLE (macos (10.9)) URLConnectionState : public URLConnectionStateBase | |||
| { | |||
| public: | |||
| URLConnectionState (NSURLRequest* req, const int maxRedirects) | |||
| @@ -164,7 +164,7 @@ inline var nsDictionaryToVar (NSDictionary* dictionary) | |||
| DynamicObject::Ptr dynamicObject (new DynamicObject()); | |||
| for (NSString* key in dictionary) | |||
| dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar (dictionary[key])); | |||
| dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar ([dictionary objectForKey: key])); | |||
| return var (dynamicObject.get()); | |||
| } | |||
| @@ -28,12 +28,21 @@ namespace juce | |||
| class ScopedLowPowerModeDisabler::Pimpl | |||
| { | |||
| public: | |||
| Pimpl() = default; | |||
| ~Pimpl() { [[NSProcessInfo processInfo] endActivity: activity]; } | |||
| Pimpl() | |||
| { | |||
| if (@available (macOS 10.9, *)) | |||
| activity = [[NSProcessInfo processInfo] beginActivityWithOptions: NSActivityUserInitiatedAllowingIdleSystemSleep | |||
| reason: @"App must remain in high-power mode"]; | |||
| } | |||
| ~Pimpl() | |||
| { | |||
| if (@available (macOS 10.9, *)) | |||
| [[NSProcessInfo processInfo] endActivity: activity]; | |||
| } | |||
| private: | |||
| id activity { [[NSProcessInfo processInfo] beginActivityWithOptions: NSActivityUserInitiatedAllowingIdleSystemSleep | |||
| reason: @"App must remain in high-power mode"] }; | |||
| id activity; | |||
| JUCE_DECLARE_NON_COPYABLE (Pimpl) | |||
| JUCE_DECLARE_NON_MOVEABLE (Pimpl) | |||
| @@ -41,31 +41,6 @@ namespace juce | |||
| #define JUCE_IOS_CONTAINER_API_AVAILABLE 1 | |||
| #endif | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
| constexpr auto juceUIAccessibilityContainerTypeNone = | |||
| #if JUCE_IOS_CONTAINER_API_AVAILABLE | |||
| UIAccessibilityContainerTypeNone; | |||
| #else | |||
| 0; | |||
| #endif | |||
| constexpr auto juceUIAccessibilityContainerTypeDataTable = | |||
| #if JUCE_IOS_CONTAINER_API_AVAILABLE | |||
| UIAccessibilityContainerTypeDataTable; | |||
| #else | |||
| 1; | |||
| #endif | |||
| constexpr auto juceUIAccessibilityContainerTypeList = | |||
| #if JUCE_IOS_CONTAINER_API_AVAILABLE | |||
| UIAccessibilityContainerTypeList; | |||
| #else | |||
| 2; | |||
| #endif | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 | |||
| //============================================================================== | |||
| @@ -164,7 +139,12 @@ private: | |||
| if (auto* handler = getHandler (self)) | |||
| { | |||
| if (handler->getTableInterface() != nullptr) | |||
| return juceUIAccessibilityContainerTypeDataTable; | |||
| { | |||
| if (@available (iOS 11.0, *)) | |||
| return UIAccessibilityContainerTypeDataTable; | |||
| return 1; // UIAccessibilityContainerTypeDataTable | |||
| } | |||
| const auto role = handler->getRole(); | |||
| @@ -172,11 +152,17 @@ private: | |||
| || role == AccessibilityRole::list | |||
| || role == AccessibilityRole::tree) | |||
| { | |||
| return juceUIAccessibilityContainerTypeList; | |||
| if (@available (iOS 11.0, *)) | |||
| return UIAccessibilityContainerTypeList; | |||
| return 2; // UIAccessibilityContainerTypeList | |||
| } | |||
| } | |||
| return juceUIAccessibilityContainerTypeNone; | |||
| if (@available (iOS 11.0, *)) | |||
| return UIAccessibilityContainerTypeNone; | |||
| return 0; // UIAccessibilityContainerTypeNone | |||
| } | |||
| }; | |||
| @@ -23,6 +23,7 @@ | |||
| ============================================================================== | |||
| */ | |||
| API_AVAILABLE (macos (10.10)) | |||
| static void juceFreeAccessibilityPlatformSpecificData (NSAccessibilityElement<NSAccessibility>*) {} | |||
| namespace juce | |||
| @@ -35,16 +36,17 @@ namespace juce | |||
| #define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
| //============================================================================== | |||
| class AccessibilityHandler::AccessibilityNativeImpl | |||
| { | |||
| public: | |||
| explicit AccessibilityNativeImpl (AccessibilityHandler& handler) | |||
| : accessibilityElement (AccessibilityElement::create (handler)) | |||
| {} | |||
| { | |||
| if (@available (macOS 10.10, *)) | |||
| accessibilityElement = AccessibilityElement::create (handler); | |||
| } | |||
| API_AVAILABLE (macos (10.10)) | |||
| NSAccessibilityElement<NSAccessibility>* getAccessibilityElement() const noexcept | |||
| { | |||
| return accessibilityElement.get(); | |||
| @@ -52,7 +54,7 @@ public: | |||
| private: | |||
| //============================================================================== | |||
| class AccessibilityElement : public AccessibleObjCClass<NSAccessibilityElement<NSAccessibility>> | |||
| class API_AVAILABLE (macos (10.10)) AccessibilityElement : public AccessibleObjCClass<NSAccessibilityElement<NSAccessibility>> | |||
| { | |||
| public: | |||
| static Holder create (AccessibilityHandler& handler) | |||
| @@ -830,6 +832,7 @@ private: | |||
| }; | |||
| //============================================================================== | |||
| API_AVAILABLE (macos (10.10)) | |||
| AccessibilityElement::Holder accessibilityElement; | |||
| //============================================================================== | |||
| @@ -839,7 +842,10 @@ private: | |||
| //============================================================================== | |||
| AccessibilityNativeHandle* AccessibilityHandler::getNativeImplementation() const | |||
| { | |||
| return (AccessibilityNativeHandle*) nativeImpl->getAccessibilityElement(); | |||
| if (@available (macOS 10.10, *)) | |||
| return (AccessibilityNativeHandle*) nativeImpl->getAccessibilityElement(); | |||
| return nullptr; | |||
| } | |||
| static bool areAnyAccessibilityClientsActive() | |||
| @@ -873,12 +879,15 @@ static void sendHandlerNotification (const AccessibilityHandler& handler, | |||
| if (! areAnyAccessibilityClientsActive() || notification == NSAccessibilityNotificationName{}) | |||
| return; | |||
| if (id accessibilityElement = (id) handler.getNativeImplementation()) | |||
| if (@available (macOS 10.9, *)) | |||
| { | |||
| sendAccessibilityEvent (accessibilityElement, notification, | |||
| (notification == NSAccessibilityLayoutChangedNotification | |||
| ? @{ NSAccessibilityUIElementsKey: @[ accessibilityElement ] } | |||
| : nil)); | |||
| if (id accessibilityElement = (id) handler.getNativeImplementation()) | |||
| { | |||
| sendAccessibilityEvent (accessibilityElement, notification, | |||
| (notification == NSAccessibilityLayoutChangedNotification | |||
| ? @{ NSAccessibilityUIElementsKey: @[ accessibilityElement ] } | |||
| : nil)); | |||
| } | |||
| } | |||
| } | |||
| @@ -937,10 +946,13 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A | |||
| if (! areAnyAccessibilityClientsActive()) | |||
| return; | |||
| if (@available (macOS 10.10, *)) | |||
| { | |||
| if (@available (macOS 10.9, *)) | |||
| { | |||
| auto nsPriority = [priority] | |||
| { | |||
| // The below doesn't get noticed by the @available check above | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability") | |||
| switch (priority) | |||
| { | |||
| case AnnouncementPriority::low: return NSAccessibilityPriorityLow; | |||
| @@ -950,6 +962,8 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A | |||
| jassertfalse; | |||
| return NSAccessibilityPriorityLow; | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| }(); | |||
| sendAccessibilityEvent ((id) [NSApp mainWindow], | |||
| @@ -959,6 +973,4 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A | |||
| } | |||
| } | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| } // namespace juce | |||
| @@ -112,10 +112,13 @@ public: | |||
| preview->addToDesktop (0, (void*) nsViewPreview); | |||
| preview->setVisible (true); | |||
| if (! isSave) | |||
| if (@available (macOS 10.11, *)) | |||
| { | |||
| auto* openPanel = static_cast<NSOpenPanel*> (panel); | |||
| [openPanel setAccessoryViewDisclosed: YES]; | |||
| if (! isSave) | |||
| { | |||
| auto* openPanel = static_cast<NSOpenPanel*> (panel); | |||
| [openPanel setAccessoryViewDisclosed: YES]; | |||
| } | |||
| } | |||
| } | |||
| @@ -1789,10 +1789,13 @@ private: | |||
| void setFullScreenSizeConstraints (const ComponentBoundsConstrainer& c) | |||
| { | |||
| const auto minSize = NSMakeSize (static_cast<float> (c.getMinimumWidth()), | |||
| 0.0f); | |||
| [window setMinFullScreenContentSize: minSize]; | |||
| [window setMaxFullScreenContentSize: NSMakeSize (100000, 100000)]; | |||
| if (@available (macOS 10.11, *)) | |||
| { | |||
| const auto minSize = NSMakeSize (static_cast<float> (c.getMinimumWidth()), | |||
| 0.0f); | |||
| [window setMinFullScreenContentSize: minSize]; | |||
| [window setMaxFullScreenContentSize: NSMakeSize (100000, 100000)]; | |||
| } | |||
| } | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NSViewComponentPeer) | |||
| @@ -26,7 +26,7 @@ | |||
| namespace juce | |||
| { | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new", "-Wdeprecated-declarations") | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") | |||
| extern NSMenu* createNSMenu (const PopupMenu&, const String& name, int topLevelMenuId, | |||
| int topLevelIndex, bool addDelegate); | |||
| @@ -87,7 +87,7 @@ struct StatusItemContainer : public Timer | |||
| }; | |||
| //============================================================================== | |||
| struct ButtonBasedStatusItem : public StatusItemContainer | |||
| struct API_AVAILABLE (macos (10.10)) ButtonBasedStatusItem : public StatusItemContainer | |||
| { | |||
| //============================================================================== | |||
| ButtonBasedStatusItem (SystemTrayIconComponent& iconComp, const Image& im) | |||
| @@ -384,7 +384,7 @@ public: | |||
| //============================================================================== | |||
| Pimpl (SystemTrayIconComponent& iconComp, const Image& im) | |||
| { | |||
| if (std::floor (NSFoundationVersionNumber) > NSFoundationVersionNumber10_10) | |||
| if (@available (macOS 10.10, *)) | |||
| statusItemHolder = std::make_unique<ButtonBasedStatusItem> (iconComp, im); | |||
| else | |||
| statusItemHolder = std::make_unique<ViewBasedStatusItem> (iconComp, im); | |||
| @@ -32,7 +32,7 @@ namespace juce | |||
| static NSURL* appendParametersToFileURL (const URL& url, NSURL* fileUrl) | |||
| { | |||
| if (@available (macOS 10.9, *)) | |||
| if (@available (macOS 10.10, *)) | |||
| { | |||
| const auto parameterNames = url.getParameterNames(); | |||
| const auto parameterValues = url.getParameterValues(); | |||
| @@ -263,7 +263,7 @@ private: | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| struct WebViewDelegateClass : public ObjCClass<NSObject> | |||
| struct API_AVAILABLE (macos (10.10)) WebViewDelegateClass : public ObjCClass<NSObject> | |||
| { | |||
| WebViewDelegateClass() : ObjCClass<NSObject> ("JUCEWebViewDelegate_") | |||
| { | |||
| @@ -339,7 +339,7 @@ private: | |||
| } | |||
| #if WKWEBVIEW_OPENPANEL_SUPPORTED | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
| API_AVAILABLE (macos (10.12)) | |||
| static void runOpenPanel (id, SEL, WKWebView*, WKOpenPanelParameters* parameters, WKFrameInfo*, | |||
| void (^completionHandler)(NSArray<NSURL*>*)) | |||
| { | |||
| @@ -402,7 +402,6 @@ private: | |||
| delete wrapper; | |||
| }); | |||
| } | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| }; | |||
| @@ -507,7 +506,7 @@ private: | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| class WKWebViewImpl : public WebViewBase | |||
| class API_AVAILABLE (macos (10.11)) WKWebViewImpl : public WebViewBase | |||
| { | |||
| public: | |||
| WKWebViewImpl (WebBrowserComponent* owner) | |||
| @@ -587,7 +586,7 @@ class WebBrowserComponent::Pimpl | |||
| public: | |||
| Pimpl (WebBrowserComponent* owner) | |||
| { | |||
| if (@available (macOS 10.10, *)) | |||
| if (@available (macOS 10.11, *)) | |||
| webView = std::make_unique<WKWebViewImpl> (owner); | |||
| #if JUCE_MAC | |||
| else | |||
| @@ -31,11 +31,7 @@ namespace juce | |||
| #elif JUCE_WINDOWS | |||
| #include "../native/juce_win32_CameraDevice.h" | |||
| #elif JUCE_IOS | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
| #include "../native/juce_ios_CameraDevice.h" | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #elif JUCE_ANDROID | |||
| #include "../native/juce_android_CameraDevice.h" | |||
| #endif | |||
| @@ -766,7 +766,7 @@ private: | |||
| //============================================================================== | |||
| #if JUCE_USE_NEW_CAMERA_API | |||
| class PhotoOutputDelegateClass : public ObjCClass<NSObject> | |||
| class API_AVAILABLE (ios (10.0)) PhotoOutputDelegateClass : public ObjCClass<NSObject> | |||
| { | |||
| public: | |||
| PhotoOutputDelegateClass() : ObjCClass<NSObject> ("PhotoOutputDelegateClass_") | |||
| @@ -820,6 +820,7 @@ private: | |||
| JUCE_CAMERA_LOG ("didFinishCaptureForSettings(), error = " + errorString); | |||
| } | |||
| API_AVAILABLE (ios (11.0)) | |||
| static void didFinishProcessingPhoto (id self, SEL, AVCapturePhotoOutput*, AVCapturePhoto* capturePhoto, NSError* error) | |||
| { | |||
| getOwner (self).takingPicture = false; | |||
| @@ -226,7 +226,7 @@ private: | |||
| { | |||
| JUCE_CAMERA_LOG (nsStringToJuce ([notification description])); | |||
| NSError* error = notification.userInfo[AVCaptureSessionErrorKey]; | |||
| NSError* error = [notification.userInfo objectForKey: AVCaptureSessionErrorKey]; | |||
| auto errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String(); | |||
| getOwner (self).cameraSessionRuntimeError (errorString); | |||
| } | |||
| @@ -244,8 +244,7 @@ private: | |||
| }; | |||
| #if JUCE_USE_NEW_CAMERA_API | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
| class PostCatalinaPhotoOutput : public ImageOutputBase | |||
| class API_AVAILABLE (macos (10.15)) PostCatalinaPhotoOutput : public ImageOutputBase | |||
| { | |||
| public: | |||
| PostCatalinaPhotoOutput() | |||
| @@ -329,7 +328,6 @@ private: | |||
| AVCapturePhotoOutput* imageOutput = nil; | |||
| std::unique_ptr<NSObject, NSObjectDeleter> delegate; | |||
| }; | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") | |||
| @@ -195,8 +195,15 @@ private: | |||
| public: | |||
| ~PlayerControllerBase() | |||
| { | |||
| detachPlayerStatusObserver(); | |||
| detachPlaybackObserver(); | |||
| // Derived classes must call detachPlayerStatusObserver() before destruction! | |||
| jassert (! playerStatusObserverAttached); | |||
| // Derived classes must call detachPlaybackObserver() before destruction! | |||
| jassert (! playbackObserverAttached); | |||
| // Note that it's unsafe to call detachPlayerStatusObserver and detachPlaybackObserver | |||
| // directly here, because those functions call into the derived class, which will have | |||
| // been destroyed at this point. | |||
| } | |||
| protected: | |||
| @@ -226,8 +233,8 @@ private: | |||
| if ([keyPath isEqualToString: nsStringLiteral ("rate")]) | |||
| { | |||
| auto oldRate = [change[NSKeyValueChangeOldKey] floatValue]; | |||
| auto newRate = [change[NSKeyValueChangeNewKey] floatValue]; | |||
| auto oldRate = [[change objectForKey: NSKeyValueChangeOldKey] floatValue]; | |||
| auto newRate = [[change objectForKey: NSKeyValueChangeNewKey] floatValue]; | |||
| if (oldRate == 0 && newRate != 0) | |||
| owner.playbackStarted(); | |||
| @@ -236,7 +243,7 @@ private: | |||
| } | |||
| else if ([keyPath isEqualToString: nsStringLiteral ("status")]) | |||
| { | |||
| auto status = [change[NSKeyValueChangeNewKey] intValue]; | |||
| auto status = [[change objectForKey: NSKeyValueChangeNewKey] intValue]; | |||
| if (status == AVPlayerStatusFailed) | |||
| owner.errorOccurred(); | |||
| @@ -329,8 +336,8 @@ private: | |||
| auto* urlAsset = (AVURLAsset*) playerItem.asset; | |||
| URL url (nsStringToJuce (urlAsset.URL.absoluteString)); | |||
| auto oldStatus = [change[NSKeyValueChangeOldKey] intValue]; | |||
| auto newStatus = [change[NSKeyValueChangeNewKey] intValue]; | |||
| auto oldStatus = [[change objectForKey: NSKeyValueChangeOldKey] intValue]; | |||
| auto newStatus = [[change objectForKey: NSKeyValueChangeNewKey] intValue]; | |||
| // Ignore spurious notifications | |||
| if (oldStatus == newStatus) | |||
| @@ -481,6 +488,8 @@ private: | |||
| forKeyPath: nsStringLiteral ("status") | |||
| options: NSKeyValueObservingOptionNew | |||
| context: this]; | |||
| playerStatusObserverAttached = true; | |||
| } | |||
| void detachPlayerStatusObserver() | |||
| @@ -495,6 +504,8 @@ private: | |||
| forKeyPath: nsStringLiteral ("status") | |||
| context: this]; | |||
| } | |||
| playerStatusObserverAttached = false; | |||
| } | |||
| void attachPlaybackObserver() | |||
| @@ -505,6 +516,8 @@ private: | |||
| name: AVPlayerItemDidPlayToEndTimeNotification | |||
| object: [crtp().getPlayer() currentItem]]; | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| playbackObserverAttached = true; | |||
| } | |||
| void detachPlaybackObserver() | |||
| @@ -512,6 +525,8 @@ private: | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector") | |||
| [[NSNotificationCenter defaultCenter] removeObserver: playerItemPlaybackStatusObserver.get()]; | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| playbackObserverAttached = false; | |||
| } | |||
| private: | |||
| @@ -556,6 +571,8 @@ private: | |||
| owner.playbackStopped(); | |||
| } | |||
| bool playerStatusObserverAttached = false, playbackObserverAttached = false; | |||
| JUCE_DECLARE_WEAK_REFERENCEABLE (PlayerControllerBase) | |||
| }; | |||
| @@ -572,38 +589,21 @@ private: | |||
| useNativeControls = false; | |||
| #endif | |||
| if (useNativeControls) | |||
| wrappedPlayer = [&]() -> std::unique_ptr<WrappedPlayer> | |||
| { | |||
| #if ! JUCE_32BIT | |||
| playerView = [[AVPlayerView alloc] init]; | |||
| if (@available (macOS 10.9, *)) | |||
| if (useNativeControls) | |||
| return std::make_unique<WrappedPlayerView>(); | |||
| #endif | |||
| } | |||
| else | |||
| { | |||
| view = [[NSView alloc] init]; | |||
| playerLayer = [[AVPlayerLayer alloc] init]; | |||
| [view setLayer: playerLayer]; | |||
| } | |||
| } | |||
| ~PlayerController() | |||
| { | |||
| #if JUCE_32BIT | |||
| [view release]; | |||
| [playerLayer release]; | |||
| #else | |||
| [playerView release]; | |||
| #endif | |||
| return std::make_unique<WrappedPlayerLayer> (); | |||
| }(); | |||
| } | |||
| NSView* getView() | |||
| { | |||
| #if ! JUCE_32BIT | |||
| if (useNativeControls) | |||
| return playerView; | |||
| #endif | |||
| return view; | |||
| return wrappedPlayer->getView(); | |||
| } | |||
| Result load (NSURL* url) | |||
| @@ -629,12 +629,7 @@ private: | |||
| detachPlayerStatusObserver(); | |||
| detachPlaybackObserver(); | |||
| #if ! JUCE_32BIT | |||
| if (useNativeControls) | |||
| [playerView setPlayer: player]; | |||
| else | |||
| #endif | |||
| [playerLayer setPlayer: player]; | |||
| wrappedPlayer->setPlayer (player); | |||
| if (player != nil) | |||
| { | |||
| @@ -645,21 +640,46 @@ private: | |||
| AVPlayer* getPlayer() const | |||
| { | |||
| #if ! JUCE_32BIT | |||
| if (useNativeControls) | |||
| return [playerView player]; | |||
| #endif | |||
| return [playerLayer player]; | |||
| return wrappedPlayer->getPlayer(); | |||
| } | |||
| private: | |||
| NSView* view = nil; | |||
| AVPlayerLayer* playerLayer = nil; | |||
| struct WrappedPlayer | |||
| { | |||
| virtual ~WrappedPlayer() = default; | |||
| virtual NSView* getView() const = 0; | |||
| virtual AVPlayer* getPlayer() const = 0; | |||
| virtual void setPlayer (AVPlayer*) = 0; | |||
| }; | |||
| class WrappedPlayerLayer : public WrappedPlayer | |||
| { | |||
| public: | |||
| WrappedPlayerLayer () { [view.get() setLayer: playerLayer.get()]; } | |||
| NSView* getView() const override { return view.get(); } | |||
| AVPlayer* getPlayer() const override { return [playerLayer.get() player]; } | |||
| void setPlayer (AVPlayer* player) override { [playerLayer.get() setPlayer: player]; } | |||
| private: | |||
| NSUniquePtr<NSView> view { [[NSView alloc] init] }; | |||
| NSUniquePtr<AVPlayerLayer> playerLayer { [[AVPlayerLayer alloc] init] }; | |||
| }; | |||
| #if ! JUCE_32BIT | |||
| // 32-bit builds don't have AVPlayerView | |||
| AVPlayerView* playerView = nil; | |||
| class API_AVAILABLE (macos (10.9)) WrappedPlayerView : public WrappedPlayer | |||
| { | |||
| public: | |||
| WrappedPlayerView() = default; | |||
| NSView* getView() const override { return playerView.get(); } | |||
| AVPlayer* getPlayer() const override { return [playerView.get() player]; } | |||
| void setPlayer (AVPlayer* player) override { [playerView.get() setPlayer: player]; } | |||
| private: | |||
| NSUniquePtr<AVPlayerView> playerView { [[AVPlayerView alloc] init] }; | |||
| }; | |||
| #endif | |||
| std::unique_ptr<WrappedPlayer> wrappedPlayer; | |||
| }; | |||
| #else | |||
| //============================================================================== | |||
| @@ -716,13 +736,19 @@ private: | |||
| void setPlayer (AVPlayer* playerToUse) | |||
| { | |||
| detachPlayerStatusObserver(); | |||
| detachPlaybackObserver(); | |||
| if (useNativeControls) | |||
| [playerViewController.get() setPlayer: playerToUse]; | |||
| else | |||
| [playerLayer.get() setPlayer: playerToUse]; | |||
| attachPlayerStatusObserver(); | |||
| attachPlaybackObserver(); | |||
| if (playerToUse != nil) | |||
| { | |||
| attachPlayerStatusObserver(); | |||
| attachPlaybackObserver(); | |||
| } | |||
| } | |||
| private: | |||