diff --git a/docs/CMake API.md b/docs/CMake API.md index fb50fe4e70..3e9b61209e 100644 --- a/docs/CMake API.md +++ b/docs/CMake API.md @@ -377,6 +377,11 @@ attributes directly to these creation functions, rather than adding them later. is specified, then that image will be used for all icon resolutions. If both arguments are specified, then the appropriate image will be picked for each icon resolution. +`ICON_COMPOSER_BUNDLE` +- An Icon Composer bundle used for MacOS and iOS builds. This argument takes precedence over the + ICON_BIG and ICON_SMALL settings with Xcode versions 26 and later. Older versions of Xcode will + continue to use ICON_BIG and ICON_SMALL, even if this argument is specified. + `COMPANY_COPYRIGHT` - Copyright text which will be added to the app/plugin's Info.plist. The value of this argument will be inherited from the `JUCE_COMPANY_COPYRIGHT` property, so if you want to use the same diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index fa9f742145..21280eb281 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -56,6 +56,9 @@ add_library( ${BINARY_NAME} "../../../Source/UI/MainComponent.h" "../../../Source/UI/SettingsContent.h" "../../../Source/Main.cpp" + "../../../Source/AppIcon.icon/Assets/demorunnerbg.svg" + "../../../Source/AppIcon.icon/Assets/demorunnerplay.svg" + "../../../Source/AppIcon.icon/icon.json" "../../../Source/JUCEAppIcon.png" "../../../../../modules/juce_analytics/analytics/juce_Analytics.cpp" "../../../../../modules/juce_analytics/analytics/juce_Analytics.h" @@ -2777,6 +2780,9 @@ set_source_files_properties( "../../../Source/UI/DemoContentComponent.h" "../../../Source/UI/MainComponent.h" "../../../Source/UI/SettingsContent.h" + "../../../Source/AppIcon.icon/Assets/demorunnerbg.svg" + "../../../Source/AppIcon.icon/Assets/demorunnerplay.svg" + "../../../Source/AppIcon.icon/icon.json" "../../../Source/JUCEAppIcon.png" "../../../../../modules/juce_analytics/analytics/juce_Analytics.cpp" "../../../../../modules/juce_analytics/analytics/juce_Analytics.h" diff --git a/examples/DemoRunner/Builds/MacOSX/Icon.icns b/examples/DemoRunner/Builds/MacOSX/AppIcon.icns similarity index 100% rename from examples/DemoRunner/Builds/MacOSX/Icon.icns rename to examples/DemoRunner/Builds/MacOSX/AppIcon.icns diff --git a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj index 5c5b1586b3..78e7ddfd3b 100644 --- a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj @@ -35,11 +35,12 @@ 5E4310B3F6BB639875D3E9B8 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = 49ECA8B998B339A083674A22; }; 611298FAC1A543BDD10D4C41 /* include_juce_box2d.cpp */ = {isa = PBXBuildFile; fileRef = 4DF215D350FFE5E119CBA7E5; }; 63A2F309E55DAC206E9B97E3 /* App */ = {isa = PBXBuildFile; fileRef = CFF2BBEB242CC8B3B904B5F9; }; + 675BFB499A7E0AAD2614F529 /* AppIcon.icns */ = {isa = PBXBuildFile; fileRef = 68A0F49281B13E51489A6874; }; 6A61CBB4E39BFD392D97528F /* CoreMIDI.framework */ = {isa = PBXBuildFile; fileRef = 61AE09C749B007B70A265D9B; }; 6B5560283DEEBD6DD2D6C984 /* include_juce_dsp.mm */ = {isa = PBXBuildFile; fileRef = C1E93FAF6C68A40A664422CD; }; 712D81867EC698463252FA79 /* include_juce_audio_utils.mm */ = {isa = PBXBuildFile; fileRef = EDDA01B246C6128CAF7A2914; }; 71DF4F5EB4C8305688416725 /* DemoContentComponent.cpp */ = {isa = PBXBuildFile; fileRef = E5BFC17E682AB426D203B3E6; }; - 75DB074DBAE04408A0A917B7 /* Icon.icns */ = {isa = PBXBuildFile; fileRef = E0A3F113BC27B7B4D6F1D693; }; + 7648F1C856593D10FE42CF80 /* AppIcon.icon */ = {isa = PBXBuildFile; fileRef = FCF36E57A88C67133AFC06A4; }; 7B4163348896EB1B86B15160 /* AVFoundation.framework */ = {isa = PBXBuildFile; fileRef = DC192EFA899E6CBE6B5CD394; }; 8584640341100008744861A5 /* IOKit.framework */ = {isa = PBXBuildFile; fileRef = 71A91516AFD980FEE694C0E1; }; 89AD16514B1F4133FFEA1DF9 /* WebKit.framework */ = {isa = PBXBuildFile; fileRef = 96D99A08027CA35D6A4E5CFD; }; @@ -114,14 +115,17 @@ 61AE09C749B007B70A265D9B /* CoreMIDI.framework */ /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; 640B7C54D35F5DF408327886 /* include_juce_core_CompilationTime.cpp */ /* include_juce_core_CompilationTime.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_core_CompilationTime.cpp; path = ../../JuceLibraryCode/include_juce_core_CompilationTime.cpp; sourceTree = SOURCE_ROOT; }; 651ECE3C7BA845DDCFEE48F3 /* juce_osc */ /* juce_osc */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_osc; path = ../../../../modules/juce_osc; sourceTree = SOURCE_ROOT; }; + 6710661E16D6BD412524EB52 /* demorunnerbg.svg */ /* demorunnerbg.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = demorunnerbg.svg; path = ../../Source/AppIcon.icon/Assets/demorunnerbg.svg; sourceTree = SOURCE_ROOT; }; 6847A9B2C5E3C2ED56D8D4E7 /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; }; 685A261BE78585293F3EAD36 /* Assets */ /* Assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Assets; path = ../../../Assets; sourceTree = ""; }; + 68A0F49281B13E51489A6874 /* AppIcon.icns */ /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = AppIcon.icns; path = AppIcon.icns; sourceTree = SOURCE_ROOT; }; 6C198AF93E1F6E682189E2F6 /* juce_opengl */ /* juce_opengl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_opengl; path = ../../../../modules/juce_opengl; sourceTree = SOURCE_ROOT; }; 6C2C1AC86623F457427965EF /* juce_box2d */ /* juce_box2d */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_box2d; path = ../../../../modules/juce_box2d; sourceTree = SOURCE_ROOT; }; 6C5E26B4D28F8450435B8AE1 /* include_juce_cryptography.mm */ /* include_juce_cryptography.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_cryptography.mm; path = ../../JuceLibraryCode/include_juce_cryptography.mm; sourceTree = SOURCE_ROOT; }; 71A91516AFD980FEE694C0E1 /* IOKit.framework */ /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; 7A5AAE9EE573FC6105CC4AAC /* SettingsContent.h */ /* SettingsContent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SettingsContent.h; path = ../../Source/UI/SettingsContent.h; sourceTree = SOURCE_ROOT; }; 7B3243C92248D379A0489AA4 /* Utilities */ /* Utilities */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Utilities; path = ../../../Utilities; sourceTree = ""; }; + 7D51C1884CE8FB235D31921B /* icon.json */ /* icon.json */ = {isa = PBXFileReference; lastKnownFileType = file.json; name = icon.json; path = ../../Source/AppIcon.icon/icon.json; sourceTree = SOURCE_ROOT; }; 8447FC9882D85E6DAF0A4852 /* juce_animation */ /* juce_animation */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_animation; path = ../../../../modules/juce_animation; sourceTree = SOURCE_ROOT; }; 877340409339CA0F561FB566 /* include_juce_audio_processors_headless_lv2_libs.cpp */ /* include_juce_audio_processors_headless_lv2_libs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_headless_lv2_libs.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_headless_lv2_libs.cpp; sourceTree = SOURCE_ROOT; }; 87D5F938A115568F9CF3BE5A /* Security.framework */ /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; @@ -147,11 +151,11 @@ C64CA4082EC267CDD63E6623 /* juce_javascript */ /* juce_javascript */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_javascript; path = ../../../../modules/juce_javascript; sourceTree = SOURCE_ROOT; }; CB4C64BACC1CA4AAD6D69565 /* include_juce_animation.cpp */ /* include_juce_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_animation.cpp; path = ../../JuceLibraryCode/include_juce_animation.cpp; sourceTree = SOURCE_ROOT; }; CCC8AEBCE55002F970222BAD /* include_juce_graphics_Sheenbidi.c */ /* include_juce_graphics_Sheenbidi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = include_juce_graphics_Sheenbidi.c; path = ../../JuceLibraryCode/include_juce_graphics_Sheenbidi.c; sourceTree = SOURCE_ROOT; }; + CDFBB9C6A2AE67CE9EE00949 /* demorunnerplay.svg */ /* demorunnerplay.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = demorunnerplay.svg; path = ../../Source/AppIcon.icon/Assets/demorunnerplay.svg; sourceTree = SOURCE_ROOT; }; CE38E6469D98462A2C22C915 /* include_juce_osc.cpp */ /* include_juce_osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_osc.cpp; path = ../../JuceLibraryCode/include_juce_osc.cpp; sourceTree = SOURCE_ROOT; }; CFF2BBEB242CC8B3B904B5F9 /* App */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoRunner.app; sourceTree = BUILT_PRODUCTS_DIR; }; DC192EFA899E6CBE6B5CD394 /* AVFoundation.framework */ /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; E061A1C75FA5722167FC4997 /* include_juce_audio_formats.mm */ /* include_juce_audio_formats.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_formats.mm; path = ../../JuceLibraryCode/include_juce_audio_formats.mm; sourceTree = SOURCE_ROOT; }; - E0A3F113BC27B7B4D6F1D693 /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; }; E5BFC17E682AB426D203B3E6 /* DemoContentComponent.cpp */ /* DemoContentComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoContentComponent.cpp; path = ../../Source/UI/DemoContentComponent.cpp; sourceTree = SOURCE_ROOT; }; E67AB94002886AF67437D6AE /* include_juce_audio_processors.mm */ /* include_juce_audio_processors.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_processors.mm; path = ../../JuceLibraryCode/include_juce_audio_processors.mm; sourceTree = SOURCE_ROOT; }; EB68BD1224CD9748BFA332C0 /* MainComponent.h */ /* MainComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/UI/MainComponent.h; sourceTree = SOURCE_ROOT; }; @@ -162,6 +166,7 @@ F5F2EA2238973488632FC322 /* include_juce_data_structures.mm */ /* include_juce_data_structures.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_data_structures.mm; path = ../../JuceLibraryCode/include_juce_data_structures.mm; sourceTree = SOURCE_ROOT; }; FB1FC613CE260140F1CFD21B /* juce_events */ /* juce_events */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_events; path = ../../../../modules/juce_events; sourceTree = SOURCE_ROOT; }; FCD0D758C5767944BEC29730 /* include_juce_events.mm */ /* include_juce_events.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_events.mm; path = ../../JuceLibraryCode/include_juce_events.mm; sourceTree = SOURCE_ROOT; }; + FCF36E57A88C67133AFC06A4 /* AppIcon.icon */ /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = file.icon; name = AppIcon.icon; path = ../../Source/AppIcon.icon; sourceTree = SOURCE_ROOT; }; FDC3CA8D1403C169659F7D8C /* juce_data_structures */ /* juce_data_structures */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_data_structures; path = ../../../../modules/juce_data_structures; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ @@ -195,6 +200,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2BAD3DB7D8D886E59B412094 /* Assets */ = { + isa = PBXGroup; + children = ( + 6710661E16D6BD412524EB52, + CDFBB9C6A2AE67CE9EE00949, + ); + name = Assets; + sourceTree = ""; + }; 4452EAA652B65A9AE648288C /* Frameworks */ = { isa = PBXGroup; children = ( @@ -293,6 +307,7 @@ CD575607FAA297480EE95F13, BB12537403CC24C02622582C, 260481E972425474BB8155B0, + B88D35BF4F1EAC840B967834, ECE79F1433E92BB6213C86F5, ); name = Source; @@ -319,6 +334,15 @@ name = DemoRunner; sourceTree = ""; }; + B88D35BF4F1EAC840B967834 /* AppIcon.icon */ = { + isa = PBXGroup; + children = ( + 2BAD3DB7D8D886E59B412094, + 7D51C1884CE8FB235D31921B, + ); + name = AppIcon.icon; + sourceTree = ""; + }; BB12537403CC24C02622582C /* UI */ = { isa = PBXGroup; children = ( @@ -361,7 +385,8 @@ 7B3243C92248D379A0489AA4, 4EC2782DE1779A130835B64D, 9672FCE6167ADB567A9EB2F8, - E0A3F113BC27B7B4D6F1D693, + 68A0F49281B13E51489A6874, + FCF36E57A88C67133AFC06A4, ); name = Resources; sourceTree = ""; @@ -447,7 +472,8 @@ 1BA301E39E29966719B710A1, E33E8FE2E7F8EC8EB4279F1B, 91CD2BCE4CA07E18229EB436, - 75DB074DBAE04408A0A917B7, + 675BFB499A7E0AAD2614F529, + 7648F1C856593D10FE42CF80, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -549,6 +575,7 @@ 69330F27DD2C71609336C7D2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -645,6 +672,7 @@ B18D059E5616FA729F764229 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; diff --git a/examples/DemoRunner/Builds/MacOSX/Info-App.plist b/examples/DemoRunner/Builds/MacOSX/Info-App.plist index 82487025e3..bbf0fff13f 100644 --- a/examples/DemoRunner/Builds/MacOSX/Info-App.plist +++ b/examples/DemoRunner/Builds/MacOSX/Info-App.plist @@ -12,7 +12,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - Icon.icns + AppIcon.icns CFBundleIdentifier com.rmsl.jucedemorunner CFBundleName diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj index f27228cc1e..d4be58b6e8 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj @@ -4912,6 +4912,9 @@ + + + diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters index 3b266c1187..f2c0827ae7 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters @@ -8,6 +8,12 @@ {67AC4BA4-ADB7-61F2-40EB-054BFA2565E9} + + {582D7890-88DE-64AF-4B99-546B272ADAC5} + + + {2E0E5C08-9649-C07C-383E-3497456B1834} + {8C2BA468-929C-4792-FBD2-3009E3068DD0} @@ -8939,6 +8945,15 @@ + + DemoRunner\Source\AppIcon.icon\Assets + + + DemoRunner\Source\AppIcon.icon\Assets + + + DemoRunner\Source\AppIcon.icon + DemoRunner\Source diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj index 781bd2acb8..d3978a8010 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj @@ -4912,6 +4912,9 @@ + + + diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters index f2acec7386..632c4bec36 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters @@ -8,6 +8,12 @@ {67AC4BA4-ADB7-61F2-40EB-054BFA2565E9} + + {582D7890-88DE-64AF-4B99-546B272ADAC5} + + + {2E0E5C08-9649-C07C-383E-3497456B1834} + {8C2BA468-929C-4792-FBD2-3009E3068DD0} @@ -8939,6 +8945,15 @@ + + DemoRunner\Source\AppIcon.icon\Assets + + + DemoRunner\Source\AppIcon.icon\Assets + + + DemoRunner\Source\AppIcon.icon + DemoRunner\Source diff --git a/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj index f76d6d36af..8c5d429792 100644 --- a/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj @@ -4912,6 +4912,9 @@ + + + diff --git a/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj.filters index d62f830969..bb04854235 100644 --- a/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj.filters @@ -8,6 +8,12 @@ {67AC4BA4-ADB7-61F2-40EB-054BFA2565E9} + + {582D7890-88DE-64AF-4B99-546B272ADAC5} + + + {2E0E5C08-9649-C07C-383E-3497456B1834} + {8C2BA468-929C-4792-FBD2-3009E3068DD0} @@ -8939,6 +8945,15 @@ + + DemoRunner\Source\AppIcon.icon\Assets + + + DemoRunner\Source\AppIcon.icon\Assets + + + DemoRunner\Source\AppIcon.icon + DemoRunner\Source diff --git a/examples/DemoRunner/Builds/iOS/Icon.icns b/examples/DemoRunner/Builds/iOS/AppIcon.icns similarity index 100% rename from examples/DemoRunner/Builds/iOS/Icon.icns rename to examples/DemoRunner/Builds/iOS/AppIcon.icns diff --git a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj index 35b27ee3c2..bf134a4629 100644 --- a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj @@ -35,11 +35,12 @@ 611298FAC1A543BDD10D4C41 /* include_juce_box2d.cpp */ = {isa = PBXBuildFile; fileRef = 4DF215D350FFE5E119CBA7E5; }; 63A2F309E55DAC206E9B97E3 /* App */ = {isa = PBXBuildFile; fileRef = CFF2BBEB242CC8B3B904B5F9; }; 6658EEC5F9D63D3419EB7098 /* CoreServices.framework */ = {isa = PBXBuildFile; fileRef = E07FC48041C3E9F9721F3BCE; }; + 675BFB499A7E0AAD2614F529 /* AppIcon.icns */ = {isa = PBXBuildFile; fileRef = 68A0F49281B13E51489A6874; }; 6A61CBB4E39BFD392D97528F /* CoreMIDI.framework */ = {isa = PBXBuildFile; fileRef = 61AE09C749B007B70A265D9B; }; 6B5560283DEEBD6DD2D6C984 /* include_juce_dsp.mm */ = {isa = PBXBuildFile; fileRef = C1E93FAF6C68A40A664422CD; }; 712D81867EC698463252FA79 /* include_juce_audio_utils.mm */ = {isa = PBXBuildFile; fileRef = EDDA01B246C6128CAF7A2914; }; 71DF4F5EB4C8305688416725 /* DemoContentComponent.cpp */ = {isa = PBXBuildFile; fileRef = E5BFC17E682AB426D203B3E6; }; - 75DB074DBAE04408A0A917B7 /* Icon.icns */ = {isa = PBXBuildFile; fileRef = E0A3F113BC27B7B4D6F1D693; }; + 7648F1C856593D10FE42CF80 /* AppIcon.icon */ = {isa = PBXBuildFile; fileRef = FCF36E57A88C67133AFC06A4; }; 7B4163348896EB1B86B15160 /* AVFoundation.framework */ = {isa = PBXBuildFile; fileRef = DC192EFA899E6CBE6B5CD394; }; 7F57DB52C3CEFDC26DDD38FC /* CoreImage.framework */ = {isa = PBXBuildFile; fileRef = B28EFB9D1DF0B6D6499A7DEF; }; 89AD16514B1F4133FFEA1DF9 /* WebKit.framework */ = {isa = PBXBuildFile; fileRef = 96D99A08027CA35D6A4E5CFD; }; @@ -111,14 +112,17 @@ 61AE09C749B007B70A265D9B /* CoreMIDI.framework */ /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; 640B7C54D35F5DF408327886 /* include_juce_core_CompilationTime.cpp */ /* include_juce_core_CompilationTime.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_core_CompilationTime.cpp; path = ../../JuceLibraryCode/include_juce_core_CompilationTime.cpp; sourceTree = SOURCE_ROOT; }; 651ECE3C7BA845DDCFEE48F3 /* juce_osc */ /* juce_osc */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_osc; path = ../../../../modules/juce_osc; sourceTree = SOURCE_ROOT; }; + 6710661E16D6BD412524EB52 /* demorunnerbg.svg */ /* demorunnerbg.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = demorunnerbg.svg; path = ../../Source/AppIcon.icon/Assets/demorunnerbg.svg; sourceTree = SOURCE_ROOT; }; 6847A9B2C5E3C2ED56D8D4E7 /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; }; 685A261BE78585293F3EAD36 /* Assets */ /* Assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Assets; path = ../../../Assets; sourceTree = ""; }; + 68A0F49281B13E51489A6874 /* AppIcon.icns */ /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = AppIcon.icns; path = AppIcon.icns; sourceTree = SOURCE_ROOT; }; 6C198AF93E1F6E682189E2F6 /* juce_opengl */ /* juce_opengl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_opengl; path = ../../../../modules/juce_opengl; sourceTree = SOURCE_ROOT; }; 6C2C1AC86623F457427965EF /* juce_box2d */ /* juce_box2d */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_box2d; path = ../../../../modules/juce_box2d; sourceTree = SOURCE_ROOT; }; 6C5E26B4D28F8450435B8AE1 /* include_juce_cryptography.mm */ /* include_juce_cryptography.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_cryptography.mm; path = ../../JuceLibraryCode/include_juce_cryptography.mm; sourceTree = SOURCE_ROOT; }; 76A157A111866670A4678F04 /* CoreGraphics.framework */ /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 7983C452610C1638B7E78F12 /* ImageIO.framework */ /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; 7A5AAE9EE573FC6105CC4AAC /* SettingsContent.h */ /* SettingsContent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SettingsContent.h; path = ../../Source/UI/SettingsContent.h; sourceTree = SOURCE_ROOT; }; + 7D51C1884CE8FB235D31921B /* icon.json */ /* icon.json */ = {isa = PBXFileReference; lastKnownFileType = file.json; name = icon.json; path = ../../Source/AppIcon.icon/icon.json; sourceTree = SOURCE_ROOT; }; 7FBD555B32197FEACDFF5AFB /* LaunchScreen.storyboard */ /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = LaunchScreen.storyboard; sourceTree = SOURCE_ROOT; }; 8135645508EEFDBDCDF2ADC6 /* Images.xcassets */ /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = DemoRunner/Images.xcassets; sourceTree = SOURCE_ROOT; }; 8447FC9882D85E6DAF0A4852 /* juce_animation */ /* juce_animation */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_animation; path = ../../../../modules/juce_animation; sourceTree = SOURCE_ROOT; }; @@ -146,12 +150,12 @@ C64CA4082EC267CDD63E6623 /* juce_javascript */ /* juce_javascript */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_javascript; path = ../../../../modules/juce_javascript; sourceTree = SOURCE_ROOT; }; CB4C64BACC1CA4AAD6D69565 /* include_juce_animation.cpp */ /* include_juce_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_animation.cpp; path = ../../JuceLibraryCode/include_juce_animation.cpp; sourceTree = SOURCE_ROOT; }; CCC8AEBCE55002F970222BAD /* include_juce_graphics_Sheenbidi.c */ /* include_juce_graphics_Sheenbidi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = include_juce_graphics_Sheenbidi.c; path = ../../JuceLibraryCode/include_juce_graphics_Sheenbidi.c; sourceTree = SOURCE_ROOT; }; + CDFBB9C6A2AE67CE9EE00949 /* demorunnerplay.svg */ /* demorunnerplay.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = demorunnerplay.svg; path = ../../Source/AppIcon.icon/Assets/demorunnerplay.svg; sourceTree = SOURCE_ROOT; }; CE38E6469D98462A2C22C915 /* include_juce_osc.cpp */ /* include_juce_osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_osc.cpp; path = ../../JuceLibraryCode/include_juce_osc.cpp; sourceTree = SOURCE_ROOT; }; CFF2BBEB242CC8B3B904B5F9 /* App */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoRunner.app; sourceTree = BUILT_PRODUCTS_DIR; }; DC192EFA899E6CBE6B5CD394 /* AVFoundation.framework */ /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; E061A1C75FA5722167FC4997 /* include_juce_audio_formats.mm */ /* include_juce_audio_formats.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_formats.mm; path = ../../JuceLibraryCode/include_juce_audio_formats.mm; sourceTree = SOURCE_ROOT; }; E07FC48041C3E9F9721F3BCE /* CoreServices.framework */ /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; - E0A3F113BC27B7B4D6F1D693 /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; }; E5BFC17E682AB426D203B3E6 /* DemoContentComponent.cpp */ /* DemoContentComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoContentComponent.cpp; path = ../../Source/UI/DemoContentComponent.cpp; sourceTree = SOURCE_ROOT; }; E67AB94002886AF67437D6AE /* include_juce_audio_processors.mm */ /* include_juce_audio_processors.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_processors.mm; path = ../../JuceLibraryCode/include_juce_audio_processors.mm; sourceTree = SOURCE_ROOT; }; EB68BD1224CD9748BFA332C0 /* MainComponent.h */ /* MainComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/UI/MainComponent.h; sourceTree = SOURCE_ROOT; }; @@ -163,6 +167,7 @@ F90C8B0233A54F1445343F67 /* UIKit.framework */ /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; FB1FC613CE260140F1CFD21B /* juce_events */ /* juce_events */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_events; path = ../../../../modules/juce_events; sourceTree = SOURCE_ROOT; }; FCD0D758C5767944BEC29730 /* include_juce_events.mm */ /* include_juce_events.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_events.mm; path = ../../JuceLibraryCode/include_juce_events.mm; sourceTree = SOURCE_ROOT; }; + FCF36E57A88C67133AFC06A4 /* AppIcon.icon */ /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = file.icon; name = AppIcon.icon; path = ../../Source/AppIcon.icon; sourceTree = SOURCE_ROOT; }; FDC3CA8D1403C169659F7D8C /* juce_data_structures */ /* juce_data_structures */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_data_structures; path = ../../../../modules/juce_data_structures; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ @@ -199,6 +204,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2BAD3DB7D8D886E59B412094 /* Assets */ = { + isa = PBXGroup; + children = ( + 6710661E16D6BD412524EB52, + CDFBB9C6A2AE67CE9EE00949, + ); + name = Assets; + sourceTree = ""; + }; 4452EAA652B65A9AE648288C /* Frameworks */ = { isa = PBXGroup; children = ( @@ -300,6 +314,7 @@ CD575607FAA297480EE95F13, BB12537403CC24C02622582C, 260481E972425474BB8155B0, + B88D35BF4F1EAC840B967834, ECE79F1433E92BB6213C86F5, ); name = Source; @@ -326,6 +341,15 @@ name = DemoRunner; sourceTree = ""; }; + B88D35BF4F1EAC840B967834 /* AppIcon.icon */ = { + isa = PBXGroup; + children = ( + 2BAD3DB7D8D886E59B412094, + 7D51C1884CE8FB235D31921B, + ); + name = AppIcon.icon; + sourceTree = ""; + }; BB12537403CC24C02622582C /* UI */ = { isa = PBXGroup; children = ( @@ -365,7 +389,8 @@ 4EC2782DE1779A130835B64D, 8135645508EEFDBDCDF2ADC6, 7FBD555B32197FEACDFF5AFB, - E0A3F113BC27B7B4D6F1D693, + 68A0F49281B13E51489A6874, + FCF36E57A88C67133AFC06A4, ); name = Resources; sourceTree = ""; @@ -451,7 +476,8 @@ 47ED2C78B05B8A6A00E36C46, 8E63755144E29269FD82C897, 1C9AA8660D0DE180064ACF7B, - 75DB074DBAE04408A0A917B7, + 675BFB499A7E0AAD2614F529, + 7648F1C856593D10FE42CF80, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/examples/DemoRunner/CMakeLists.txt b/examples/DemoRunner/CMakeLists.txt index 7f5d77b85a..825b50c508 100644 --- a/examples/DemoRunner/CMakeLists.txt +++ b/examples/DemoRunner/CMakeLists.txt @@ -22,6 +22,7 @@ juce_add_gui_app(DemoRunner BUNDLE_ID com.juce.demorunner ICON_BIG ${CMAKE_CURRENT_SOURCE_DIR}/Source/JUCEAppIcon.png + ICON_COMPOSER_BUNDLE "${CMAKE_CURRENT_SOURCE_DIR}/Source/AppIcon.icon" NEEDS_CURL TRUE NEEDS_WEB_BROWSER TRUE MICROPHONE_PERMISSION_ENABLED TRUE diff --git a/examples/DemoRunner/DemoRunner.jucer b/examples/DemoRunner/DemoRunner.jucer index ca3b094cd5..852bcf2438 100644 --- a/examples/DemoRunner/DemoRunner.jucer +++ b/examples/DemoRunner/DemoRunner.jucer @@ -28,6 +28,15 @@ file="Source/UI/SettingsContent.h"/> + + + + + + + @@ -36,7 +45,7 @@ customXcodeResourceFolders="../Assets ../Audio ../DSP ../GUI ../Utilities" microphonePermissionNeeded="1" cameraPermissionNeeded="1" applicationCategory="public.app-category.developer-tools" iosBluetoothPermissionNeeded="1" extraDefs="JUCE_SILENCE_XCODE_15_LINKER_WARNING=1" - extraLinkerFlags="-Wl,-weak_reference_mismatches,weak"> + extraLinkerFlags="-Wl,-weak_reference_mismatches,weak" iconComposerIcon="a17hwW"> @@ -141,7 +150,7 @@ iosBluetoothPermissionNeeded="1" iosScreenOrientation="UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight,UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown" iPadScreenOrientation="UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight,UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown" UIRequiresFullScreen="0" extraDefs="JUCE_SILENCE_XCODE_15_LINKER_WARNING=1" - extraLinkerFlags="-Wl,-weak_reference_mismatches,weak"> + extraLinkerFlags="-Wl,-weak_reference_mismatches,weak" iconComposerIcon="a17hwW"> diff --git a/examples/DemoRunner/Source/AppIcon.icon/Assets/demorunnerbg.svg b/examples/DemoRunner/Source/AppIcon.icon/Assets/demorunnerbg.svg new file mode 100644 index 0000000000..7159d721a3 --- /dev/null +++ b/examples/DemoRunner/Source/AppIcon.icon/Assets/demorunnerbg.svg @@ -0,0 +1,46 @@ + + diff --git a/examples/DemoRunner/Source/AppIcon.icon/Assets/demorunnerplay.svg b/examples/DemoRunner/Source/AppIcon.icon/Assets/demorunnerplay.svg new file mode 100644 index 0000000000..c5c3bf4689 --- /dev/null +++ b/examples/DemoRunner/Source/AppIcon.icon/Assets/demorunnerplay.svg @@ -0,0 +1,14 @@ + + diff --git a/examples/DemoRunner/Source/AppIcon.icon/icon.json b/examples/DemoRunner/Source/AppIcon.icon/icon.json new file mode 100644 index 0000000000..71e2b35311 --- /dev/null +++ b/examples/DemoRunner/Source/AppIcon.icon/icon.json @@ -0,0 +1,50 @@ +{ + "fill" : "system-light", + "groups" : [ + { + "blur-material" : 0.5, + "hidden" : false, + "layers" : [ + { + "glass" : true, + "hidden" : false, + "image-name" : "demorunnerplay.svg", + "name" : "demorunnerplay", + "opacity" : 1 + } + ], + "opacity" : 1, + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "specular" : true, + "translucency" : { + "enabled" : true, + "value" : 0.6 + } + }, + { + "blur-material" : null, + "layers" : [ + { + "hidden" : false, + "image-name" : "demorunnerbg.svg", + "name" : "demorunnerbg" + } + ], + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "specular" : true, + "translucency" : { + "enabled" : false, + "value" : 0 + } + } + ], + "supported-platforms" : { + "squares" : "shared" + } +} \ No newline at end of file diff --git a/extras/AudioPluginHost/AudioPluginHost.jucer b/extras/AudioPluginHost/AudioPluginHost.jucer index dab54f9831..9f6d0c0aa4 100644 --- a/extras/AudioPluginHost/AudioPluginHost.jucer +++ b/extras/AudioPluginHost/AudioPluginHost.jucer @@ -9,7 +9,8 @@ microphonePermissionNeeded="1" sendAppleEventsPermissionNeeded="1" sendAppleEventsPermissionText="This is required for some third-party plug-ins to function correctly." customXcodeResourceFolders="../../examples/Assets" applicationCategory="public.app-category.developer-tools" - extraDefs="JUCE_SILENCE_XCODE_15_LINKER_WARNING=1" extraLinkerFlags="-Wl,-weak_reference_mismatches,weak"> + extraDefs="JUCE_SILENCE_XCODE_15_LINKER_WARNING=1" extraLinkerFlags="-Wl,-weak_reference_mismatches,weak" + iconComposerIcon="XbiViB"> + extraDefs="JUCE_SILENCE_XCODE_15_LINKER_WARNING=1" extraLinkerFlags="-Wl,-weak_reference_mismatches,weak" + iconComposerIcon="XbiViB"> @@ -213,6 +215,14 @@ + + + + + + + diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index 23517e343d..0a2a52f6c0 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -64,6 +64,9 @@ add_library( ${BINARY_NAME} "../../../Source/UI/MainHostWindow.h" "../../../Source/UI/PluginWindow.h" "../../../Source/HostStartup.cpp" + "../../../Source/AppIcon.icon/Assets/juceicon.svg" + "../../../Source/AppIcon.icon/Assets/pluginhostfg.svg" + "../../../Source/AppIcon.icon/icon.json" "../../../Source/JUCEAppIcon.png" "../../../../../examples/Assets/cassette_recorder.wav" "../../../../../examples/Assets/cello.wav" @@ -2552,6 +2555,9 @@ set_source_files_properties( "../../../Source/UI/GraphEditorPanel.h" "../../../Source/UI/MainHostWindow.h" "../../../Source/UI/PluginWindow.h" + "../../../Source/AppIcon.icon/Assets/juceicon.svg" + "../../../Source/AppIcon.icon/Assets/pluginhostfg.svg" + "../../../Source/AppIcon.icon/icon.json" "../../../Source/JUCEAppIcon.png" "../../../../../examples/Assets/cassette_recorder.wav" "../../../../../examples/Assets/cello.wav" diff --git a/extras/AudioPluginHost/Builds/MacOSX/Icon.icns b/extras/AudioPluginHost/Builds/MacOSX/AppIcon.icns similarity index 100% rename from extras/AudioPluginHost/Builds/MacOSX/Icon.icns rename to extras/AudioPluginHost/Builds/MacOSX/AppIcon.icns diff --git a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj index 5b5d2fedc8..3be5b19d5f 100644 --- a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj +++ b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj @@ -14,6 +14,7 @@ 09309BD494A05931864B6730 /* PluginGraph.cpp */ = {isa = PBXBuildFile; fileRef = 0B1CC8C80F6F99BDE7D6AEC9; }; 0F20A4AE04736634F097F5A6 /* include_juce_audio_utils.mm */ = {isa = PBXBuildFile; fileRef = B285CAB91AE928C476CA4F9C; }; 15CCE43D7DCFC649638919D4 /* include_juce_audio_basics.mm */ = {isa = PBXBuildFile; fileRef = 4C7D82F9274A4F9DBF11235C; }; + 17928C3B79A379E4C6029D3E /* AppIcon.icon */ = {isa = PBXBuildFile; fileRef = 8D0F99961E3A2FF09E7D2DEC; }; 19BE669F744C58C9B8742649 /* include_juce_graphics_Harfbuzz.cpp */ = {isa = PBXBuildFile; fileRef = E19F52E4D8928B850832C57F; }; 1AD3A3C7CD2D1F6DC4B65205 /* Metal.framework */ = {isa = PBXBuildFile; fileRef = 3E94492697BD64D0F185D60E; settings = { ATTRIBUTES = (Weak, ); }; }; 21D330A5B13178B12BEAFC3C /* AudioToolbox.framework */ = {isa = PBXBuildFile; fileRef = D4EBC17BDB7F88CCBC76730B; }; @@ -21,7 +22,6 @@ 2C3D221D2AA87F07B3F1044D /* include_juce_gui_basics.mm */ = {isa = PBXBuildFile; fileRef = 8FE7B37CDE0818DB27BDDEBD; }; 3154B78F0813DBD8A2C9234D /* include_juce_audio_processors_headless.mm */ = {isa = PBXBuildFile; fileRef = DAB71FA843B80756B5521A4E; }; 3E1689E23B9C85F03209DCEF /* GraphEditorPanel.cpp */ = {isa = PBXBuildFile; fileRef = 3D78A731234A833CA112AE45; }; - 443244451A0F2064D4767337 /* Icon.icns */ = {isa = PBXBuildFile; fileRef = 2A6983F82B13F9E8B10299AE; }; 4DB15177DDC357F4503F88CF /* WebKit.framework */ = {isa = PBXBuildFile; fileRef = B457EE687507BF1DEEA7581F; }; 5C4D406B924230F83E3580AD /* include_juce_audio_devices.mm */ = {isa = PBXBuildFile; fileRef = 65968EA1B476D71F14DE1D58; }; 68FBFDA1FE637B3EDA09A592 /* IOKit.framework */ = {isa = PBXBuildFile; fileRef = 4DF6E6E41E10965AD169143B; }; @@ -33,6 +33,7 @@ 8390CF6AEF2090680E4535F7 /* MetalKit.framework */ = {isa = PBXBuildFile; fileRef = 118ABD8E91DF2E400358D8CD; settings = { ATTRIBUTES = (Weak, ); }; }; 8DD3EB0C33E3E7B30C086034 /* include_juce_audio_processors_headless_ara.cpp */ = {isa = PBXBuildFile; fileRef = A83A4730C7AC85876911E149; }; 9056B642BEF870098DE344E5 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = 03FA420AACDD03D50AA16E4A; }; + 937574F3E6597DC4573F370E /* AppIcon.icns */ = {isa = PBXBuildFile; fileRef = 6FDEDC8A2EE1095C83DCAF09; }; 970A893BD34180916C9D01C4 /* ARAPlugin.cpp */ = {isa = PBXBuildFile; fileRef = 6A01D5F304346E0332264056; }; A0144A682BF4843C8CF53FE4 /* BinaryData.cpp */ = {isa = PBXBuildFile; fileRef = 6D107D7946DC5976B766345B; }; A02C9F4C4B840C27B6CAFEBD /* QuartzCore.framework */ = {isa = PBXBuildFile; fileRef = 89309C0C5F3269BD06BE7F27; }; @@ -64,9 +65,9 @@ 0B1CC8C80F6F99BDE7D6AEC9 /* PluginGraph.cpp */ /* PluginGraph.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginGraph.cpp; path = ../../Source/Plugins/PluginGraph.cpp; sourceTree = SOURCE_ROOT; }; 118ABD8E91DF2E400358D8CD /* MetalKit.framework */ /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; 11E6340DB6A6F68F5040101B /* reverb_ir.wav */ /* reverb_ir.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = reverb_ir.wav; path = ../../../../examples/Assets/reverb_ir.wav; sourceTree = SOURCE_ROOT; }; + 16F7FAF232A9DA67E656C776 /* juceicon.svg */ /* juceicon.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = juceicon.svg; path = ../../Source/AppIcon.icon/Assets/juceicon.svg; sourceTree = SOURCE_ROOT; }; 17A29FEB16D4439351511947 /* guitar_amp.wav */ /* guitar_amp.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = guitar_amp.wav; path = ../../../../examples/Assets/guitar_amp.wav; sourceTree = SOURCE_ROOT; }; 1DADAD8E34AAF4AFF1C69DC4 /* BinaryData.h */ /* BinaryData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = SOURCE_ROOT; }; - 2A6983F82B13F9E8B10299AE /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; }; 2BE6C2DFD6EBB9A89109AEB5 /* include_juce_gui_extra.mm */ /* include_juce_gui_extra.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_gui_extra.mm; path = ../../JuceLibraryCode/include_juce_gui_extra.mm; sourceTree = SOURCE_ROOT; }; 36689CA4EFC2AF183A0848AE /* include_juce_dsp.mm */ /* include_juce_dsp.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_dsp.mm; path = ../../JuceLibraryCode/include_juce_dsp.mm; sourceTree = SOURCE_ROOT; }; 37E4D5C341406B7072120006 /* include_juce_opengl.mm */ /* include_juce_opengl.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_opengl.mm; path = ../../JuceLibraryCode/include_juce_opengl.mm; sourceTree = SOURCE_ROOT; }; @@ -93,6 +94,8 @@ 6A01D5F304346E0332264056 /* ARAPlugin.cpp */ /* ARAPlugin.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ARAPlugin.cpp; path = ../../Source/Plugins/ARAPlugin.cpp; sourceTree = SOURCE_ROOT; }; 6A71B2BCAC4239072BC2BD7E /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; }; 6D107D7946DC5976B766345B /* BinaryData.cpp */ /* BinaryData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = SOURCE_ROOT; }; + 6FDEDC8A2EE1095C83DCAF09 /* AppIcon.icns */ /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = AppIcon.icns; path = AppIcon.icns; sourceTree = SOURCE_ROOT; }; + 7294E2139555BCA6E58BC4CB /* icon.json */ /* icon.json */ = {isa = PBXFileReference; lastKnownFileType = file.json; name = icon.json; path = ../../Source/AppIcon.icon/icon.json; sourceTree = SOURCE_ROOT; }; 7DA35787B5F6F7440D667CC8 /* RecentFilesMenuTemplate.nib */ /* RecentFilesMenuTemplate.nib */ = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = SOURCE_ROOT; }; 81C1A7770E082F56FE5A90A7 /* juce_opengl */ /* juce_opengl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_opengl; path = ../../../../modules/juce_opengl; sourceTree = SOURCE_ROOT; }; 82800DBA287EF4BAB13B42FB /* include_juce_graphics.mm */ /* include_juce_graphics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_graphics.mm; path = ../../JuceLibraryCode/include_juce_graphics.mm; sourceTree = SOURCE_ROOT; }; @@ -101,6 +104,7 @@ 87A7AAB053051C49EAF4EE88 /* InternalPlugins.cpp */ /* InternalPlugins.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InternalPlugins.cpp; path = ../../Source/Plugins/InternalPlugins.cpp; sourceTree = SOURCE_ROOT; }; 89309C0C5F3269BD06BE7F27 /* QuartzCore.framework */ /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 8AE5B3D0B3DE53FC27B9E88F /* include_juce_audio_processors_headless_lv2_libs.cpp */ /* include_juce_audio_processors_headless_lv2_libs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_headless_lv2_libs.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_headless_lv2_libs.cpp; sourceTree = SOURCE_ROOT; }; + 8D0F99961E3A2FF09E7D2DEC /* AppIcon.icon */ /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = file.icon; name = AppIcon.icon; path = ../../Source/AppIcon.icon; sourceTree = SOURCE_ROOT; }; 8D8BBC353637DA442C5575DA /* App */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioPluginHost.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8FE7B37CDE0818DB27BDDEBD /* include_juce_gui_basics.mm */ /* include_juce_gui_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_gui_basics.mm; path = ../../JuceLibraryCode/include_juce_gui_basics.mm; sourceTree = SOURCE_ROOT; }; 9320A145F2A8ACD687D6608E /* juce_dsp */ /* juce_dsp */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_dsp; path = ../../../../modules/juce_dsp; sourceTree = SOURCE_ROOT; }; @@ -126,6 +130,7 @@ C1981AC950A91C9050CE8358 /* Security.framework */ /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; C37B2E77AAB6C9E13729BF99 /* IOConfigurationWindow.cpp */ /* IOConfigurationWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = IOConfigurationWindow.cpp; path = ../../Source/Plugins/IOConfigurationWindow.cpp; sourceTree = SOURCE_ROOT; }; CA726B9AA0EC87B58D005C8D /* ARAPlugin.h */ /* ARAPlugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ARAPlugin.h; path = ../../Source/Plugins/ARAPlugin.h; sourceTree = SOURCE_ROOT; }; + CBAE7E81038388E1B80BA819 /* pluginhostfg.svg */ /* pluginhostfg.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = pluginhostfg.svg; path = ../../Source/AppIcon.icon/Assets/pluginhostfg.svg; sourceTree = SOURCE_ROOT; }; D313CF37B25D7FD313C4F336 /* OpenGL.framework */ /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; D4EBC17BDB7F88CCBC76730B /* AudioToolbox.framework */ /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; DAB71FA843B80756B5521A4E /* include_juce_audio_processors_headless.mm */ /* include_juce_audio_processors_headless.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_processors_headless.mm; path = ../../JuceLibraryCode/include_juce_audio_processors_headless.mm; sourceTree = SOURCE_ROOT; }; @@ -180,6 +185,15 @@ name = BinaryData; sourceTree = ""; }; + 59BB5CF70EC14DFD74F5ED85 /* AppIcon.icon */ = { + isa = PBXGroup; + children = ( + B91A28F8942AEAAD82FA11D7, + 7294E2139555BCA6E58BC4CB, + ); + name = AppIcon.icon; + sourceTree = ""; + }; 65BEFC705A89E5C8A9E35C97 /* Source */ = { isa = PBXGroup; children = ( @@ -275,7 +289,8 @@ 5F0ADA39C70C892758A941F6, 57DF618F1DE781556B7AFC32, 7DA35787B5F6F7440D667CC8, - 2A6983F82B13F9E8B10299AE, + 6FDEDC8A2EE1095C83DCAF09, + 8D0F99961E3A2FF09E7D2DEC, ); name = Resources; sourceTree = ""; @@ -286,11 +301,21 @@ 9F51E92D8C77FA9DDD1F7B10, DE7B77306553B1204071B39A, A66EFAC64B1B67B536C73415, + 59BB5CF70EC14DFD74F5ED85, B2A1E626CC120982805754F6, ); name = Source; sourceTree = ""; }; + B91A28F8942AEAAD82FA11D7 /* Assets */ = { + isa = PBXGroup; + children = ( + 16F7FAF232A9DA67E656C776, + CBAE7E81038388E1B80BA819, + ); + name = Assets; + sourceTree = ""; + }; D1C4804CD275CB57A5C89A2D /* Frameworks */ = { isa = PBXGroup; children = ( @@ -411,7 +436,8 @@ files = ( FE22E1AF24FA9ED43E983B81, D92C7BF86C9CCF6B4D14F809, - 443244451A0F2064D4767337, + 937574F3E6597DC4573F370E, + 17928C3B79A379E4C6029D3E, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -459,6 +485,7 @@ 49453CC5AD9F08D2738464AC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -598,6 +625,7 @@ C8B793AC1BEFBE7A99BE8352 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; diff --git a/extras/AudioPluginHost/Builds/MacOSX/Info-App.plist b/extras/AudioPluginHost/Builds/MacOSX/Info-App.plist index db47747e66..9b91e5ef5a 100644 --- a/extras/AudioPluginHost/Builds/MacOSX/Info-App.plist +++ b/extras/AudioPluginHost/Builds/MacOSX/Info-App.plist @@ -10,7 +10,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - Icon.icns + AppIcon.icns CFBundleIdentifier com.juce.audiopluginhost CFBundleName diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj index 7d5dc5cccb..047d39395a 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj @@ -4486,6 +4486,9 @@ + + + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters index eda89f1f30..4d0c262de7 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters @@ -8,6 +8,12 @@ {8C61EB30-11E6-7029-4CC8-56C52EB1F1C3} + + {94E5947C-3A5C-01B7-75B0-CA217E2F5AF8} + + + {DFD1926B-9FC8-19E6-7DE8-9B50A73FCEA8} + {57E59C1B-8971-243F-9A1A-8EABFD456232} @@ -8117,6 +8123,15 @@ + + AudioPluginHost\Source\AppIcon.icon\Assets + + + AudioPluginHost\Source\AppIcon.icon\Assets + + + AudioPluginHost\Source\AppIcon.icon + AudioPluginHost\Source diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj index 16e2d4e63e..d6f8546934 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj @@ -4486,6 +4486,9 @@ + + + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters index 6f023e54eb..14661e95f0 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters @@ -8,6 +8,12 @@ {8C61EB30-11E6-7029-4CC8-56C52EB1F1C3} + + {94E5947C-3A5C-01B7-75B0-CA217E2F5AF8} + + + {DFD1926B-9FC8-19E6-7DE8-9B50A73FCEA8} + {57E59C1B-8971-243F-9A1A-8EABFD456232} @@ -8117,6 +8123,15 @@ + + AudioPluginHost\Source\AppIcon.icon\Assets + + + AudioPluginHost\Source\AppIcon.icon\Assets + + + AudioPluginHost\Source\AppIcon.icon + AudioPluginHost\Source diff --git a/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj index b7af1a771d..359cdd8551 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj @@ -4486,6 +4486,9 @@ + + + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj.filters index a361b6a759..9e428bea7f 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj.filters @@ -8,6 +8,12 @@ {8C61EB30-11E6-7029-4CC8-56C52EB1F1C3} + + {94E5947C-3A5C-01B7-75B0-CA217E2F5AF8} + + + {DFD1926B-9FC8-19E6-7DE8-9B50A73FCEA8} + {57E59C1B-8971-243F-9A1A-8EABFD456232} @@ -8117,6 +8123,15 @@ + + AudioPluginHost\Source\AppIcon.icon\Assets + + + AudioPluginHost\Source\AppIcon.icon\Assets + + + AudioPluginHost\Source\AppIcon.icon + AudioPluginHost\Source diff --git a/extras/AudioPluginHost/Builds/iOS/Icon.icns b/extras/AudioPluginHost/Builds/iOS/AppIcon.icns similarity index 100% rename from extras/AudioPluginHost/Builds/iOS/Icon.icns rename to extras/AudioPluginHost/Builds/iOS/AppIcon.icns diff --git a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj index 7ec89fdbf7..d71d9d3f80 100644 --- a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj +++ b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj @@ -16,6 +16,7 @@ 0F20A4AE04736634F097F5A6 /* include_juce_audio_utils.mm */ = {isa = PBXBuildFile; fileRef = B285CAB91AE928C476CA4F9C; }; 1570FCC5CDB7A44DF0077E39 /* CoreGraphics.framework */ = {isa = PBXBuildFile; fileRef = 2F7D965A1284CEF0B20EB657; }; 15CCE43D7DCFC649638919D4 /* include_juce_audio_basics.mm */ = {isa = PBXBuildFile; fileRef = 4C7D82F9274A4F9DBF11235C; }; + 17928C3B79A379E4C6029D3E /* AppIcon.icon */ = {isa = PBXBuildFile; fileRef = 8D0F99961E3A2FF09E7D2DEC; }; 19BE669F744C58C9B8742649 /* include_juce_graphics_Harfbuzz.cpp */ = {isa = PBXBuildFile; fileRef = E19F52E4D8928B850832C57F; }; 1AD3A3C7CD2D1F6DC4B65205 /* Metal.framework */ = {isa = PBXBuildFile; fileRef = 3E94492697BD64D0F185D60E; settings = { ATTRIBUTES = (Weak, ); }; }; 21D330A5B13178B12BEAFC3C /* AudioToolbox.framework */ = {isa = PBXBuildFile; fileRef = D4EBC17BDB7F88CCBC76730B; }; @@ -24,7 +25,6 @@ 2C3D221D2AA87F07B3F1044D /* include_juce_gui_basics.mm */ = {isa = PBXBuildFile; fileRef = 8FE7B37CDE0818DB27BDDEBD; }; 3154B78F0813DBD8A2C9234D /* include_juce_audio_processors_headless.mm */ = {isa = PBXBuildFile; fileRef = DAB71FA843B80756B5521A4E; }; 3E1689E23B9C85F03209DCEF /* GraphEditorPanel.cpp */ = {isa = PBXBuildFile; fileRef = 3D78A731234A833CA112AE45; }; - 443244451A0F2064D4767337 /* Icon.icns */ = {isa = PBXBuildFile; fileRef = 2A6983F82B13F9E8B10299AE; }; 4DB15177DDC357F4503F88CF /* WebKit.framework */ = {isa = PBXBuildFile; fileRef = B457EE687507BF1DEEA7581F; }; 50AFD116DCA6EC228EFB322D /* UIKit.framework */ = {isa = PBXBuildFile; fileRef = F9EDC54DFBCF3A63E0AA5D73; }; 59F4F23BFFDAB414B4801F85 /* Images.xcassets */ = {isa = PBXBuildFile; fileRef = 29E0972229FB44D969035B4E; }; @@ -39,6 +39,7 @@ 8DD3EB0C33E3E7B30C086034 /* include_juce_audio_processors_headless_ara.cpp */ = {isa = PBXBuildFile; fileRef = A83A4730C7AC85876911E149; }; 9056B642BEF870098DE344E5 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = 03FA420AACDD03D50AA16E4A; }; 92EE84159C7027A137F06204 /* CoreText.framework */ = {isa = PBXBuildFile; fileRef = 66643EDF46AE8C5B7956B91D; }; + 937574F3E6597DC4573F370E /* AppIcon.icns */ = {isa = PBXBuildFile; fileRef = 6FDEDC8A2EE1095C83DCAF09; }; 970A893BD34180916C9D01C4 /* ARAPlugin.cpp */ = {isa = PBXBuildFile; fileRef = 6A01D5F304346E0332264056; }; A0144A682BF4843C8CF53FE4 /* BinaryData.cpp */ = {isa = PBXBuildFile; fileRef = 6D107D7946DC5976B766345B; }; A02C9F4C4B840C27B6CAFEBD /* QuartzCore.framework */ = {isa = PBXBuildFile; fileRef = 89309C0C5F3269BD06BE7F27; }; @@ -68,10 +69,10 @@ 0B1CC8C80F6F99BDE7D6AEC9 /* PluginGraph.cpp */ /* PluginGraph.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginGraph.cpp; path = ../../Source/Plugins/PluginGraph.cpp; sourceTree = SOURCE_ROOT; }; 118ABD8E91DF2E400358D8CD /* MetalKit.framework */ /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; 11E6340DB6A6F68F5040101B /* reverb_ir.wav */ /* reverb_ir.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = reverb_ir.wav; path = ../../../../examples/Assets/reverb_ir.wav; sourceTree = SOURCE_ROOT; }; + 16F7FAF232A9DA67E656C776 /* juceicon.svg */ /* juceicon.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = juceicon.svg; path = ../../Source/AppIcon.icon/Assets/juceicon.svg; sourceTree = SOURCE_ROOT; }; 17A29FEB16D4439351511947 /* guitar_amp.wav */ /* guitar_amp.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = guitar_amp.wav; path = ../../../../examples/Assets/guitar_amp.wav; sourceTree = SOURCE_ROOT; }; 1DADAD8E34AAF4AFF1C69DC4 /* BinaryData.h */ /* BinaryData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = SOURCE_ROOT; }; 29E0972229FB44D969035B4E /* Images.xcassets */ /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = AudioPluginHost/Images.xcassets; sourceTree = SOURCE_ROOT; }; - 2A6983F82B13F9E8B10299AE /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; }; 2BE6C2DFD6EBB9A89109AEB5 /* include_juce_gui_extra.mm */ /* include_juce_gui_extra.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_gui_extra.mm; path = ../../JuceLibraryCode/include_juce_gui_extra.mm; sourceTree = SOURCE_ROOT; }; 2F7D965A1284CEF0B20EB657 /* CoreGraphics.framework */ /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 36689CA4EFC2AF183A0848AE /* include_juce_dsp.mm */ /* include_juce_dsp.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_dsp.mm; path = ../../JuceLibraryCode/include_juce_dsp.mm; sourceTree = SOURCE_ROOT; }; @@ -99,6 +100,8 @@ 6A01D5F304346E0332264056 /* ARAPlugin.cpp */ /* ARAPlugin.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ARAPlugin.cpp; path = ../../Source/Plugins/ARAPlugin.cpp; sourceTree = SOURCE_ROOT; }; 6A71B2BCAC4239072BC2BD7E /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; }; 6D107D7946DC5976B766345B /* BinaryData.cpp */ /* BinaryData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = SOURCE_ROOT; }; + 6FDEDC8A2EE1095C83DCAF09 /* AppIcon.icns */ /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = AppIcon.icns; path = AppIcon.icns; sourceTree = SOURCE_ROOT; }; + 7294E2139555BCA6E58BC4CB /* icon.json */ /* icon.json */ = {isa = PBXFileReference; lastKnownFileType = file.json; name = icon.json; path = ../../Source/AppIcon.icon/icon.json; sourceTree = SOURCE_ROOT; }; 7D924E83DABA5B54205C52F4 /* CoreServices.framework */ /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; 81C1A7770E082F56FE5A90A7 /* juce_opengl */ /* juce_opengl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_opengl; path = ../../../../modules/juce_opengl; sourceTree = SOURCE_ROOT; }; 82800DBA287EF4BAB13B42FB /* include_juce_graphics.mm */ /* include_juce_graphics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_graphics.mm; path = ../../JuceLibraryCode/include_juce_graphics.mm; sourceTree = SOURCE_ROOT; }; @@ -108,6 +111,7 @@ 89309C0C5F3269BD06BE7F27 /* QuartzCore.framework */ /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 8AE5B3D0B3DE53FC27B9E88F /* include_juce_audio_processors_headless_lv2_libs.cpp */ /* include_juce_audio_processors_headless_lv2_libs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_headless_lv2_libs.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_headless_lv2_libs.cpp; sourceTree = SOURCE_ROOT; }; 8C6CD9119127C4AEBADABA25 /* UniformTypeIdentifiers.framework */ /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = SDKROOT; }; + 8D0F99961E3A2FF09E7D2DEC /* AppIcon.icon */ /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = file.icon; name = AppIcon.icon; path = ../../Source/AppIcon.icon; sourceTree = SOURCE_ROOT; }; 8D8BBC353637DA442C5575DA /* App */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plugin Host.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 8FE7B37CDE0818DB27BDDEBD /* include_juce_gui_basics.mm */ /* include_juce_gui_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_gui_basics.mm; path = ../../JuceLibraryCode/include_juce_gui_basics.mm; sourceTree = SOURCE_ROOT; }; 9320A145F2A8ACD687D6608E /* juce_dsp */ /* juce_dsp */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_dsp; path = ../../../../modules/juce_dsp; sourceTree = SOURCE_ROOT; }; @@ -132,6 +136,7 @@ B95B9D6774059DBB19F2B4E2 /* InternalPlugins.h */ /* InternalPlugins.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = InternalPlugins.h; path = ../../Source/Plugins/InternalPlugins.h; sourceTree = SOURCE_ROOT; }; C37B2E77AAB6C9E13729BF99 /* IOConfigurationWindow.cpp */ /* IOConfigurationWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = IOConfigurationWindow.cpp; path = ../../Source/Plugins/IOConfigurationWindow.cpp; sourceTree = SOURCE_ROOT; }; CA726B9AA0EC87B58D005C8D /* ARAPlugin.h */ /* ARAPlugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ARAPlugin.h; path = ../../Source/Plugins/ARAPlugin.h; sourceTree = SOURCE_ROOT; }; + CBAE7E81038388E1B80BA819 /* pluginhostfg.svg */ /* pluginhostfg.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = pluginhostfg.svg; path = ../../Source/AppIcon.icon/Assets/pluginhostfg.svg; sourceTree = SOURCE_ROOT; }; CFFA8E9A7820C5A27B4393C9 /* CoreImage.framework */ /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; }; D0026F0A29B486D87E92BB8B /* OpenGLES.framework */ /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; D4EBC17BDB7F88CCBC76730B /* AudioToolbox.framework */ /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; @@ -192,6 +197,15 @@ name = BinaryData; sourceTree = ""; }; + 59BB5CF70EC14DFD74F5ED85 /* AppIcon.icon */ = { + isa = PBXGroup; + children = ( + B91A28F8942AEAAD82FA11D7, + 7294E2139555BCA6E58BC4CB, + ); + name = AppIcon.icon; + sourceTree = ""; + }; 65BEFC705A89E5C8A9E35C97 /* Source */ = { isa = PBXGroup; children = ( @@ -288,7 +302,8 @@ 57DF618F1DE781556B7AFC32, 29E0972229FB44D969035B4E, F58EBA72DA53F75945B91321, - 2A6983F82B13F9E8B10299AE, + 6FDEDC8A2EE1095C83DCAF09, + 8D0F99961E3A2FF09E7D2DEC, ); name = Resources; sourceTree = ""; @@ -299,11 +314,21 @@ 9F51E92D8C77FA9DDD1F7B10, DE7B77306553B1204071B39A, A66EFAC64B1B67B536C73415, + 59BB5CF70EC14DFD74F5ED85, B2A1E626CC120982805754F6, ); name = Source; sourceTree = ""; }; + B91A28F8942AEAAD82FA11D7 /* Assets */ = { + isa = PBXGroup; + children = ( + 16F7FAF232A9DA67E656C776, + CBAE7E81038388E1B80BA819, + ); + name = Assets; + sourceTree = ""; + }; D1C4804CD275CB57A5C89A2D /* Frameworks */ = { isa = PBXGroup; children = ( @@ -428,7 +453,8 @@ FE22E1AF24FA9ED43E983B81, 59F4F23BFFDAB414B4801F85, E283262A07376A7EDFCEAF6F, - 443244451A0F2064D4767337, + 937574F3E6597DC4573F370E, + 17928C3B79A379E4C6029D3E, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/extras/AudioPluginHost/CMakeLists.txt b/extras/AudioPluginHost/CMakeLists.txt index 6f4144d463..fbf732a475 100644 --- a/extras/AudioPluginHost/CMakeLists.txt +++ b/extras/AudioPluginHost/CMakeLists.txt @@ -33,6 +33,7 @@ juce_add_gui_app(AudioPluginHost BUNDLE_ID com.juce.pluginhost ICON_BIG "${CMAKE_CURRENT_SOURCE_DIR}/Source/JUCEAppIcon.png" + ICON_COMPOSER_BUNDLE "${CMAKE_CURRENT_SOURCE_DIR}/Source/AppIcon.icon" MICROPHONE_PERMISSION_ENABLED TRUE PLUGINHOST_AU TRUE) diff --git a/extras/AudioPluginHost/Source/AppIcon.icon/Assets/juceicon.svg b/extras/AudioPluginHost/Source/AppIcon.icon/Assets/juceicon.svg new file mode 100644 index 0000000000..7159d721a3 --- /dev/null +++ b/extras/AudioPluginHost/Source/AppIcon.icon/Assets/juceicon.svg @@ -0,0 +1,46 @@ + + diff --git a/extras/AudioPluginHost/Source/AppIcon.icon/Assets/pluginhostfg.svg b/extras/AudioPluginHost/Source/AppIcon.icon/Assets/pluginhostfg.svg new file mode 100644 index 0000000000..40ed146e8b --- /dev/null +++ b/extras/AudioPluginHost/Source/AppIcon.icon/Assets/pluginhostfg.svg @@ -0,0 +1,15 @@ + + diff --git a/extras/AudioPluginHost/Source/AppIcon.icon/icon.json b/extras/AudioPluginHost/Source/AppIcon.icon/icon.json new file mode 100644 index 0000000000..419588f631 --- /dev/null +++ b/extras/AudioPluginHost/Source/AppIcon.icon/icon.json @@ -0,0 +1,47 @@ +{ + "fill" : "system-light", + "groups" : [ + { + "blur-material" : 0.5, + "hidden" : false, + "layers" : [ + { + "image-name" : "pluginhostfg.svg", + "name" : "pluginhostfg" + } + ], + "opacity" : 1, + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "specular" : true, + "translucency" : { + "enabled" : true, + "value" : 0.6 + } + }, + { + "blur-material" : null, + "layers" : [ + { + "hidden" : false, + "image-name" : "juceicon.svg", + "name" : "juceicon" + } + ], + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "specular" : true, + "translucency" : { + "enabled" : false, + "value" : 0 + } + } + ], + "supported-platforms" : { + "squares" : "shared" + } +} \ No newline at end of file diff --git a/extras/Build/CMake/JUCEUtils.cmake b/extras/Build/CMake/JUCEUtils.cmake index ba6f9b0e0e..4b6230a320 100644 --- a/extras/Build/CMake/JUCEUtils.cmake +++ b/extras/Build/CMake/JUCEUtils.cmake @@ -375,6 +375,7 @@ function(_juce_write_configure_time_info target) _juce_append_target_property(file_content SHOULD_ADD_STORYBOARD ${target} JUCE_SHOULD_ADD_STORYBOARD) _juce_append_target_property(file_content LAUNCH_STORYBOARD_FILE ${target} JUCE_LAUNCH_STORYBOARD_FILE) _juce_append_target_property(file_content ICON_FILE ${target} JUCE_ICON_FILE) + _juce_append_target_property(file_content ICON_COMPOSER_BUNDLE ${target} JUCE_ICON_COMPOSER_BUNDLE) _juce_append_target_property(file_content PROJECT_NAME ${target} JUCE_PRODUCT_NAME) _juce_append_target_property(file_content COMPANY_COPYRIGHT ${target} JUCE_COMPANY_COPYRIGHT) _juce_append_target_property(file_content COMPANY_NAME ${target} JUCE_COMPANY_NAME) @@ -636,6 +637,7 @@ function(_juce_generate_icon source_target dest_target) get_target_property(juce_library_code ${source_target} JUCE_GENERATED_SOURCES_DIRECTORY) get_target_property(juce_property_icon_big ${source_target} JUCE_ICON_BIG) get_target_property(juce_property_icon_small ${source_target} JUCE_ICON_SMALL) + get_target_property(juce_property_icon_composer_bundle ${source_target} JUCE_ICON_COMPOSER_BUNDLE) set(icon_args) @@ -647,8 +649,38 @@ function(_juce_generate_icon source_target dest_target) list(APPEND icon_args "${juce_property_icon_small}") endif() + get_filename_component(icon_composer_icon_name "${juce_property_icon_composer_bundle}" NAME_WE) + + if(juce_property_icon_composer_bundle AND (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS")) + set_source_files_properties("${juce_property_icon_composer_bundle}" + PROPERTIES + MACOSX_PACKAGE_LOCATION Resources + XCODE_EXPLICIT_FILE_TYPE folder.iconcomposer.icon + ) + + target_sources(${dest_target} PRIVATE "${juce_property_icon_composer_bundle}") + + set_target_properties(${dest_target} PROPERTIES + XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "${icon_composer_icon_name}") + + if((CMAKE_SYSTEM_NAME STREQUAL "Darwin") AND (NOT CMAKE_GENERATOR STREQUAL "Xcode")) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" + "-Dbundle_dir='$'" + "-Dicon_path=${juce_property_icon_composer_bundle}" + "-P" "${JUCE_CMAKE_UTILS_DIR}/generateXcassetsFromIcon.cmake" + VERBATIM) + endif() + endif() + set(generated_icon) + set(apple_app_icon_name "${icon_composer_icon_name}") + + if(NOT apple_app_icon_name) + set(apple_app_icon_name "AppIcon") + endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") if(NOT icon_args) return() @@ -656,9 +688,9 @@ function(_juce_generate_icon source_target dest_target) _juce_check_icon_files_exist("${icon_args}") - set(generated_icon "${juce_library_code}/Icon.icns") + set(generated_icon "${juce_library_code}/${apple_app_icon_name}.icns") # To get compiled properly, we need the icon before the plist is generated! - _juce_execute_juceaide(macicon "${generated_icon}" ${icon_args}) + _juce_execute_juceaide(macicon "${generated_icon}" "${apple_app_icon_name}" ${icon_args}) set_source_files_properties(${generated_icon} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") if(NOT icon_args) @@ -679,15 +711,19 @@ function(_juce_generate_icon source_target dest_target) set(generated_icon "${out_path}/Images.xcassets") # To get compiled properly, we need iOS assets at configure time! - _juce_execute_juceaide(iosassets "${out_path}" ${icon_args}) + _juce_execute_juceaide(iosassets "${out_path}" "${apple_app_icon_name}" ${icon_args}) endif() if(NOT generated_icon) return() endif() - set_target_properties(${dest_target} PROPERTIES - XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon") + get_target_property(existing_appicon ${dest_target} XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME) + + if(NOT existing_appicon) + set_target_properties(${dest_target} PROPERTIES + XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "${apple_app_icon_name}") + endif() get_target_property(add_storyboard ${source_target} JUCE_SHOULD_ADD_STORYBOARD) @@ -1998,6 +2034,7 @@ function(_juce_initialise_target target) REQUIRES_FULL_SCREEN # iOS only ICON_BIG ICON_SMALL + ICON_COMPOSER_BUNDLE # MacOS/iOS only COMPANY_COPYRIGHT COMPANY_NAME COMPANY_WEBSITE diff --git a/extras/Build/CMake/generateXcassetsFromIcon.cmake b/extras/Build/CMake/generateXcassetsFromIcon.cmake new file mode 100644 index 0000000000..b6849200f5 --- /dev/null +++ b/extras/Build/CMake/generateXcassetsFromIcon.cmake @@ -0,0 +1,91 @@ +# ============================================================================== +# +# This file is part of the JUCE framework. +# Copyright (c) Raw Material Software Limited +# +# JUCE is an open source framework subject to commercial or open source +# licensing. +# +# By downloading, installing, or using the JUCE framework, or combining the +# JUCE framework with any other source code, object code, content or any other +# copyrightable work, you agree to the terms of the JUCE End User Licence +# Agreement, and all incorporated terms including the JUCE Privacy Policy and +# the JUCE Website Terms of Service, as applicable, which will bind you. If you +# do not agree to the terms of these agreements, we will not license the JUCE +# framework to you, and you must discontinue the installation or download +# process and cease use of the JUCE framework. +# +# JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ +# JUCE Privacy Policy: https://juce.com/juce-privacy-policy +# JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ +# +# Or: +# +# You may also use this code under the terms of the AGPLv3: +# https://www.gnu.org/licenses/agpl-3.0.en.html +# +# THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL +# WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. +# +# ============================================================================== + +find_program(JUCE_XCRUN xcrun) + +if(NOT JUCE_XCRUN) + message(WARNING "No xcrun was found. Can't generate Icon Composer assets. Please ensure that the" + " Xcode command-line tools are installed.") + return() +endif() + +function(get_actool_version output_var) + execute_process( + COMMAND xcrun actool --version + OUTPUT_VARIABLE cmd_output + ERROR_VARIABLE cmd_error + RESULT_VARIABLE cmd_result + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if(NOT cmd_result EQUAL 0) + set(${output_var} "" PARENT_SCOPE) + return() + endif() + + string(REGEX REPLACE "[ \t\r\n]+" "" cmd_output "${cmd_output}") + string(REGEX MATCH "short-bundle-version[^<]*(.*)" match_found "${cmd_output}") + + if(match_found) + set(${output_var} "${CMAKE_MATCH_1}" PARENT_SCOPE) + else() + set(${output_var} "" PARENT_SCOPE) + endif() +endfunction() + +get_actool_version(actool_version) + +if(NOT "${actool_version}" VERSION_GREATER_EQUAL "26.0") + message(WARNING "Couldn't find actool with version 26.0 or greater." + " Icon Composer assets will not be generated.") + return() +endif() + +get_filename_component(icon_name "${icon_path}" NAME_WE) + +execute_process( + COMMAND "${JUCE_XCRUN}" actool + --compile "${bundle_dir}/Contents/Resources" + --platform macosx + --minimum-deployment-target 10.11 + --output-partial-info-plist /dev/null + --app-icon "${icon_name}" + "${icon_path}" + OUTPUT_VARIABLE result_stdout + ERROR_VARIABLE result_stderr + RESULT_VARIABLE result) + +if(result) + message(STATUS "${result_stdout}") + message(WARNING "${result_stderr}") + message(ERROR "Failed to generate Icon Composer asset. actool returned with exit code ${result}") +endif() diff --git a/extras/Build/juce_build_tools/utils/juce_Icons.cpp b/extras/Build/juce_build_tools/utils/juce_Icons.cpp index fe28b661ea..bf77ed4568 100644 --- a/extras/Build/juce_build_tools/utils/juce_Icons.cpp +++ b/extras/Build/juce_build_tools/utils/juce_Icons.cpp @@ -494,11 +494,12 @@ namespace juce::build_tools RelativePath createXcassetsFolderFromIcons (const Icons& icons, const File& targetFolder, - String projectFilenameRootString) + String projectFilenameRootString, + String iconName) { const auto assets = targetFolder.getChildFile (projectFilenameRootString) .getChildFile ("Images.xcassets"); - const auto iconSet = assets.getChildFile ("AppIcon.appiconset"); + const auto iconSet = assets.getChildFile (iconName + ".appiconset"); const auto launchImage = assets.getChildFile ("LaunchImage.launchimage"); overwriteFileIfDifferentOrThrow (iconSet.getChildFile ("Contents.json"), getiOSAppIconContents()); diff --git a/extras/Build/juce_build_tools/utils/juce_Icons.h b/extras/Build/juce_build_tools/utils/juce_Icons.h index 57bab078da..0e44ffc7c1 100644 --- a/extras/Build/juce_build_tools/utils/juce_Icons.h +++ b/extras/Build/juce_build_tools/utils/juce_Icons.h @@ -61,6 +61,7 @@ namespace juce::build_tools RelativePath createXcassetsFolderFromIcons (const Icons& icons, const File& targetFolder, - String projectFilenameRootString); + String projectFilenameRootString, + String iconName); } // namespace juce::build_tools diff --git a/extras/Build/juce_build_tools/utils/juce_PlistOptions.cpp b/extras/Build/juce_build_tools/utils/juce_PlistOptions.cpp index af02ab5687..11e273e66b 100644 --- a/extras/Build/juce_build_tools/utils/juce_PlistOptions.cpp +++ b/extras/Build/juce_build_tools/utils/juce_PlistOptions.cpp @@ -184,8 +184,13 @@ namespace juce::build_tools addPlistDictionaryKey (*dict, "CFBundleExecutable", executableName); if (! iOS) // (NB: on iOS this causes error ITMS-90032 during publishing) + { addPlistDictionaryKey (*dict, "CFBundleIconFile", iconFile.exists() ? iconFile.getFileName() : String()); + if (iconComposerIcon.exists()) + addPlistDictionaryKey (*dict, "CFBundleIconName", iconComposerIcon.getFileNameWithoutExtension()); + } + addPlistDictionaryKey (*dict, "CFBundleIdentifier", bundleIdentifier); addPlistDictionaryKey (*dict, "CFBundleName", projectName); diff --git a/extras/Build/juce_build_tools/utils/juce_PlistOptions.h b/extras/Build/juce_build_tools/utils/juce_PlistOptions.h index 80c9f3c584..3a6ce726bb 100644 --- a/extras/Build/juce_build_tools/utils/juce_PlistOptions.h +++ b/extras/Build/juce_build_tools/utils/juce_PlistOptions.h @@ -69,6 +69,7 @@ namespace juce::build_tools String localNetworkPermissionText; File iconFile; + File iconComposerIcon; String projectName; String marketingVersion; String currentProjectVersion; diff --git a/extras/Build/juceaide/Main.cpp b/extras/Build/juceaide/Main.cpp index 34e9847294..2ae3cf0a55 100644 --- a/extras/Build/juceaide/Main.cpp +++ b/extras/Build/juceaide/Main.cpp @@ -117,12 +117,26 @@ struct IconParseResults { juce::build_tools::Icons icons; juce::File output; + juce::String iconName; }; -IconParseResults parseIconArguments (juce::ArgumentList&& args) +enum class IconNameSpecified { - args.checkMinNumArguments (2); + no, + yes +}; + +IconParseResults parseIconArguments (juce::ArgumentList&& args, IconNameSpecified iconNameSpecified) +{ + args.checkMinNumArguments (iconNameSpecified == IconNameSpecified::yes ? 3 : 2); const auto output = args.arguments.removeAndReturn (0); + const auto iconName = std::invoke ([&] + { + if (iconNameSpecified == IconNameSpecified::yes) + return args.arguments.removeAndReturn (0).text; + + return juce::String{}; + }); const auto popFile = [&args]() -> juce::File { @@ -135,28 +149,29 @@ IconParseResults parseIconArguments (juce::ArgumentList&& args) const auto smallIcon = popFile(); const auto bigIcon = popFile(); - return { juce::build_tools::Icons::fromFilesSmallAndBig (smallIcon, bigIcon), output.text }; + return { juce::build_tools::Icons::fromFilesSmallAndBig (smallIcon, bigIcon), output.text, iconName }; } int writeMacIcon (juce::ArgumentList&& argumentList) { - const auto parsed = parseIconArguments (std::move (argumentList)); + const auto parsed = parseIconArguments (std::move (argumentList), IconNameSpecified::yes); juce::build_tools::writeMacIcon (parsed.icons, parsed.output); return 0; } int writeiOSAssets (juce::ArgumentList&& argumentList) { - const auto parsed = parseIconArguments (std::move (argumentList)); + const auto parsed = parseIconArguments (std::move (argumentList), IconNameSpecified::yes); juce::build_tools::createXcassetsFolderFromIcons (parsed.icons, parsed.output.getParentDirectory(), - parsed.output.getFileName()); + parsed.output.getFileName(), + parsed.iconName); return 0; } int writeWinIcon (juce::ArgumentList&& argumentList) { - const auto parsed = parseIconArguments (std::move (argumentList)); + const auto parsed = parseIconArguments (std::move (argumentList), IconNameSpecified::no); juce::build_tools::writeWinIcon (parsed.icons, parsed.output); return 0; } @@ -284,6 +299,7 @@ juce::build_tools::PlistOptions parsePlistOptions (const juce::File& file, updateField ("SUPPRESS_AU_PLIST_RESOURCE_USAGE", result.suppressResourceUsage); updateField ("BUNDLE_ID", result.bundleIdentifier); updateField ("ICON_FILE", result.iconFile); + updateField ("ICON_COMPOSER_BUNDLE", result.iconComposerIcon); result.type = type; diff --git a/extras/NetworkGraphicsDemo/Builds/MacOSX/Icon.icns b/extras/NetworkGraphicsDemo/Builds/MacOSX/AppIcon.icns similarity index 100% rename from extras/NetworkGraphicsDemo/Builds/MacOSX/Icon.icns rename to extras/NetworkGraphicsDemo/Builds/MacOSX/AppIcon.icns diff --git a/extras/NetworkGraphicsDemo/Builds/MacOSX/Info-App.plist b/extras/NetworkGraphicsDemo/Builds/MacOSX/Info-App.plist index 29f399f8ab..1515aede04 100644 --- a/extras/NetworkGraphicsDemo/Builds/MacOSX/Info-App.plist +++ b/extras/NetworkGraphicsDemo/Builds/MacOSX/Info-App.plist @@ -6,7 +6,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - Icon.icns + AppIcon.icns CFBundleIdentifier com.juce.NetworkGraphicsDemo CFBundleName diff --git a/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj b/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj index 14ef1fec11..3ebb93cb65 100644 --- a/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj +++ b/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 006DF460F8DF66EFFA80D968 /* Icon.icns */ = {isa = PBXBuildFile; fileRef = 70F1CAF3C4C561DD81E6AFC1; }; 0977FEC02DAF29438583198A /* include_juce_core.mm */ = {isa = PBXBuildFile; fileRef = 01E0EEF68A11C1CAF180E173; }; 0FA2A3321630EBE83E439D99 /* include_juce_cryptography.mm */ = {isa = PBXBuildFile; fileRef = AFF729977947528F3E4AAA96; }; 204FE224D562F0519DE438A4 /* include_juce_core_CompilationTime.cpp */ = {isa = PBXBuildFile; fileRef = BD85090C86849423E95A0014; }; @@ -20,6 +19,7 @@ 65B2C4ED19229E0EDC8EF993 /* RecentFilesMenuTemplate.nib */ = {isa = PBXBuildFile; fileRef = 696F7896036B652369517438; }; 67DF295E93E54432043126DF /* CoreAudio.framework */ = {isa = PBXBuildFile; fileRef = 6799B056504F9F017998B9E2; }; 6C2200C52B65E1BE80544E50 /* include_juce_audio_devices.mm */ = {isa = PBXBuildFile; fileRef = AF330F41D1A4865108690E3C; }; + 6E24A926494D678975AA56E5 /* AppIcon.icns */ = {isa = PBXBuildFile; fileRef = 3A798A17A29957CC426E04FB; }; 770AB74B1D3A0108F764DD47 /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = 4D1DB6D77B6F3DE7A569780B; }; 77745BF98931B91341FE17F6 /* IOKit.framework */ = {isa = PBXBuildFile; fileRef = F3292E3563DB7ABB076DB400; }; 80B9F7ED2009922C693B7DD4 /* DiscRecording.framework */ = {isa = PBXBuildFile; fileRef = CB82A14817C3E2ABBBBC3864; }; @@ -57,6 +57,7 @@ 25DEDA8C9F94A6C8DFC8E53E /* SharedCanvas.h */ /* SharedCanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SharedCanvas.h; path = ../../Source/SharedCanvas.h; sourceTree = SOURCE_ROOT; }; 2E13A899F4E3C99054A3656F /* Accelerate.framework */ /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 33AA348465F512DBA8778DAF /* include_juce_events.mm */ /* include_juce_events.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_events.mm; path = ../../JuceLibraryCode/include_juce_events.mm; sourceTree = SOURCE_ROOT; }; + 3A798A17A29957CC426E04FB /* AppIcon.icns */ /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = AppIcon.icns; path = AppIcon.icns; sourceTree = SOURCE_ROOT; }; 3BF06B70407FFDBE9534F942 /* include_juce_osc.cpp */ /* include_juce_osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_osc.cpp; path = ../../JuceLibraryCode/include_juce_osc.cpp; sourceTree = SOURCE_ROOT; }; 448838BE6E937D450A3C84CE /* CoreMIDI.framework */ /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; 4D1DB6D77B6F3DE7A569780B /* CoreAudioKit.framework */ /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; @@ -70,7 +71,6 @@ 68EBC0BF5F01E05FDCB3EEAF /* juce_opengl */ /* juce_opengl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_opengl; path = ../../../../modules/juce_opengl; sourceTree = SOURCE_ROOT; }; 696F7896036B652369517438 /* RecentFilesMenuTemplate.nib */ /* RecentFilesMenuTemplate.nib */ = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = SOURCE_ROOT; }; 6D1F9E505D20C09647124F0A /* include_juce_audio_basics.mm */ /* include_juce_audio_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_basics.mm; path = ../../JuceLibraryCode/include_juce_audio_basics.mm; sourceTree = SOURCE_ROOT; }; - 70F1CAF3C4C561DD81E6AFC1 /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; }; 74711D7544168CCAC4969A07 /* BinaryData.cpp */ /* BinaryData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = SOURCE_ROOT; }; 7525879E73E8AF32FFA0CDDE /* include_juce_data_structures.mm */ /* include_juce_data_structures.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_data_structures.mm; path = ../../JuceLibraryCode/include_juce_data_structures.mm; sourceTree = SOURCE_ROOT; }; 77C0AC21C1028911123844FC /* Main.cpp */ /* Main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = SOURCE_ROOT; }; @@ -146,7 +146,7 @@ children = ( 1FD6DBAC73414DD4C152E34E, 696F7896036B652369517438, - 70F1CAF3C4C561DD81E6AFC1, + 3A798A17A29957CC426E04FB, ); name = Resources; sourceTree = ""; @@ -343,7 +343,7 @@ buildActionMask = 2147483647; files = ( 65B2C4ED19229E0EDC8EF993, - 006DF460F8DF66EFFA80D968, + 6E24A926494D678975AA56E5, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/extras/NetworkGraphicsDemo/Builds/iOS/Icon.icns b/extras/NetworkGraphicsDemo/Builds/iOS/AppIcon.icns similarity index 100% rename from extras/NetworkGraphicsDemo/Builds/iOS/Icon.icns rename to extras/NetworkGraphicsDemo/Builds/iOS/AppIcon.icns diff --git a/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj b/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj index 9d4643ddd5..9c080e332f 100644 --- a/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj +++ b/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 006DF460F8DF66EFFA80D968 /* Icon.icns */ = {isa = PBXBuildFile; fileRef = 70F1CAF3C4C561DD81E6AFC1; }; 0977FEC02DAF29438583198A /* include_juce_core.mm */ = {isa = PBXBuildFile; fileRef = 01E0EEF68A11C1CAF180E173; }; 0E041BED84BAC24200949A78 /* UniformTypeIdentifiers.framework */ = {isa = PBXBuildFile; fileRef = 961965555B4DAA5BE2361933; settings = { ATTRIBUTES = (Weak, ); }; }; 0FA2A3321630EBE83E439D99 /* include_juce_cryptography.mm */ = {isa = PBXBuildFile; fileRef = AFF729977947528F3E4AAA96; }; @@ -24,6 +23,7 @@ 64DEB67F9523F28D899D1821 /* MetalKit.framework */ = {isa = PBXBuildFile; fileRef = C8C4E9A4028028FF1F5B76F2; settings = { ATTRIBUTES = (Weak, ); }; }; 67DF295E93E54432043126DF /* CoreAudio.framework */ = {isa = PBXBuildFile; fileRef = 6799B056504F9F017998B9E2; }; 6C2200C52B65E1BE80544E50 /* include_juce_audio_devices.mm */ = {isa = PBXBuildFile; fileRef = AF330F41D1A4865108690E3C; }; + 6E24A926494D678975AA56E5 /* AppIcon.icns */ = {isa = PBXBuildFile; fileRef = 3A798A17A29957CC426E04FB; }; 770AB74B1D3A0108F764DD47 /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = 4D1DB6D77B6F3DE7A569780B; }; 78CB229C1BA5093078BC6195 /* UserNotifications.framework */ = {isa = PBXBuildFile; fileRef = E8976208A3585295BF93D50D; settings = { ATTRIBUTES = (Weak, ); }; }; 80EE2C27B466BAFD83881D3F /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = 2E13A899F4E3C99054A3656F; }; @@ -64,6 +64,7 @@ 2E13A899F4E3C99054A3656F /* Accelerate.framework */ /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 33AA348465F512DBA8778DAF /* include_juce_events.mm */ /* include_juce_events.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_events.mm; path = ../../JuceLibraryCode/include_juce_events.mm; sourceTree = SOURCE_ROOT; }; 379F77D23BFAE3795282CEB3 /* UIKit.framework */ /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 3A798A17A29957CC426E04FB /* AppIcon.icns */ /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = AppIcon.icns; path = AppIcon.icns; sourceTree = SOURCE_ROOT; }; 3BF06B70407FFDBE9534F942 /* include_juce_osc.cpp */ /* include_juce_osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_osc.cpp; path = ../../JuceLibraryCode/include_juce_osc.cpp; sourceTree = SOURCE_ROOT; }; 448838BE6E937D450A3C84CE /* CoreMIDI.framework */ /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; 4D1DB6D77B6F3DE7A569780B /* CoreAudioKit.framework */ /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; @@ -77,7 +78,6 @@ 6799B056504F9F017998B9E2 /* CoreAudio.framework */ /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; 68EBC0BF5F01E05FDCB3EEAF /* juce_opengl */ /* juce_opengl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_opengl; path = ../../../../modules/juce_opengl; sourceTree = SOURCE_ROOT; }; 6D1F9E505D20C09647124F0A /* include_juce_audio_basics.mm */ /* include_juce_audio_basics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_basics.mm; path = ../../JuceLibraryCode/include_juce_audio_basics.mm; sourceTree = SOURCE_ROOT; }; - 70F1CAF3C4C561DD81E6AFC1 /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; }; 74711D7544168CCAC4969A07 /* BinaryData.cpp */ /* BinaryData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = SOURCE_ROOT; }; 7525879E73E8AF32FFA0CDDE /* include_juce_data_structures.mm */ /* include_juce_data_structures.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_data_structures.mm; path = ../../JuceLibraryCode/include_juce_data_structures.mm; sourceTree = SOURCE_ROOT; }; 77C0AC21C1028911123844FC /* Main.cpp */ /* Main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = SOURCE_ROOT; }; @@ -161,7 +161,7 @@ 1FD6DBAC73414DD4C152E34E, 5273768FBB55D0DD57A5E70C, 9D2DAC7D0C9DB77CB83E2992, - 70F1CAF3C4C561DD81E6AFC1, + 3A798A17A29957CC426E04FB, ); name = Resources; sourceTree = ""; @@ -363,7 +363,7 @@ files = ( 1282A62308CD1AC3F88A5D03, D832165EE981EF309D4B21BF, - 006DF460F8DF66EFFA80D968, + 6E24A926494D678975AA56E5, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/extras/Projucer/Builds/MacOSX/Icon.icns b/extras/Projucer/Builds/MacOSX/AppIcon.icns similarity index 100% rename from extras/Projucer/Builds/MacOSX/Icon.icns rename to extras/Projucer/Builds/MacOSX/AppIcon.icns diff --git a/extras/Projucer/Builds/MacOSX/Info-App.plist b/extras/Projucer/Builds/MacOSX/Info-App.plist index fbde006179..8d8df10b06 100644 --- a/extras/Projucer/Builds/MacOSX/Info-App.plist +++ b/extras/Projucer/Builds/MacOSX/Info-App.plist @@ -10,7 +10,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - Icon.icns + AppIcon.icns CFBundleIdentifier com.juce.theprojucer CFBundleName diff --git a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj index a471592d13..97bccc790c 100644 --- a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj +++ b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj @@ -16,7 +16,6 @@ 10E26DA28CF28BBFDC64E796 /* include_juce_core_CompilationTime.cpp */ = {isa = PBXBuildFile; fileRef = 5F0374A45E6B5EC8E47D688F; }; 11D42F7EC6E6539D79A7F4B1 /* QuartzCore.framework */ = {isa = PBXBuildFile; fileRef = E5D6C36496F5BC84D7213BE8; }; 13180B0F6CE42B355C90CF3C /* include_juce_graphics_Harfbuzz.cpp */ = {isa = PBXBuildFile; fileRef = 39F69DABE999E4B2CBC6041F; }; - 1321E6C1C6170B6C898AD09D /* Icon.icns */ = {isa = PBXBuildFile; fileRef = 951128CA33CCDEF570436B1C; }; 234B6BA2952CBC7C61EF70EF /* include_juce_events.mm */ = {isa = PBXBuildFile; fileRef = 5867DC4E39DF8539B54C0D59; }; 241F29FCBB7A17BB44A0B10C /* Cocoa.framework */ = {isa = PBXBuildFile; fileRef = D1F9B0E9F5D54FE48BEB46EA; }; 244567D3AE2E417A8CB2B95E /* jucer_ProjectExporter.cpp */ = {isa = PBXBuildFile; fileRef = C3BB9F92B02B06D04A73794C; }; @@ -39,6 +38,7 @@ 6DD9DA1677A6CF789CDAB478 /* jucer_AutoUpdater.cpp */ = {isa = PBXBuildFile; fileRef = 0D4D508C638BC74943B9976D; }; 6ECB2F11D2F593FACCCF99DB /* jucer_ProjucerLookAndFeel.cpp */ = {isa = PBXBuildFile; fileRef = 0F8C000E5FF4A2DAC1FEF8EB; }; 71713DE4716DCEDB45A206E2 /* jucer_OpenDocumentManager.cpp */ = {isa = PBXBuildFile; fileRef = F9111E150CFF155329D44853; }; + 7E43279B5881EA0FFDA49647 /* AppIcon.icon */ = {isa = PBXBuildFile; fileRef = E09429B88DD8ADA381D4BF61; }; 7F1928D425D075E93DC254A8 /* Metal.framework */ = {isa = PBXBuildFile; fileRef = E419F3AED6A220EDCB179A8C; settings = { ATTRIBUTES = (Weak, ); }; }; 8BE478303CDF061B72F219E2 /* jucer_CodeHelpers.cpp */ = {isa = PBXBuildFile; fileRef = F2E4998FB2C7221587A79F8B; }; 908B7D4FB180F53405DA8EF9 /* jucer_StartPageComponent.cpp */ = {isa = PBXBuildFile; fileRef = 82C18723A3D0E39BBD8F0F6E; }; @@ -54,6 +54,7 @@ D0E26EB54B0087C8BE3D541E /* jucer_Icons.cpp */ = {isa = PBXBuildFile; fileRef = 846B2A670C5A19DE0039E11A; }; D5C9125F65493CA481F18E53 /* include_juce_cryptography.mm */ = {isa = PBXBuildFile; fileRef = D766BB9D8C32B5560F0493F3; }; D76134C6646C526A210A78E2 /* include_juce_graphics_Sheenbidi.c */ = {isa = PBXBuildFile; fileRef = 276A4D5D4A2DD84C6D41F0CA; }; + DBE437EE41F174A6F27FC0E2 /* AppIcon.icns */ = {isa = PBXBuildFile; fileRef = F3FE62637ACC2263A7594E8A; }; DD0FF38F7E8DE0220D73671D /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = BF006EF584FB274FF0319E08; }; EE722B47BC36CC8A87E0FB76 /* jucer_AppearanceSettings.cpp */ = {isa = PBXBuildFile; fileRef = BE618CE21C794BDEE319E328; }; F15F0512666FF8CDC0D08905 /* include_juce_gui_basics.mm */ = {isa = PBXBuildFile; fileRef = 0462692BAA9CD1BE6DFBCC33; }; @@ -150,6 +151,7 @@ 6FD8DBC0FF42C87D8BEE2452 /* jucer_TranslationHelpers.h */ /* jucer_TranslationHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TranslationHelpers.h; path = ../../Source/Utility/Helpers/jucer_TranslationHelpers.h; sourceTree = SOURCE_ROOT; }; 70D3399C01D1EF2CD059B2A4 /* jucer_Sidebar.h */ /* jucer_Sidebar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Sidebar.h; path = ../../Source/Project/UI/Sidebar/jucer_Sidebar.h; sourceTree = SOURCE_ROOT; }; 7AB7640968FAAC73072FBD10 /* juce_gui_basics */ /* juce_gui_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_gui_basics; path = ../../../../modules/juce_gui_basics; sourceTree = SOURCE_ROOT; }; + 7C2F4A961A17B2E2ADD1B407 /* icon.json */ /* icon.json */ = {isa = PBXFileReference; lastKnownFileType = file.json; name = icon.json; path = ../../Source/Assets/AppIcon.icon/icon.json; sourceTree = SOURCE_ROOT; }; 7CA44FF0BA319517C6E39651 /* jucer_Application.cpp */ /* jucer_Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Application.cpp; path = ../../Source/Application/jucer_Application.cpp; sourceTree = SOURCE_ROOT; }; 807049CA2D5B6DE18EA078F2 /* export_android.svg */ /* export_android.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = export_android.svg; path = ../../Source/BinaryData/Icons/export_android.svg; sourceTree = SOURCE_ROOT; }; 82C18723A3D0E39BBD8F0F6E /* jucer_StartPageComponent.cpp */ /* jucer_StartPageComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_StartPageComponent.cpp; path = ../../Source/Application/StartPage/jucer_StartPageComponent.cpp; sourceTree = SOURCE_ROOT; }; @@ -168,7 +170,6 @@ 921D263A2EAFD96C8D389693 /* JuceLV2Defines.h.in */ /* JuceLV2Defines.h.in */ = {isa = PBXFileReference; lastKnownFileType = file.in; name = JuceLV2Defines.h.in; path = ../../../Build/CMake/JuceLV2Defines.h.in; sourceTree = SOURCE_ROOT; }; 92926A4D3CC4BB2A9D35EB0B /* jucer_UTF8WindowComponent.h */ /* jucer_UTF8WindowComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_UTF8WindowComponent.h; path = ../../Source/Application/Windows/jucer_UTF8WindowComponent.h; sourceTree = SOURCE_ROOT; }; 92A66A8BD87F98EB6B4FB6D0 /* jucer_ProjectContentComponent.h */ /* jucer_ProjectContentComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectContentComponent.h; path = ../../Source/Project/UI/jucer_ProjectContentComponent.h; sourceTree = SOURCE_ROOT; }; - 951128CA33CCDEF570436B1C /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; }; 96A1EC6B50DBD2C526C60338 /* jucer_AudioPluginARADocumentControllerTemplate.cpp */ /* jucer_AudioPluginARADocumentControllerTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_AudioPluginARADocumentControllerTemplate.cpp; path = ../../Source/BinaryData/Templates/jucer_AudioPluginARADocumentControllerTemplate.cpp; sourceTree = SOURCE_ROOT; }; 983CFBA01CA8811F30FA7F4C /* jucer_MiscUtilities.h */ /* jucer_MiscUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_MiscUtilities.h; path = ../../Source/Utility/Helpers/jucer_MiscUtilities.h; sourceTree = SOURCE_ROOT; }; 988A3851FBA511FB0B8FF754 /* jucer_AudioPluginARAEditorTemplate.h */ /* jucer_AudioPluginARAEditorTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_AudioPluginARAEditorTemplate.h; path = ../../Source/BinaryData/Templates/jucer_AudioPluginARAEditorTemplate.h; sourceTree = SOURCE_ROOT; }; @@ -224,6 +225,7 @@ DE4A987B2D5529990A6AA9D4 /* jucer_AboutWindowComponent.h */ /* jucer_AboutWindowComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_AboutWindowComponent.h; path = ../../Source/Application/Windows/jucer_AboutWindowComponent.h; sourceTree = SOURCE_ROOT; }; DF40404150A5A3D6F5AAC856 /* MetalKit.framework */ /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; DFBEB8E086832AEB0FBEADF0 /* jucer_StoredSettings.h */ /* jucer_StoredSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_StoredSettings.h; path = ../../Source/Settings/jucer_StoredSettings.h; sourceTree = SOURCE_ROOT; }; + E09429B88DD8ADA381D4BF61 /* AppIcon.icon */ /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = file.icon; name = AppIcon.icon; path = ../../Source/Assets/AppIcon.icon; sourceTree = SOURCE_ROOT; }; E111A336FE13C033EAA0A1D1 /* jucer_NewCppFileTemplate.h */ /* jucer_NewCppFileTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewCppFileTemplate.h; path = ../../Source/BinaryData/Templates/jucer_NewCppFileTemplate.h; sourceTree = SOURCE_ROOT; }; E13A54A6D3A1895EACE53E51 /* jucer_ResourceFile.cpp */ /* jucer_ResourceFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ResourceFile.cpp; path = ../../Source/ProjectSaving/jucer_ResourceFile.cpp; sourceTree = SOURCE_ROOT; }; E186BC01A1B1529937A46485 /* jucer_FileHelpers.h */ /* jucer_FileHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_FileHelpers.h; path = ../../Source/Utility/Helpers/jucer_FileHelpers.h; sourceTree = SOURCE_ROOT; }; @@ -246,9 +248,11 @@ F2E4998FB2C7221587A79F8B /* jucer_CodeHelpers.cpp */ /* jucer_CodeHelpers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_CodeHelpers.cpp; path = ../../Source/Utility/Helpers/jucer_CodeHelpers.cpp; sourceTree = SOURCE_ROOT; }; F313EE01ECE306DB2CFE011D /* UnityPluginGUIScript.cs.in */ /* UnityPluginGUIScript.cs.in */ = {isa = PBXFileReference; lastKnownFileType = file.in; name = UnityPluginGUIScript.cs.in; path = ../../../Build/CMake/UnityPluginGUIScript.cs.in; sourceTree = SOURCE_ROOT; }; F3CCA5545AB7B4B603D0BFEB /* jucer_AudioPluginARAPlaybackRendererTemplate.cpp */ /* jucer_AudioPluginARAPlaybackRendererTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_AudioPluginARAPlaybackRendererTemplate.cpp; path = ../../Source/BinaryData/Templates/jucer_AudioPluginARAPlaybackRendererTemplate.cpp; sourceTree = SOURCE_ROOT; }; + F3FE62637ACC2263A7594E8A /* AppIcon.icns */ /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = AppIcon.icns; path = AppIcon.icns; sourceTree = SOURCE_ROOT; }; F58B23995765C9FDBE28F871 /* jucer_Modules.cpp */ /* jucer_Modules.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Modules.cpp; path = ../../Source/Project/Modules/jucer_Modules.cpp; sourceTree = SOURCE_ROOT; }; F5DD97B45B8EA60C1ED0DD80 /* jucer_StoredSettings.cpp */ /* jucer_StoredSettings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_StoredSettings.cpp; path = ../../Source/Settings/jucer_StoredSettings.cpp; sourceTree = SOURCE_ROOT; }; F63F46CA0A51C679867855A7 /* jucer_ProjectMessagesComponent.h */ /* jucer_ProjectMessagesComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectMessagesComponent.h; path = ../../Source/Project/UI/jucer_ProjectMessagesComponent.h; sourceTree = SOURCE_ROOT; }; + F6410ADB98961EC4A6304A21 /* juceicon.svg */ /* juceicon.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = juceicon.svg; path = ../../Source/Assets/AppIcon.icon/Assets/juceicon.svg; sourceTree = SOURCE_ROOT; }; F7C74E934C954F6F1A3BE4F9 /* jucer_TranslationToolWindowComponent.h */ /* jucer_TranslationToolWindowComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TranslationToolWindowComponent.h; path = ../../Source/Application/Windows/jucer_TranslationToolWindowComponent.h; sourceTree = SOURCE_ROOT; }; F84D031B2A6BB1EE6A316C71 /* PIPConsole.cpp.in */ /* PIPConsole.cpp.in */ = {isa = PBXFileReference; lastKnownFileType = file.in; name = PIPConsole.cpp.in; path = ../../../Build/CMake/PIPConsole.cpp.in; sourceTree = SOURCE_ROOT; }; F8A38C0C7C45F2DB6A5FB812 /* wizard_Highlight.svg */ /* wizard_Highlight.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = wizard_Highlight.svg; path = ../../Source/BinaryData/Icons/wizard_Highlight.svg; sourceTree = SOURCE_ROOT; }; @@ -365,6 +369,14 @@ name = Source; sourceTree = ""; }; + 4BCEED1C2E8D6C62E3DA4231 /* Assets */ = { + isa = PBXGroup; + children = ( + F6410ADB98961EC4A6304A21, + ); + name = Assets; + sourceTree = ""; + }; 4DCC5D64BBE8DE85360A3D57 /* ProjectSaving */ = { isa = PBXGroup; children = ( @@ -405,12 +417,21 @@ name = gradle; sourceTree = ""; }; + 7CEEEE4F800F5DB9728F9271 /* Assets */ = { + isa = PBXGroup; + children = ( + F05A70E37CDE3CF34503940F, + ); + name = Assets; + sourceTree = ""; + }; 8180B5894A78501084B8F133 /* Resources */ = { isa = PBXGroup; children = ( E266DE67FF319D56F63193A6, 6678E9B3EEACAD47F438B264, - 951128CA33CCDEF570436B1C, + F3FE62637ACC2263A7594E8A, + E09429B88DD8ADA381D4BF61, ); name = Resources; sourceTree = ""; @@ -584,6 +605,7 @@ isa = PBXGroup; children = ( BC67FD952A6F210A11A1ECB8, + 7CEEEE4F800F5DB9728F9271, DC3A4B0AD79334BA8A7E0661, F1B44F007A02A0FAE4DC8D79, 89E9055A179B4C2019B4E1AE, @@ -676,6 +698,15 @@ name = Settings; sourceTree = ""; }; + F05A70E37CDE3CF34503940F /* AppIcon.icon */ = { + isa = PBXGroup; + children = ( + 4BCEED1C2E8D6C62E3DA4231, + 7C2F4A961A17B2E2ADD1B407, + ); + name = AppIcon.icon; + sourceTree = ""; + }; F1B44F007A02A0FAE4DC8D79 /* CodeEditor */ = { isa = PBXGroup; children = ( @@ -766,7 +797,8 @@ buildActionMask = 2147483647; files = ( 2610F357881240ACBF612F48, - 1321E6C1C6170B6C898AD09D, + DBE437EE41F174A6F27FC0E2, + 7E43279B5881EA0FFDA49647, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -825,6 +857,7 @@ 0BC15DC2E5FE5ECFFB398D49 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -892,6 +925,7 @@ 0CC6C439D038EDA0D7F10DF0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj index 5e81e10f3c..25a9c944f2 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj @@ -2944,6 +2944,8 @@ + + diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters index eea8d5fd9c..20adcdb3e2 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters @@ -11,6 +11,15 @@ {4F8BCD36-CE20-D951-FB82-2CCEDD0C5898} + + {B2D403C0-2D43-F167-C19F-47D66D35F066} + + + {64127AE2-0F4C-1DEE-6C29-626091A3A9CB} + + + {D247D8BA-48E6-6F87-156E-E999D3678EB6} + {661FA330-2192-FAA3-E7B2-FAF8EBB783C6} @@ -5243,6 +5252,12 @@ + + Projucer\Assets\AppIcon.icon\Assets + + + Projucer\Assets\AppIcon.icon + Projucer\BinaryData diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj index 4adc6f8d19..2768f19fed 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj @@ -2944,6 +2944,8 @@ + + diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters index 2e78f840cc..3c9e71e383 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters @@ -11,6 +11,15 @@ {4F8BCD36-CE20-D951-FB82-2CCEDD0C5898} + + {B2D403C0-2D43-F167-C19F-47D66D35F066} + + + {64127AE2-0F4C-1DEE-6C29-626091A3A9CB} + + + {D247D8BA-48E6-6F87-156E-E999D3678EB6} + {661FA330-2192-FAA3-E7B2-FAF8EBB783C6} @@ -5243,6 +5252,12 @@ + + Projucer\Assets\AppIcon.icon\Assets + + + Projucer\Assets\AppIcon.icon + Projucer\BinaryData diff --git a/extras/Projucer/Builds/VisualStudio2026/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2026/Projucer_App.vcxproj index e2e77e962b..f8d7276c6c 100644 --- a/extras/Projucer/Builds/VisualStudio2026/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2026/Projucer_App.vcxproj @@ -2944,6 +2944,8 @@ + + diff --git a/extras/Projucer/Builds/VisualStudio2026/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2026/Projucer_App.vcxproj.filters index bacc4cf870..a485541839 100644 --- a/extras/Projucer/Builds/VisualStudio2026/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2026/Projucer_App.vcxproj.filters @@ -11,6 +11,15 @@ {4F8BCD36-CE20-D951-FB82-2CCEDD0C5898} + + {B2D403C0-2D43-F167-C19F-47D66D35F066} + + + {64127AE2-0F4C-1DEE-6C29-626091A3A9CB} + + + {D247D8BA-48E6-6F87-156E-E999D3678EB6} + {661FA330-2192-FAA3-E7B2-FAF8EBB783C6} @@ -5243,6 +5252,12 @@ + + Projucer\Assets\AppIcon.icon\Assets + + + Projucer\Assets\AppIcon.icon + Projucer\BinaryData diff --git a/extras/Projucer/CMakeLists.txt b/extras/Projucer/CMakeLists.txt index abef0e2308..395a7b8096 100644 --- a/extras/Projucer/CMakeLists.txt +++ b/extras/Projucer/CMakeLists.txt @@ -33,6 +33,7 @@ juce_add_gui_app(Projucer BUNDLE_ID com.juce.theprojucer ICON_BIG ${CMAKE_CURRENT_SOURCE_DIR}/Source/BinaryData/Icons/juce_icon.png + ICON_COMPOSER_BUNDLE "${CMAKE_CURRENT_SOURCE_DIR}/Source/Assets/AppIcon.icon" DOCUMENT_EXTENSIONS jucer NEEDS_CURL TRUE NEEDS_WEB_BROWSER TRUE) diff --git a/extras/Projucer/Projucer.jucer b/extras/Projucer/Projucer.jucer index 15dbfccb7e..499ef9a9f1 100644 --- a/extras/Projucer/Projucer.jucer +++ b/extras/Projucer/Projucer.jucer @@ -8,7 +8,7 @@ + extraDefs="JUCE_SILENCE_XCODE_15_LINKER_WARNING=1" iconComposerIcon="NzgaRC"> @@ -30,7 +30,8 @@ smallIcon="Zrx1Gl"> - + @@ -47,7 +48,8 @@ smallIcon="Zrx1Gl"> - + @@ -64,7 +66,8 @@ smallIcon="Zrx1Gl"> - + @@ -153,6 +156,14 @@ + + + + + + + + diff --git a/extras/Projucer/Source/Assets/AppIcon.icon/Assets/juceicon.svg b/extras/Projucer/Source/Assets/AppIcon.icon/Assets/juceicon.svg new file mode 100644 index 0000000000..7159d721a3 --- /dev/null +++ b/extras/Projucer/Source/Assets/AppIcon.icon/Assets/juceicon.svg @@ -0,0 +1,46 @@ + + diff --git a/extras/Projucer/Source/Assets/AppIcon.icon/icon.json b/extras/Projucer/Source/Assets/AppIcon.icon/icon.json new file mode 100644 index 0000000000..028a7e56f8 --- /dev/null +++ b/extras/Projucer/Source/Assets/AppIcon.icon/icon.json @@ -0,0 +1,27 @@ +{ + "fill" : "system-light", + "groups" : [ + { + "blur-material" : null, + "layers" : [ + { + "hidden" : false, + "image-name" : "juceicon.svg", + "name" : "juceicon" + } + ], + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "specular" : true, + "translucency" : { + "enabled" : false, + "value" : 0 + } + } + ], + "supported-platforms" : { + "squares" : "shared" + } +} \ No newline at end of file diff --git a/extras/Projucer/Source/Project/jucer_Project.cpp b/extras/Projucer/Source/Project/jucer_Project.cpp index 68185ef121..1fe7aacb78 100644 --- a/extras/Projucer/Source/Project/jucer_Project.cpp +++ b/extras/Projucer/Source/Project/jucer_Project.cpp @@ -1616,6 +1616,30 @@ void Project::findAllImageItems (OwnedArray& items) findImages (getMainGroup(), items); } +static void findIconComposerIcons (const Project::Item& item, std::vector& found) +{ + if (item.isFile()) + { + const auto f = item.getFile(); + const auto parent = f.getParentDirectory(); + + if (f.getFileName() == "icon.json" && parent.hasFileExtension ("icon")) + found.push_back ({ parent.getFileName(), item }); + } + else if (item.isGroup()) + { + for (int i = 0; i < item.getNumChildren(); ++i) + findIconComposerIcons (item.getChild (i), found); + } +} + +std::vector Project::findAllIconComposerItems() +{ + std::vector items; + findIconComposerIcons (getMainGroup(), items); + return items; +} + //============================================================================== Project::Item::Item (Project& p, const ValueTree& s, bool isModuleCode) : project (p), state (s), belongsToModule (isModuleCode) @@ -1997,13 +2021,27 @@ bool Project::Item::addFileRetainingSortOrder (const File& file, bool shouldComp return true; } +static bool isPartOfIconComposerBundle (const File& file) +{ + const auto parent = file.getParentDirectory(); + + if (parent.isRoot()) + return false; + + if (parent.getFileName().endsWith (".icon") && parent.getChildFile ("icon.json").existsAsFile()) + return true; + + return isPartOfIconComposerBundle (parent); +} + void Project::Item::addFileUnchecked (const File& file, int insertIndex, const bool shouldCompile) { Item item (project, ValueTree (Ids::FILE), belongsToModule); item.initialiseMissingProperties(); item.getNameValue() = file.getFileName(); item.getShouldCompileValue() = shouldCompile && file.hasFileExtension (fileTypesToCompileByDefault); - item.getShouldAddToBinaryResourcesValue() = project.shouldBeAddedToBinaryResourcesByDefault (file); + item.getShouldAddToBinaryResourcesValue() = project.shouldBeAddedToBinaryResourcesByDefault (file) + && ! isPartOfIconComposerBundle (file); if (canContain (item)) { diff --git a/extras/Projucer/Source/Project/jucer_Project.h b/extras/Projucer/Source/Project/jucer_Project.h index d1d7f1e8f1..051374dad6 100644 --- a/extras/Projucer/Source/Project/jucer_Project.h +++ b/extras/Projucer/Source/Project/jucer_Project.h @@ -527,6 +527,14 @@ public: void findAllImageItems (OwnedArray& items); + struct IconComposerNameAndItem + { + String name; + Item item; + }; + + std::vector findAllIconComposerItems(); + //============================================================================== ValueTree getExporters(); int getNumExporters(); diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h index 8a56311b04..f33424e541 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h @@ -209,6 +209,7 @@ public: iosDeviceFamilyValue (settings, Ids::iosDeviceFamily, getUndoManager(), "1,2"), iPhoneScreenOrientationValue (settings, Ids::iPhoneScreenOrientation, getUndoManager(), getDefaultScreenOrientations(), ","), iPadScreenOrientationValue (settings, Ids::iPadScreenOrientation, getUndoManager(), getDefaultScreenOrientations(), ","), + iconComposerIconValue (settings, Ids::iconComposerIcon, getUndoManager()), customXcodeResourceFoldersValue (settings, Ids::customXcodeResourceFolders, getUndoManager()), customXcassetsFolderValue (settings, Ids::customXcassetsFolder, getUndoManager()), appSandboxValue (settings, Ids::appSandbox, getUndoManager()), @@ -464,8 +465,35 @@ public: return false; } + void createIconComposerProperties (PropertyListBuilder& props) + { + StringArray choices; + Array ids; + + choices.add (""); + ids.add (var()); + + for (const auto& icon : project.findAllIconComposerItems()) + { + choices.add (icon.name); + ids.add (icon.item.getID()); + } + + String iconComposerTooltip + { + "Sets an Icon Composer icon to use for the executable. If specified, Xcode versions that " + "support this format will use this icon for all platforms, and ignore the Icon (Small) " + "and Icon (Large) setting." + }; + + props.add (new ChoicePropertyComponent (iconComposerIconValue, "Icon (Icon Composer)", choices, ids), + iconComposerTooltip); + } + void createExporterProperties (PropertyListBuilder& props) override { + createIconComposerProperties (props); + if (iOS) { props.add (new TextPropertyComponent (customXcassetsFolderValue, "Custom Xcassets Folder", 128, false), @@ -1219,6 +1247,31 @@ public: kXPCServicesFolder = 16 }; + std::optional getIconComposerIconBundle() const + { + const auto iconJson = project.getMainGroup().findItemWithID (settings[Ids::iconComposerIcon]); + + if (! iconJson.isValid()) + return std::nullopt; + + jassert (iconJson.isFile()); + + return build_tools::RelativePath { iconJson.getFile().getParentDirectory(), + project.getProjectFolder(), + build_tools::RelativePath::projectFolder }; + } + + String getAppIconNameOrElse (StringRef fallback) const + { + if (auto composerBundle = getIconComposerIconBundle()) + return composerBundle->getFileNameWithoutExtension(); + + if (iOS) + return "AppIcon"; + + return fallback; + } + //============================================================================== struct XcodeTarget final : build_tools::ProjectType::Target { @@ -1864,10 +1917,11 @@ public: String gccVersion ("com.apple.compilers.llvm.clang.1_0"); + if (auto appIconName = owner.getAppIconNameOrElse (""); appIconName.isNotEmpty()) + s.set ("ASSETCATALOG_COMPILER_APPICON_NAME", appIconName); + if (owner.iOS) { - s.set ("ASSETCATALOG_COMPILER_APPICON_NAME", "AppIcon"); - if (! owner.shouldAddStoryboardToProject()) s.set ("ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME", "LaunchImage"); } @@ -2424,6 +2478,17 @@ private: resourceIDs.add (addBuildFile (FileOptions().withRelativePath (iconPath))); resourceFileRefs.add (createFileRefID (iconPath)); } + + if (auto iconComposerBundle = getIconComposerIconBundle()) + { + const auto iconComposerPath = iconComposerBundle->rebased (project.getProjectFolder(), + getTargetFolder(), + build_tools::RelativePath::buildTargetFolder); + + addFileReference (iconComposerPath.toUnixStyle()); + resourceIDs.add (addBuildFile (FileOptions().withRelativePath (iconComposerPath))); + resourceFileRefs.add (createFileRefID (iconComposerPath)); + } } void addBuildConfigurations() const @@ -2722,7 +2787,7 @@ private: if (! build_tools::asArray (icons).isEmpty()) { - iconFile = getTargetFolder().getChildFile ("Icon.icns"); + iconFile = getTargetFolder().getChildFile (getAppIconNameOrElse ("AppIcon") + ".icns"); build_tools::writeMacIcon (icons, iconFile); } } @@ -3820,7 +3885,8 @@ private: { const auto assetsPath = build_tools::createXcassetsFolderFromIcons (getIcons(), getTargetFolder(), - project.getProjectFilenameRootString()); + project.getProjectFilenameRootString(), + getAppIconNameOrElse ("AppIcon")); addFileReference (assetsPath.toUnixStyle()); resourceIDs.add (addBuildFile (FileOptions().withRelativePath (assetsPath))); resourceFileRefs.add (createFileRefID (assetsPath)); @@ -3959,7 +4025,7 @@ private: extraFrameworksValue, frameworkSearchPathsValue, extraCustomFrameworksValue, embeddedFrameworksValue, postbuildCommandValue, prebuildCommandValue, duplicateAppExResourcesFolderValue, iosDeviceFamilyValue, iPhoneScreenOrientationValue, - iPadScreenOrientationValue, customXcodeResourceFoldersValue, customXcassetsFolderValue, + iPadScreenOrientationValue, iconComposerIconValue, customXcodeResourceFoldersValue, customXcassetsFolderValue, appSandboxValue, appSandboxInheritanceValue, appSandboxOptionsValue, appSandboxHomeDirROValue, appSandboxHomeDirRWValue, appSandboxAbsDirROValue, appSandboxAbsDirRWValue, appSandboxExceptionIOKitValue, diff --git a/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h b/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h index 62336c8b7b..2366896061 100644 --- a/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h +++ b/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h @@ -159,6 +159,7 @@ namespace Ids DECLARE_ID (msvcModuleDefinitionFile); DECLARE_ID (bigIcon); DECLARE_ID (smallIcon); + DECLARE_ID (iconComposerIcon); DECLARE_ID (prebuildCommand); DECLARE_ID (postbuildCommand); DECLARE_ID (useRuntimeLibDLL); diff --git a/modules/juce_graphics/native/juce_DirectX_windows.cpp b/modules/juce_graphics/native/juce_DirectX_windows.cpp index 5042422183..be8b59c7cc 100644 --- a/modules/juce_graphics/native/juce_DirectX_windows.cpp +++ b/modules/juce_graphics/native/juce_DirectX_windows.cpp @@ -364,7 +364,7 @@ void UpdateRegion::findRECTAndValidate (HWND windowHandle) { numRect = 0; - auto regionHandle = CreateRectRgn (0, 0, 0, 0); + auto* regionHandle = CreateRectRgn (0, 0, 0, 0); if (regionHandle == nullptr) { @@ -372,33 +372,36 @@ void UpdateRegion::findRECTAndValidate (HWND windowHandle) return; } - auto regionType = GetUpdateRgn (windowHandle, regionHandle, false); + const ScopeGuard regionDeleter { [&] { DeleteObject (regionHandle); } }; + const auto regionType = GetUpdateRgn (windowHandle, regionHandle, false); - if (regionType == SIMPLEREGION || regionType == COMPLEXREGION) + if (regionType == ERROR || regionType == NULLREGION) + return; + + const auto requiredBytes = GetRegionData (regionHandle, 0, nullptr); + block.ensureSize (requiredBytes); + + const auto regionDataResult = GetRegionData (regionHandle, + (DWORD) block.getSize(), + static_cast (block.getData())); + + numRect = std::invoke ([&]() -> decltype (numRect) { - auto regionDataBytes = GetRegionData (regionHandle, (DWORD) block.getSize(), (RGNDATA*) block.getData()); + if (regionDataResult < sizeof (RGNDATAHEADER)) + return 0; - if (regionDataBytes > block.getSize()) - { - block.ensureSize (regionDataBytes); - regionDataBytes = GetRegionData (regionHandle, (DWORD) block.getSize(), (RGNDATA*) block.getData()); - } + const auto* header = static_cast (block.getData()); - if (regionDataBytes > 0) - { - auto header = (RGNDATAHEADER const* const) block.getData(); + if (header->iType != RDH_RECTANGLES) + return 0; - if (header->iType == RDH_RECTANGLES) - numRect = header->nCount; - } - } + return header->nCount; + }); if (numRect > 0) ValidateRgn (windowHandle, regionHandle); else ValidateRect (windowHandle, nullptr); - - DeleteObject (regionHandle); } //============================================================================== diff --git a/modules/juce_gui_basics/native/juce_Direct2DHwndContext_windows.cpp b/modules/juce_gui_basics/native/juce_Direct2DHwndContext_windows.cpp index adb1e3b5b4..c8dfd6c742 100644 --- a/modules/juce_gui_basics/native/juce_Direct2DHwndContext_windows.cpp +++ b/modules/juce_gui_basics/native/juce_Direct2DHwndContext_windows.cpp @@ -297,101 +297,13 @@ private: }; //============================================================================== -struct Direct2DHwndContext::HwndPimpl : public Direct2DGraphicsContext::Pimpl +struct Direct2DHwndContext::HwndPimpl : public Pimpl { private: - struct SwapChainThread - { - SwapChainThread (Direct2DHwndContext::HwndPimpl& ownerIn, HANDLE swapHandle) - : owner (ownerIn), - swapChainEventHandle (swapHandle) - { - SetWindowSubclass (owner.hwnd, subclassWindowProc, (UINT_PTR) this, (DWORD_PTR) this); - } - - ~SwapChainThread() - { - RemoveWindowSubclass (owner.hwnd, subclassWindowProc, (UINT_PTR) this); - SetEvent (quitEvent.getHandle()); - thread.join(); - } - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SwapChainThread) - - private: - Direct2DHwndContext::HwndPimpl& owner; - HANDLE swapChainEventHandle = nullptr; - - WindowsScopedEvent quitEvent; - std::thread thread { [&] { threadLoop(); } }; - - static constexpr uint32_t swapchainReadyMessageID = WM_USER + 124; - - bool handleWindowProcMessage (UINT message) - { - if (message == swapchainReadyMessageID) - { - owner.onSwapchainEvent(); - return true; - } - - return false; - } - - static LRESULT CALLBACK subclassWindowProc (HWND hwnd, - UINT message, - WPARAM wParam, - LPARAM lParam, - UINT_PTR, - DWORD_PTR referenceData) - { - auto* that = reinterpret_cast (referenceData); - - if (that != nullptr && that->handleWindowProcMessage (message)) - return 0; - - return DefSubclassProc (hwnd, message, wParam, lParam); - } - - void threadLoop() - { - Thread::setCurrentThreadName ("JUCE D2D swap chain thread"); - - for (;;) - { - const HANDLE handles[] { swapChainEventHandle, quitEvent.getHandle() }; - - const auto waitResult = WaitForMultipleObjects ((DWORD) std::size (handles), - handles, - FALSE, - INFINITE); - - switch (waitResult) - { - case WAIT_OBJECT_0: - { - PostMessage (owner.hwnd, swapchainReadyMessageID, 0, 0); - break; - } - - case WAIT_OBJECT_0 + 1: - return; - - case WAIT_FAILED: - default: - jassertfalse; - break; - } - } - } - }; - HWND hwnd; SwapChain swap; ComSmartPtr deviceContext; - std::unique_ptr swapChainThread; std::optional compositionTree; - SwapchainDelegate& delegate; // Areas that must be repainted during the next paint call, between startFrame/endFrame RectangleList deferredRepaints; @@ -402,16 +314,6 @@ private: std::vector dirtyRectangles; int64 lastFinishFrameTicks = 0; - // Set to true after the swap event is signalled, indicating that we're allowed to try presenting - // a new frame. - bool swapEventReceived = false; - - void onSwapchainEvent() - { - swapEventReceived = true; - delegate.onSwapchainEvent(); - } - bool prepare() override { const auto adapter = getDefaultAdapter(); @@ -437,10 +339,6 @@ private: return false; } - if (swapChainThread == nullptr) - if (auto* e = swap.getEvent()) - swapChainThread = std::make_unique (*this, e->getHandle()); - if (! compositionTree.has_value()) compositionTree = CompositionTree::create (adapter->dxgiDevice, hwnd, swap.getChain()); @@ -453,7 +351,6 @@ private: void teardown() override { compositionTree.reset(); - swapChainThread = nullptr; deviceContext = nullptr; swap = {}; @@ -476,7 +373,6 @@ private: bool ready = Pimpl::checkPaintReady(); ready &= swap.canPaint(); ready &= compositionTree.has_value(); - ready &= swapEventReceived; return ready; } @@ -484,10 +380,9 @@ private: JUCE_DECLARE_WEAK_REFERENCEABLE (HwndPimpl) public: - HwndPimpl (Direct2DHwndContext& ownerIn, HWND hwndIn, SwapchainDelegate& swapDelegate) + HwndPimpl (Direct2DHwndContext& ownerIn, HWND hwndIn) : Pimpl (ownerIn), - hwnd (hwndIn), - delegate (swapDelegate) + hwnd (hwndIn) { } @@ -589,7 +484,7 @@ public: { JUCE_D2DMETRICS_SCOPED_ELAPSED_TIME (getMetrics(), present1Duration); - if (swap.getBuffer() == nullptr || dirtyRegionsInBackBuffer.isEmpty() || ! swapEventReceived) + if (swap.getBuffer() == nullptr || dirtyRegionsInBackBuffer.isEmpty()) return; auto const swapChainSize = swap.getSize(); @@ -622,10 +517,6 @@ public: if (FAILED (hr)) return; - // We managed to present a frame, so we should avoid rendering anything or calling - // present again until that frame has been shown on-screen. - swapEventReceived = false; - // There's nothing waiting to be displayed in the backbuffer. dirtyRegionsInBackBuffer.clear(); @@ -687,7 +578,7 @@ public: }; //============================================================================== -Direct2DHwndContext::Direct2DHwndContext (HWND windowHandle, SwapchainDelegate& swapDelegate) +Direct2DHwndContext::Direct2DHwndContext (HWND windowHandle) { #if JUCE_DIRECT2D_METRICS metrics = new Direct2DMetrics { Direct2DMetricsHub::getInstance()->lock, @@ -696,7 +587,7 @@ Direct2DHwndContext::Direct2DHwndContext (HWND windowHandle, SwapchainDelegate& Direct2DMetricsHub::getInstance()->add (metrics); #endif - pimpl = std::make_unique (*this, windowHandle, swapDelegate); + pimpl = std::make_unique (*this, windowHandle); } Direct2DHwndContext::~Direct2DHwndContext() diff --git a/modules/juce_gui_basics/native/juce_Direct2DHwndContext_windows.h b/modules/juce_gui_basics/native/juce_Direct2DHwndContext_windows.h index 78161eb244..70ac6196a5 100644 --- a/modules/juce_gui_basics/native/juce_Direct2DHwndContext_windows.h +++ b/modules/juce_gui_basics/native/juce_Direct2DHwndContext_windows.h @@ -38,13 +38,7 @@ namespace juce class Direct2DHwndContext : public Direct2DGraphicsContext { public: - struct SwapchainDelegate - { - virtual ~SwapchainDelegate() = default; - virtual void onSwapchainEvent() = 0; - }; - - Direct2DHwndContext (HWND windowHandle, SwapchainDelegate& swapDelegate); + explicit Direct2DHwndContext (HWND windowHandle); ~Direct2DHwndContext() override; void handleShowWindow(); diff --git a/modules/juce_gui_basics/native/juce_Windowing_windows.cpp b/modules/juce_gui_basics/native/juce_Windowing_windows.cpp index 697e8a734f..b3f77fc2bd 100644 --- a/modules/juce_gui_basics/native/juce_Windowing_windows.cpp +++ b/modules/juce_gui_basics/native/juce_Windowing_windows.cpp @@ -1268,7 +1268,6 @@ struct RenderContext virtual void updateConstantAlpha() = 0; virtual void handlePaintMessage() = 0; virtual void repaint (const Rectangle& area) = 0; - virtual void dispatchDeferredRepaints() = 0; virtual void performAnyPendingRepaintsNow() = 0; virtual void onVBlank() = 0; virtual void handleShowWindow() = 0; @@ -1724,12 +1723,6 @@ public: renderContext->repaint ((area.toDouble() * getPlatformScaleFactor()).getSmallestIntegerContainer()); } - void dispatchDeferredRepaints() - { - if (renderContext != nullptr) - renderContext->dispatchDeferredRepaints(); - } - void performAnyPendingRepaintsNow() override { if (renderContext != nullptr) @@ -1748,7 +1741,6 @@ public: void onVBlank (double timestampSec) override { callVBlankListeners (timestampSec); - dispatchDeferredRepaints(); if (renderContext != nullptr) renderContext->onVBlank(); @@ -4779,23 +4771,12 @@ public: deferredRepaints.add (area); } - void dispatchDeferredRepaints() override - { - for (auto deferredRect : deferredRepaints) - { - auto r = D2DUtilities::toRECT (deferredRect); - InvalidateRect (peer.getHWND(), &r, FALSE); - } - - deferredRepaints.clear(); - } - void performAnyPendingRepaintsNow() override { if (! peer.getComponent().isVisible()) return; - dispatchDeferredRepaints(); + onVBlank(); WeakReference localRef (&peer.getComponent()); MSG m; @@ -4815,7 +4796,16 @@ public: : createSnapshotOfNormalWindow(); } - void onVBlank() override {} + void onVBlank() override + { + for (auto deferredRect : deferredRepaints) + { + auto r = D2DUtilities::toRECT (deferredRect); + InvalidateRect (peer.getHWND(), &r, FALSE); + } + + deferredRepaints.clear(); + } void handleShowWindow() override {} @@ -5057,8 +5047,7 @@ private: RectangleList deferredRepaints; }; -class D2DRenderContext : public RenderContext, - private Direct2DHwndContext::SwapchainDelegate +class D2DRenderContext : public RenderContext { public: static constexpr auto name = "Direct2D"; @@ -5077,7 +5066,7 @@ public: if (transparent != direct2DContext->supportsTransparency()) { direct2DContext.reset(); - direct2DContext = getContextForPeer (peer, *this); + direct2DContext = getContextForPeer (peer); } if (direct2DContext->supportsTransparency()) @@ -5093,20 +5082,20 @@ public: updateRegion.findRECTAndValidate (peer.getHWND()); for (const auto& rect : updateRegion.getRects()) - repaint (D2DUtilities::toRectangle (rect)); + direct2DContext->addDeferredRepaint (D2DUtilities::toRectangle (rect)); #if JUCE_DIRECT2D_METRICS lastPaintStartTicks = paintStartTicks; #endif + + handleDirect2DPaint(); } void repaint (const Rectangle& area) override { - direct2DContext->addDeferredRepaint (area); + deferredRepaints.add (area); } - void dispatchDeferredRepaints() override {} - void performAnyPendingRepaintsNow() override {} Image createSnapshot() override @@ -5116,7 +5105,13 @@ public: void onVBlank() override { - handleDirect2DPaint(); + for (auto deferredRect : deferredRepaints) + { + auto r = D2DUtilities::toRECT (deferredRect); + InvalidateRect (peer.getHWND(), &r, FALSE); + } + + deferredRepaints.clear(); } void handleShowWindow() override @@ -5126,11 +5121,6 @@ public: } private: - void onSwapchainEvent() override - { - handleDirect2DPaint(); - } - struct WrappedD2DHwndContextBase { virtual ~WrappedD2DHwndContextBase() = default; @@ -5161,8 +5151,8 @@ private: class WrappedD2DHwndContext : public WrappedD2DHwndContextBase { public: - WrappedD2DHwndContext (HWND hwnd, SwapchainDelegate& swapDelegate) - : ctx (hwnd, swapDelegate) {} + explicit WrappedD2DHwndContext (HWND hwnd) + : ctx (hwnd) {} void addDeferredRepaint (Rectangle area) override { @@ -5478,19 +5468,19 @@ private: #endif } - static std::unique_ptr getContextForPeer (HWNDComponentPeer& peer, - SwapchainDelegate& delegate) + static std::unique_ptr getContextForPeer (HWNDComponentPeer& peer) { if (peer.getTransparencyKind() != HWNDComponentPeer::TransparencyKind::opaque) return std::make_unique (peer); - return std::make_unique (peer.getHWND(), delegate); + return std::make_unique (peer.getHWND()); } HWNDComponentPeer& peer; - std::unique_ptr direct2DContext = getContextForPeer (peer, *this); + std::unique_ptr direct2DContext = getContextForPeer (peer); UpdateRegion updateRegion; + RectangleList deferredRepaints; #if JUCE_ETW_TRACELOGGING struct ETWEventProvider diff --git a/modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp b/modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp index 8f58c98dd7..19c3e3b946 100644 --- a/modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp +++ b/modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp @@ -1332,10 +1332,9 @@ public: g.fillAll (Colours::white); } - void evaluateJavascript (const String& script, WebBrowserComponent::EvaluationCallback callback) override + void evaluateJavascript (const String& script, EvaluationCallback callback) override { - if (callback != nullptr) - evaluationCallbacks.push_back (std::move (callback)); + evaluationCallbacks.push_back (std::move (callback)); CommandReceiver::sendCommand (outChannel, "evaluateJavascript", @@ -1374,7 +1373,7 @@ public: }); auto& cb = evaluationCallbacks.front(); - cb (result); + NullCheckedInvocation::invoke (cb, result); evaluationCallbacks.pop_front(); }