mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
macOS: Remove 32 bit specific functionality
This includes Carbon support
This commit is contained in:
parent
b48dddcf4e
commit
c2ecde591b
71 changed files with 18 additions and 3001 deletions
|
|
@ -1866,7 +1866,6 @@ add_library( ${BINARY_NAME}
|
|||
"../../../../../modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_NSViewFrameWatcher.h"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp"
|
||||
|
|
@ -3804,7 +3803,6 @@ set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_l
|
|||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_NSViewFrameWatcher.h" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@
|
|||
7B4163348896EB1B86B15160 /* AVFoundation.framework */ = {isa = PBXBuildFile; fileRef = DC192EFA899E6CBE6B5CD394; };
|
||||
8584640341100008744861A5 /* IOKit.framework */ = {isa = PBXBuildFile; fileRef = 71A91516AFD980FEE694C0E1; };
|
||||
89AD16514B1F4133FFEA1DF9 /* WebKit.framework */ = {isa = PBXBuildFile; fileRef = 96D99A08027CA35D6A4E5CFD; };
|
||||
89BC6E2354102D975E08E918 /* Carbon.framework */ = {isa = PBXBuildFile; fileRef = 440D507FD8F31DB62B1F95C7; };
|
||||
8C0AEA08A71075A6C765AEC9 /* AVKit.framework */ = {isa = PBXBuildFile; fileRef = 3B99CF94C44E2EE04635A439; };
|
||||
91CD2BCE4CA07E18229EB436 /* RecentFilesMenuTemplate.nib */ = {isa = PBXBuildFile; fileRef = 9672FCE6167ADB567A9EB2F8; };
|
||||
9BEA1428416CE06BF72FBAB8 /* DiscRecording.framework */ = {isa = PBXBuildFile; fileRef = 3DC90DA86565B0356B6E5E0B; };
|
||||
|
|
@ -81,7 +80,6 @@
|
|||
3DC90DA86565B0356B6E5E0B /* DiscRecording.framework */ /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; };
|
||||
3E4ED41C374261CFFD309743 /* 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; };
|
||||
40BD06D4AB0D2C73E936A2F1 /* OpenGL.framework */ /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
|
||||
440D507FD8F31DB62B1F95C7 /* Carbon.framework */ /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||
470C3E4553B513FFEF752779 /* AudioToolbox.framework */ /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
491641F7632BCC81BBA0ED85 /* juce_audio_formats */ /* juce_audio_formats */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_formats; path = ../../../../modules/juce_audio_formats; sourceTree = SOURCE_ROOT; };
|
||||
49ECA8B998B339A083674A22 /* Foundation.framework */ /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
|
|
@ -148,7 +146,6 @@
|
|||
163B0CF2DD0990A63DF1D5A6,
|
||||
7B4163348896EB1B86B15160,
|
||||
8C0AEA08A71075A6C765AEC9,
|
||||
89BC6E2354102D975E08E918,
|
||||
9F15FD7A7CE83CFD98F07D59,
|
||||
1351A13E78F38741C6075600,
|
||||
527DA2E6827BAFDDD3E8E80F,
|
||||
|
|
@ -173,7 +170,6 @@
|
|||
470C3E4553B513FFEF752779,
|
||||
DC192EFA899E6CBE6B5CD394,
|
||||
3B99CF94C44E2EE04635A439,
|
||||
440D507FD8F31DB62B1F95C7,
|
||||
02A2ED58B066B4D119F67913,
|
||||
4F0A137A4115946A346180E6,
|
||||
B4389672DA4CC8E0A531062D,
|
||||
|
|
|
|||
|
|
@ -3606,7 +3606,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -6288,9 +6288,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3606,7 +3606,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -6288,9 +6288,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3606,7 +3606,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -6288,9 +6288,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3606,7 +3606,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -6288,9 +6288,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -1643,7 +1643,6 @@ add_library( ${BINARY_NAME}
|
|||
"../../../../../modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_NSViewFrameWatcher.h"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp"
|
||||
|
|
@ -3279,7 +3278,6 @@ set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_l
|
|||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_NSViewFrameWatcher.h" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@
|
|||
7E870C094BAE67D7EB149F1C /* include_juce_events.mm */ = {isa = PBXBuildFile; fileRef = 248FAA119A4FC24C522165EF; };
|
||||
8A0F71A4EEC7FE694352DD94 /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = 9EADBF913B7A454B6BE93A4A; };
|
||||
9031C69145EE085B60904363 /* IOKit.framework */ = {isa = PBXBuildFile; fileRef = 43775DC3D9F7917846EA5327; };
|
||||
9B19A6655FCC8086134C8656 /* Carbon.framework */ = {isa = PBXBuildFile; fileRef = 1DA5C6A474916745AFEC6DA5; };
|
||||
9D47995A33BBA693ED435B31 /* include_juce_gui_extra.mm */ = {isa = PBXBuildFile; fileRef = B06AE97C86D27E7FEBCB4631; };
|
||||
C7B090C29D8DE4D2503204B1 /* include_juce_audio_utils.mm */ = {isa = PBXBuildFile; fileRef = BAFDA8DE51E7A69E477439EB; };
|
||||
CC782AABFA20787BABBCED90 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = E1BB9D521BF6C055F5B88628; };
|
||||
|
|
@ -43,7 +42,6 @@
|
|||
12C680C68A15B9A590264B18 /* CoreMIDI.framework */ /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
|
||||
18C1CCE5684F9FA0478F27AD /* AudioToolbox.framework */ /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
18E39207A0F5F9B8BC7EE94F /* 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; };
|
||||
1DA5C6A474916745AFEC6DA5 /* Carbon.framework */ /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||
24425FFB0BCC7E54CADAA013 /* include_juce_core.mm */ /* include_juce_core.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_core.mm; path = ../../JuceLibraryCode/include_juce_core.mm; sourceTree = SOURCE_ROOT; };
|
||||
248FAA119A4FC24C522165EF /* 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; };
|
||||
24D90B40648CC05A9B1AA55B /* CoreAudioKit.framework */ /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
|
||||
|
|
@ -87,7 +85,6 @@
|
|||
files = (
|
||||
8A0F71A4EEC7FE694352DD94,
|
||||
30BE30F31D1AAED9FC893AA5,
|
||||
9B19A6655FCC8086134C8656,
|
||||
0319B40AD2FD96007FFA928B,
|
||||
5AFD011031C266431687C922,
|
||||
71863EE98034AB7C3CBCAA81,
|
||||
|
|
@ -108,7 +105,6 @@
|
|||
children = (
|
||||
9EADBF913B7A454B6BE93A4A,
|
||||
18C1CCE5684F9FA0478F27AD,
|
||||
1DA5C6A474916745AFEC6DA5,
|
||||
453777CEB7099A5D61901D13,
|
||||
9F28F179EF6B90EB9F4DBEE9,
|
||||
24D90B40648CC05A9B1AA55B,
|
||||
|
|
|
|||
|
|
@ -3105,7 +3105,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/>
|
||||
|
|
|
|||
|
|
@ -5403,9 +5403,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -1773,7 +1773,6 @@ add_library( ${BINARY_NAME}
|
|||
"../../../../../modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_NSViewFrameWatcher.h"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp"
|
||||
|
|
@ -3563,7 +3562,6 @@ set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_l
|
|||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_NSViewFrameWatcher.h" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@
|
|||
15CCE43D7DCFC649638919D4 /* include_juce_audio_basics.mm */ = {isa = PBXBuildFile; fileRef = 4C7D82F9274A4F9DBF11235C; };
|
||||
21D330A5B13178B12BEAFC3C /* AudioToolbox.framework */ = {isa = PBXBuildFile; fileRef = D4EBC17BDB7F88CCBC76730B; };
|
||||
2727A191DB1BAAC9C04B9081 /* include_juce_opengl.mm */ = {isa = PBXBuildFile; fileRef = 37E4D5C341406B7072120006; };
|
||||
2B4B9CF71F94BDD1E3AC89AE /* Carbon.framework */ = {isa = PBXBuildFile; fileRef = B0935EBBA4F6E2B05F3D1C0A; };
|
||||
2C3D221D2AA87F07B3F1044D /* include_juce_gui_basics.mm */ = {isa = PBXBuildFile; fileRef = 8FE7B37CDE0818DB27BDDEBD; };
|
||||
3E1689E23B9C85F03209DCEF /* GraphEditorPanel.cpp */ = {isa = PBXBuildFile; fileRef = 3D78A731234A833CA112AE45; };
|
||||
443244451A0F2064D4767337 /* Icon.icns */ = {isa = PBXBuildFile; fileRef = 2A6983F82B13F9E8B10299AE; };
|
||||
|
|
@ -103,7 +102,6 @@
|
|||
A66EFAC64B1B67B536C73415 /* HostStartup.cpp */ /* HostStartup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HostStartup.cpp; path = ../../Source/HostStartup.cpp; sourceTree = SOURCE_ROOT; };
|
||||
A692426308435C2002F988FE /* proaudio.path */ /* proaudio.path */ = {isa = PBXFileReference; lastKnownFileType = file.path; name = proaudio.path; path = ../../../../examples/Assets/proaudio.path; sourceTree = SOURCE_ROOT; };
|
||||
A872AF2CAFFC72109B9C6348 /* cassette_recorder.wav */ /* cassette_recorder.wav */ = {isa = PBXFileReference; lastKnownFileType = file.wav; name = cassette_recorder.wav; path = ../../../../examples/Assets/cassette_recorder.wav; sourceTree = SOURCE_ROOT; };
|
||||
B0935EBBA4F6E2B05F3D1C0A /* Carbon.framework */ /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||
B285CAB91AE928C476CA4F9C /* include_juce_audio_utils.mm */ /* include_juce_audio_utils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_audio_utils.mm; path = ../../JuceLibraryCode/include_juce_audio_utils.mm; sourceTree = SOURCE_ROOT; };
|
||||
B2A1E626CC120982805754F6 /* JUCEAppIcon.png */ /* JUCEAppIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = JUCEAppIcon.png; path = ../../Source/JUCEAppIcon.png; sourceTree = SOURCE_ROOT; };
|
||||
B457EE687507BF1DEEA7581F /* WebKit.framework */ /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||
|
|
@ -130,7 +128,6 @@
|
|||
B288A89F96704F142ED8E939,
|
||||
73E371F1B912FCCAE0CD7E5D,
|
||||
21D330A5B13178B12BEAFC3C,
|
||||
2B4B9CF71F94BDD1E3AC89AE,
|
||||
AC3BED74AC7C6D9F5739F38B,
|
||||
E3CB85BA817BC9E3942A8AB0,
|
||||
70580743C3D5695F065FF698,
|
||||
|
|
@ -269,7 +266,6 @@
|
|||
5ACC21AA45BBF48C3C64D56D,
|
||||
86CA337014D3F67E906FFD28,
|
||||
D4EBC17BDB7F88CCBC76730B,
|
||||
B0935EBBA4F6E2B05F3D1C0A,
|
||||
9794142D24966F93FFDE51A1,
|
||||
9F9B445E6755CAA19E4344ED,
|
||||
E68018DE199135B7F738FB17,
|
||||
|
|
|
|||
|
|
@ -3340,7 +3340,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -5838,9 +5838,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3340,7 +3340,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -5838,9 +5838,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3340,7 +3340,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -5838,9 +5838,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3340,7 +3340,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -5838,9 +5838,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -1662,7 +1662,6 @@ add_library( ${BINARY_NAME}
|
|||
"../../../../../modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_NSViewFrameWatcher.h"
|
||||
"../../../../../modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp"
|
||||
|
|
@ -3378,7 +3377,6 @@ set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_l
|
|||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_NSViewFrameWatcher.h" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
set_source_files_properties("../../../../../modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
A1F34D09F4E4338775917ED1 /* include_juce_audio_formats.mm */ = {isa = PBXBuildFile; fileRef = C6E2284D86D93F1D9D5C7666; };
|
||||
B323E5E5FBD5663B21A8E623 /* OpenGL.framework */ = {isa = PBXBuildFile; fileRef = 996E743A20FC78671766BF59; };
|
||||
BB9A9692D99DD0DDB1047B60 /* include_juce_audio_basics.mm */ = {isa = PBXBuildFile; fileRef = 6D1F9E505D20C09647124F0A; };
|
||||
BED88ADEA4DC91AA8C810FA8 /* Carbon.framework */ = {isa = PBXBuildFile; fileRef = 398A945EFD9ED923162982B1; };
|
||||
C4D6C466C41173D6970553D2 /* AudioToolbox.framework */ = {isa = PBXBuildFile; fileRef = 9E8129263CD42C6029FC2CAD; };
|
||||
C5E7BAD864E02CF37F7BD707 /* include_juce_events.mm */ = {isa = PBXBuildFile; fileRef = 33AA348465F512DBA8778DAF; };
|
||||
C6348C6B1D0312580E97EA19 /* include_juce_osc.cpp */ = {isa = PBXBuildFile; fileRef = 3BF06B70407FFDBE9534F942; };
|
||||
|
|
@ -50,7 +49,6 @@
|
|||
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; };
|
||||
398A945EFD9ED923162982B1 /* Carbon.framework */ /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||
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; };
|
||||
|
|
@ -107,7 +105,6 @@
|
|||
files = (
|
||||
80EE2C27B466BAFD83881D3F,
|
||||
C4D6C466C41173D6970553D2,
|
||||
BED88ADEA4DC91AA8C810FA8,
|
||||
3C30D7C28C86F4054257DCD5,
|
||||
67DF295E93E54432043126DF,
|
||||
770AB74B1D3A0108F764DD47,
|
||||
|
|
@ -151,7 +148,6 @@
|
|||
children = (
|
||||
2E13A899F4E3C99054A3656F,
|
||||
9E8129263CD42C6029FC2CAD,
|
||||
398A945EFD9ED923162982B1,
|
||||
C78806A6727F44EACFDED4A5,
|
||||
6799B056504F9F017998B9E2,
|
||||
4D1DB6D77B6F3DE7A569780B,
|
||||
|
|
|
|||
|
|
@ -3203,7 +3203,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -5565,9 +5565,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@
|
|||
11D42F7EC6E6539D79A7F4B1 /* QuartzCore.framework */ = {isa = PBXBuildFile; fileRef = E5D6C36496F5BC84D7213BE8; };
|
||||
1321E6C1C6170B6C898AD09D /* Icon.icns */ = {isa = PBXBuildFile; fileRef = 951128CA33CCDEF570436B1C; };
|
||||
1B988E139004D8E2850EB656 /* jucer_PaintRoutine.cpp */ = {isa = PBXBuildFile; fileRef = C187718F7B9EBA88584B43F3; };
|
||||
1E76E36772355E2A43CF4961 /* Carbon.framework */ = {isa = PBXBuildFile; fileRef = D00F311BFC3C2625C457CB9B; };
|
||||
209FCCC2155A1FCB7E11E20D /* jucer_JucerDocument.cpp */ = {isa = PBXBuildFile; fileRef = 269A454F1FF081DA67FFD578; };
|
||||
234B6BA2952CBC7C61EF70EF /* include_juce_events.mm */ = {isa = PBXBuildFile; fileRef = 5867DC4E39DF8539B54C0D59; };
|
||||
241F29FCBB7A17BB44A0B10C /* Cocoa.framework */ = {isa = PBXBuildFile; fileRef = D1F9B0E9F5D54FE48BEB46EA; };
|
||||
|
|
@ -314,7 +313,6 @@
|
|||
CCD62DB0A19A985A4B9D7F32 /* jucer_ProjectExport_Android.h */ /* jucer_ProjectExport_Android.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_Android.h; path = ../../Source/ProjectSaving/jucer_ProjectExport_Android.h; sourceTree = SOURCE_ROOT; };
|
||||
CD267A28C16C4E79EB749005 /* gpl_logo.svg */ /* gpl_logo.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = gpl_logo.svg; path = ../../Source/BinaryData/Icons/gpl_logo.svg; sourceTree = SOURCE_ROOT; };
|
||||
CF6C8BD0DA3D8CD4E99EBADA /* WebKit.framework */ /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||
D00F311BFC3C2625C457CB9B /* Carbon.framework */ /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||
D045BD5943BD38F2720FF5F0 /* jucer_FontPropertyComponent.h */ /* jucer_FontPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_FontPropertyComponent.h; path = ../../Source/ComponentEditor/Properties/jucer_FontPropertyComponent.h; sourceTree = SOURCE_ROOT; };
|
||||
D05BD91B6105827B010E1C20 /* juce_gui_extra */ /* juce_gui_extra */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_gui_extra; path = ../../../../modules/juce_gui_extra; sourceTree = SOURCE_ROOT; };
|
||||
D1739728A79A2062418B8EF0 /* wizard_StaticLibrary.svg */ /* wizard_StaticLibrary.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = wizard_StaticLibrary.svg; path = ../../Source/BinaryData/Icons/wizard_StaticLibrary.svg; sourceTree = SOURCE_ROOT; };
|
||||
|
|
@ -390,7 +388,6 @@
|
|||
A578EAD4BB55680E8097BE0F,
|
||||
C1B9334AE849F93FB3C56B34,
|
||||
A14C2C2725DA3CA7995D2815,
|
||||
1E76E36772355E2A43CF4961,
|
||||
241F29FCBB7A17BB44A0B10C,
|
||||
9359F9401D59B4517F75C39C,
|
||||
091A57B4B9CE623E75E9A756,
|
||||
|
|
@ -442,7 +439,6 @@
|
|||
80D62B907248523E6943298B,
|
||||
5A75806B34E4EA6598A6024A,
|
||||
210CD22F25F2C22F9CEEB025,
|
||||
D00F311BFC3C2625C457CB9B,
|
||||
D1F9B0E9F5D54FE48BEB46EA,
|
||||
728FE25157E9874D50BBECB2,
|
||||
E983E6DDE3318B872EBE347F,
|
||||
|
|
|
|||
|
|
@ -2136,7 +2136,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\JuceLibraryCode\BinaryData.h"/>
|
||||
|
|
|
|||
|
|
@ -3759,9 +3759,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -2136,7 +2136,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\JuceLibraryCode\BinaryData.h"/>
|
||||
|
|
|
|||
|
|
@ -3759,9 +3759,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -2136,7 +2136,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\JuceLibraryCode\BinaryData.h"/>
|
||||
|
|
|
|||
|
|
@ -3759,9 +3759,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -2136,7 +2136,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\JuceLibraryCode\BinaryData.h"/>
|
||||
|
|
|
|||
|
|
@ -3759,9 +3759,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
3822F598DA7044E5DB7633A9 /* include_juce_audio_utils.mm */ = {isa = PBXBuildFile; fileRef = 846E187EC2E797B982861CA4; };
|
||||
3866839F4051D104244870B1 /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = 336A244E3C6460495F0A424C; };
|
||||
4BC57B0D2215621D90C8881C /* WebKit.framework */ = {isa = PBXBuildFile; fileRef = D2EBC6292AE5AFC46EB10DAC; };
|
||||
59004CE43AE081B4A6CE9E17 /* Carbon.framework */ = {isa = PBXBuildFile; fileRef = 1932D54A7FAE13BADBA3E9B5; };
|
||||
5CB3596030B0DD3763CAF85C /* include_juce_data_structures.mm */ = {isa = PBXBuildFile; fileRef = 302A999B2803C0D5C15D237C; };
|
||||
5FE50792EDC7638DE9A824B5 /* RecentFilesMenuTemplate.nib */ = {isa = PBXBuildFile; fileRef = 5C7BDD8DF72F2FC2D44D757A; };
|
||||
66FC7F44EEC9044E5C4A21C3 /* CoreAudio.framework */ = {isa = PBXBuildFile; fileRef = C0531453A002C480280C5F05; };
|
||||
|
|
@ -54,7 +53,6 @@
|
|||
080EAB9CF5AB2BD6B2BBB173 /* ConsoleApp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = UnitTestRunner; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
08ED235CBE02E0FB4BE4653E /* 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; };
|
||||
1088318C19CEB1861C58B3BA /* include_juce_video.mm */ /* include_juce_video.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_video.mm; path = ../../JuceLibraryCode/include_juce_video.mm; sourceTree = SOURCE_ROOT; };
|
||||
1932D54A7FAE13BADBA3E9B5 /* Carbon.framework */ /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||
1CA82C74AEC08421812BDCAC /* 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; };
|
||||
1DC921E6494548F5E73E1056 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
|
||||
2030A589A9355FE6A0F72428 /* Cocoa.framework */ /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
|
|
@ -116,7 +114,6 @@
|
|||
96EFF7BA261F57DD829324D8,
|
||||
6EB1A3B818863EF1787A9CCE,
|
||||
D82BA4D40F5686DAFF5E11FB,
|
||||
59004CE43AE081B4A6CE9E17,
|
||||
AA207299991F85938465BF65,
|
||||
66FC7F44EEC9044E5C4A21C3,
|
||||
3866839F4051D104244870B1,
|
||||
|
|
@ -141,7 +138,6 @@
|
|||
7898C73DCA6FA9D9CF669D32,
|
||||
4B427AF10E722F9A362CEB73,
|
||||
99527F36B4484133087435CD,
|
||||
1932D54A7FAE13BADBA3E9B5,
|
||||
2030A589A9355FE6A0F72428,
|
||||
C0531453A002C480280C5F05,
|
||||
336A244E3C6460495F0A424C,
|
||||
|
|
|
|||
|
|
@ -3408,7 +3408,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -5934,9 +5934,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3408,7 +3408,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -5934,9 +5934,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3408,7 +3408,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -5934,9 +5934,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3179,7 +3179,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SplashScreen.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_SystemTrayIconComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_opengl\geometry\juce_Draggable3DOrientation.h"/>
|
||||
|
|
|
|||
|
|
@ -5532,9 +5532,6 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\misc\juce_WebBrowserComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_CarbonViewWrapperComponent.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_gui_extra\native\juce_mac_NSViewFrameWatcher.h">
|
||||
<Filter>JUCE Modules\juce_gui_extra\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -1,403 +0,0 @@
|
|||
/*
|
||||
File: AUCarbonViewBase.cpp
|
||||
Abstract: AUCarbonViewBase.h
|
||||
Version: 1.1
|
||||
|
||||
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
|
||||
Inc. ("Apple") in consideration of your agreement to the following
|
||||
terms, and your use, installation, modification or redistribution of
|
||||
this Apple software constitutes acceptance of these terms. If you do
|
||||
not agree with these terms, please do not use, install, modify or
|
||||
redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and
|
||||
subject to these terms, Apple grants you a personal, non-exclusive
|
||||
license, under Apple's copyrights in this original Apple software (the
|
||||
"Apple Software"), to use, reproduce, modify and redistribute the Apple
|
||||
Software, with or without modifications, in source and/or binary forms;
|
||||
provided that if you redistribute the Apple Software in its entirety and
|
||||
without modifications, you must retain this notice and the following
|
||||
text and disclaimers in all such redistributions of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may
|
||||
be used to endorse or promote products derived from the Apple Software
|
||||
without specific prior written permission from Apple. Except as
|
||||
expressly stated in this notice, no other rights or licenses, express or
|
||||
implied, are granted by Apple herein, including but not limited to any
|
||||
patent rights that may be infringed by your derivative works or by other
|
||||
works in which the Apple Software may be incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
|
||||
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
|
||||
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
|
||||
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
|
||||
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
|
||||
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2014 Apple Inc. All Rights Reserved.
|
||||
|
||||
*/
|
||||
#include "AUCarbonViewBase.h"
|
||||
#include "AUCarbonViewControl.h"
|
||||
#include <algorithm>
|
||||
|
||||
AUCarbonViewBase::AUCarbonViewBase(AudioUnitCarbonView inInstance, Float32 inNotificationInterval /* in seconds */) :
|
||||
ComponentBase(inInstance),
|
||||
mEditAudioUnit(0),
|
||||
mParameterListener(NULL),
|
||||
#if !__LP64__
|
||||
mEventListener(NULL),
|
||||
#endif
|
||||
mTimerRef (NULL),
|
||||
mTimerUPP (NULL),
|
||||
mCarbonWindow(NULL),
|
||||
mCarbonPane(NULL),
|
||||
mXOffset(0),
|
||||
mYOffset(0)
|
||||
{
|
||||
AUEventListenerCreate (ParameterListener, this,
|
||||
CFRunLoopGetCurrent(), kCFRunLoopCommonModes,
|
||||
inNotificationInterval, inNotificationInterval,
|
||||
&mParameterListener);
|
||||
}
|
||||
|
||||
AUCarbonViewBase::~AUCarbonViewBase()
|
||||
{
|
||||
#if !__LP64__
|
||||
if (mCarbonPane)
|
||||
DisposeControl(mCarbonPane);
|
||||
|
||||
for (ControlList::iterator it = mControlList.begin(); it != mControlList.end(); ++it) {
|
||||
AUCarbonViewControl *ctl = *it;
|
||||
delete ctl;
|
||||
}
|
||||
AUListenerDispose(mParameterListener);
|
||||
|
||||
if (mTimerRef)
|
||||
::RemoveEventLoopTimer (mTimerRef);
|
||||
|
||||
if (mTimerUPP)
|
||||
DisposeEventLoopTimerUPP (mTimerUPP);
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUCarbonViewBase::AddControl(AUCarbonViewControl *control)
|
||||
{
|
||||
ControlList::iterator it = find(mControlList.begin(), mControlList.end(), control);
|
||||
if (it == mControlList.end())
|
||||
mControlList.push_back(control);
|
||||
}
|
||||
|
||||
void AUCarbonViewBase::RemoveControl(AUCarbonViewControl *control)
|
||||
{
|
||||
ControlList::iterator it = find(mControlList.begin(), mControlList.end(), control);
|
||||
if (it != mControlList.end()) {
|
||||
AUCarbonViewControl *ctl = *it;
|
||||
mControlList.erase(it);
|
||||
delete ctl;
|
||||
}
|
||||
}
|
||||
|
||||
void AUCarbonViewBase::ClearControls ()
|
||||
{
|
||||
for (ControlList::iterator it = mControlList.begin(); it != mControlList.end(); ++it) {
|
||||
AUCarbonViewControl *ctl = *it;
|
||||
delete ctl;
|
||||
}
|
||||
mControlList.clear();
|
||||
}
|
||||
|
||||
void AUCarbonViewBase::ParameterListener(void * inCallbackRefCon,
|
||||
void * inObject,
|
||||
const AudioUnitEvent * inEvent,
|
||||
UInt64 inEventHostTime,
|
||||
Float32 inParameterValue)
|
||||
{
|
||||
if (inEvent->mEventType == kAudioUnitEvent_ParameterValueChange) {
|
||||
AUCarbonViewControl *ctl = (AUCarbonViewControl *)inObject;
|
||||
ctl->ParameterToControl(inParameterValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
OSStatus AUCarbonViewBase::CreateCarbonView(AudioUnit inAudioUnit, WindowRef inWindow, ControlRef inParentControl, const Float32Point &inLocation, const Float32Point &inSize, ControlRef &outParentControl)
|
||||
{
|
||||
#if !__LP64__
|
||||
mEditAudioUnit = inAudioUnit;
|
||||
mCarbonWindow = inWindow;
|
||||
|
||||
WindowAttributes attributes;
|
||||
verify_noerr(GetWindowAttributes(mCarbonWindow, &attributes));
|
||||
mCompositWindow = (attributes & kWindowCompositingAttribute) != 0;
|
||||
|
||||
Rect area;
|
||||
area.left = short(inLocation.x); area.top = short(inLocation.y);
|
||||
area.right = short(area.left + inSize.x); area.bottom = short(area.top + inSize.y);
|
||||
OSStatus err = ::CreateUserPaneControl(inWindow, &area,
|
||||
kControlSupportsEmbedding,
|
||||
&mCarbonPane); // subclass can resize mCarbonPane to taste
|
||||
verify_noerr(err);
|
||||
if (err) return err;
|
||||
outParentControl = mCarbonPane;
|
||||
|
||||
// register for mouse-down in our pane -- we want to clear focus
|
||||
EventTypeSpec paneEvents[] = {
|
||||
{ kEventClassControl, kEventControlClick }
|
||||
};
|
||||
WantEventTypes(GetControlEventTarget(mCarbonPane), GetEventTypeCount(paneEvents), paneEvents);
|
||||
|
||||
if (IsCompositWindow()) {
|
||||
verify_noerr(::HIViewAddSubview(inParentControl, mCarbonPane));
|
||||
mXOffset = 0;
|
||||
mYOffset = 0;
|
||||
}
|
||||
else {
|
||||
verify_noerr(::EmbedControl(mCarbonPane, inParentControl));
|
||||
mXOffset = inLocation.x;
|
||||
mYOffset = inLocation.y;
|
||||
}
|
||||
mBottomRight.h = mBottomRight.v = 0;
|
||||
|
||||
SizeControl(mCarbonPane, 0, 0);
|
||||
if (err = CreateUI(mXOffset, mYOffset))
|
||||
return err;
|
||||
|
||||
// we should only resize the control if a subclass has embedded
|
||||
// controls in this AND this is done with the EmbedControl call below
|
||||
// if mBottomRight is STILL equal to zero, then that wasn't done
|
||||
// so don't size the control
|
||||
Rect paneBounds;
|
||||
GetControlBounds(mCarbonPane, &paneBounds);
|
||||
// only resize mCarbonPane if it has not already been resized during CreateUI
|
||||
if ((paneBounds.top == paneBounds.bottom) && (paneBounds.left == paneBounds.right)) {
|
||||
if (mBottomRight.h != 0 && mBottomRight.v != 0)
|
||||
SizeControl(mCarbonPane, (short) (mBottomRight.h - mXOffset), (short) (mBottomRight.v - mYOffset));
|
||||
}
|
||||
|
||||
if (IsCompositWindow()) {
|
||||
// prepare for handling scroll-events
|
||||
EventTypeSpec scrollEvents[] = {
|
||||
{ kEventClassScrollable, kEventScrollableGetInfo },
|
||||
{ kEventClassScrollable, kEventScrollableScrollTo }
|
||||
};
|
||||
|
||||
WantEventTypes(GetControlEventTarget(mCarbonPane), GetEventTypeCount(scrollEvents), scrollEvents);
|
||||
|
||||
mCurrentScrollPoint.x = mCurrentScrollPoint.y = 0.0f;
|
||||
}
|
||||
|
||||
return err;
|
||||
#else
|
||||
return noErr;
|
||||
#endif
|
||||
}
|
||||
|
||||
OSStatus AUCarbonViewBase::CreateUI(Float32 inXOffset, Float32 inYOffset)
|
||||
{
|
||||
return noErr;
|
||||
}
|
||||
|
||||
OSStatus AUCarbonViewBase::EmbedControl(ControlRef ctl)
|
||||
{
|
||||
#if !__LP64__
|
||||
Rect r;
|
||||
::GetControlBounds(ctl, &r);
|
||||
if (r.right > mBottomRight.h) mBottomRight.h = r.right;
|
||||
if (r.bottom > mBottomRight.v) mBottomRight.v = r.bottom;
|
||||
|
||||
if (IsCompositWindow())
|
||||
return ::HIViewAddSubview(mCarbonPane, ctl);
|
||||
else
|
||||
return ::EmbedControl(ctl, mCarbonPane);
|
||||
#else
|
||||
return noErr;
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUCarbonViewBase::AddCarbonControl(AUCarbonViewControl::ControlType type, const CAAUParameter ¶m, ControlRef control)
|
||||
{
|
||||
verify_noerr(EmbedControl(control));
|
||||
|
||||
AUCarbonViewControl *auvc = new AUCarbonViewControl(this, mParameterListener, type, param, control);
|
||||
auvc->Bind();
|
||||
AddControl(auvc);
|
||||
}
|
||||
|
||||
bool AUCarbonViewBase::HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event)
|
||||
{
|
||||
#if !__LP64__
|
||||
UInt32 eclass = GetEventClass(event);
|
||||
UInt32 ekind = GetEventKind(event);
|
||||
ControlRef control;
|
||||
|
||||
switch (eclass) {
|
||||
case kEventClassControl:
|
||||
{
|
||||
switch (ekind) {
|
||||
case kEventControlClick:
|
||||
GetEventParameter(event, kEventParamDirectObject, typeControlRef, NULL, sizeof(ControlRef), NULL, &control);
|
||||
if (control == mCarbonPane) {
|
||||
ClearKeyboardFocus(mCarbonWindow);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kEventClassScrollable:
|
||||
{
|
||||
switch (ekind) {
|
||||
case kEventScrollableGetInfo:
|
||||
{
|
||||
// [1/4]
|
||||
/* <-- kEventParamImageSize (out, typeHISize)
|
||||
* On exit, contains the size of the entire scrollable view.
|
||||
*/
|
||||
HISize originalSize = { static_cast<CGFloat>(mBottomRight.h), static_cast<CGFloat>(mBottomRight.v) };
|
||||
verify_noerr(SetEventParameter(event, kEventParamImageSize, typeHISize, sizeof(HISize), &originalSize));
|
||||
|
||||
// [2/4]
|
||||
/* <-- kEventParamViewSize (out, typeHISize)
|
||||
* On exit, contains the amount of the scrollable view that is
|
||||
* visible.
|
||||
*/
|
||||
HIViewRef parentView = HIViewGetSuperview(mCarbonPane);
|
||||
HIRect parentBounds;
|
||||
verify_noerr(HIViewGetBounds(parentView, &parentBounds));
|
||||
//HISize windowSize = { float(windowBounds.right - windowBounds.left),
|
||||
// float(windowBounds.bottom - windowBounds.top) };
|
||||
verify_noerr(SetEventParameter(event, kEventParamViewSize, typeHISize, sizeof(HISize), &(parentBounds.size)));
|
||||
|
||||
// [3/4]
|
||||
/* <-- kEventParamLineSize (out, typeHISize)
|
||||
* On exit, contains the amount that should be scrolled in
|
||||
* response to a single click on a scrollbar arrow.
|
||||
*/
|
||||
HISize scrollIncrementSize = { 16.0f, float(20) };
|
||||
verify_noerr(SetEventParameter(event, kEventParamLineSize, typeHISize, sizeof(HISize), &scrollIncrementSize));
|
||||
|
||||
// [4/4]
|
||||
/* <-- kEventParamOrigin (out, typeHIPoint)
|
||||
* On exit, contains the scrollable viewÕs current origin (the
|
||||
* view-relative coordinate that is drawn at the top left
|
||||
* corner of its frame). These coordinates should always be
|
||||
* greater than or equal to zero. They should be less than or
|
||||
* equal to the viewÕs image size minus its view size.
|
||||
*/
|
||||
verify_noerr(SetEventParameter(event, kEventParamOrigin, typeHIPoint, sizeof(HIPoint), &mCurrentScrollPoint));
|
||||
}
|
||||
return true;
|
||||
|
||||
case kEventScrollableScrollTo:
|
||||
{
|
||||
/*
|
||||
* kEventClassScrollable / kEventScrollableScrollTo
|
||||
*
|
||||
* Summary:
|
||||
* Requests that an HIScrollViewÕs scrollable view should scroll to
|
||||
* a particular origin.
|
||||
*/
|
||||
|
||||
/* --> kEventParamOrigin (in, typeHIPoint)
|
||||
* The new origin for the scrollable view. The origin
|
||||
* coordinates will vary from (0,0) to scrollable viewÕs image
|
||||
* size minus its view size.
|
||||
*/
|
||||
HIPoint pointToScrollTo;
|
||||
verify_noerr(GetEventParameter(event, kEventParamOrigin, typeHIPoint, NULL, sizeof(HIPoint), NULL, &pointToScrollTo));
|
||||
|
||||
float xDelta = mCurrentScrollPoint.x - pointToScrollTo.x;
|
||||
float yDelta = mCurrentScrollPoint.y - pointToScrollTo.y;
|
||||
// move visible portion the appropriate amount
|
||||
verify_noerr(HIViewScrollRect(mCarbonPane, NULL, xDelta, yDelta));
|
||||
// set new content to be drawn
|
||||
verify_noerr(HIViewSetBoundsOrigin(mCarbonPane, pointToScrollTo.x, pointToScrollTo.y));
|
||||
|
||||
mCurrentScrollPoint = pointToScrollTo;
|
||||
}
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
/*! @method TellListener */
|
||||
void AUCarbonViewBase::TellListener (const CAAUParameter &auvp, AudioUnitCarbonViewEventID event, void *evpar)
|
||||
{
|
||||
#if !__LP64__
|
||||
if (mEventListener)
|
||||
(*mEventListener)(mEventListenerUserData, mComponentInstance, &auvp, event, evpar);
|
||||
#endif
|
||||
|
||||
AudioUnitEvent auEvent;
|
||||
auEvent.mArgument.mParameter = auvp;
|
||||
if (event == kAudioUnitCarbonViewEvent_MouseDownInControl) {
|
||||
auEvent.mEventType = kAudioUnitEvent_BeginParameterChangeGesture;
|
||||
} else {
|
||||
auEvent.mEventType = kAudioUnitEvent_EndParameterChangeGesture;
|
||||
}
|
||||
AUEventListenerNotify(mParameterListener, this, &auEvent);
|
||||
}
|
||||
|
||||
|
||||
void AUCarbonViewBase::Update (bool inUIThread)
|
||||
{
|
||||
for (ControlList::iterator iter = mControlList.begin(); iter != mControlList.end(); ++iter)
|
||||
{
|
||||
(*iter)->Update(inUIThread);
|
||||
}
|
||||
}
|
||||
|
||||
pascal void AUCarbonViewBase::TheTimerProc (EventLoopTimerRef inTimer, void *inUserData)
|
||||
{
|
||||
AUCarbonViewBase* This = reinterpret_cast<AUCarbonViewBase*>(inUserData);
|
||||
This->RespondToEventTimer (inTimer);
|
||||
}
|
||||
|
||||
void AUCarbonViewBase::RespondToEventTimer (EventLoopTimerRef inTimer)
|
||||
{}
|
||||
|
||||
/*
|
||||
THESE are reasonable values for these two times
|
||||
0.005 // delay
|
||||
0.050 // interval
|
||||
*/
|
||||
|
||||
OSStatus AUCarbonViewBase::CreateEventLoopTimer (Float32 inDelay, Float32 inInterval)
|
||||
{
|
||||
if (mTimerUPP)
|
||||
return noErr;
|
||||
|
||||
mTimerUPP = NewEventLoopTimerUPP(TheTimerProc);
|
||||
|
||||
EventLoopRef mainEventLoop = GetMainEventLoop();
|
||||
|
||||
//doesn't seem to like too small a value
|
||||
if (inDelay < 0.005)
|
||||
inDelay = 0.005;
|
||||
|
||||
OSStatus timerResult = ::InstallEventLoopTimer(
|
||||
mainEventLoop,
|
||||
inDelay,
|
||||
inInterval,
|
||||
mTimerUPP,
|
||||
this,
|
||||
&mTimerRef);
|
||||
return timerResult;
|
||||
}
|
||||
|
|
@ -1,190 +0,0 @@
|
|||
/*
|
||||
File: AUCarbonViewBase.h
|
||||
Abstract: Part of CoreAudio Utility Classes
|
||||
Version: 1.1
|
||||
|
||||
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
|
||||
Inc. ("Apple") in consideration of your agreement to the following
|
||||
terms, and your use, installation, modification or redistribution of
|
||||
this Apple software constitutes acceptance of these terms. If you do
|
||||
not agree with these terms, please do not use, install, modify or
|
||||
redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and
|
||||
subject to these terms, Apple grants you a personal, non-exclusive
|
||||
license, under Apple's copyrights in this original Apple software (the
|
||||
"Apple Software"), to use, reproduce, modify and redistribute the Apple
|
||||
Software, with or without modifications, in source and/or binary forms;
|
||||
provided that if you redistribute the Apple Software in its entirety and
|
||||
without modifications, you must retain this notice and the following
|
||||
text and disclaimers in all such redistributions of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may
|
||||
be used to endorse or promote products derived from the Apple Software
|
||||
without specific prior written permission from Apple. Except as
|
||||
expressly stated in this notice, no other rights or licenses, express or
|
||||
implied, are granted by Apple herein, including but not limited to any
|
||||
patent rights that may be infringed by your derivative works or by other
|
||||
works in which the Apple Software may be incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
|
||||
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
|
||||
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
|
||||
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
|
||||
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
|
||||
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2014 Apple Inc. All Rights Reserved.
|
||||
|
||||
*/
|
||||
#ifndef __AUCarbonViewBase_h__
|
||||
#define __AUCarbonViewBase_h__
|
||||
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
|
||||
#include <vector>
|
||||
#include "AUCarbonViewControl.h"
|
||||
#include "ComponentBase.h"
|
||||
|
||||
static const Float32 kDefaultNotificationInterval = 0.100;
|
||||
|
||||
/*! @class AUCarbonViewBase */
|
||||
class AUCarbonViewBase : public ComponentBase, public CarbonEventHandler
|
||||
{
|
||||
public:
|
||||
/*! @ctor AUCarbonViewBase */
|
||||
AUCarbonViewBase ( AudioUnitCarbonView inInstance,
|
||||
Float32 inNotificationInterval = kDefaultNotificationInterval /* in seconds */);
|
||||
/*! @dtor ~AUCarbonViewBase */
|
||||
virtual ~AUCarbonViewBase();
|
||||
|
||||
// AUViewBase overrides
|
||||
/*! @method CreateCarbonView */
|
||||
virtual OSStatus CreateCarbonView (AudioUnit inAudioUnit, WindowRef inWindow, ControlRef inParentControl, const Float32Point &inLocation, const Float32Point &inSize, ControlRef &outParentControl);
|
||||
|
||||
// our own virtual methods
|
||||
/*! @method CreateUI */
|
||||
virtual OSStatus CreateUI (Float32 inXOffset, Float32 inYOffset);
|
||||
|
||||
/*! @method HandleEvent */
|
||||
virtual bool HandleEvent (EventHandlerCallRef inHandlerRef, EventRef event);
|
||||
|
||||
/*! @method GetEditAudioUnit */
|
||||
const AudioUnit GetEditAudioUnit () const { return mEditAudioUnit; }
|
||||
//
|
||||
/*! @method ComponentEntryDispatch */
|
||||
static OSStatus ComponentEntryDispatch (
|
||||
ComponentParameters * params,
|
||||
AUCarbonViewBase * This);
|
||||
|
||||
/*! @method AddCarbonControl */
|
||||
void AddCarbonControl (
|
||||
AUCarbonViewControl::ControlType type,
|
||||
const CAAUParameter & param,
|
||||
ControlRef control);
|
||||
|
||||
/*! @method GetCarbonWindow */
|
||||
WindowRef GetCarbonWindow () { return mCarbonWindow; }
|
||||
/*! @method GetCarbonPane */
|
||||
ControlRef GetCarbonPane () { return mCarbonPane; }
|
||||
/*! @method EmbedControl */
|
||||
OSStatus EmbedControl (ControlRef ctl);
|
||||
|
||||
/*! @method TellListener */
|
||||
void TellListener (const CAAUParameter &auvp, AudioUnitCarbonViewEventID event, void *evpar);
|
||||
|
||||
// pass in true if wanting an update to the view and you're calling this from a thread
|
||||
// that is safe to do UI in.
|
||||
// If you don't know, pass in false!
|
||||
/*! @method Update */
|
||||
void Update (bool inUIThread);
|
||||
|
||||
/*! @method GetXOffset */
|
||||
Float32 GetXOffset () { return mXOffset; }
|
||||
/*! @method GetYOffset */
|
||||
Float32 GetYOffset () { return mYOffset; }
|
||||
|
||||
/*! @method ClearControls */
|
||||
void ClearControls ();
|
||||
|
||||
/*! @method IsCompositWindow */
|
||||
bool IsCompositWindow () const { return mCompositWindow; }
|
||||
|
||||
protected:
|
||||
#if !__LP64__
|
||||
/*! @method SetEventListener */
|
||||
void SetEventListener (AudioUnitCarbonViewEventListener listener, void *userData)
|
||||
{
|
||||
mEventListener = listener;
|
||||
mEventListenerUserData = userData;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*! @method AddControl */
|
||||
void AddControl (AUCarbonViewControl *control);
|
||||
/*! @method RemoveControl */
|
||||
void RemoveControl (AUCarbonViewControl *control);
|
||||
|
||||
OSStatus CreateEventLoopTimer (Float32 inDelay, Float32 inInterval);
|
||||
|
||||
/*! @method ParameterListener */
|
||||
static void ParameterListener (void * inCallbackRefCon,
|
||||
void * inObject,
|
||||
const AudioUnitEvent * inEvent,
|
||||
UInt64 inEventHostTime,
|
||||
Float32 inParameterValue);
|
||||
|
||||
static pascal void TheTimerProc ( EventLoopTimerRef inTimer,
|
||||
void * inUserData);
|
||||
|
||||
virtual void RespondToEventTimer (EventLoopTimerRef inTimer);
|
||||
|
||||
/*! @var mEditAudioUnit */
|
||||
AudioUnit mEditAudioUnit; // the AU we're controlling
|
||||
/*! @var mParameterListener */
|
||||
AUEventListenerRef mParameterListener;
|
||||
|
||||
#if !__LP64__
|
||||
/*! @var mEventListener */
|
||||
AudioUnitCarbonViewEventListener
|
||||
mEventListener;
|
||||
#endif
|
||||
|
||||
/*! @var mEventListenerUserData */
|
||||
void * mEventListenerUserData;
|
||||
|
||||
private:
|
||||
typedef std::vector<AUCarbonViewControl *> ControlList;
|
||||
/*! @var mControlList */
|
||||
ControlList mControlList;
|
||||
|
||||
EventLoopTimerRef mTimerRef;
|
||||
|
||||
EventLoopTimerUPP mTimerUPP;
|
||||
|
||||
protected:
|
||||
/*! @var mCarbonWindow */
|
||||
WindowRef mCarbonWindow;
|
||||
/*! @var mCarbonPane */
|
||||
ControlRef mCarbonPane; // user pane, contains all other controls
|
||||
/*! @var mBottomRight */
|
||||
Point mBottomRight; // largest width and height of child controls
|
||||
/*! @var mXOffset */
|
||||
Float32 mXOffset;
|
||||
/*! @var mYOffset */
|
||||
Float32 mYOffset;
|
||||
/*! @var mCompositWindow */
|
||||
bool mCompositWindow;
|
||||
/*! @var mCurrentScrollPoint */
|
||||
HIPoint mCurrentScrollPoint; // needed for scrolling
|
||||
};
|
||||
|
||||
|
||||
#endif // __AUCarbonViewBase_h__
|
||||
|
|
@ -1,710 +0,0 @@
|
|||
/*
|
||||
File: AUCarbonViewControl.cpp
|
||||
Abstract: AUCarbonViewControl.h
|
||||
Version: 1.1
|
||||
|
||||
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
|
||||
Inc. ("Apple") in consideration of your agreement to the following
|
||||
terms, and your use, installation, modification or redistribution of
|
||||
this Apple software constitutes acceptance of these terms. If you do
|
||||
not agree with these terms, please do not use, install, modify or
|
||||
redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and
|
||||
subject to these terms, Apple grants you a personal, non-exclusive
|
||||
license, under Apple's copyrights in this original Apple software (the
|
||||
"Apple Software"), to use, reproduce, modify and redistribute the Apple
|
||||
Software, with or without modifications, in source and/or binary forms;
|
||||
provided that if you redistribute the Apple Software in its entirety and
|
||||
without modifications, you must retain this notice and the following
|
||||
text and disclaimers in all such redistributions of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may
|
||||
be used to endorse or promote products derived from the Apple Software
|
||||
without specific prior written permission from Apple. Except as
|
||||
expressly stated in this notice, no other rights or licenses, express or
|
||||
implied, are granted by Apple herein, including but not limited to any
|
||||
patent rights that may be infringed by your derivative works or by other
|
||||
works in which the Apple Software may be incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
|
||||
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
|
||||
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
|
||||
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
|
||||
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
|
||||
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2014 Apple Inc. All Rights Reserved.
|
||||
|
||||
*/
|
||||
#include "AUCarbonViewControl.h"
|
||||
#include "AUCarbonViewBase.h"
|
||||
#include "AUViewLocalizedStringKeys.h"
|
||||
|
||||
AUCarbonViewControl::AUCarbonViewControl(AUCarbonViewBase *ownerView, AUParameterListenerRef listener, ControlType type, const CAAUParameter ¶m, ControlRef control) :
|
||||
mOwnerView(ownerView),
|
||||
mListener(listener),
|
||||
mType(type),
|
||||
mParam(param),
|
||||
mControl(control),
|
||||
mInControlInitialization(0)
|
||||
{
|
||||
#if !__LP64__
|
||||
SetControlReference(control, SRefCon(this));
|
||||
#endif
|
||||
}
|
||||
|
||||
AUCarbonViewControl::~AUCarbonViewControl()
|
||||
{
|
||||
AUListenerRemoveParameter(mListener, this, &mParam);
|
||||
}
|
||||
|
||||
AUCarbonViewControl* AUCarbonViewControl::mLastControl = NULL;
|
||||
|
||||
void AUCarbonViewControl::Bind()
|
||||
{
|
||||
#if !__LP64__
|
||||
mInControlInitialization = 1; // true
|
||||
AUListenerAddParameter(mListener, this, &mParam);
|
||||
// will cause an almost-immediate callback
|
||||
|
||||
EventTypeSpec events[] = {
|
||||
{ kEventClassControl, kEventControlValueFieldChanged } // N.B. OS X only
|
||||
};
|
||||
|
||||
WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events);
|
||||
|
||||
if (mType == kTypeContinuous || mType == kTypeText || mType == kTypeDiscrete) {
|
||||
EventTypeSpec controlEvents[] = {
|
||||
{ kEventClassControl, kEventControlHit },
|
||||
{ kEventClassControl, kEventControlClick },
|
||||
{ kEventClassControl, kEventControlTrack }
|
||||
};
|
||||
WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(controlEvents), controlEvents);
|
||||
}
|
||||
|
||||
if (mType == kTypeText) {
|
||||
EventTypeSpec controlFocusEvents[] = {
|
||||
{ kEventClassControl, kEventControlSetFocusPart }
|
||||
};
|
||||
WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(controlFocusEvents), controlFocusEvents);
|
||||
ControlKeyFilterUPP proc = mParam.ValuesHaveStrings() ? StdKeyFilterCallback : NumericKeyFilterCallback;
|
||||
// this will fail for a static text field
|
||||
SetControlData(mControl, 0, kControlEditTextKeyFilterTag, sizeof(proc), &proc);
|
||||
}
|
||||
|
||||
Update(true);
|
||||
mInControlInitialization = 0; // false
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUCarbonViewControl::ParameterToControl(Float32 paramValue)
|
||||
{
|
||||
#if !__LP64__
|
||||
++mInControlInitialization;
|
||||
switch (mType) {
|
||||
case kTypeContinuous:
|
||||
SetValueFract(AUParameterValueToLinear(paramValue, &mParam));
|
||||
break;
|
||||
case kTypeDiscrete:
|
||||
{
|
||||
long value = long(paramValue);
|
||||
|
||||
// special case [1] -- menu parameters
|
||||
if (mParam.HasNamedParams()) {
|
||||
// if we're dealing with menus they behave differently!
|
||||
// becaue setting min and max doesn't work correctly for the control value
|
||||
// first menu item always reports a control value of 1
|
||||
ControlKind ctrlKind;
|
||||
if (GetControlKind(mControl, &ctrlKind) == noErr) {
|
||||
if ((ctrlKind.kind == kControlKindPopupArrow)
|
||||
|| (ctrlKind.kind == kControlKindPopupButton))
|
||||
{
|
||||
value = value - long(mParam.ParamInfo().minValue) + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// special case [2] -- Write-only boolean parameters
|
||||
AudioUnitParameterInfo AUPI = mParam.ParamInfo();
|
||||
|
||||
bool isWriteOnlyBoolParameter = ( (AUPI.unit == kAudioUnitParameterUnit_Boolean) &&
|
||||
(AUPI.flags & kAudioUnitParameterFlag_IsWritable) &&
|
||||
!(AUPI.flags & kAudioUnitParameterFlag_IsReadable) );
|
||||
if (!isWriteOnlyBoolParameter) {
|
||||
SetValue (value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kTypeText:
|
||||
{
|
||||
CFStringRef cfstr = mParam.GetStringFromValueCopy(¶mValue);
|
||||
|
||||
if ( !(mParam.ParamInfo().flags & kAudioUnitParameterFlag_IsWritable) //READ ONLY PARAMS
|
||||
&& (mParam.ParamInfo().flags & kAudioUnitParameterFlag_IsReadable))
|
||||
{
|
||||
if (mParam.GetParamTag()) {
|
||||
CFMutableStringRef str = CFStringCreateMutableCopy(NULL, 256, cfstr);
|
||||
CFRelease (cfstr);
|
||||
CFStringAppend (str, CFSTR(" "));
|
||||
CFStringAppend (str, mParam.GetParamTag());
|
||||
cfstr = str;
|
||||
}
|
||||
}
|
||||
SetTextValue(cfstr);
|
||||
CFRelease (cfstr);
|
||||
}
|
||||
break;
|
||||
}
|
||||
--mInControlInitialization;
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUCarbonViewControl::ControlToParameter()
|
||||
{
|
||||
#if !__LP64__
|
||||
if (mInControlInitialization)
|
||||
return;
|
||||
|
||||
switch (mType) {
|
||||
case kTypeContinuous:
|
||||
{
|
||||
double controlValue = GetValueFract();
|
||||
Float32 paramValue = AUParameterValueFromLinear(controlValue, &mParam);
|
||||
mParam.SetValue(mListener, this, paramValue);
|
||||
}
|
||||
break;
|
||||
case kTypeDiscrete:
|
||||
{
|
||||
long value = GetValue();
|
||||
|
||||
// special case [1] -- Menus
|
||||
if (mParam.HasNamedParams()) {
|
||||
// if we're dealing with menus they behave differently!
|
||||
// becaue setting min and max doesn't work correctly for the control value
|
||||
// first menu item always reports a control value of 1
|
||||
ControlKind ctrlKind;
|
||||
if (GetControlKind(mControl, &ctrlKind) == noErr) {
|
||||
if ((ctrlKind.kind == kControlKindPopupArrow)
|
||||
|| (ctrlKind.kind == kControlKindPopupButton))
|
||||
{
|
||||
value = value + long(mParam.ParamInfo().minValue) - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// special case [2] -- Write-only boolean parameters
|
||||
AudioUnitParameterInfo AUPI = mParam.ParamInfo();
|
||||
|
||||
bool isWriteOnlyBoolParameter = ( (AUPI.unit == kAudioUnitParameterUnit_Boolean) &&
|
||||
(AUPI.flags & kAudioUnitParameterFlag_IsWritable) &&
|
||||
!(AUPI.flags & kAudioUnitParameterFlag_IsReadable) );
|
||||
if (isWriteOnlyBoolParameter) {
|
||||
value = 1;
|
||||
}
|
||||
|
||||
mParam.SetValue (mListener, this, value);
|
||||
}
|
||||
break;
|
||||
case kTypeText:
|
||||
{
|
||||
Float32 val = mParam.GetValueFromString (GetTextValue());
|
||||
mParam.SetValue(mListener, this, (mParam.IsIndexedParam() ? (int)val : val));
|
||||
if (mParam.ValuesHaveStrings())
|
||||
ParameterToControl(val); //make sure we display the correct text (from the AU)
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUCarbonViewControl::SetValueFract(double value)
|
||||
{
|
||||
#if !__LP64__
|
||||
SInt32 minimum = GetControl32BitMinimum(mControl);
|
||||
SInt32 maximum = GetControl32BitMaximum(mControl);
|
||||
SInt32 cval = SInt32(value * (maximum - minimum) + minimum + 0.5);
|
||||
SetControl32BitValue(mControl, cval);
|
||||
// printf("set: value=%lf, min=%ld, max=%ld, ctl value=%ld\n", value, minimum, maximum, cval);
|
||||
#endif
|
||||
}
|
||||
|
||||
double AUCarbonViewControl::GetValueFract()
|
||||
{
|
||||
#if !__LP64__
|
||||
SInt32 minimum = GetControl32BitMinimum(mControl);
|
||||
SInt32 maximum = GetControl32BitMaximum(mControl);
|
||||
SInt32 cval = GetControl32BitValue(mControl);
|
||||
double result = double(cval - minimum) / double(maximum - minimum);
|
||||
// printf("get: min=%ld, max=%ld, value=%ld, result=%f\n", minimum, maximum, cval, result);
|
||||
return result;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUCarbonViewControl::SetTextValue(CFStringRef cfstr)
|
||||
{
|
||||
#if !__LP64__
|
||||
verify_noerr(SetControlData(mControl, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &cfstr));
|
||||
#endif
|
||||
}
|
||||
|
||||
CFStringRef AUCarbonViewControl::GetTextValue()
|
||||
{
|
||||
#if !__LP64__
|
||||
CFStringRef cfstr;
|
||||
verify_noerr(GetControlData(mControl, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &cfstr, NULL));
|
||||
return cfstr;
|
||||
#else
|
||||
return CFSTR("");
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUCarbonViewControl::SetValue(long value)
|
||||
{
|
||||
#if !__LP64__
|
||||
SetControl32BitValue(mControl, value);
|
||||
#endif
|
||||
}
|
||||
|
||||
long AUCarbonViewControl::GetValue()
|
||||
{
|
||||
#if !__LP64__
|
||||
return GetControl32BitValue(mControl);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Notes on event handling
|
||||
|
||||
Button (Click and release on button)
|
||||
kEventControlClick received
|
||||
kEventControlTrack received
|
||||
kEventControlValueFieldChanged received
|
||||
kEventControlHit received
|
||||
|
||||
Button (Click and release outside of button bounds)
|
||||
kEventControlClick received
|
||||
kEventControlTrack received
|
||||
|
||||
Slider (Click, drag, and release)
|
||||
kEventControlClick received
|
||||
kEventControlTrack received
|
||||
kEventControlValueFieldChanged received
|
||||
kEventControlValueFieldChanged received
|
||||
kEventControlHit received
|
||||
|
||||
Slider (Click, release without changing value)
|
||||
kEventControlClick received
|
||||
kEventControlTrack received
|
||||
*/
|
||||
bool AUCarbonViewControl::HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event)
|
||||
{
|
||||
UInt32 eclass = GetEventClass(event);
|
||||
UInt32 ekind = GetEventKind(event);
|
||||
ControlRef control;
|
||||
bool handled = true;
|
||||
|
||||
switch (eclass) {
|
||||
case kEventClassControl:
|
||||
{
|
||||
AudioUnitParameterInfo AUPI = mParam.ParamInfo();
|
||||
|
||||
bool isWriteOnlyBoolParameter = ( (AUPI.unit == kAudioUnitParameterUnit_Boolean) &&
|
||||
(AUPI.flags & kAudioUnitParameterFlag_IsWritable) &&
|
||||
!(AUPI.flags & kAudioUnitParameterFlag_IsReadable) );
|
||||
|
||||
switch (ekind) {
|
||||
case kEventControlSetFocusPart: // tab
|
||||
handled = !handled; // fall through to next case
|
||||
mLastControl = this;
|
||||
case kEventControlValueFieldChanged:
|
||||
GetEventParameter(event, kEventParamDirectObject, typeControlRef, NULL, sizeof(ControlRef), NULL, &control);
|
||||
verify(control == mControl);
|
||||
ControlToParameter();
|
||||
return handled;
|
||||
case kEventControlClick:
|
||||
if (isWriteOnlyBoolParameter) {
|
||||
GetEventParameter(event, kEventParamDirectObject, typeControlRef, NULL, sizeof(ControlRef), NULL, &control);
|
||||
verify(control == mControl);
|
||||
ControlToParameter();
|
||||
} else if (mLastControl != this) {
|
||||
if (mLastControl != NULL) {
|
||||
mLastControl->Update(false);
|
||||
}
|
||||
mLastControl = this;
|
||||
}
|
||||
mOwnerView->TellListener(mParam, kAudioUnitCarbonViewEvent_MouseDownInControl, NULL);
|
||||
break; // don't return true, continue normal processing
|
||||
case kEventControlHit:
|
||||
if (mLastControl != this) {
|
||||
if (mLastControl != NULL)
|
||||
mLastControl->Update(false);
|
||||
mLastControl = this;
|
||||
}
|
||||
mOwnerView->TellListener(mParam, kAudioUnitCarbonViewEvent_MouseUpInControl, NULL);
|
||||
break; // don't return true, continue normal processing
|
||||
case kEventControlTrack:
|
||||
if (mLastControl != this) {
|
||||
if (mLastControl != NULL)
|
||||
mLastControl->Update(false);
|
||||
mLastControl = this;
|
||||
}
|
||||
|
||||
CallNextEventHandler(inHandlerRef, event);
|
||||
ControlToParameter(); // new code
|
||||
mOwnerView->TellListener(mParam, kAudioUnitCarbonViewEvent_MouseUpInControl, NULL);
|
||||
// old code:
|
||||
// break; // don't return true, continue normal processing
|
||||
|
||||
return handled; // don't return true, continue normal processing
|
||||
}
|
||||
}
|
||||
}
|
||||
return !handled;
|
||||
}
|
||||
|
||||
pascal void AUCarbonViewControl::SliderTrackProc(ControlRef theControl, ControlPartCode partCode)
|
||||
{
|
||||
// this doesn't need to actually do anything
|
||||
// AUCarbonViewControl *This = (AUCarbonViewControl *)GetControlReference(theControl);
|
||||
}
|
||||
|
||||
pascal ControlKeyFilterResult AUCarbonViewControl::StdKeyFilterCallback(ControlRef theControl,
|
||||
SInt16 *keyCode, SInt16 *charCode,
|
||||
EventModifiers *modifiers)
|
||||
{
|
||||
#if !__LP64__
|
||||
SInt16 c = *charCode;
|
||||
if (c >= ' ' || c == '\b' || c == 0x7F || (c >= 0x1c && c <= 0x1f) || c == '\t')
|
||||
return kControlKeyFilterPassKey;
|
||||
if (c == '\r' || c == 3) { // return or Enter
|
||||
AUCarbonViewControl *This = (AUCarbonViewControl *)GetControlReference(theControl);
|
||||
ControlEditTextSelectionRec sel = { 0, 32767 };
|
||||
SetControlData(This->mControl, 0, kControlEditTextSelectionTag, sizeof(sel), &sel);
|
||||
This->ControlToParameter();
|
||||
}
|
||||
#endif
|
||||
return kControlKeyFilterBlockKey;
|
||||
}
|
||||
|
||||
pascal ControlKeyFilterResult AUCarbonViewControl::NumericKeyFilterCallback(ControlRef theControl,
|
||||
SInt16 *keyCode, SInt16 *charCode,
|
||||
EventModifiers *modifiers)
|
||||
{
|
||||
#if !__LP64__
|
||||
SInt16 c = *charCode;
|
||||
if (isdigit(c) || c == '+' || c == '-' || c == '.' || c == '\b' || c == 0x7F || (c >= 0x1c && c <= 0x1f)
|
||||
|| c == '\t')
|
||||
return kControlKeyFilterPassKey;
|
||||
if (c == '\r' || c == 3) { // return or Enter
|
||||
AUCarbonViewControl *This = (AUCarbonViewControl *)GetControlReference(theControl);
|
||||
ControlEditTextSelectionRec sel = { 0, 32767 };
|
||||
SetControlData(This->mControl, 0, kControlEditTextSelectionTag, sizeof(sel), &sel);
|
||||
This->ControlToParameter();
|
||||
}
|
||||
#endif
|
||||
return kControlKeyFilterBlockKey;
|
||||
}
|
||||
|
||||
Boolean AUCarbonViewControl::SizeControlToFit(ControlRef inControl, SInt16 *outWidth, SInt16 *outHeight)
|
||||
{
|
||||
#if !__LP64__
|
||||
if (inControl == 0) return false;
|
||||
|
||||
Boolean bValue = false;
|
||||
// this only works on text controls -- returns an error for other controls, but doesn't do anything,
|
||||
// so the error is irrelevant
|
||||
SetControlData(inControl, kControlEntireControl, 'stim' /* kControlStaticTextIsMultilineTag */, sizeof(Boolean), &bValue);
|
||||
|
||||
SInt16 baseLineOffset;
|
||||
Rect bestRect;
|
||||
OSErr err = GetBestControlRect(inControl, &bestRect, &baseLineOffset);
|
||||
if (err != noErr) return false;
|
||||
|
||||
int width = (bestRect.right - bestRect.left) + 1;
|
||||
int height = (bestRect.bottom - bestRect.top) + 1;
|
||||
|
||||
Rect boundsRect;
|
||||
GetControlBounds (inControl, &boundsRect);
|
||||
|
||||
Rect newRect;
|
||||
newRect.top = boundsRect.top;
|
||||
newRect.bottom = newRect.top + height;
|
||||
newRect.left = boundsRect.left;
|
||||
newRect.right = newRect.left + width;
|
||||
|
||||
SetControlBounds (inControl, &newRect);
|
||||
|
||||
if (outWidth)
|
||||
*outWidth = width;
|
||||
|
||||
if (outHeight)
|
||||
*outHeight = height;
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
#pragma mark ___AUPropertyControl
|
||||
bool AUPropertyControl::HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event)
|
||||
{
|
||||
UInt32 eclass = GetEventClass(event);
|
||||
UInt32 ekind = GetEventKind(event);
|
||||
switch (eclass) {
|
||||
case kEventClassControl:
|
||||
switch (ekind) {
|
||||
case kEventControlValueFieldChanged:
|
||||
HandleControlChange();
|
||||
return true; // handled
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void AUPropertyControl::RegisterEvents ()
|
||||
{
|
||||
#if !__LP64__
|
||||
EventTypeSpec events[] = {
|
||||
{ kEventClassControl, kEventControlValueFieldChanged } // N.B. OS X only
|
||||
};
|
||||
|
||||
WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events);
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUPropertyControl::EmbedControl (ControlRef theControl)
|
||||
{
|
||||
mView->EmbedControl (theControl);
|
||||
}
|
||||
|
||||
WindowRef AUPropertyControl::GetCarbonWindow()
|
||||
{
|
||||
return mView->GetCarbonWindow();
|
||||
}
|
||||
|
||||
#pragma mark ___AUVPreset
|
||||
#if !__LP64__
|
||||
static CFStringRef kStringFactoryPreset = kAUViewLocalizedStringKey_FactoryPreset;
|
||||
static bool sAUVPresetLocalized = false;
|
||||
#endif
|
||||
|
||||
AUVPresets::AUVPresets (AUCarbonViewBase* inParentView,
|
||||
CFArrayRef& inPresets,
|
||||
Point inLocation,
|
||||
int nameWidth,
|
||||
int controlWidth,
|
||||
ControlFontStyleRec & inFontStyle)
|
||||
: AUPropertyControl (inParentView),
|
||||
mPresets (inPresets),
|
||||
mView (inParentView)
|
||||
{
|
||||
#if !__LP64__
|
||||
Rect r;
|
||||
|
||||
// ok we now have an array of factory presets
|
||||
// get their strings and display them
|
||||
|
||||
r.top = inLocation.v; r.bottom = r.top;
|
||||
r.left = inLocation.h; r.right = r.left;
|
||||
|
||||
// localize as necessary
|
||||
if (!sAUVPresetLocalized) {
|
||||
CFBundleRef mainBundle = CFBundleGetBundleWithIdentifier(kLocalizedStringBundle_AUView);
|
||||
if (mainBundle) {
|
||||
kStringFactoryPreset = CFCopyLocalizedStringFromTableInBundle(
|
||||
kAUViewLocalizedStringKey_FactoryPreset, kLocalizedStringTable_AUView,
|
||||
mainBundle, CFSTR("FactoryPreset title string"));
|
||||
sAUVPresetLocalized = true;
|
||||
}
|
||||
}
|
||||
|
||||
// create localized title string
|
||||
CFMutableStringRef factoryPresetsTitle = CFStringCreateMutable(NULL, 0);
|
||||
CFStringAppend(factoryPresetsTitle, kStringFactoryPreset);
|
||||
CFStringAppend(factoryPresetsTitle, kAUViewUnlocalizedString_TitleSeparator);
|
||||
|
||||
ControlRef theControl;
|
||||
verify_noerr(CreateStaticTextControl(mView->GetCarbonWindow(), &r, factoryPresetsTitle, &inFontStyle, &theControl));
|
||||
SInt16 width = 0;
|
||||
AUCarbonViewControl::SizeControlToFit(theControl, &width, &mHeight);
|
||||
CFRelease(factoryPresetsTitle);
|
||||
EmbedControl(theControl);
|
||||
|
||||
r.top -= 2;
|
||||
r.left += width + 10;
|
||||
r.right = r.left;
|
||||
r.bottom = r.top;
|
||||
|
||||
verify_noerr(CreatePopupButtonControl ( mView->GetCarbonWindow(), &r, NULL,
|
||||
-12345, // DON'T GET MENU FROM RESOURCE mMenuID,!!!
|
||||
FALSE, // variableWidth,
|
||||
0, // titleWidth,
|
||||
0, // titleJustification,
|
||||
0, // titleStyle,
|
||||
&mControl));
|
||||
|
||||
MenuRef menuRef;
|
||||
verify_noerr(CreateNewMenu(1, 0, &menuRef));
|
||||
|
||||
int numPresets = CFArrayGetCount(mPresets);
|
||||
|
||||
for (int i = 0; i < numPresets; ++i)
|
||||
{
|
||||
AUPreset* preset = (AUPreset*) CFArrayGetValueAtIndex (mPresets, i);
|
||||
verify_noerr(AppendMenuItemTextWithCFString (menuRef, preset->presetName, 0, 0, 0));
|
||||
}
|
||||
|
||||
verify_noerr(SetControlData(mControl, 0, kControlPopupButtonMenuRefTag, sizeof(menuRef), &menuRef));
|
||||
verify_noerr (SetControlFontStyle (mControl, &inFontStyle));
|
||||
|
||||
SetControl32BitMaximum (mControl, numPresets);
|
||||
|
||||
// size popup
|
||||
SInt16 height = 0;
|
||||
|
||||
AUCarbonViewControl::SizeControlToFit(mControl, &width, &height);
|
||||
|
||||
if (height > mHeight) mHeight = height;
|
||||
if (mHeight < 0) mHeight = 0;
|
||||
|
||||
// find which menu item is the Default preset
|
||||
UInt32 propertySize = sizeof(AUPreset);
|
||||
AUPreset defaultPreset;
|
||||
OSStatus result = AudioUnitGetProperty (mView->GetEditAudioUnit(),
|
||||
kAudioUnitProperty_PresentPreset,
|
||||
kAudioUnitScope_Global,
|
||||
0,
|
||||
&defaultPreset,
|
||||
&propertySize);
|
||||
|
||||
mPropertyID = kAudioUnitProperty_PresentPreset;
|
||||
#endif
|
||||
#ifndef __LP64__
|
||||
if (result != noErr) { // if the PresentPreset property is not implemented, fall back to the CurrentPreset property
|
||||
result = AudioUnitGetProperty (mView->GetEditAudioUnit(),
|
||||
kAudioUnitProperty_CurrentPreset,
|
||||
kAudioUnitScope_Global,
|
||||
0,
|
||||
&defaultPreset,
|
||||
&propertySize);
|
||||
mPropertyID = kAudioUnitProperty_CurrentPreset;
|
||||
if (result == noErr)
|
||||
CFRetain (defaultPreset.presetName);
|
||||
}
|
||||
#endif
|
||||
#if !__LP64__
|
||||
EmbedControl (mControl);
|
||||
|
||||
HandlePropertyChange(defaultPreset);
|
||||
|
||||
RegisterEvents();
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUVPresets::AddInterest (AUEventListenerRef inListener,
|
||||
void * inObject)
|
||||
{
|
||||
AudioUnitEvent e;
|
||||
e.mEventType = kAudioUnitEvent_PropertyChange;
|
||||
e.mArgument.mProperty.mAudioUnit = mView->GetEditAudioUnit();
|
||||
e.mArgument.mProperty.mPropertyID = mPropertyID;
|
||||
e.mArgument.mProperty.mScope = kAudioUnitScope_Global;
|
||||
e.mArgument.mProperty.mElement = 0;
|
||||
|
||||
AUEventListenerAddEventType(inListener, inObject, &e);
|
||||
}
|
||||
|
||||
void AUVPresets::RemoveInterest (AUEventListenerRef inListener,
|
||||
void * inObject)
|
||||
{
|
||||
AudioUnitEvent e;
|
||||
e.mEventType = kAudioUnitEvent_PropertyChange;
|
||||
e.mArgument.mProperty.mAudioUnit = mView->GetEditAudioUnit();
|
||||
e.mArgument.mProperty.mPropertyID = mPropertyID;
|
||||
e.mArgument.mProperty.mScope = kAudioUnitScope_Global;
|
||||
e.mArgument.mProperty.mElement = 0;
|
||||
|
||||
AUEventListenerRemoveEventType(inListener, inObject, &e);
|
||||
}
|
||||
|
||||
void AUVPresets::HandleControlChange ()
|
||||
{
|
||||
#if !__LP64__
|
||||
SInt32 i = GetControl32BitValue(mControl);
|
||||
if (i > 0)
|
||||
{
|
||||
AUPreset* preset = (AUPreset*) CFArrayGetValueAtIndex (mPresets, i-1);
|
||||
|
||||
verify_noerr(AudioUnitSetProperty (mView->GetEditAudioUnit(),
|
||||
mPropertyID, // either currentPreset or PresentPreset depending on which is supported
|
||||
kAudioUnitScope_Global,
|
||||
0,
|
||||
preset,
|
||||
sizeof(AUPreset)));
|
||||
|
||||
// when we change a preset we can't expect the AU to update its state
|
||||
// as it isn't meant to know that its being viewed!
|
||||
// so we broadcast a notification to all listeners that all parameters on this AU have changed
|
||||
AudioUnitParameter changedUnit;
|
||||
changedUnit.mAudioUnit = mView->GetEditAudioUnit();
|
||||
changedUnit.mParameterID = kAUParameterListener_AnyParameter;
|
||||
verify_noerr (AUParameterListenerNotify (NULL, NULL, &changedUnit) );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void AUVPresets::HandlePropertyChange(AUPreset &preset)
|
||||
{
|
||||
#if !__LP64__
|
||||
// check to see if the preset is in our menu
|
||||
int numPresets = CFArrayGetCount(mPresets);
|
||||
if (preset.presetNumber < 0) {
|
||||
SetControl32BitValue (mControl, 0); //controls are one-based
|
||||
} else {
|
||||
for (SInt32 i = 0; i < numPresets; ++i) {
|
||||
AUPreset* currPreset = (AUPreset*) CFArrayGetValueAtIndex (mPresets, i);
|
||||
if (preset.presetNumber == currPreset->presetNumber) {
|
||||
SetControl32BitValue (mControl, ++i); //controls are one-based
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (preset.presetName)
|
||||
CFRelease (preset.presetName);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool AUVPresets::HandlePropertyChange (const AudioUnitProperty &inProp)
|
||||
{
|
||||
if (inProp.mPropertyID == mPropertyID)
|
||||
{
|
||||
UInt32 theSize = sizeof(AUPreset);
|
||||
AUPreset currentPreset;
|
||||
|
||||
OSStatus result = AudioUnitGetProperty(inProp.mAudioUnit,
|
||||
inProp.mPropertyID,
|
||||
inProp.mScope,
|
||||
inProp.mElement, ¤tPreset, &theSize);
|
||||
|
||||
if (result == noErr) {
|
||||
#ifndef __LP64__
|
||||
if (inProp.mPropertyID == kAudioUnitProperty_CurrentPreset && currentPreset.presetName)
|
||||
CFRetain (currentPreset.presetName);
|
||||
#endif
|
||||
HandlePropertyChange(currentPreset);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1,230 +0,0 @@
|
|||
/*
|
||||
File: AUCarbonViewControl.h
|
||||
Abstract: Part of CoreAudio Utility Classes
|
||||
Version: 1.1
|
||||
|
||||
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
|
||||
Inc. ("Apple") in consideration of your agreement to the following
|
||||
terms, and your use, installation, modification or redistribution of
|
||||
this Apple software constitutes acceptance of these terms. If you do
|
||||
not agree with these terms, please do not use, install, modify or
|
||||
redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and
|
||||
subject to these terms, Apple grants you a personal, non-exclusive
|
||||
license, under Apple's copyrights in this original Apple software (the
|
||||
"Apple Software"), to use, reproduce, modify and redistribute the Apple
|
||||
Software, with or without modifications, in source and/or binary forms;
|
||||
provided that if you redistribute the Apple Software in its entirety and
|
||||
without modifications, you must retain this notice and the following
|
||||
text and disclaimers in all such redistributions of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may
|
||||
be used to endorse or promote products derived from the Apple Software
|
||||
without specific prior written permission from Apple. Except as
|
||||
expressly stated in this notice, no other rights or licenses, express or
|
||||
implied, are granted by Apple herein, including but not limited to any
|
||||
patent rights that may be infringed by your derivative works or by other
|
||||
works in which the Apple Software may be incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
|
||||
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
|
||||
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
|
||||
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
|
||||
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
|
||||
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2014 Apple Inc. All Rights Reserved.
|
||||
|
||||
*/
|
||||
#ifndef __AUCarbonViewControl_h__
|
||||
#define __AUCarbonViewControl_h__
|
||||
|
||||
#include <Carbon/Carbon.h>
|
||||
#include <AudioUnit/AudioUnitCarbonView.h>
|
||||
#include <AudioToolbox/AudioUnitUtilities.h>
|
||||
#include "CarbonEventHandler.h"
|
||||
#include "CAAUParameter.h"
|
||||
|
||||
class AUCarbonViewBase;
|
||||
|
||||
// ____________________________________________________________________________
|
||||
// AUCarbonViewControl
|
||||
// Wrapper for a control that is wired to an AudioUnit parameter.
|
||||
/*! @class AUCarbonViewControl */
|
||||
class AUCarbonViewControl : public CarbonEventHandler {
|
||||
// note that the controls are never disposed; that's managed by the AUCarbonViewBase's
|
||||
// parent pane which contains all of them ... if we later need to be able to delete
|
||||
// individual controls on the fly, extra work needed
|
||||
public:
|
||||
enum ControlType {
|
||||
kTypeContinuous, // e.g. slider
|
||||
kTypeDiscrete, // e.g. pop-up menu
|
||||
kTypeText
|
||||
};
|
||||
|
||||
AUCarbonViewControl(AUCarbonViewBase *ownerView, AUParameterListenerRef listener, ControlType type, const CAAUParameter ¶m, ControlRef control);
|
||||
~AUCarbonViewControl();
|
||||
|
||||
/*! @method Bind */
|
||||
virtual void Bind(); // second-stage construction
|
||||
|
||||
/*! @method ControlToParameter */
|
||||
virtual void ControlToParameter();
|
||||
/*! @method ParameterToControl */
|
||||
virtual void ParameterToControl(Float32 newValue);
|
||||
|
||||
/*! @method SetValueFract */
|
||||
virtual void SetValueFract(double value);
|
||||
/*! @method GetValueFract */
|
||||
virtual double GetValueFract();
|
||||
/*! @method SetTextValue */
|
||||
virtual void SetTextValue(CFStringRef str);
|
||||
/*! @method GetTextValue */
|
||||
virtual CFStringRef GetTextValue();
|
||||
/*! @method SetValue */
|
||||
virtual void SetValue(long value);
|
||||
/*! @method GetValue */
|
||||
virtual long GetValue();
|
||||
|
||||
/*! @method GetOwnerView */
|
||||
AUCarbonViewBase * GetOwnerView() {return mOwnerView;}
|
||||
|
||||
/*! @method Update */
|
||||
void Update (bool inUIThread)
|
||||
{
|
||||
if (inUIThread)
|
||||
ParameterToControl (mParam.GetValue());
|
||||
else
|
||||
AUParameterListenerNotify (mListener, this, &mParam);
|
||||
}
|
||||
|
||||
|
||||
// CarbonEventHandler overrides
|
||||
/*! @method HandleEvent */
|
||||
virtual bool HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event);
|
||||
|
||||
/*! @method ControlRef */
|
||||
operator ControlRef() { return mControl; }
|
||||
|
||||
/*! @method SizeControlToFit */
|
||||
static Boolean SizeControlToFit(ControlRef inControl, SInt16 *outWidth = NULL, SInt16 *outHeight = NULL);
|
||||
|
||||
/*! @method SliderTrackProc */
|
||||
static pascal void SliderTrackProc(ControlRef theControl, ControlPartCode partCode);
|
||||
/*! @method NumericKeyFilterCallback */
|
||||
static pascal ControlKeyFilterResult NumericKeyFilterCallback(ControlRef theControl, SInt16 *keyCode, SInt16 *charCode,
|
||||
EventModifiers *modifiers);
|
||||
protected:
|
||||
/*! @method ParamInfo */
|
||||
const AudioUnitParameterInfo &ParamInfo() { return mParam.ParamInfo(); }
|
||||
|
||||
/*! @var mOwnerView */
|
||||
AUCarbonViewBase * mOwnerView;
|
||||
/*! @var mListener */
|
||||
AUParameterListenerRef mListener;
|
||||
/*! @var mType */
|
||||
ControlType mType;
|
||||
/*! @var mParam */
|
||||
CAAUParameter mParam;
|
||||
|
||||
/*! @var mControl */
|
||||
ControlRef mControl;
|
||||
|
||||
/*! @method StdKeyFilterCallback */
|
||||
static pascal ControlKeyFilterResult StdKeyFilterCallback(ControlRef theControl, SInt16 *keyCode, SInt16 *charCode,
|
||||
EventModifiers *modifiers);
|
||||
SInt16 mInControlInitialization;
|
||||
|
||||
static AUCarbonViewControl* mLastControl;
|
||||
};
|
||||
|
||||
/*! @class AUPropertyControl */
|
||||
class AUPropertyControl : public CarbonEventHandler {
|
||||
public:
|
||||
/*! @ctor AUPropertyControl */
|
||||
AUPropertyControl (AUCarbonViewBase * inBase) : mControl(0), mView (inBase), mHeight(0) {}
|
||||
|
||||
/*! @method HandleEvent */
|
||||
virtual bool HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event);
|
||||
|
||||
/*! @method HandlePropertyChange */
|
||||
virtual bool HandlePropertyChange (const AudioUnitProperty &inProp) = 0;
|
||||
|
||||
/*! @method AddInterest */
|
||||
virtual void AddInterest (AUEventListenerRef inListener,
|
||||
void * inObject) = 0;
|
||||
|
||||
/*! @method RemoveInterest */
|
||||
virtual void RemoveInterest (AUEventListenerRef inListener,
|
||||
void * inObject) = 0;
|
||||
|
||||
/*! @method GetHeight */
|
||||
int GetHeight() { return mHeight;}
|
||||
|
||||
protected:
|
||||
/*! @method HandleControlChange */
|
||||
virtual void HandleControlChange () = 0;
|
||||
|
||||
/*! @method RegisterEvents */
|
||||
void RegisterEvents ();
|
||||
|
||||
/*! @method EmbedControl */
|
||||
void EmbedControl (ControlRef theControl);
|
||||
|
||||
/*! @method GetCarbonWindow */
|
||||
WindowRef GetCarbonWindow();
|
||||
|
||||
/*! @var mControl */
|
||||
ControlRef mControl;
|
||||
/*! @var mView */
|
||||
AUCarbonViewBase* mView;
|
||||
/*! @var mHeight */
|
||||
SInt16 mHeight;
|
||||
};
|
||||
|
||||
/*! @class AUVPresets */
|
||||
class AUVPresets : public AUPropertyControl {
|
||||
public:
|
||||
/*! @ctor HandleControlChange */
|
||||
AUVPresets (AUCarbonViewBase * inBase,
|
||||
CFArrayRef& inPresets,
|
||||
Point inLocation,
|
||||
int nameWidth,
|
||||
int controlWidth,
|
||||
ControlFontStyleRec & inFontStyle);
|
||||
|
||||
virtual ~AUVPresets () { CFRelease (mPresets); }
|
||||
|
||||
/*! @method HandlePropertyChange */
|
||||
virtual bool HandlePropertyChange (const AudioUnitProperty &inProp);
|
||||
|
||||
/*! @method AddInterest */
|
||||
virtual void AddInterest (AUEventListenerRef inListener,
|
||||
void * inObject);
|
||||
|
||||
/*! @method RemoveInterest */
|
||||
virtual void RemoveInterest (AUEventListenerRef inListener,
|
||||
void * inObject);
|
||||
|
||||
protected:
|
||||
/*! @method HandleControlChange */
|
||||
virtual void HandleControlChange ();
|
||||
|
||||
/*! @var mPresets */
|
||||
CFArrayRef mPresets;
|
||||
/*! @var mView */
|
||||
AUCarbonViewBase* mView;
|
||||
AudioUnitPropertyID mPropertyID;
|
||||
|
||||
void HandlePropertyChange(AUPreset &preset);
|
||||
};
|
||||
|
||||
#endif // __AUCarbonViewControl_h__
|
||||
|
|
@ -1,125 +0,0 @@
|
|||
/*
|
||||
File: AUCarbonViewDispatch.cpp
|
||||
Abstract: AUCarbonViewDispatch.h
|
||||
Version: 1.1
|
||||
|
||||
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
|
||||
Inc. ("Apple") in consideration of your agreement to the following
|
||||
terms, and your use, installation, modification or redistribution of
|
||||
this Apple software constitutes acceptance of these terms. If you do
|
||||
not agree with these terms, please do not use, install, modify or
|
||||
redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and
|
||||
subject to these terms, Apple grants you a personal, non-exclusive
|
||||
license, under Apple's copyrights in this original Apple software (the
|
||||
"Apple Software"), to use, reproduce, modify and redistribute the Apple
|
||||
Software, with or without modifications, in source and/or binary forms;
|
||||
provided that if you redistribute the Apple Software in its entirety and
|
||||
without modifications, you must retain this notice and the following
|
||||
text and disclaimers in all such redistributions of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may
|
||||
be used to endorse or promote products derived from the Apple Software
|
||||
without specific prior written permission from Apple. Except as
|
||||
expressly stated in this notice, no other rights or licenses, express or
|
||||
implied, are granted by Apple herein, including but not limited to any
|
||||
patent rights that may be infringed by your derivative works or by other
|
||||
works in which the Apple Software may be incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
|
||||
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
|
||||
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
|
||||
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
|
||||
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
|
||||
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2014 Apple Inc. All Rights Reserved.
|
||||
|
||||
*/
|
||||
#include "AUCarbonViewBase.h"
|
||||
|
||||
// ____________________________________________________________________________
|
||||
// component dispatch
|
||||
|
||||
#if PRAGMA_STRUCT_ALIGN
|
||||
#pragma options align=mac68k
|
||||
#elif PRAGMA_STRUCT_PACKPUSH
|
||||
#pragma pack(push, 2)
|
||||
#elif PRAGMA_STRUCT_PACK
|
||||
#pragma pack(2)
|
||||
#endif
|
||||
struct AudioUnitCarbonViewCreateGluePB {
|
||||
unsigned char componentFlags;
|
||||
unsigned char componentParamSize;
|
||||
short componentWhat;
|
||||
ControlRef* outControl;
|
||||
const Float32Point* inSize;
|
||||
const Float32Point* inLocation;
|
||||
ControlRef inParentControl;
|
||||
WindowRef inWindow;
|
||||
AudioUnit inAudioUnit;
|
||||
AudioUnitCarbonView inView;
|
||||
};
|
||||
#if !__LP64__
|
||||
struct AudioUnitCarbonViewSetEventListenerGluePB {
|
||||
unsigned char componentFlags;
|
||||
unsigned char componentParamSize;
|
||||
short componentWhat;
|
||||
void* inUserData;
|
||||
AudioUnitCarbonViewEventListener inCallback;
|
||||
AudioUnitCarbonView inView;
|
||||
};
|
||||
#endif
|
||||
#if PRAGMA_STRUCT_ALIGN
|
||||
#pragma options align=reset
|
||||
#elif PRAGMA_STRUCT_PACKPUSH
|
||||
#pragma pack(pop)
|
||||
#elif PRAGMA_STRUCT_PACK
|
||||
#pragma pack()
|
||||
#endif
|
||||
|
||||
#define CheckNull(x) if ((x) == NULL) return paramErr;
|
||||
|
||||
OSStatus AUCarbonViewBase::ComponentEntryDispatch(ComponentParameters *p, AUCarbonViewBase *This)
|
||||
{
|
||||
if (This == NULL) return paramErr;
|
||||
|
||||
OSStatus result = noErr;
|
||||
|
||||
switch (p->what) {
|
||||
case kAudioUnitCarbonViewCreateSelect:
|
||||
{
|
||||
AudioUnitCarbonViewCreateGluePB *pb = (AudioUnitCarbonViewCreateGluePB *)p;
|
||||
CheckNull(pb->inAudioUnit);
|
||||
CheckNull(pb->inWindow);
|
||||
CheckNull(pb->inParentControl);
|
||||
CheckNull(pb->inSize);
|
||||
CheckNull(pb->inLocation);
|
||||
CheckNull(pb->outControl);
|
||||
result = This->CreateCarbonView(pb->inAudioUnit, pb->inWindow, pb->inParentControl,
|
||||
*pb->inLocation, *pb->inSize, *pb->outControl);
|
||||
}
|
||||
break;
|
||||
#if !__LP64__
|
||||
case kAudioUnitCarbonViewSetEventListenerSelect:
|
||||
{
|
||||
AudioUnitCarbonViewSetEventListenerGluePB *pb = (AudioUnitCarbonViewSetEventListenerGluePB *)p;
|
||||
This->SetEventListener(pb->inCallback, pb->inUserData);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
result = ComponentBase::ComponentEntryDispatch(p, This);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
/*
|
||||
File: CarbonEventHandler.cpp
|
||||
Abstract: CarbonEventHandler.h
|
||||
Version: 1.1
|
||||
|
||||
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
|
||||
Inc. ("Apple") in consideration of your agreement to the following
|
||||
terms, and your use, installation, modification or redistribution of
|
||||
this Apple software constitutes acceptance of these terms. If you do
|
||||
not agree with these terms, please do not use, install, modify or
|
||||
redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and
|
||||
subject to these terms, Apple grants you a personal, non-exclusive
|
||||
license, under Apple's copyrights in this original Apple software (the
|
||||
"Apple Software"), to use, reproduce, modify and redistribute the Apple
|
||||
Software, with or without modifications, in source and/or binary forms;
|
||||
provided that if you redistribute the Apple Software in its entirety and
|
||||
without modifications, you must retain this notice and the following
|
||||
text and disclaimers in all such redistributions of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may
|
||||
be used to endorse or promote products derived from the Apple Software
|
||||
without specific prior written permission from Apple. Except as
|
||||
expressly stated in this notice, no other rights or licenses, express or
|
||||
implied, are granted by Apple herein, including but not limited to any
|
||||
patent rights that may be infringed by your derivative works or by other
|
||||
works in which the Apple Software may be incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
|
||||
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
|
||||
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
|
||||
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
|
||||
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
|
||||
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2014 Apple Inc. All Rights Reserved.
|
||||
|
||||
*/
|
||||
|
||||
#include "CarbonEventHandler.h"
|
||||
|
||||
static pascal OSStatus TheEventHandler(EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData)
|
||||
{
|
||||
CarbonEventHandler *handler = (CarbonEventHandler *)inUserData;
|
||||
if (handler->HandleEvent(inHandlerRef, inEvent))
|
||||
return noErr;
|
||||
else return eventNotHandledErr;
|
||||
}
|
||||
|
||||
CarbonEventHandler::CarbonEventHandler() :
|
||||
mHandlers(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
CarbonEventHandler::~CarbonEventHandler()
|
||||
{
|
||||
if (mHandlers != NULL) {
|
||||
int count = static_cast<int>(CFDictionaryGetCount(mHandlers));
|
||||
EventHandlerRef *theHandlers = (EventHandlerRef*) malloc(count * sizeof(EventHandlerRef));
|
||||
CFDictionaryGetKeysAndValues(mHandlers, NULL, (const void **)theHandlers);
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
RemoveEventHandler(theHandlers[i]);
|
||||
CFDictionaryRemoveAllValues(mHandlers);
|
||||
CFRelease (mHandlers);
|
||||
free(theHandlers);
|
||||
}
|
||||
}
|
||||
|
||||
void CarbonEventHandler::WantEventTypes(EventTargetRef target, UInt32 inNumTypes, const EventTypeSpec *inList)
|
||||
{
|
||||
if (mHandlers == NULL)
|
||||
mHandlers = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
|
||||
|
||||
EventHandlerRef handler;
|
||||
|
||||
if (CFDictionaryGetValueIfPresent (mHandlers, target, (const void **)&handler)) // if there is already a handler for the target, add the type
|
||||
verify_noerr(AddEventTypesToHandler(handler, inNumTypes, inList));
|
||||
else {
|
||||
verify_noerr(InstallEventHandler(target, TheEventHandler, inNumTypes, inList, this, &handler));
|
||||
CFDictionaryAddValue(mHandlers, target, handler);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
/*
|
||||
File: CarbonEventHandler.h
|
||||
Abstract: Part of CoreAudio Utility Classes
|
||||
Version: 1.1
|
||||
|
||||
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
|
||||
Inc. ("Apple") in consideration of your agreement to the following
|
||||
terms, and your use, installation, modification or redistribution of
|
||||
this Apple software constitutes acceptance of these terms. If you do
|
||||
not agree with these terms, please do not use, install, modify or
|
||||
redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and
|
||||
subject to these terms, Apple grants you a personal, non-exclusive
|
||||
license, under Apple's copyrights in this original Apple software (the
|
||||
"Apple Software"), to use, reproduce, modify and redistribute the Apple
|
||||
Software, with or without modifications, in source and/or binary forms;
|
||||
provided that if you redistribute the Apple Software in its entirety and
|
||||
without modifications, you must retain this notice and the following
|
||||
text and disclaimers in all such redistributions of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may
|
||||
be used to endorse or promote products derived from the Apple Software
|
||||
without specific prior written permission from Apple. Except as
|
||||
expressly stated in this notice, no other rights or licenses, express or
|
||||
implied, are granted by Apple herein, including but not limited to any
|
||||
patent rights that may be infringed by your derivative works or by other
|
||||
works in which the Apple Software may be incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
|
||||
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
|
||||
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
|
||||
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
|
||||
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
|
||||
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2014 Apple Inc. All Rights Reserved.
|
||||
|
||||
*/
|
||||
#ifndef __CarbonEventHandler_h__
|
||||
#define __CarbonEventHandler_h__
|
||||
|
||||
#include <Carbon/Carbon.h>
|
||||
|
||||
/*! @class CarbonEventHandler */
|
||||
class CarbonEventHandler {
|
||||
public:
|
||||
/*! @ctor CarbonEventHandler */
|
||||
CarbonEventHandler();
|
||||
/*! @dtor ~CarbonEventHandler */
|
||||
virtual ~CarbonEventHandler();
|
||||
|
||||
/*! @method WantEventTypes */
|
||||
virtual void WantEventTypes(EventTargetRef target, UInt32 inNumTypes, const EventTypeSpec *inList);
|
||||
|
||||
/*! @method HandleEvent */
|
||||
virtual bool HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event) = 0;
|
||||
|
||||
protected:
|
||||
/*! @var mHandlers */
|
||||
CFMutableDictionaryRef mHandlers;
|
||||
};
|
||||
|
||||
#endif // __CarbonEventHandler_h__
|
||||
|
|
@ -22,11 +22,6 @@
|
|||
|
||||
#if JucePlugin_Build_AU
|
||||
|
||||
#if __LP64__
|
||||
#undef JUCE_SUPPORT_CARBON
|
||||
#define JUCE_SUPPORT_CARBON 0
|
||||
#endif
|
||||
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wshorten-64-to-32",
|
||||
"-Wunused-parameter",
|
||||
"-Wdeprecated-declarations",
|
||||
|
|
@ -52,29 +47,11 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wshorten-64-to-32",
|
|||
#include <QuartzCore/QuartzCore.h>
|
||||
#include "CoreAudioUtilityClasses/MusicDeviceBase.h"
|
||||
|
||||
/** The BUILD_AU_CARBON_UI flag lets you specify whether old-school carbon hosts are supported as
|
||||
well as ones that can open a cocoa view. If this is enabled, you'll need to also add the AUCarbonBase
|
||||
files to your project.
|
||||
*/
|
||||
#if ! (defined (BUILD_AU_CARBON_UI) || JUCE_64BIT)
|
||||
#define BUILD_AU_CARBON_UI 1
|
||||
#endif
|
||||
|
||||
#ifdef __LP64__
|
||||
#undef BUILD_AU_CARBON_UI // (not possible in a 64-bit build)
|
||||
#endif
|
||||
|
||||
#if BUILD_AU_CARBON_UI
|
||||
#include "CoreAudioUtilityClasses/AUCarbonViewBase.h"
|
||||
#endif
|
||||
|
||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
||||
|
||||
#define JUCE_MAC_WINDOW_VISIBITY_BODGE 1
|
||||
#define JUCE_CORE_INCLUDE_OBJC_HELPERS 1
|
||||
|
||||
#include "../utility/juce_IncludeModuleHeaders.h"
|
||||
#include "../utility/juce_CarbonVisibility.h"
|
||||
|
||||
#include <juce_audio_basics/native/juce_mac_CoreAudioLayouts.h>
|
||||
#include <juce_audio_basics/native/juce_mac_CoreAudioTimeConversions.h>
|
||||
|
|
@ -96,13 +73,7 @@ struct AudioProcessorHolder
|
|||
AudioProcessorHolder (bool initialiseGUI)
|
||||
{
|
||||
if (initialiseGUI)
|
||||
{
|
||||
#if BUILD_AU_CARBON_UI
|
||||
NSApplicationLoad();
|
||||
#endif
|
||||
|
||||
initialiseJuce_GUI();
|
||||
}
|
||||
|
||||
juceFilter.reset (createPluginFilterOfType (AudioProcessor::wrapperType_AudioUnit));
|
||||
|
||||
|
|
@ -1060,23 +1031,6 @@ public:
|
|||
return rate > 0 ? juceFilter->getLatencySamples() / rate : 0;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
#if BUILD_AU_CARBON_UI
|
||||
int GetNumCustomUIComponents() override
|
||||
{
|
||||
return getHostType().isDigitalPerformer() ? 0 : 1;
|
||||
}
|
||||
|
||||
void GetUIComponentDescs (ComponentDescription* inDescArray) override
|
||||
{
|
||||
inDescArray[0].componentType = kAudioUnitCarbonViewComponentType;
|
||||
inDescArray[0].componentSubType = JucePlugin_AUSubType;
|
||||
inDescArray[0].componentManufacturer = JucePlugin_AUManufacturerCode;
|
||||
inDescArray[0].componentFlags = 0;
|
||||
inDescArray[0].componentFlagsMask = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) override
|
||||
{
|
||||
|
|
@ -2420,243 +2374,6 @@ private:
|
|||
JUCE_DECLARE_NON_COPYABLE (JuceAU)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
#if BUILD_AU_CARBON_UI
|
||||
|
||||
class JuceAUView : public AUCarbonViewBase
|
||||
{
|
||||
public:
|
||||
JuceAUView (AudioUnitCarbonView auview)
|
||||
: AUCarbonViewBase (auview),
|
||||
juceFilter (nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
~JuceAUView()
|
||||
{
|
||||
deleteUI();
|
||||
}
|
||||
|
||||
ComponentResult CreateUI (Float32 /*inXOffset*/, Float32 /*inYOffset*/) override
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
if (juceFilter == nullptr)
|
||||
{
|
||||
void* pointers[2];
|
||||
UInt32 propertySize = sizeof (pointers);
|
||||
|
||||
AudioUnitGetProperty (GetEditAudioUnit(),
|
||||
juceFilterObjectPropertyID,
|
||||
kAudioUnitScope_Global,
|
||||
0,
|
||||
pointers,
|
||||
&propertySize);
|
||||
|
||||
juceFilter = (AudioProcessor*) pointers[0];
|
||||
}
|
||||
|
||||
if (juceFilter != nullptr)
|
||||
{
|
||||
deleteUI();
|
||||
|
||||
if (AudioProcessorEditor* editorComp = juceFilter->createEditorIfNeeded())
|
||||
{
|
||||
editorComp->setOpaque (true);
|
||||
windowComp.reset (new ComponentInHIView (editorComp, mCarbonPane));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
jassertfalse; // can't get a pointer to our effect
|
||||
}
|
||||
}
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
AudioUnitCarbonViewEventListener getEventListener() const { return mEventListener; }
|
||||
void* getEventListenerUserData() const { return mEventListenerUserData; }
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
AudioProcessor* juceFilter;
|
||||
std::unique_ptr<Component> windowComp;
|
||||
|
||||
void deleteUI()
|
||||
{
|
||||
if (windowComp != nullptr)
|
||||
{
|
||||
PopupMenu::dismissAllActiveMenus();
|
||||
|
||||
/* This assertion is triggered when there's some kind of modal component active, and the
|
||||
host is trying to delete our plugin.
|
||||
If you must use modal components, always use them in a non-blocking way, by never
|
||||
calling runModalLoop(), but instead using enterModalState() with a callback that
|
||||
will be performed on completion. (Note that this assertion could actually trigger
|
||||
a false alarm even if you're doing it correctly, but is here to catch people who
|
||||
aren't so careful) */
|
||||
jassert (Component::getCurrentlyModalComponent() == nullptr);
|
||||
|
||||
if (JuceAU::EditorCompHolder* editorCompHolder = dynamic_cast<JuceAU::EditorCompHolder*> (windowComp->getChildComponent(0)))
|
||||
if (AudioProcessorEditor* audioProcessEditor = dynamic_cast<AudioProcessorEditor*> (editorCompHolder->getChildComponent(0)))
|
||||
juceFilter->editorBeingDeleted (audioProcessEditor);
|
||||
|
||||
windowComp = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
// Uses a child NSWindow to sit in front of a HIView and display our component
|
||||
class ComponentInHIView : public Component
|
||||
{
|
||||
public:
|
||||
ComponentInHIView (AudioProcessorEditor* ed, HIViewRef parentHIView)
|
||||
: parentView (parentHIView),
|
||||
editor (ed),
|
||||
recursive (false)
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
jassert (ed != nullptr);
|
||||
addAndMakeVisible (editor);
|
||||
setOpaque (true);
|
||||
setVisible (true);
|
||||
setBroughtToFrontOnMouseClick (true);
|
||||
|
||||
setSize (editor.getWidth(), editor.getHeight());
|
||||
SizeControl (parentHIView, (SInt16) editor.getWidth(), (SInt16) editor.getHeight());
|
||||
|
||||
WindowRef windowRef = HIViewGetWindow (parentHIView);
|
||||
hostWindow = [[NSWindow alloc] initWithWindowRef: windowRef];
|
||||
|
||||
// not really sure why this is needed in older OS X versions
|
||||
// but JUCE plug-ins crash without it
|
||||
if ((SystemStats::getOperatingSystemType() & 0xff) < 12)
|
||||
[hostWindow retain];
|
||||
|
||||
[hostWindow setCanHide: YES];
|
||||
[hostWindow setReleasedWhenClosed: YES];
|
||||
|
||||
updateWindowPos();
|
||||
|
||||
#if ! JucePlugin_EditorRequiresKeyboardFocus
|
||||
addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses);
|
||||
setWantsKeyboardFocus (false);
|
||||
#else
|
||||
addToDesktop (ComponentPeer::windowIsTemporary);
|
||||
setWantsKeyboardFocus (true);
|
||||
#endif
|
||||
|
||||
setVisible (true);
|
||||
toFront (false);
|
||||
|
||||
addSubWindow();
|
||||
|
||||
NSWindow* pluginWindow = [((NSView*) getWindowHandle()) window];
|
||||
[pluginWindow setNextResponder: hostWindow];
|
||||
|
||||
attachWindowHidingHooks (this, (WindowRef) windowRef, hostWindow);
|
||||
}
|
||||
}
|
||||
|
||||
~ComponentInHIView()
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
removeWindowHidingHooks (this);
|
||||
|
||||
NSWindow* pluginWindow = [((NSView*) getWindowHandle()) window];
|
||||
[hostWindow removeChildWindow: pluginWindow];
|
||||
removeFromDesktop();
|
||||
|
||||
[hostWindow release];
|
||||
hostWindow = nil;
|
||||
}
|
||||
}
|
||||
|
||||
void updateWindowPos()
|
||||
{
|
||||
HIPoint f;
|
||||
f.x = f.y = 0;
|
||||
HIPointConvert (&f, kHICoordSpaceView, parentView, kHICoordSpaceScreenPixel, 0);
|
||||
setTopLeftPosition ((int) f.x, (int) f.y);
|
||||
}
|
||||
|
||||
void addSubWindow()
|
||||
{
|
||||
NSWindow* pluginWindow = [((NSView*) getWindowHandle()) window];
|
||||
[pluginWindow setExcludedFromWindowsMenu: YES];
|
||||
[pluginWindow setCanHide: YES];
|
||||
|
||||
[hostWindow addChildWindow: pluginWindow
|
||||
ordered: NSWindowAbove];
|
||||
[hostWindow orderFront: nil];
|
||||
[pluginWindow orderFront: nil];
|
||||
}
|
||||
|
||||
void resized() override
|
||||
{
|
||||
if (Component* const child = getChildComponent (0))
|
||||
child->setBounds (getLocalBounds());
|
||||
}
|
||||
|
||||
void paint (Graphics&) override {}
|
||||
|
||||
void childBoundsChanged (Component*) override
|
||||
{
|
||||
if (! recursive)
|
||||
{
|
||||
recursive = true;
|
||||
|
||||
const int w = jmax (32, editor.getWidth());
|
||||
const int h = jmax (32, editor.getHeight());
|
||||
|
||||
SizeControl (parentView, (SInt16) w, (SInt16) h);
|
||||
|
||||
if (getWidth() != w || getHeight() != h)
|
||||
setSize (w, h);
|
||||
|
||||
editor.repaint();
|
||||
|
||||
updateWindowPos();
|
||||
addSubWindow(); // (need this for AULab)
|
||||
|
||||
recursive = false;
|
||||
}
|
||||
}
|
||||
|
||||
bool keyPressed (const KeyPress& kp) override
|
||||
{
|
||||
if (! kp.getModifiers().isCommandDown())
|
||||
{
|
||||
// If we have an unused keypress, move the key-focus to a host window
|
||||
// and re-inject the event..
|
||||
static NSTimeInterval lastEventTime = 0; // check we're not recursively sending the same event
|
||||
NSTimeInterval eventTime = [[NSApp currentEvent] timestamp];
|
||||
|
||||
if (lastEventTime != eventTime)
|
||||
{
|
||||
lastEventTime = eventTime;
|
||||
|
||||
[[hostWindow parentWindow] makeKeyWindow];
|
||||
repostCurrentNSEvent();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
HIViewRef parentView;
|
||||
NSWindow* hostWindow;
|
||||
JuceAU::EditorCompHolder editor;
|
||||
bool recursive;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#define JUCE_COMPONENT_ENTRYX(Class, Name, Suffix) \
|
||||
extern "C" __attribute__((visibility("default"))) ComponentResult Name ## Suffix (ComponentParameters* params, Class* obj); \
|
||||
|
|
@ -2694,10 +2411,6 @@ JUCE_COMPONENT_ENTRY (JuceAU, JucePlugin_AUExportPrefix, Entry)
|
|||
JUCE_FACTORY_ENTRY (JuceAU, JucePlugin_AUExportPrefix)
|
||||
#endif
|
||||
|
||||
#if BUILD_AU_CARBON_UI
|
||||
JUCE_COMPONENT_ENTRY (JuceAUView, JucePlugin_AUExportPrefix, ViewEntry)
|
||||
#endif
|
||||
|
||||
#if ! JUCE_DISABLE_AU_FACTORY_ENTRY
|
||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wcast-align", "-Wzero-as-null-pointer-constant")
|
||||
|
||||
|
|
|
|||
|
|
@ -24,11 +24,8 @@
|
|||
|
||||
#if JucePlugin_Build_VST || JucePlugin_Build_VST3
|
||||
|
||||
#define JUCE_MAC_WINDOW_VISIBITY_BODGE 1
|
||||
|
||||
#include "../utility/juce_IncludeSystemHeaders.h"
|
||||
#include "../utility/juce_IncludeModuleHeaders.h"
|
||||
#include "../utility/juce_CarbonVisibility.h"
|
||||
|
||||
//==============================================================================
|
||||
namespace juce
|
||||
|
|
@ -153,8 +150,6 @@ void* attachComponentToWindowRefVST (Component* comp, void* parentWindowOrView,
|
|||
[hostWindow orderFront: nil];
|
||||
[pluginWindow orderFront: nil];
|
||||
|
||||
attachWindowHidingHooks (comp, (WindowRef) parentWindowOrView, hostWindow);
|
||||
|
||||
return hostWindow;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -192,8 +187,6 @@ void detachComponentFromWindowRefVST (Component* comp, void* window, bool isNSVi
|
|||
comp->getProperties() ["boundsEventRef"].toString().getHexValue64();
|
||||
RemoveEventHandler (ref);
|
||||
|
||||
removeWindowHidingHooks (comp);
|
||||
|
||||
CFUniquePtr<HIViewRef> dummyView ((HIViewRef) (void*) (pointer_sized_int)
|
||||
comp->getProperties() ["dummyViewRef"].toString().getHexValue64());
|
||||
|
||||
|
|
|
|||
|
|
@ -41,23 +41,3 @@
|
|||
#define ENTRY_POINT JucePlugin_AUExportPrefixQuoted "Entry"
|
||||
|
||||
#include "AUResources.r"
|
||||
|
||||
//==============================================================================
|
||||
// component resources for Audio Unit Carbon View
|
||||
|
||||
#ifndef BUILD_AU_CARBON_UI
|
||||
#define BUILD_AU_CARBON_UI 1
|
||||
#endif
|
||||
|
||||
#if BUILD_AU_CARBON_UI
|
||||
#define RES_ID 2000
|
||||
#define COMP_TYPE kAudioUnitCarbonViewComponentType
|
||||
#define COMP_SUBTYPE JucePlugin_AUSubType
|
||||
#define COMP_MANUF JucePlugin_AUManufacturerCode
|
||||
#define VERSION JucePlugin_VersionCode
|
||||
#define NAME JucePlugin_Manufacturer ": " JucePlugin_Name " View"
|
||||
#define DESCRIPTION NAME
|
||||
#define ENTRY_POINT JucePlugin_AUExportPrefixQuoted "ViewEntry"
|
||||
|
||||
#include "AUResources.r"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -55,9 +55,6 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wparentheses",
|
|||
|
||||
#include "AU/CoreAudioUtilityClasses/AUBase.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/AUBuffer.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/AUCarbonViewBase.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/AUCarbonViewControl.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/AUCarbonViewDispatch.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/AUDispatch.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/AUInputElement.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/AUMIDIBase.cpp"
|
||||
|
|
@ -69,7 +66,6 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wparentheses",
|
|||
#include "AU/CoreAudioUtilityClasses/CAMutex.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/CAStreamBasicDescription.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/CAVectorUnit.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/CarbonEventHandler.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/ComponentBase.cpp"
|
||||
#include "AU/CoreAudioUtilityClasses/MusicDeviceBase.cpp"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,73 +0,0 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE 7 technical preview.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
|
||||
You may use this code under the terms of the GPL v3
|
||||
(see www.gnu.org/licenses).
|
||||
|
||||
For the technical preview this file cannot be licensed commercially.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_SUPPORT_CARBON && JUCE_MAC_WINDOW_VISIBITY_BODGE
|
||||
|
||||
/* When you wrap a WindowRef as an NSWindow, it seems to bugger up the HideWindow
|
||||
function, so when the host tries (and fails) to hide the window, this stuff catches
|
||||
the event and forces it to update.
|
||||
*/
|
||||
static pascal OSStatus windowVisibilityBodge (EventHandlerCallRef, EventRef e, void* user)
|
||||
{
|
||||
NSWindow* hostWindow = (NSWindow*) user;
|
||||
|
||||
switch (GetEventKind (e))
|
||||
{
|
||||
case kEventWindowInit: [hostWindow display]; break;
|
||||
case kEventWindowShown: [hostWindow orderFront: nil]; break;
|
||||
case kEventWindowHidden: [hostWindow orderOut: nil]; break;
|
||||
}
|
||||
|
||||
return eventNotHandledErr;
|
||||
}
|
||||
|
||||
inline void attachWindowHidingHooks (Component* comp, void* hostWindowRef, NSWindow* nsWindow)
|
||||
{
|
||||
const EventTypeSpec eventsToCatch[] =
|
||||
{
|
||||
{ kEventClassWindow, kEventWindowInit },
|
||||
{ kEventClassWindow, kEventWindowShown },
|
||||
{ kEventClassWindow, kEventWindowHidden }
|
||||
};
|
||||
|
||||
EventHandlerRef ref;
|
||||
InstallWindowEventHandler ((WindowRef) hostWindowRef,
|
||||
NewEventHandlerUPP (windowVisibilityBodge),
|
||||
GetEventTypeCount (eventsToCatch), eventsToCatch,
|
||||
(void*) nsWindow, &ref);
|
||||
|
||||
comp->getProperties().set ("carbonEventRef", String::toHexString ((pointer_sized_int) (void*) ref));
|
||||
}
|
||||
|
||||
inline void removeWindowHidingHooks (Component* comp)
|
||||
{
|
||||
if (comp != nullptr)
|
||||
RemoveEventHandler ((EventHandlerRef) (void*) (pointer_sized_int)
|
||||
comp->getProperties() ["carbonEventRef"].toString().getHexValue64());
|
||||
}
|
||||
|
||||
#elif JUCE_MAC
|
||||
inline void attachWindowHidingHooks (void*, void*, void*) {}
|
||||
inline void removeWindowHidingHooks (void*) {}
|
||||
#endif
|
||||
|
||||
} // namespace juce
|
||||
|
|
@ -34,10 +34,6 @@
|
|||
#include <sys/time.h>
|
||||
#include <arpa/inet.h>
|
||||
#elif JUCE_MAC || JUCE_IOS
|
||||
#if ! (defined (JUCE_SUPPORT_CARBON) || defined (__LP64__))
|
||||
#define JUCE_SUPPORT_CARBON 1
|
||||
#endif
|
||||
|
||||
#ifdef __OBJC__
|
||||
#if JUCE_MAC
|
||||
#include <Cocoa/Cocoa.h>
|
||||
|
|
@ -48,10 +44,6 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#if JUCE_SUPPORT_CARBON && (! JUCE_IOS)
|
||||
#include <Carbon/Carbon.h>
|
||||
#endif
|
||||
|
||||
#include <objc/runtime.h>
|
||||
#include <objc/objc.h>
|
||||
#include <objc/message.h>
|
||||
|
|
|
|||
|
|
@ -28,10 +28,6 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations")
|
|||
|
||||
#include <CoreMIDI/MIDIServices.h>
|
||||
|
||||
#if JUCE_SUPPORT_CARBON
|
||||
#include <AudioUnit/AudioUnitCarbonView.h>
|
||||
#endif
|
||||
|
||||
#include <CoreAudioKit/AUViewController.h>
|
||||
|
||||
#include <juce_audio_basics/native/juce_mac_CoreAudioTimeConversions.h>
|
||||
|
|
@ -427,7 +423,6 @@ namespace AudioUnitFormatHelpers
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
class AudioUnitPluginWindowCarbon;
|
||||
class AudioUnitPluginWindowCocoa;
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -1615,7 +1610,6 @@ public:
|
|||
|
||||
private:
|
||||
//==============================================================================
|
||||
friend class AudioUnitPluginWindowCarbon;
|
||||
friend class AudioUnitPluginWindowCocoa;
|
||||
friend class AudioUnitPluginFormat;
|
||||
|
||||
|
|
@ -2594,162 +2588,12 @@ private:
|
|||
}
|
||||
};
|
||||
|
||||
#if JUCE_SUPPORT_CARBON
|
||||
|
||||
//==============================================================================
|
||||
class AudioUnitPluginWindowCarbon : public AudioProcessorEditor
|
||||
{
|
||||
public:
|
||||
AudioUnitPluginWindowCarbon (AudioUnitPluginInstance& p)
|
||||
: AudioProcessorEditor (&p),
|
||||
plugin (p),
|
||||
audioComponent (nullptr),
|
||||
viewComponent (nullptr)
|
||||
{
|
||||
innerWrapper.reset (new InnerWrapperComponent (*this));
|
||||
addAndMakeVisible (innerWrapper.get());
|
||||
|
||||
setOpaque (true);
|
||||
setVisible (true);
|
||||
setSize (400, 300);
|
||||
|
||||
UInt32 propertySize;
|
||||
if (AudioUnitGetPropertyInfo (plugin.audioUnit, kAudioUnitProperty_GetUIComponentList,
|
||||
kAudioUnitScope_Global, 0, &propertySize, NULL) == noErr
|
||||
&& propertySize > 0)
|
||||
{
|
||||
HeapBlock<AudioComponentDescription> views (propertySize / sizeof (AudioComponentDescription));
|
||||
|
||||
if (AudioUnitGetProperty (plugin.audioUnit, kAudioUnitProperty_GetUIComponentList,
|
||||
kAudioUnitScope_Global, 0, &views[0], &propertySize) == noErr)
|
||||
{
|
||||
audioComponent = AudioComponentFindNext (nullptr, &views[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
~AudioUnitPluginWindowCarbon()
|
||||
{
|
||||
innerWrapper = nullptr;
|
||||
|
||||
if (isValid())
|
||||
plugin.editorBeingDeleted (this);
|
||||
}
|
||||
|
||||
bool isValid() const noexcept { return audioComponent != nullptr; }
|
||||
|
||||
//==============================================================================
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
g.fillAll (Colours::black);
|
||||
}
|
||||
|
||||
void resized() override
|
||||
{
|
||||
if (innerWrapper != nullptr)
|
||||
innerWrapper->setSize (getWidth(), getHeight());
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool keyStateChanged (bool) override { return false; }
|
||||
bool keyPressed (const KeyPress&) override { return false; }
|
||||
|
||||
//==============================================================================
|
||||
AudioUnit getAudioUnit() const { return plugin.audioUnit; }
|
||||
|
||||
AudioUnitCarbonView getViewComponent()
|
||||
{
|
||||
if (viewComponent == nullptr && audioComponent != nullptr)
|
||||
AudioComponentInstanceNew (audioComponent, &viewComponent);
|
||||
|
||||
return viewComponent;
|
||||
}
|
||||
|
||||
void closeViewComponent()
|
||||
{
|
||||
if (viewComponent != nullptr)
|
||||
{
|
||||
JUCE_AU_LOG ("Closing AU GUI: " + plugin.getName());
|
||||
|
||||
AudioComponentInstanceDispose (viewComponent);
|
||||
viewComponent = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
AudioUnitPluginInstance& plugin;
|
||||
AudioComponent audioComponent;
|
||||
AudioUnitCarbonView viewComponent;
|
||||
|
||||
//==============================================================================
|
||||
class InnerWrapperComponent : public CarbonViewWrapperComponent
|
||||
{
|
||||
public:
|
||||
InnerWrapperComponent (AudioUnitPluginWindowCarbon& w) : owner (w) {}
|
||||
|
||||
~InnerWrapperComponent()
|
||||
{
|
||||
deleteWindow();
|
||||
}
|
||||
|
||||
HIViewRef attachView (WindowRef windowRef, HIViewRef rootView) override
|
||||
{
|
||||
JUCE_AU_LOG ("Opening AU GUI: " + owner.plugin.getName());
|
||||
|
||||
AudioUnitCarbonView carbonView = owner.getViewComponent();
|
||||
|
||||
if (carbonView == 0)
|
||||
return 0;
|
||||
|
||||
Float32Point pos = { 0, 0 };
|
||||
Float32Point size = { 250, 200 };
|
||||
HIViewRef pluginView = 0;
|
||||
|
||||
AudioUnitCarbonViewCreate (carbonView, owner.getAudioUnit(), windowRef, rootView,
|
||||
&pos, &size, (ControlRef*) &pluginView);
|
||||
|
||||
return pluginView;
|
||||
}
|
||||
|
||||
void removeView (HIViewRef) override
|
||||
{
|
||||
owner.closeViewComponent();
|
||||
}
|
||||
|
||||
private:
|
||||
AudioUnitPluginWindowCarbon& owner;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InnerWrapperComponent)
|
||||
};
|
||||
|
||||
friend class InnerWrapperComponent;
|
||||
std::unique_ptr<InnerWrapperComponent> innerWrapper;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioUnitPluginWindowCarbon)
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
AudioProcessorEditor* AudioUnitPluginInstance::createEditor()
|
||||
{
|
||||
std::unique_ptr<AudioProcessorEditor> w (new AudioUnitPluginWindowCocoa (*this, false));
|
||||
|
||||
if (! static_cast<AudioUnitPluginWindowCocoa*> (w.get())->isValid())
|
||||
w.reset();
|
||||
|
||||
#if JUCE_SUPPORT_CARBON
|
||||
if (w == nullptr)
|
||||
{
|
||||
w.reset (new AudioUnitPluginWindowCarbon (*this));
|
||||
|
||||
if (! static_cast<AudioUnitPluginWindowCarbon*> (w.get())->isValid())
|
||||
w.reset();
|
||||
}
|
||||
#endif
|
||||
|
||||
if (w == nullptr)
|
||||
w.reset (new AudioUnitPluginWindowCocoa (*this, true)); // use AUGenericView as a fallback
|
||||
|
||||
return w.release();
|
||||
|
|
|
|||
|
|
@ -1220,10 +1220,6 @@ struct VSTPluginInstance final : public AudioPluginInstance,
|
|||
|
||||
wantsMidiMessages = pluginCanDo ("receiveVstMidiEvent") > 0 || isSynthPlugin();
|
||||
|
||||
#if JUCE_MAC && JUCE_SUPPORT_CARBON
|
||||
usesCocoaNSView = ((unsigned int) pluginCanDo ("hasCockosViewAsConfig") & 0xffff0000ul) == 0xbeef0000ul;
|
||||
#endif
|
||||
|
||||
setLatencySamples (vstEffect->initialDelay);
|
||||
}
|
||||
|
||||
|
|
@ -1961,7 +1957,6 @@ struct VSTPluginInstance final : public AudioPluginInstance,
|
|||
ModuleHandle::Ptr vstModule;
|
||||
|
||||
std::unique_ptr<VSTPluginFormat::ExtraFunctions> extraFunctions;
|
||||
bool usesCocoaNSView = false;
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
|
|
@ -2732,18 +2727,8 @@ public:
|
|||
#elif JUCE_MAC
|
||||
ignoreUnused (recursiveResize, pluginRefusesToResize, alreadyInside);
|
||||
|
||||
#if JUCE_SUPPORT_CARBON
|
||||
if (! plug.usesCocoaNSView)
|
||||
{
|
||||
carbonWrapper.reset (new CarbonWrapperComponent (*this));
|
||||
addAndMakeVisible (carbonWrapper.get());
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
cocoaWrapper.reset (new NSViewComponentWithParent (plugin));
|
||||
addAndMakeVisible (cocoaWrapper.get());
|
||||
}
|
||||
#endif
|
||||
|
||||
activeVSTWindows.add (this);
|
||||
|
|
@ -2769,9 +2754,6 @@ public:
|
|||
closePluginWindow();
|
||||
|
||||
#if JUCE_MAC
|
||||
#if JUCE_SUPPORT_CARBON
|
||||
carbonWrapper.reset();
|
||||
#endif
|
||||
cocoaWrapper.reset();
|
||||
#endif
|
||||
|
||||
|
|
@ -2800,11 +2782,6 @@ public:
|
|||
setSize (correctedBounds.getWidth(), correctedBounds.getHeight());
|
||||
|
||||
#if JUCE_MAC
|
||||
#if JUCE_SUPPORT_CARBON
|
||||
if (carbonWrapper != nullptr)
|
||||
carbonWrapper->setSize (correctedBounds.getWidth(), correctedBounds.getHeight());
|
||||
#endif
|
||||
|
||||
if (cocoaWrapper != nullptr)
|
||||
cocoaWrapper->setSize (correctedBounds.getWidth(), correctedBounds.getHeight());
|
||||
#endif
|
||||
|
|
@ -2819,19 +2796,14 @@ public:
|
|||
}
|
||||
|
||||
void visibilityChanged() override
|
||||
{
|
||||
if (cocoaWrapper != nullptr)
|
||||
{
|
||||
if (isShowing())
|
||||
openPluginWindow ((NSView*) cocoaWrapper->getView());
|
||||
else
|
||||
closePluginWindow();
|
||||
}
|
||||
}
|
||||
|
||||
void childBoundsChanged (Component*) override
|
||||
{
|
||||
if (cocoaWrapper != nullptr)
|
||||
{
|
||||
auto w = cocoaWrapper->getWidth();
|
||||
auto h = cocoaWrapper->getHeight();
|
||||
|
|
@ -2839,7 +2811,6 @@ public:
|
|||
if (w != getWidth() || h != getHeight())
|
||||
setSize (w, h);
|
||||
}
|
||||
}
|
||||
|
||||
void parentHierarchyChanged() override { visibilityChanged(); }
|
||||
#else
|
||||
|
|
@ -3317,86 +3288,6 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
#if JUCE_MAC
|
||||
#if JUCE_SUPPORT_CARBON
|
||||
struct CarbonWrapperComponent : public CarbonViewWrapperComponent
|
||||
{
|
||||
CarbonWrapperComponent (VSTPluginWindow& w) : owner (w)
|
||||
{
|
||||
keepPluginWindowWhenHidden = w.shouldAvoidDeletingWindow();
|
||||
setRepaintsChildHIViewWhenCreated (w.shouldRepaintCarbonWindowWhenCreated());
|
||||
}
|
||||
|
||||
~CarbonWrapperComponent()
|
||||
{
|
||||
deleteWindow();
|
||||
}
|
||||
|
||||
HIViewRef attachView (WindowRef windowRef, HIViewRef /*rootView*/) override
|
||||
{
|
||||
owner.openPluginWindow (windowRef);
|
||||
return {};
|
||||
}
|
||||
|
||||
void removeView (HIViewRef) override
|
||||
{
|
||||
if (owner.isOpen)
|
||||
{
|
||||
owner.isOpen = false;
|
||||
owner.dispatch (Vst2::effEditClose, 0, 0, 0, 0);
|
||||
owner.dispatch (Vst2::effEditSleep, 0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
bool getEmbeddedViewSize (int& w, int& h) override
|
||||
{
|
||||
Vst2::ERect* rect = nullptr;
|
||||
owner.dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0);
|
||||
w = rect->right - rect->left;
|
||||
h = rect->bottom - rect->top;
|
||||
return true;
|
||||
}
|
||||
|
||||
void handleMouseDown (int x, int y) override
|
||||
{
|
||||
if (! alreadyInside)
|
||||
{
|
||||
alreadyInside = true;
|
||||
getTopLevelComponent()->toFront (true);
|
||||
owner.dispatch (Vst2::effEditMouse, x, y, 0, 0);
|
||||
alreadyInside = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
PostEvent (::mouseDown, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void handlePaint() override
|
||||
{
|
||||
if (auto* peer = getPeer())
|
||||
{
|
||||
auto pos = peer->globalToLocal (getScreenPosition());
|
||||
Vst2::ERect r;
|
||||
r.left = (int16) pos.getX();
|
||||
r.top = (int16) pos.getY();
|
||||
r.right = (int16) (r.left + getWidth());
|
||||
r.bottom = (int16) (r.top + getHeight());
|
||||
|
||||
owner.dispatch (Vst2::effEditDraw, 0, 0, &r, 0);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
VSTPluginWindow& owner;
|
||||
bool alreadyInside = false;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CarbonWrapperComponent)
|
||||
};
|
||||
|
||||
friend struct CarbonWrapperComponent;
|
||||
std::unique_ptr<CarbonWrapperComponent> carbonWrapper;
|
||||
#endif
|
||||
|
||||
std::unique_ptr<NSViewComponentWithParent> cocoaWrapper;
|
||||
|
||||
void resized() override
|
||||
|
|
|
|||
|
|
@ -36,13 +36,6 @@
|
|||
#include <juce_core/containers/juce_Optional.h>
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_MAC
|
||||
#if JUCE_SUPPORT_CARBON && (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_AU)
|
||||
#include <Carbon/Carbon.h>
|
||||
#include <juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if (JUCE_PLUGINHOST_VST || JUCE_PLUGINHOST_VST3) && (JUCE_LINUX || JUCE_BSD)
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
|
|
|
|||
|
|
@ -107,10 +107,6 @@
|
|||
// #error "You need to set either the JUCE_PLUGINHOST_AU and/or JUCE_PLUGINHOST_VST and/or JUCE_PLUGINHOST_VST3 and/or JUCE_PLUGINHOST_LADSPA flags if you're using this module!"
|
||||
#endif
|
||||
|
||||
#if ! (defined (JUCE_SUPPORT_CARBON) || JUCE_64BIT || JUCE_IOS)
|
||||
#define JUCE_SUPPORT_CARBON 1
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_SUPPORT_LEGACY_AUDIOPROCESSOR
|
||||
#define JUCE_SUPPORT_LEGACY_AUDIOPROCESSOR 1
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ namespace Steinberg
|
|||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || (defined(AUDIOCOMPONENT_NOCARBONINSTANCES) && AUDIOCOMPONENT_NOCARBONINSTANCES)
|
||||
#if TARGET_OS_IPHONE
|
||||
struct OpaqueAudioComponentInstance;
|
||||
typedef struct OpaqueAudioComponentInstance* AudioComponentInstance;
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -20,17 +20,13 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#if ! defined (DOXYGEN) && (JUCE_MAC || JUCE_IOS)
|
||||
#if __LP64__
|
||||
using OSType = unsigned int;
|
||||
#else
|
||||
using OSType = unsigned long;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
#if ! DOXYGEN && (JUCE_MAC || JUCE_IOS)
|
||||
using OSType = unsigned int;
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
Represents a local file or directory.
|
||||
|
|
|
|||
|
|
@ -44,10 +44,6 @@
|
|||
#import <IOKit/pwr_mgt/IOPMLib.h>
|
||||
#import <MetalKit/MetalKit.h>
|
||||
|
||||
#if JUCE_SUPPORT_CARBON
|
||||
#import <Carbon/Carbon.h> // still needed for SetSystemUIMode()
|
||||
#endif
|
||||
|
||||
#elif JUCE_IOS
|
||||
#if JUCE_PUSH_NOTIFICATIONS && defined (__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
|
||||
#import <UserNotifications/UserNotifications.h>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
minimumCppStandard: 14
|
||||
|
||||
dependencies: juce_graphics juce_data_structures
|
||||
OSXFrameworks: Carbon Cocoa QuartzCore
|
||||
OSXFrameworks: Cocoa QuartzCore
|
||||
WeakOSXFrameworks: Metal MetalKit
|
||||
iOSFrameworks: CoreServices UIKit
|
||||
WeakiOSFrameworks: Metal MetalKit
|
||||
|
|
|
|||
|
|
@ -1385,35 +1385,7 @@ public:
|
|||
// has a Z label). Therefore, we need to query the current keyboard
|
||||
// layout to figure out what character the key would have produced
|
||||
// if the shift key was not pressed
|
||||
String unmodified;
|
||||
|
||||
#if JUCE_SUPPORT_CARBON
|
||||
if (auto currentKeyboard = CFUniquePtr<TISInputSourceRef> (TISCopyCurrentKeyboardInputSource()))
|
||||
{
|
||||
if (auto layoutData = (CFDataRef) TISGetInputSourceProperty (currentKeyboard,
|
||||
kTISPropertyUnicodeKeyLayoutData))
|
||||
{
|
||||
if (auto* layoutPtr = (const UCKeyboardLayout*) CFDataGetBytePtr (layoutData))
|
||||
{
|
||||
UInt32 keysDown = 0;
|
||||
UniChar buffer[4];
|
||||
UniCharCount actual;
|
||||
|
||||
if (UCKeyTranslate (layoutPtr, [ev keyCode], kUCKeyActionDown, 0, LMGetKbdType(),
|
||||
kUCKeyTranslateNoDeadKeysBit, &keysDown, sizeof (buffer) / sizeof (UniChar),
|
||||
&actual, buffer) == 0)
|
||||
unmodified = String (CharPointer_UTF16 (reinterpret_cast<CharPointer_UTF16::CharType*> (buffer)), 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// did the above layout conversion fail
|
||||
if (unmodified.isEmpty())
|
||||
#endif
|
||||
{
|
||||
unmodified = nsStringToJuce ([ev charactersIgnoringModifiers]);
|
||||
}
|
||||
|
||||
String unmodified = nsStringToJuce ([ev charactersIgnoringModifiers]);
|
||||
auto keyCode = (int) unmodified[0];
|
||||
|
||||
if (keyCode == 0x19) // (backwards-tab)
|
||||
|
|
|
|||
|
|
@ -1,339 +0,0 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE 7 technical preview.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
|
||||
You may use this code under the terms of the GPL v3
|
||||
(see www.gnu.org/licenses).
|
||||
|
||||
For the technical preview this file cannot be licensed commercially.
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
namespace juce
|
||||
{
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
Creates a floating carbon window that can be used to hold a carbon UI.
|
||||
|
||||
This is a handy class that's designed to be inlined where needed, e.g.
|
||||
in the audio plugin hosting code.
|
||||
|
||||
@tags{GUI}
|
||||
*/
|
||||
class CarbonViewWrapperComponent : public Component,
|
||||
public ComponentMovementWatcher,
|
||||
public Timer
|
||||
{
|
||||
public:
|
||||
CarbonViewWrapperComponent()
|
||||
: ComponentMovementWatcher (this),
|
||||
carbonWindow (nil),
|
||||
keepPluginWindowWhenHidden (false),
|
||||
wrapperWindow (nil),
|
||||
embeddedView (0),
|
||||
recursiveResize (false),
|
||||
repaintChildOnCreation (true)
|
||||
{
|
||||
}
|
||||
|
||||
~CarbonViewWrapperComponent()
|
||||
{
|
||||
jassert (embeddedView == 0); // must call deleteWindow() in the subclass's destructor!
|
||||
}
|
||||
|
||||
virtual HIViewRef attachView (WindowRef windowRef, HIViewRef rootView) = 0;
|
||||
virtual void removeView (HIViewRef embeddedView) = 0;
|
||||
virtual void handleMouseDown (int, int) {}
|
||||
virtual void handlePaint() {}
|
||||
|
||||
virtual bool getEmbeddedViewSize (int& w, int& h)
|
||||
{
|
||||
if (embeddedView == 0)
|
||||
return false;
|
||||
|
||||
HIRect bounds;
|
||||
HIViewGetBounds (embeddedView, &bounds);
|
||||
w = jmax (1, roundToInt (bounds.size.width));
|
||||
h = jmax (1, roundToInt (bounds.size.height));
|
||||
return true;
|
||||
}
|
||||
|
||||
void createWindow()
|
||||
{
|
||||
if (wrapperWindow == nil)
|
||||
{
|
||||
Rect r;
|
||||
r.left = (short) getScreenX();
|
||||
r.top = (short) getScreenY();
|
||||
r.right = (short) (r.left + getWidth());
|
||||
r.bottom = (short) (r.top + getHeight());
|
||||
|
||||
CreateNewWindow (kDocumentWindowClass,
|
||||
(WindowAttributes) (kWindowStandardHandlerAttribute | kWindowCompositingAttribute
|
||||
| kWindowNoShadowAttribute | kWindowNoTitleBarAttribute),
|
||||
&r, &wrapperWindow);
|
||||
|
||||
jassert (wrapperWindow != 0);
|
||||
if (wrapperWindow == 0)
|
||||
return;
|
||||
|
||||
carbonWindow = [[NSWindow alloc] initWithWindowRef: wrapperWindow];
|
||||
|
||||
[getOwnerWindow() addChildWindow: carbonWindow
|
||||
ordered: NSWindowAbove];
|
||||
|
||||
embeddedView = attachView (wrapperWindow, HIViewGetRoot (wrapperWindow));
|
||||
|
||||
// Check for the plugin creating its own floating window, and if there is one,
|
||||
// we need to reparent it to make it visible..
|
||||
if (carbonWindow.childWindows.count > 0)
|
||||
if (NSWindow* floatingChildWindow = [[carbonWindow childWindows] objectAtIndex: 0])
|
||||
[getOwnerWindow() addChildWindow: floatingChildWindow
|
||||
ordered: NSWindowAbove];
|
||||
|
||||
EventTypeSpec windowEventTypes[] =
|
||||
{
|
||||
{ kEventClassWindow, kEventWindowGetClickActivation },
|
||||
{ kEventClassWindow, kEventWindowHandleDeactivate },
|
||||
{ kEventClassWindow, kEventWindowBoundsChanging },
|
||||
{ kEventClassMouse, kEventMouseDown },
|
||||
{ kEventClassMouse, kEventMouseMoved },
|
||||
{ kEventClassMouse, kEventMouseDragged },
|
||||
{ kEventClassMouse, kEventMouseUp },
|
||||
{ kEventClassWindow, kEventWindowDrawContent },
|
||||
{ kEventClassWindow, kEventWindowShown },
|
||||
{ kEventClassWindow, kEventWindowHidden }
|
||||
};
|
||||
|
||||
EventHandlerUPP upp = NewEventHandlerUPP (carbonEventCallback);
|
||||
InstallWindowEventHandler (wrapperWindow, upp,
|
||||
sizeof (windowEventTypes) / sizeof (EventTypeSpec),
|
||||
windowEventTypes, this, &eventHandlerRef);
|
||||
|
||||
setOurSizeToEmbeddedViewSize();
|
||||
setEmbeddedWindowToOurSize();
|
||||
|
||||
creationTime = Time::getCurrentTime();
|
||||
}
|
||||
}
|
||||
|
||||
void deleteWindow()
|
||||
{
|
||||
removeView (embeddedView);
|
||||
embeddedView = 0;
|
||||
|
||||
if (wrapperWindow != nil)
|
||||
{
|
||||
NSWindow* ownerWindow = getOwnerWindow();
|
||||
|
||||
if ([[ownerWindow childWindows] count] > 0)
|
||||
{
|
||||
[ownerWindow removeChildWindow: carbonWindow];
|
||||
[carbonWindow close];
|
||||
}
|
||||
|
||||
RemoveEventHandler (eventHandlerRef);
|
||||
DisposeWindow (wrapperWindow);
|
||||
wrapperWindow = nil;
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void setOurSizeToEmbeddedViewSize()
|
||||
{
|
||||
int w, h;
|
||||
if (getEmbeddedViewSize (w, h))
|
||||
{
|
||||
if (w != getWidth() || h != getHeight())
|
||||
{
|
||||
startTimer (50);
|
||||
setSize (w, h);
|
||||
|
||||
if (Component* p = getParentComponent())
|
||||
p->setSize (w, h);
|
||||
}
|
||||
else
|
||||
{
|
||||
startTimer (jlimit (50, 500, getTimerInterval() + 20));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
stopTimer();
|
||||
}
|
||||
}
|
||||
|
||||
void setEmbeddedWindowToOurSize()
|
||||
{
|
||||
if (! recursiveResize)
|
||||
{
|
||||
recursiveResize = true;
|
||||
|
||||
if (embeddedView != 0)
|
||||
{
|
||||
HIRect r;
|
||||
r.origin.x = 0;
|
||||
r.origin.y = 0;
|
||||
r.size.width = (float) getWidth();
|
||||
r.size.height = (float) getHeight();
|
||||
HIViewSetFrame (embeddedView, &r);
|
||||
}
|
||||
|
||||
if (wrapperWindow != nil)
|
||||
{
|
||||
jassert (getTopLevelComponent()->getDesktopScaleFactor() == 1.0f);
|
||||
Rectangle<int> screenBounds (getScreenBounds() * Desktop::getInstance().getGlobalScaleFactor());
|
||||
|
||||
Rect wr;
|
||||
wr.left = (short) screenBounds.getX();
|
||||
wr.top = (short) screenBounds.getY();
|
||||
wr.right = (short) screenBounds.getRight();
|
||||
wr.bottom = (short) screenBounds.getBottom();
|
||||
|
||||
SetWindowBounds (wrapperWindow, kWindowContentRgn, &wr);
|
||||
|
||||
// This group stuff is mainly a workaround for Mackie plugins like FinalMix..
|
||||
WindowGroupRef group = GetWindowGroup (wrapperWindow);
|
||||
WindowRef attachedWindow;
|
||||
|
||||
if (GetIndexedWindow (group, 2, kWindowGroupContentsReturnWindows, &attachedWindow) == noErr)
|
||||
{
|
||||
SelectWindow (attachedWindow);
|
||||
ActivateWindow (attachedWindow, TRUE);
|
||||
HideWindow (wrapperWindow);
|
||||
}
|
||||
|
||||
ShowWindow (wrapperWindow);
|
||||
}
|
||||
|
||||
recursiveResize = false;
|
||||
}
|
||||
}
|
||||
|
||||
void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) override
|
||||
{
|
||||
setEmbeddedWindowToOurSize();
|
||||
}
|
||||
|
||||
// (overridden to intercept movements of the top-level window)
|
||||
void componentMovedOrResized (Component& component, bool wasMoved, bool wasResized) override
|
||||
{
|
||||
ComponentMovementWatcher::componentMovedOrResized (component, wasMoved, wasResized);
|
||||
|
||||
if (&component == getTopLevelComponent())
|
||||
setEmbeddedWindowToOurSize();
|
||||
}
|
||||
|
||||
void componentPeerChanged() override
|
||||
{
|
||||
deleteWindow();
|
||||
createWindow();
|
||||
}
|
||||
|
||||
void componentVisibilityChanged() override
|
||||
{
|
||||
if (isShowing())
|
||||
createWindow();
|
||||
else if (! keepPluginWindowWhenHidden)
|
||||
deleteWindow();
|
||||
|
||||
setEmbeddedWindowToOurSize();
|
||||
}
|
||||
|
||||
static void recursiveHIViewRepaint (HIViewRef view)
|
||||
{
|
||||
HIViewSetNeedsDisplay (view, true);
|
||||
HIViewRef child = HIViewGetFirstSubview (view);
|
||||
|
||||
while (child != 0)
|
||||
{
|
||||
recursiveHIViewRepaint (child);
|
||||
child = HIViewGetNextView (child);
|
||||
}
|
||||
}
|
||||
|
||||
void timerCallback() override
|
||||
{
|
||||
if (isShowing())
|
||||
{
|
||||
setOurSizeToEmbeddedViewSize();
|
||||
|
||||
// To avoid strange overpainting problems when the UI is first opened, we'll
|
||||
// repaint it a few times during the first second that it's on-screen..
|
||||
if (repaintChildOnCreation && (Time::getCurrentTime() - creationTime).inMilliseconds() < 1000)
|
||||
recursiveHIViewRepaint (HIViewGetRoot (wrapperWindow));
|
||||
}
|
||||
}
|
||||
|
||||
void setRepaintsChildHIViewWhenCreated (bool b) noexcept
|
||||
{
|
||||
repaintChildOnCreation = b;
|
||||
}
|
||||
|
||||
OSStatus carbonEventHandler (EventHandlerCallRef /*nextHandlerRef*/, EventRef event)
|
||||
{
|
||||
switch (GetEventKind (event))
|
||||
{
|
||||
case kEventWindowHandleDeactivate:
|
||||
ActivateWindow (wrapperWindow, TRUE);
|
||||
return noErr;
|
||||
|
||||
case kEventWindowGetClickActivation:
|
||||
{
|
||||
getTopLevelComponent()->toFront (false);
|
||||
[carbonWindow makeKeyAndOrderFront: nil];
|
||||
|
||||
ClickActivationResult howToHandleClick = kActivateAndHandleClick;
|
||||
|
||||
SetEventParameter (event, kEventParamClickActivation, typeClickActivationResult,
|
||||
sizeof (ClickActivationResult), &howToHandleClick);
|
||||
|
||||
if (embeddedView != 0)
|
||||
HIViewSetNeedsDisplay (embeddedView, true);
|
||||
|
||||
return noErr;
|
||||
}
|
||||
}
|
||||
|
||||
return eventNotHandledErr;
|
||||
}
|
||||
|
||||
static pascal OSStatus carbonEventCallback (EventHandlerCallRef nextHandlerRef, EventRef event, void* userData)
|
||||
{
|
||||
return ((CarbonViewWrapperComponent*) userData)->carbonEventHandler (nextHandlerRef, event);
|
||||
}
|
||||
|
||||
NSWindow* carbonWindow;
|
||||
bool keepPluginWindowWhenHidden;
|
||||
|
||||
protected:
|
||||
WindowRef wrapperWindow;
|
||||
HIViewRef embeddedView;
|
||||
bool recursiveResize, repaintChildOnCreation;
|
||||
Time creationTime;
|
||||
|
||||
EventHandlerRef eventHandlerRef;
|
||||
|
||||
NSWindow* getOwnerWindow() const { return [((NSView*) getWindowHandle()) window]; }
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
// Non-public utility function that hosts can use if they need to get hold of the
|
||||
// internals of a carbon wrapper window..
|
||||
void* getCarbonWindow (Component* possibleCarbonComponent)
|
||||
{
|
||||
if (CarbonViewWrapperComponent* cv = dynamic_cast<CarbonViewWrapperComponent*> (possibleCarbonComponent))
|
||||
return cv->carbonWindow;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
} // namespace juce
|
||||
|
|
@ -577,18 +577,11 @@ private:
|
|||
PlayerController (Pimpl& ownerToUse, bool useNativeControlsIfAvailable)
|
||||
: PlayerControllerBase (ownerToUse, useNativeControlsIfAvailable)
|
||||
{
|
||||
#if JUCE_32BIT
|
||||
// 32-bit builds don't have AVPlayerView, so need to use a layer
|
||||
useNativeControls = false;
|
||||
#endif
|
||||
|
||||
wrappedPlayer = [&]() -> std::unique_ptr<WrappedPlayer>
|
||||
{
|
||||
#if ! JUCE_32BIT
|
||||
if (@available (macOS 10.9, *))
|
||||
if (useNativeControls)
|
||||
return std::make_unique<WrappedPlayerView>();
|
||||
#endif
|
||||
|
||||
return std::make_unique<WrappedPlayerLayer> ();
|
||||
}();
|
||||
|
|
@ -658,7 +651,6 @@ private:
|
|||
NSUniquePtr<AVPlayerLayer> playerLayer { [[AVPlayerLayer alloc] init] };
|
||||
};
|
||||
|
||||
#if ! JUCE_32BIT
|
||||
class API_AVAILABLE (macos (10.9)) WrappedPlayerView : public WrappedPlayer
|
||||
{
|
||||
public:
|
||||
|
|
@ -670,7 +662,6 @@ private:
|
|||
private:
|
||||
NSUniquePtr<AVPlayerView> playerView { [[AVPlayerView alloc] init] };
|
||||
};
|
||||
#endif
|
||||
|
||||
std::unique_ptr<WrappedPlayer> wrappedPlayer;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue