@@ -318,6 +318,7 @@ OBJECTS := \ | |||||
$(OBJDIR)/juce_win32_AudioCDReader_66c7252.o \ | $(OBJDIR)/juce_win32_AudioCDReader_66c7252.o \ | ||||
$(OBJDIR)/juce_win32_CameraDevice_ea35306d.o \ | $(OBJDIR)/juce_win32_CameraDevice_ea35306d.o \ | ||||
$(OBJDIR)/juce_win32_Direct2DGraphicsContext_9f1b6be1.o \ | $(OBJDIR)/juce_win32_Direct2DGraphicsContext_9f1b6be1.o \ | ||||
$(OBJDIR)/juce_win32_DirectShowComponent_e4030c4f.o \ | |||||
$(OBJDIR)/juce_win32_DirectSound_3462415e.o \ | $(OBJDIR)/juce_win32_DirectSound_3462415e.o \ | ||||
$(OBJDIR)/juce_win32_FileChooser_18a257.o \ | $(OBJDIR)/juce_win32_FileChooser_18a257.o \ | ||||
$(OBJDIR)/juce_win32_Files_f3e9a2ef.o \ | $(OBJDIR)/juce_win32_Files_f3e9a2ef.o \ | ||||
@@ -1782,6 +1783,11 @@ $(OBJDIR)/juce_win32_Direct2DGraphicsContext_9f1b6be1.o: ../../src/native/window | |||||
@echo "Compiling juce_win32_Direct2DGraphicsContext.cpp" | @echo "Compiling juce_win32_Direct2DGraphicsContext.cpp" | ||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | ||||
$(OBJDIR)/juce_win32_DirectShowComponent_e4030c4f.o: ../../src/native/windows/juce_win32_DirectShowComponent.cpp | |||||
-@mkdir -p $(OBJDIR) | |||||
@echo "Compiling juce_win32_DirectShowComponent.cpp" | |||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||||
$(OBJDIR)/juce_win32_DirectSound_3462415e.o: ../../src/native/windows/juce_win32_DirectSound.cpp | $(OBJDIR)/juce_win32_DirectSound_3462415e.o: ../../src/native/windows/juce_win32_DirectSound.cpp | ||||
-@mkdir -p $(OBJDIR) | -@mkdir -p $(OBJDIR) | ||||
@echo "Compiling juce_win32_DirectSound.cpp" | @echo "Compiling juce_win32_DirectSound.cpp" | ||||
@@ -313,6 +313,7 @@ | |||||
9686F29C29D1C26E353DE68A = { isa = PBXBuildFile; fileRef = F3B50EE3939E9F16D13C3C7C; }; | 9686F29C29D1C26E353DE68A = { isa = PBXBuildFile; fileRef = F3B50EE3939E9F16D13C3C7C; }; | ||||
79B4C2F1C0CF592ACE8093C0 = { isa = PBXBuildFile; fileRef = 3A37CD82212075940421CE4F; }; | 79B4C2F1C0CF592ACE8093C0 = { isa = PBXBuildFile; fileRef = 3A37CD82212075940421CE4F; }; | ||||
88A87D28B3809665F28DC16E = { isa = PBXBuildFile; fileRef = 7F3EF672D07ECE3E13AAF267; }; | 88A87D28B3809665F28DC16E = { isa = PBXBuildFile; fileRef = 7F3EF672D07ECE3E13AAF267; }; | ||||
6BDBEFD97E643E5BB27637FF = { isa = PBXBuildFile; fileRef = 249959E338D7750E56A9F2F8; }; | |||||
BC3C22F5350ED7433D303A04 = { isa = PBXBuildFile; fileRef = 58B70C726D186B4E770300BC; }; | BC3C22F5350ED7433D303A04 = { isa = PBXBuildFile; fileRef = 58B70C726D186B4E770300BC; }; | ||||
0B41EC4D7839F8CBCB8F9A0D = { isa = PBXBuildFile; fileRef = DCD09B6EF4A4A109DE01F152; }; | 0B41EC4D7839F8CBCB8F9A0D = { isa = PBXBuildFile; fileRef = DCD09B6EF4A4A109DE01F152; }; | ||||
B420CD4B589C08EAFA6E3DA4 = { isa = PBXBuildFile; fileRef = 7527A5E8F4F39581159D3E5B; }; | B420CD4B589C08EAFA6E3DA4 = { isa = PBXBuildFile; fileRef = 7527A5E8F4F39581159D3E5B; }; | ||||
@@ -785,6 +786,7 @@ | |||||
C25DFA2F2B673EB0146412BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BubbleMessageComponent.h; path = ../../src/gui/components/special/juce_BubbleMessageComponent.h; sourceTree = SOURCE_ROOT; }; | C25DFA2F2B673EB0146412BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BubbleMessageComponent.h; path = ../../src/gui/components/special/juce_BubbleMessageComponent.h; sourceTree = SOURCE_ROOT; }; | ||||
0A20E7E561633610A76A34AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourSelector.cpp; path = ../../src/gui/components/special/juce_ColourSelector.cpp; sourceTree = SOURCE_ROOT; }; | 0A20E7E561633610A76A34AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourSelector.cpp; path = ../../src/gui/components/special/juce_ColourSelector.cpp; sourceTree = SOURCE_ROOT; }; | ||||
CD9F817B7EF0DA080668A3A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../src/gui/components/special/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; }; | CD9F817B7EF0DA080668A3A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../src/gui/components/special/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; }; | ||||
4BF7A01BCE61A5068CA13D8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DirectShowComponent.h; path = ../../src/gui/components/special/juce_DirectShowComponent.h; sourceTree = SOURCE_ROOT; }; | |||||
9C1D5CDA61FB51F657DA8B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../src/gui/components/special/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; }; | 9C1D5CDA61FB51F657DA8B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../src/gui/components/special/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; }; | ||||
7DB8CFB77EA690ACF54C63B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../src/gui/components/special/juce_DropShadower.h; sourceTree = SOURCE_ROOT; }; | 7DB8CFB77EA690ACF54C63B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../src/gui/components/special/juce_DropShadower.h; sourceTree = SOURCE_ROOT; }; | ||||
3C8C1AAF32DFECB89EB83271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardComponent.cpp; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp; sourceTree = SOURCE_ROOT; }; | 3C8C1AAF32DFECB89EB83271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardComponent.cpp; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp; sourceTree = SOURCE_ROOT; }; | ||||
@@ -1015,6 +1017,7 @@ | |||||
9C4D1018ECC0BA07346453EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_AutoLinkLibraries.h; path = ../../src/native/windows/juce_win32_AutoLinkLibraries.h; sourceTree = SOURCE_ROOT; }; | 9C4D1018ECC0BA07346453EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_AutoLinkLibraries.h; path = ../../src/native/windows/juce_win32_AutoLinkLibraries.h; sourceTree = SOURCE_ROOT; }; | ||||
3A37CD82212075940421CE4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_CameraDevice.cpp; path = ../../src/native/windows/juce_win32_CameraDevice.cpp; sourceTree = SOURCE_ROOT; }; | 3A37CD82212075940421CE4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_CameraDevice.cpp; path = ../../src/native/windows/juce_win32_CameraDevice.cpp; sourceTree = SOURCE_ROOT; }; | ||||
7F3EF672D07ECE3E13AAF267 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Direct2DGraphicsContext.cpp; path = ../../src/native/windows/juce_win32_Direct2DGraphicsContext.cpp; sourceTree = SOURCE_ROOT; }; | 7F3EF672D07ECE3E13AAF267 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Direct2DGraphicsContext.cpp; path = ../../src/native/windows/juce_win32_Direct2DGraphicsContext.cpp; sourceTree = SOURCE_ROOT; }; | ||||
249959E338D7750E56A9F2F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DirectShowComponent.cpp; path = ../../src/native/windows/juce_win32_DirectShowComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||||
58B70C726D186B4E770300BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DirectSound.cpp; path = ../../src/native/windows/juce_win32_DirectSound.cpp; sourceTree = SOURCE_ROOT; }; | 58B70C726D186B4E770300BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DirectSound.cpp; path = ../../src/native/windows/juce_win32_DirectSound.cpp; sourceTree = SOURCE_ROOT; }; | ||||
BA66E265749F75DBA86EC3F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_DynamicLibraryLoader.h; path = ../../src/native/windows/juce_win32_DynamicLibraryLoader.h; sourceTree = SOURCE_ROOT; }; | BA66E265749F75DBA86EC3F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_DynamicLibraryLoader.h; path = ../../src/native/windows/juce_win32_DynamicLibraryLoader.h; sourceTree = SOURCE_ROOT; }; | ||||
DCD09B6EF4A4A109DE01F152 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_FileChooser.cpp; path = ../../src/native/windows/juce_win32_FileChooser.cpp; sourceTree = SOURCE_ROOT; }; | DCD09B6EF4A4A109DE01F152 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_FileChooser.cpp; path = ../../src/native/windows/juce_win32_FileChooser.cpp; sourceTree = SOURCE_ROOT; }; | ||||
@@ -1565,6 +1568,7 @@ | |||||
C25DFA2F2B673EB0146412BB, | C25DFA2F2B673EB0146412BB, | ||||
0A20E7E561633610A76A34AB, | 0A20E7E561633610A76A34AB, | ||||
CD9F817B7EF0DA080668A3A8, | CD9F817B7EF0DA080668A3A8, | ||||
4BF7A01BCE61A5068CA13D8F, | |||||
9C1D5CDA61FB51F657DA8B22, | 9C1D5CDA61FB51F657DA8B22, | ||||
7DB8CFB77EA690ACF54C63B4, | 7DB8CFB77EA690ACF54C63B4, | ||||
3C8C1AAF32DFECB89EB83271, | 3C8C1AAF32DFECB89EB83271, | ||||
@@ -1851,6 +1855,7 @@ | |||||
9C4D1018ECC0BA07346453EF, | 9C4D1018ECC0BA07346453EF, | ||||
3A37CD82212075940421CE4F, | 3A37CD82212075940421CE4F, | ||||
7F3EF672D07ECE3E13AAF267, | 7F3EF672D07ECE3E13AAF267, | ||||
249959E338D7750E56A9F2F8, | |||||
58B70C726D186B4E770300BC, | 58B70C726D186B4E770300BC, | ||||
BA66E265749F75DBA86EC3F1, | BA66E265749F75DBA86EC3F1, | ||||
DCD09B6EF4A4A109DE01F152, | DCD09B6EF4A4A109DE01F152, | ||||
@@ -2361,6 +2366,7 @@ | |||||
9686F29C29D1C26E353DE68A, | 9686F29C29D1C26E353DE68A, | ||||
79B4C2F1C0CF592ACE8093C0, | 79B4C2F1C0CF592ACE8093C0, | ||||
88A87D28B3809665F28DC16E, | 88A87D28B3809665F28DC16E, | ||||
6BDBEFD97E643E5BB27637FF, | |||||
BC3C22F5350ED7433D303A04, | BC3C22F5350ED7433D303A04, | ||||
0B41EC4D7839F8CBCB8F9A0D, | 0B41EC4D7839F8CBCB8F9A0D, | ||||
B420CD4B589C08EAFA6E3DA4, | B420CD4B589C08EAFA6E3DA4, | ||||
@@ -646,6 +646,7 @@ | |||||
<File RelativePath="..\..\src\gui\components\special\juce_BubbleMessageComponent.h"/> | <File RelativePath="..\..\src\gui\components\special\juce_BubbleMessageComponent.h"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.cpp"/> | <File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.cpp"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.h"/> | <File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.h"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_DirectShowComponent.h"/> | |||||
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.cpp"/> | <File RelativePath="..\..\src\gui\components\special\juce_DropShadower.cpp"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.h"/> | <File RelativePath="..\..\src\gui\components\special\juce_DropShadower.h"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/> | <File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/> | ||||
@@ -919,6 +920,7 @@ | |||||
<File RelativePath="..\..\src\native\windows\juce_win32_AutoLinkLibraries.h"/> | <File RelativePath="..\..\src\native\windows\juce_win32_AutoLinkLibraries.h"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_CameraDevice.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_CameraDevice.cpp"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_DirectShowComponent.cpp"/> | |||||
<File RelativePath="..\..\src\native\windows\juce_win32_DirectSound.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_DirectSound.cpp"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_DynamicLibraryLoader.h"/> | <File RelativePath="..\..\src\native\windows\juce_win32_DynamicLibraryLoader.h"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_FileChooser.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_FileChooser.cpp"/> | ||||
@@ -646,6 +646,7 @@ | |||||
<File RelativePath="..\..\src\gui\components\special\juce_BubbleMessageComponent.h"/> | <File RelativePath="..\..\src\gui\components\special\juce_BubbleMessageComponent.h"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.cpp"/> | <File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.cpp"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.h"/> | <File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.h"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_DirectShowComponent.h"/> | |||||
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.cpp"/> | <File RelativePath="..\..\src\gui\components\special\juce_DropShadower.cpp"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.h"/> | <File RelativePath="..\..\src\gui\components\special\juce_DropShadower.h"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/> | <File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/> | ||||
@@ -919,6 +920,7 @@ | |||||
<File RelativePath="..\..\src\native\windows\juce_win32_AutoLinkLibraries.h"/> | <File RelativePath="..\..\src\native\windows\juce_win32_AutoLinkLibraries.h"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_CameraDevice.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_CameraDevice.cpp"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_DirectShowComponent.cpp"/> | |||||
<File RelativePath="..\..\src\native\windows\juce_win32_DirectSound.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_DirectSound.cpp"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_DynamicLibraryLoader.h"/> | <File RelativePath="..\..\src\native\windows\juce_win32_DynamicLibraryLoader.h"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_FileChooser.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_FileChooser.cpp"/> | ||||
@@ -648,6 +648,7 @@ | |||||
<File RelativePath="..\..\src\gui\components\special\juce_BubbleMessageComponent.h"/> | <File RelativePath="..\..\src\gui\components\special\juce_BubbleMessageComponent.h"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.cpp"/> | <File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.cpp"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.h"/> | <File RelativePath="..\..\src\gui\components\special\juce_ColourSelector.h"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_DirectShowComponent.h"/> | |||||
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.cpp"/> | <File RelativePath="..\..\src\gui\components\special\juce_DropShadower.cpp"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_DropShadower.h"/> | <File RelativePath="..\..\src\gui\components\special\juce_DropShadower.h"/> | ||||
<File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/> | <File RelativePath="..\..\src\gui\components\special\juce_MidiKeyboardComponent.cpp"/> | ||||
@@ -921,6 +922,7 @@ | |||||
<File RelativePath="..\..\src\native\windows\juce_win32_AutoLinkLibraries.h"/> | <File RelativePath="..\..\src\native\windows\juce_win32_AutoLinkLibraries.h"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_CameraDevice.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_CameraDevice.cpp"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_DirectShowComponent.cpp"/> | |||||
<File RelativePath="..\..\src\native\windows\juce_win32_DirectSound.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_DirectSound.cpp"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_DynamicLibraryLoader.h"/> | <File RelativePath="..\..\src\native\windows\juce_win32_DynamicLibraryLoader.h"/> | ||||
<File RelativePath="..\..\src\native\windows\juce_win32_FileChooser.cpp"/> | <File RelativePath="..\..\src\native\windows\juce_win32_FileChooser.cpp"/> | ||||
@@ -401,6 +401,7 @@ | |||||
<ClCompile Include="..\..\src\native\windows\juce_win32_AudioCDReader.cpp"/> | <ClCompile Include="..\..\src\native\windows\juce_win32_AudioCDReader.cpp"/> | ||||
<ClCompile Include="..\..\src\native\windows\juce_win32_CameraDevice.cpp"/> | <ClCompile Include="..\..\src\native\windows\juce_win32_CameraDevice.cpp"/> | ||||
<ClCompile Include="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"/> | <ClCompile Include="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"/> | ||||
<ClCompile Include="..\..\src\native\windows\juce_win32_DirectShowComponent.cpp"/> | |||||
<ClCompile Include="..\..\src\native\windows\juce_win32_DirectSound.cpp"/> | <ClCompile Include="..\..\src\native\windows\juce_win32_DirectSound.cpp"/> | ||||
<ClCompile Include="..\..\src\native\windows\juce_win32_FileChooser.cpp"/> | <ClCompile Include="..\..\src\native\windows\juce_win32_FileChooser.cpp"/> | ||||
<ClCompile Include="..\..\src\native\windows\juce_win32_Files.cpp"/> | <ClCompile Include="..\..\src\native\windows\juce_win32_Files.cpp"/> | ||||
@@ -683,6 +684,7 @@ | |||||
<ClInclude Include="..\..\src\gui\components\special\juce_BubbleComponent.h"/> | <ClInclude Include="..\..\src\gui\components\special\juce_BubbleComponent.h"/> | ||||
<ClInclude Include="..\..\src\gui\components\special\juce_BubbleMessageComponent.h"/> | <ClInclude Include="..\..\src\gui\components\special\juce_BubbleMessageComponent.h"/> | ||||
<ClInclude Include="..\..\src\gui\components\special\juce_ColourSelector.h"/> | <ClInclude Include="..\..\src\gui\components\special\juce_ColourSelector.h"/> | ||||
<ClInclude Include="..\..\src\gui\components\special\juce_DirectShowComponent.h"/> | |||||
<ClInclude Include="..\..\src\gui\components\special\juce_DropShadower.h"/> | <ClInclude Include="..\..\src\gui\components\special\juce_DropShadower.h"/> | ||||
<ClInclude Include="..\..\src\gui\components\special\juce_MidiKeyboardComponent.h"/> | <ClInclude Include="..\..\src\gui\components\special\juce_MidiKeyboardComponent.h"/> | ||||
<ClInclude Include="..\..\src\gui\components\special\juce_NSViewComponent.h"/> | <ClInclude Include="..\..\src\gui\components\special\juce_NSViewComponent.h"/> | ||||
@@ -1138,6 +1138,9 @@ | |||||
<ClCompile Include="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"> | <ClCompile Include="..\..\src\native\windows\juce_win32_Direct2DGraphicsContext.cpp"> | ||||
<Filter>Juce\Source\native\windows</Filter> | <Filter>Juce\Source\native\windows</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\src\native\windows\juce_win32_DirectShowComponent.cpp"> | |||||
<Filter>Juce\Source\native\windows</Filter> | |||||
</ClCompile> | |||||
<ClCompile Include="..\..\src\native\windows\juce_win32_DirectSound.cpp"> | <ClCompile Include="..\..\src\native\windows\juce_win32_DirectSound.cpp"> | ||||
<Filter>Juce\Source\native\windows</Filter> | <Filter>Juce\Source\native\windows</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
@@ -1980,6 +1983,9 @@ | |||||
<ClInclude Include="..\..\src\gui\components\special\juce_ColourSelector.h"> | <ClInclude Include="..\..\src\gui\components\special\juce_ColourSelector.h"> | ||||
<Filter>Juce\Source\gui\components\special</Filter> | <Filter>Juce\Source\gui\components\special</Filter> | ||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\src\gui\components\special\juce_DirectShowComponent.h"> | |||||
<Filter>Juce\Source\gui\components\special</Filter> | |||||
</ClInclude> | |||||
<ClInclude Include="..\..\src\gui\components\special\juce_DropShadower.h"> | <ClInclude Include="..\..\src\gui\components\special\juce_DropShadower.h"> | ||||
<Filter>Juce\Source\gui\components\special</Filter> | <Filter>Juce\Source\gui\components\special</Filter> | ||||
</ClInclude> | </ClInclude> | ||||
@@ -313,6 +313,7 @@ | |||||
9686F29C29D1C26E353DE68A = { isa = PBXBuildFile; fileRef = F3B50EE3939E9F16D13C3C7C; }; | 9686F29C29D1C26E353DE68A = { isa = PBXBuildFile; fileRef = F3B50EE3939E9F16D13C3C7C; }; | ||||
79B4C2F1C0CF592ACE8093C0 = { isa = PBXBuildFile; fileRef = 3A37CD82212075940421CE4F; }; | 79B4C2F1C0CF592ACE8093C0 = { isa = PBXBuildFile; fileRef = 3A37CD82212075940421CE4F; }; | ||||
88A87D28B3809665F28DC16E = { isa = PBXBuildFile; fileRef = 7F3EF672D07ECE3E13AAF267; }; | 88A87D28B3809665F28DC16E = { isa = PBXBuildFile; fileRef = 7F3EF672D07ECE3E13AAF267; }; | ||||
6BDBEFD97E643E5BB27637FF = { isa = PBXBuildFile; fileRef = 249959E338D7750E56A9F2F8; }; | |||||
BC3C22F5350ED7433D303A04 = { isa = PBXBuildFile; fileRef = 58B70C726D186B4E770300BC; }; | BC3C22F5350ED7433D303A04 = { isa = PBXBuildFile; fileRef = 58B70C726D186B4E770300BC; }; | ||||
0B41EC4D7839F8CBCB8F9A0D = { isa = PBXBuildFile; fileRef = DCD09B6EF4A4A109DE01F152; }; | 0B41EC4D7839F8CBCB8F9A0D = { isa = PBXBuildFile; fileRef = DCD09B6EF4A4A109DE01F152; }; | ||||
B420CD4B589C08EAFA6E3DA4 = { isa = PBXBuildFile; fileRef = 7527A5E8F4F39581159D3E5B; }; | B420CD4B589C08EAFA6E3DA4 = { isa = PBXBuildFile; fileRef = 7527A5E8F4F39581159D3E5B; }; | ||||
@@ -785,6 +786,7 @@ | |||||
C25DFA2F2B673EB0146412BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BubbleMessageComponent.h; path = ../../src/gui/components/special/juce_BubbleMessageComponent.h; sourceTree = SOURCE_ROOT; }; | C25DFA2F2B673EB0146412BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_BubbleMessageComponent.h; path = ../../src/gui/components/special/juce_BubbleMessageComponent.h; sourceTree = SOURCE_ROOT; }; | ||||
0A20E7E561633610A76A34AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourSelector.cpp; path = ../../src/gui/components/special/juce_ColourSelector.cpp; sourceTree = SOURCE_ROOT; }; | 0A20E7E561633610A76A34AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourSelector.cpp; path = ../../src/gui/components/special/juce_ColourSelector.cpp; sourceTree = SOURCE_ROOT; }; | ||||
CD9F817B7EF0DA080668A3A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../src/gui/components/special/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; }; | CD9F817B7EF0DA080668A3A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../src/gui/components/special/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; }; | ||||
4BF7A01BCE61A5068CA13D8F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DirectShowComponent.h; path = ../../src/gui/components/special/juce_DirectShowComponent.h; sourceTree = SOURCE_ROOT; }; | |||||
9C1D5CDA61FB51F657DA8B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../src/gui/components/special/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; }; | 9C1D5CDA61FB51F657DA8B22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../src/gui/components/special/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; }; | ||||
7DB8CFB77EA690ACF54C63B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../src/gui/components/special/juce_DropShadower.h; sourceTree = SOURCE_ROOT; }; | 7DB8CFB77EA690ACF54C63B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../src/gui/components/special/juce_DropShadower.h; sourceTree = SOURCE_ROOT; }; | ||||
3C8C1AAF32DFECB89EB83271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardComponent.cpp; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp; sourceTree = SOURCE_ROOT; }; | 3C8C1AAF32DFECB89EB83271 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardComponent.cpp; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp; sourceTree = SOURCE_ROOT; }; | ||||
@@ -1015,6 +1017,7 @@ | |||||
9C4D1018ECC0BA07346453EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_AutoLinkLibraries.h; path = ../../src/native/windows/juce_win32_AutoLinkLibraries.h; sourceTree = SOURCE_ROOT; }; | 9C4D1018ECC0BA07346453EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_AutoLinkLibraries.h; path = ../../src/native/windows/juce_win32_AutoLinkLibraries.h; sourceTree = SOURCE_ROOT; }; | ||||
3A37CD82212075940421CE4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_CameraDevice.cpp; path = ../../src/native/windows/juce_win32_CameraDevice.cpp; sourceTree = SOURCE_ROOT; }; | 3A37CD82212075940421CE4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_CameraDevice.cpp; path = ../../src/native/windows/juce_win32_CameraDevice.cpp; sourceTree = SOURCE_ROOT; }; | ||||
7F3EF672D07ECE3E13AAF267 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Direct2DGraphicsContext.cpp; path = ../../src/native/windows/juce_win32_Direct2DGraphicsContext.cpp; sourceTree = SOURCE_ROOT; }; | 7F3EF672D07ECE3E13AAF267 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Direct2DGraphicsContext.cpp; path = ../../src/native/windows/juce_win32_Direct2DGraphicsContext.cpp; sourceTree = SOURCE_ROOT; }; | ||||
249959E338D7750E56A9F2F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DirectShowComponent.cpp; path = ../../src/native/windows/juce_win32_DirectShowComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||||
58B70C726D186B4E770300BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DirectSound.cpp; path = ../../src/native/windows/juce_win32_DirectSound.cpp; sourceTree = SOURCE_ROOT; }; | 58B70C726D186B4E770300BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_DirectSound.cpp; path = ../../src/native/windows/juce_win32_DirectSound.cpp; sourceTree = SOURCE_ROOT; }; | ||||
BA66E265749F75DBA86EC3F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_DynamicLibraryLoader.h; path = ../../src/native/windows/juce_win32_DynamicLibraryLoader.h; sourceTree = SOURCE_ROOT; }; | BA66E265749F75DBA86EC3F1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_win32_DynamicLibraryLoader.h; path = ../../src/native/windows/juce_win32_DynamicLibraryLoader.h; sourceTree = SOURCE_ROOT; }; | ||||
DCD09B6EF4A4A109DE01F152 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_FileChooser.cpp; path = ../../src/native/windows/juce_win32_FileChooser.cpp; sourceTree = SOURCE_ROOT; }; | DCD09B6EF4A4A109DE01F152 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_FileChooser.cpp; path = ../../src/native/windows/juce_win32_FileChooser.cpp; sourceTree = SOURCE_ROOT; }; | ||||
@@ -1565,6 +1568,7 @@ | |||||
C25DFA2F2B673EB0146412BB, | C25DFA2F2B673EB0146412BB, | ||||
0A20E7E561633610A76A34AB, | 0A20E7E561633610A76A34AB, | ||||
CD9F817B7EF0DA080668A3A8, | CD9F817B7EF0DA080668A3A8, | ||||
4BF7A01BCE61A5068CA13D8F, | |||||
9C1D5CDA61FB51F657DA8B22, | 9C1D5CDA61FB51F657DA8B22, | ||||
7DB8CFB77EA690ACF54C63B4, | 7DB8CFB77EA690ACF54C63B4, | ||||
3C8C1AAF32DFECB89EB83271, | 3C8C1AAF32DFECB89EB83271, | ||||
@@ -1851,6 +1855,7 @@ | |||||
9C4D1018ECC0BA07346453EF, | 9C4D1018ECC0BA07346453EF, | ||||
3A37CD82212075940421CE4F, | 3A37CD82212075940421CE4F, | ||||
7F3EF672D07ECE3E13AAF267, | 7F3EF672D07ECE3E13AAF267, | ||||
249959E338D7750E56A9F2F8, | |||||
58B70C726D186B4E770300BC, | 58B70C726D186B4E770300BC, | ||||
BA66E265749F75DBA86EC3F1, | BA66E265749F75DBA86EC3F1, | ||||
DCD09B6EF4A4A109DE01F152, | DCD09B6EF4A4A109DE01F152, | ||||
@@ -2365,6 +2370,7 @@ | |||||
9686F29C29D1C26E353DE68A, | 9686F29C29D1C26E353DE68A, | ||||
79B4C2F1C0CF592ACE8093C0, | 79B4C2F1C0CF592ACE8093C0, | ||||
88A87D28B3809665F28DC16E, | 88A87D28B3809665F28DC16E, | ||||
6BDBEFD97E643E5BB27637FF, | |||||
BC3C22F5350ED7433D303A04, | BC3C22F5350ED7433D303A04, | ||||
0B41EC4D7839F8CBCB8F9A0D, | 0B41EC4D7839F8CBCB8F9A0D, | ||||
B420CD4B589C08EAFA6E3DA4, | B420CD4B589C08EAFA6E3DA4, | ||||
@@ -926,6 +926,8 @@ | |||||
file="src/gui/components/special/juce_ColourSelector.cpp"/> | file="src/gui/components/special/juce_ColourSelector.cpp"/> | ||||
<FILE id="W0GkpoQPd" name="juce_ColourSelector.h" compile="0" resource="0" | <FILE id="W0GkpoQPd" name="juce_ColourSelector.h" compile="0" resource="0" | ||||
file="src/gui/components/special/juce_ColourSelector.h"/> | file="src/gui/components/special/juce_ColourSelector.h"/> | ||||
<FILE id="FfvKX" name="juce_DirectShowComponent.h" compile="0" resource="0" | |||||
file="src/gui/components/special/juce_DirectShowComponent.h"/> | |||||
<FILE id="l18RV2qVq" name="juce_DropShadower.cpp" compile="1" resource="0" | <FILE id="l18RV2qVq" name="juce_DropShadower.cpp" compile="1" resource="0" | ||||
file="src/gui/components/special/juce_DropShadower.cpp"/> | file="src/gui/components/special/juce_DropShadower.cpp"/> | ||||
<FILE id="tNsR3nrMx" name="juce_DropShadower.h" compile="0" resource="0" | <FILE id="tNsR3nrMx" name="juce_DropShadower.h" compile="0" resource="0" | ||||
@@ -1416,6 +1418,8 @@ | |||||
resource="0" file="src/native/windows/juce_win32_CameraDevice.cpp"/> | resource="0" file="src/native/windows/juce_win32_CameraDevice.cpp"/> | ||||
<FILE id="c4BNPC" name="juce_win32_Direct2DGraphicsContext.cpp" compile="1" | <FILE id="c4BNPC" name="juce_win32_Direct2DGraphicsContext.cpp" compile="1" | ||||
resource="0" file="src/native/windows/juce_win32_Direct2DGraphicsContext.cpp"/> | resource="0" file="src/native/windows/juce_win32_Direct2DGraphicsContext.cpp"/> | ||||
<FILE id="lWJ3cT" name="juce_win32_DirectShowComponent.cpp" compile="1" | |||||
resource="0" file="src/native/windows/juce_win32_DirectShowComponent.cpp"/> | |||||
<FILE id="CVNbte6ov" name="juce_win32_DirectSound.cpp" compile="1" | <FILE id="CVNbte6ov" name="juce_win32_DirectSound.cpp" compile="1" | ||||
resource="0" file="src/native/windows/juce_win32_DirectSound.cpp"/> | resource="0" file="src/native/windows/juce_win32_DirectSound.cpp"/> | ||||
<FILE id="WuS4E8Pvz" name="juce_win32_DynamicLibraryLoader.h" compile="0" | <FILE id="WuS4E8Pvz" name="juce_win32_DynamicLibraryLoader.h" compile="0" | ||||
@@ -1620,5 +1624,5 @@ | |||||
JUCE_PLUGINHOST_VST="default" JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | JUCE_PLUGINHOST_VST="default" JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | ||||
JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | ||||
JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_USE_XCURSOR="default" | JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_USE_XCURSOR="default" | ||||
JUCE_DIRECT2D="default"/> | |||||
JUCE_DIRECT2D="default" JUCE_MEDIAFOUNDATION="default" JUCE_DIRECTSHOW="default"/> | |||||
</JUCERPROJECT> | </JUCERPROJECT> |
@@ -186,5 +186,6 @@ | |||||
JUCE_USE_XINERAMA="default" JUCE_USE_XSHM="default" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | JUCE_USE_XINERAMA="default" JUCE_USE_XSHM="default" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | ||||
JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | ||||
JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | ||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default"/> | |||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default" | |||||
JUCE_DIRECTSHOW="default" JUCE_MEDIAFOUNDATION="default"/> | |||||
</JUCERPROJECT> | </JUCERPROJECT> |
@@ -16,6 +16,8 @@ | |||||
#define JUCE_ASIO 0 | #define JUCE_ASIO 0 | ||||
#define JUCE_WASAPI 0 | #define JUCE_WASAPI 0 | ||||
#define JUCE_DIRECTSOUND 0 | #define JUCE_DIRECTSOUND 0 | ||||
//#define JUCE_DIRECTSHOW | |||||
//#define JUCE_MEDIAFOUNDATION | |||||
#define JUCE_ALSA 0 | #define JUCE_ALSA 0 | ||||
#define JUCE_QUICKTIME 0 | #define JUCE_QUICKTIME 0 | ||||
#define JUCE_OPENGL 0 | #define JUCE_OPENGL 0 | ||||
@@ -18,6 +18,7 @@ LOCAL_SRC_FILES := \ | |||||
../../../Source/demos/AudioDemoTabComponent.cpp\ | ../../../Source/demos/AudioDemoTabComponent.cpp\ | ||||
../../../Source/demos/CameraDemo.cpp\ | ../../../Source/demos/CameraDemo.cpp\ | ||||
../../../Source/demos/CodeEditorDemo.cpp\ | ../../../Source/demos/CodeEditorDemo.cpp\ | ||||
../../../Source/demos/DirectShowDemo.cpp\ | |||||
../../../Source/demos/DragAndDropDemo.cpp\ | ../../../Source/demos/DragAndDropDemo.cpp\ | ||||
../../../Source/demos/FontsAndTextDemo.cpp\ | ../../../Source/demos/FontsAndTextDemo.cpp\ | ||||
../../../Source/demos/InterprocessCommsDemo.cpp\ | ../../../Source/demos/InterprocessCommsDemo.cpp\ | ||||
@@ -53,6 +53,7 @@ OBJECTS := \ | |||||
$(OBJDIR)/AudioDemoTabComponent_81185e3.o \ | $(OBJDIR)/AudioDemoTabComponent_81185e3.o \ | ||||
$(OBJDIR)/CameraDemo_954a4a30.o \ | $(OBJDIR)/CameraDemo_954a4a30.o \ | ||||
$(OBJDIR)/CodeEditorDemo_55f35645.o \ | $(OBJDIR)/CodeEditorDemo_55f35645.o \ | ||||
$(OBJDIR)/DirectShowDemo_2e0bc311.o \ | |||||
$(OBJDIR)/DragAndDropDemo_f8c9e5d7.o \ | $(OBJDIR)/DragAndDropDemo_f8c9e5d7.o \ | ||||
$(OBJDIR)/FontsAndTextDemo_2cefcecb.o \ | $(OBJDIR)/FontsAndTextDemo_2cefcecb.o \ | ||||
$(OBJDIR)/InterprocessCommsDemo_aa1c1119.o \ | $(OBJDIR)/InterprocessCommsDemo_aa1c1119.o \ | ||||
@@ -135,6 +136,11 @@ $(OBJDIR)/CodeEditorDemo_55f35645.o: ../../Source/demos/CodeEditorDemo.cpp | |||||
@echo "Compiling CodeEditorDemo.cpp" | @echo "Compiling CodeEditorDemo.cpp" | ||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | ||||
$(OBJDIR)/DirectShowDemo_2e0bc311.o: ../../Source/demos/DirectShowDemo.cpp | |||||
-@mkdir -p $(OBJDIR) | |||||
@echo "Compiling DirectShowDemo.cpp" | |||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||||
$(OBJDIR)/DragAndDropDemo_f8c9e5d7.o: ../../Source/demos/DragAndDropDemo.cpp | $(OBJDIR)/DragAndDropDemo_f8c9e5d7.o: ../../Source/demos/DragAndDropDemo.cpp | ||||
-@mkdir -p $(OBJDIR) | -@mkdir -p $(OBJDIR) | ||||
@echo "Compiling DragAndDropDemo.cpp" | @echo "Compiling DragAndDropDemo.cpp" | ||||
@@ -28,6 +28,7 @@ | |||||
7EFB4E7D738BFFF90F49E0C0 = { isa = PBXBuildFile; fileRef = 048CEE4CC06227D8A57E47F2; }; | 7EFB4E7D738BFFF90F49E0C0 = { isa = PBXBuildFile; fileRef = 048CEE4CC06227D8A57E47F2; }; | ||||
B69F5957B1729915BFB18735 = { isa = PBXBuildFile; fileRef = 7D65727C8F72F2BCC9A17D34; }; | B69F5957B1729915BFB18735 = { isa = PBXBuildFile; fileRef = 7D65727C8F72F2BCC9A17D34; }; | ||||
F920A5AB6D0FF01022575079 = { isa = PBXBuildFile; fileRef = 268D7AFE2F3822C2C8E9A612; }; | F920A5AB6D0FF01022575079 = { isa = PBXBuildFile; fileRef = 268D7AFE2F3822C2C8E9A612; }; | ||||
940BE0338CC1FEB65B4B82E2 = { isa = PBXBuildFile; fileRef = E072353A8A1F26CFB7090905; }; | |||||
A3AF0F559DD97F1B908AC1CA = { isa = PBXBuildFile; fileRef = F23738E4EFD2323063F82F1C; }; | A3AF0F559DD97F1B908AC1CA = { isa = PBXBuildFile; fileRef = F23738E4EFD2323063F82F1C; }; | ||||
2C0AB902CB01E38D87A2A6A5 = { isa = PBXBuildFile; fileRef = B7F4DAFA5F8F1FC976C8B55D; }; | 2C0AB902CB01E38D87A2A6A5 = { isa = PBXBuildFile; fileRef = B7F4DAFA5F8F1FC976C8B55D; }; | ||||
ACD2210FDE1137548F995F85 = { isa = PBXBuildFile; fileRef = F7620D8D567CCE463ADDE0A6; }; | ACD2210FDE1137548F995F85 = { isa = PBXBuildFile; fileRef = F7620D8D567CCE463ADDE0A6; }; | ||||
@@ -76,6 +77,7 @@ | |||||
8BEA0B754661F3038DBAF558 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioDemoTabComponent.h; path = ../../Source/demos/AudioDemoTabComponent.h; sourceTree = SOURCE_ROOT; }; | 8BEA0B754661F3038DBAF558 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioDemoTabComponent.h; path = ../../Source/demos/AudioDemoTabComponent.h; sourceTree = SOURCE_ROOT; }; | ||||
7D65727C8F72F2BCC9A17D34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CameraDemo.cpp; path = ../../Source/demos/CameraDemo.cpp; sourceTree = SOURCE_ROOT; }; | 7D65727C8F72F2BCC9A17D34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CameraDemo.cpp; path = ../../Source/demos/CameraDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
268D7AFE2F3822C2C8E9A612 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CodeEditorDemo.cpp; path = ../../Source/demos/CodeEditorDemo.cpp; sourceTree = SOURCE_ROOT; }; | 268D7AFE2F3822C2C8E9A612 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CodeEditorDemo.cpp; path = ../../Source/demos/CodeEditorDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
E072353A8A1F26CFB7090905 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DirectShowDemo.cpp; path = ../../Source/demos/DirectShowDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
F23738E4EFD2323063F82F1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DragAndDropDemo.cpp; path = ../../Source/demos/DragAndDropDemo.cpp; sourceTree = SOURCE_ROOT; }; | F23738E4EFD2323063F82F1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DragAndDropDemo.cpp; path = ../../Source/demos/DragAndDropDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
B7F4DAFA5F8F1FC976C8B55D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FontsAndTextDemo.cpp; path = ../../Source/demos/FontsAndTextDemo.cpp; sourceTree = SOURCE_ROOT; }; | B7F4DAFA5F8F1FC976C8B55D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FontsAndTextDemo.cpp; path = ../../Source/demos/FontsAndTextDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
F7620D8D567CCE463ADDE0A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InterprocessCommsDemo.cpp; path = ../../Source/demos/InterprocessCommsDemo.cpp; sourceTree = SOURCE_ROOT; }; | F7620D8D567CCE463ADDE0A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InterprocessCommsDemo.cpp; path = ../../Source/demos/InterprocessCommsDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
@@ -117,6 +119,7 @@ | |||||
8BEA0B754661F3038DBAF558, | 8BEA0B754661F3038DBAF558, | ||||
7D65727C8F72F2BCC9A17D34, | 7D65727C8F72F2BCC9A17D34, | ||||
268D7AFE2F3822C2C8E9A612, | 268D7AFE2F3822C2C8E9A612, | ||||
E072353A8A1F26CFB7090905, | |||||
F23738E4EFD2323063F82F1C, | F23738E4EFD2323063F82F1C, | ||||
B7F4DAFA5F8F1FC976C8B55D, | B7F4DAFA5F8F1FC976C8B55D, | ||||
F7620D8D567CCE463ADDE0A6, | F7620D8D567CCE463ADDE0A6, | ||||
@@ -258,6 +261,7 @@ | |||||
7EFB4E7D738BFFF90F49E0C0, | 7EFB4E7D738BFFF90F49E0C0, | ||||
B69F5957B1729915BFB18735, | B69F5957B1729915BFB18735, | ||||
F920A5AB6D0FF01022575079, | F920A5AB6D0FF01022575079, | ||||
940BE0338CC1FEB65B4B82E2, | |||||
A3AF0F559DD97F1B908AC1CA, | A3AF0F559DD97F1B908AC1CA, | ||||
2C0AB902CB01E38D87A2A6A5, | 2C0AB902CB01E38D87A2A6A5, | ||||
ACD2210FDE1137548F995F85, | ACD2210FDE1137548F995F85, | ||||
@@ -148,6 +148,7 @@ | |||||
<File RelativePath="..\..\Source\demos\AudioDemoTabComponent.h"/> | <File RelativePath="..\..\Source\demos\AudioDemoTabComponent.h"/> | ||||
<File RelativePath="..\..\Source\demos\CameraDemo.cpp"/> | <File RelativePath="..\..\Source\demos\CameraDemo.cpp"/> | ||||
<File RelativePath="..\..\Source\demos\CodeEditorDemo.cpp"/> | <File RelativePath="..\..\Source\demos\CodeEditorDemo.cpp"/> | ||||
<File RelativePath="..\..\Source\demos\DirectShowDemo.cpp"/> | |||||
<File RelativePath="..\..\Source\demos\DragAndDropDemo.cpp"/> | <File RelativePath="..\..\Source\demos\DragAndDropDemo.cpp"/> | ||||
<File RelativePath="..\..\Source\demos\FontsAndTextDemo.cpp"/> | <File RelativePath="..\..\Source\demos\FontsAndTextDemo.cpp"/> | ||||
<File RelativePath="..\..\Source\demos\InterprocessCommsDemo.cpp"/> | <File RelativePath="..\..\Source\demos\InterprocessCommsDemo.cpp"/> | ||||
@@ -148,6 +148,7 @@ | |||||
<File RelativePath="..\..\Source\demos\AudioDemoTabComponent.h"/> | <File RelativePath="..\..\Source\demos\AudioDemoTabComponent.h"/> | ||||
<File RelativePath="..\..\Source\demos\CameraDemo.cpp"/> | <File RelativePath="..\..\Source\demos\CameraDemo.cpp"/> | ||||
<File RelativePath="..\..\Source\demos\CodeEditorDemo.cpp"/> | <File RelativePath="..\..\Source\demos\CodeEditorDemo.cpp"/> | ||||
<File RelativePath="..\..\Source\demos\DirectShowDemo.cpp"/> | |||||
<File RelativePath="..\..\Source\demos\DragAndDropDemo.cpp"/> | <File RelativePath="..\..\Source\demos\DragAndDropDemo.cpp"/> | ||||
<File RelativePath="..\..\Source\demos\FontsAndTextDemo.cpp"/> | <File RelativePath="..\..\Source\demos\FontsAndTextDemo.cpp"/> | ||||
<File RelativePath="..\..\Source\demos\InterprocessCommsDemo.cpp"/> | <File RelativePath="..\..\Source\demos\InterprocessCommsDemo.cpp"/> | ||||
@@ -132,6 +132,7 @@ | |||||
<ClCompile Include="..\..\Source\demos\AudioDemoTabComponent.cpp"/> | <ClCompile Include="..\..\Source\demos\AudioDemoTabComponent.cpp"/> | ||||
<ClCompile Include="..\..\Source\demos\CameraDemo.cpp"/> | <ClCompile Include="..\..\Source\demos\CameraDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\demos\CodeEditorDemo.cpp"/> | <ClCompile Include="..\..\Source\demos\CodeEditorDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\demos\DirectShowDemo.cpp"/> | |||||
<ClCompile Include="..\..\Source\demos\DragAndDropDemo.cpp"/> | <ClCompile Include="..\..\Source\demos\DragAndDropDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\demos\FontsAndTextDemo.cpp"/> | <ClCompile Include="..\..\Source\demos\FontsAndTextDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\demos\InterprocessCommsDemo.cpp"/> | <ClCompile Include="..\..\Source\demos\InterprocessCommsDemo.cpp"/> | ||||
@@ -49,6 +49,9 @@ | |||||
<ClCompile Include="..\..\Source\demos\CodeEditorDemo.cpp"> | <ClCompile Include="..\..\Source\demos\CodeEditorDemo.cpp"> | ||||
<Filter>Juce Demo\Source\Demos</Filter> | <Filter>Juce Demo\Source\Demos</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\Source\demos\DirectShowDemo.cpp"> | |||||
<Filter>Juce Demo\Source\Demos</Filter> | |||||
</ClCompile> | |||||
<ClCompile Include="..\..\Source\demos\DragAndDropDemo.cpp"> | <ClCompile Include="..\..\Source\demos\DragAndDropDemo.cpp"> | ||||
<Filter>Juce Demo\Source\Demos</Filter> | <Filter>Juce Demo\Source\Demos</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
@@ -24,6 +24,7 @@ | |||||
7EFB4E7D738BFFF90F49E0C0 = { isa = PBXBuildFile; fileRef = 048CEE4CC06227D8A57E47F2; }; | 7EFB4E7D738BFFF90F49E0C0 = { isa = PBXBuildFile; fileRef = 048CEE4CC06227D8A57E47F2; }; | ||||
B69F5957B1729915BFB18735 = { isa = PBXBuildFile; fileRef = 7D65727C8F72F2BCC9A17D34; }; | B69F5957B1729915BFB18735 = { isa = PBXBuildFile; fileRef = 7D65727C8F72F2BCC9A17D34; }; | ||||
F920A5AB6D0FF01022575079 = { isa = PBXBuildFile; fileRef = 268D7AFE2F3822C2C8E9A612; }; | F920A5AB6D0FF01022575079 = { isa = PBXBuildFile; fileRef = 268D7AFE2F3822C2C8E9A612; }; | ||||
940BE0338CC1FEB65B4B82E2 = { isa = PBXBuildFile; fileRef = E072353A8A1F26CFB7090905; }; | |||||
A3AF0F559DD97F1B908AC1CA = { isa = PBXBuildFile; fileRef = F23738E4EFD2323063F82F1C; }; | A3AF0F559DD97F1B908AC1CA = { isa = PBXBuildFile; fileRef = F23738E4EFD2323063F82F1C; }; | ||||
2C0AB902CB01E38D87A2A6A5 = { isa = PBXBuildFile; fileRef = B7F4DAFA5F8F1FC976C8B55D; }; | 2C0AB902CB01E38D87A2A6A5 = { isa = PBXBuildFile; fileRef = B7F4DAFA5F8F1FC976C8B55D; }; | ||||
ACD2210FDE1137548F995F85 = { isa = PBXBuildFile; fileRef = F7620D8D567CCE463ADDE0A6; }; | ACD2210FDE1137548F995F85 = { isa = PBXBuildFile; fileRef = F7620D8D567CCE463ADDE0A6; }; | ||||
@@ -68,6 +69,7 @@ | |||||
8BEA0B754661F3038DBAF558 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioDemoTabComponent.h; path = ../../Source/demos/AudioDemoTabComponent.h; sourceTree = SOURCE_ROOT; }; | 8BEA0B754661F3038DBAF558 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioDemoTabComponent.h; path = ../../Source/demos/AudioDemoTabComponent.h; sourceTree = SOURCE_ROOT; }; | ||||
7D65727C8F72F2BCC9A17D34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CameraDemo.cpp; path = ../../Source/demos/CameraDemo.cpp; sourceTree = SOURCE_ROOT; }; | 7D65727C8F72F2BCC9A17D34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CameraDemo.cpp; path = ../../Source/demos/CameraDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
268D7AFE2F3822C2C8E9A612 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CodeEditorDemo.cpp; path = ../../Source/demos/CodeEditorDemo.cpp; sourceTree = SOURCE_ROOT; }; | 268D7AFE2F3822C2C8E9A612 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CodeEditorDemo.cpp; path = ../../Source/demos/CodeEditorDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
E072353A8A1F26CFB7090905 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DirectShowDemo.cpp; path = ../../Source/demos/DirectShowDemo.cpp; sourceTree = SOURCE_ROOT; }; | |||||
F23738E4EFD2323063F82F1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DragAndDropDemo.cpp; path = ../../Source/demos/DragAndDropDemo.cpp; sourceTree = SOURCE_ROOT; }; | F23738E4EFD2323063F82F1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DragAndDropDemo.cpp; path = ../../Source/demos/DragAndDropDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
B7F4DAFA5F8F1FC976C8B55D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FontsAndTextDemo.cpp; path = ../../Source/demos/FontsAndTextDemo.cpp; sourceTree = SOURCE_ROOT; }; | B7F4DAFA5F8F1FC976C8B55D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FontsAndTextDemo.cpp; path = ../../Source/demos/FontsAndTextDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
F7620D8D567CCE463ADDE0A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InterprocessCommsDemo.cpp; path = ../../Source/demos/InterprocessCommsDemo.cpp; sourceTree = SOURCE_ROOT; }; | F7620D8D567CCE463ADDE0A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InterprocessCommsDemo.cpp; path = ../../Source/demos/InterprocessCommsDemo.cpp; sourceTree = SOURCE_ROOT; }; | ||||
@@ -109,6 +111,7 @@ | |||||
8BEA0B754661F3038DBAF558, | 8BEA0B754661F3038DBAF558, | ||||
7D65727C8F72F2BCC9A17D34, | 7D65727C8F72F2BCC9A17D34, | ||||
268D7AFE2F3822C2C8E9A612, | 268D7AFE2F3822C2C8E9A612, | ||||
E072353A8A1F26CFB7090905, | |||||
F23738E4EFD2323063F82F1C, | F23738E4EFD2323063F82F1C, | ||||
B7F4DAFA5F8F1FC976C8B55D, | B7F4DAFA5F8F1FC976C8B55D, | ||||
F7620D8D567CCE463ADDE0A6, | F7620D8D567CCE463ADDE0A6, | ||||
@@ -249,6 +252,7 @@ | |||||
7EFB4E7D738BFFF90F49E0C0, | 7EFB4E7D738BFFF90F49E0C0, | ||||
B69F5957B1729915BFB18735, | B69F5957B1729915BFB18735, | ||||
F920A5AB6D0FF01022575079, | F920A5AB6D0FF01022575079, | ||||
940BE0338CC1FEB65B4B82E2, | |||||
A3AF0F559DD97F1B908AC1CA, | A3AF0F559DD97F1B908AC1CA, | ||||
2C0AB902CB01E38D87A2A6A5, | 2C0AB902CB01E38D87A2A6A5, | ||||
ACD2210FDE1137548F995F85, | ACD2210FDE1137548F995F85, | ||||
@@ -72,6 +72,8 @@ | |||||
file="Source/demos/CameraDemo.cpp"/> | file="Source/demos/CameraDemo.cpp"/> | ||||
<FILE id="VrH9xEBt4" name="CodeEditorDemo.cpp" compile="1" resource="0" | <FILE id="VrH9xEBt4" name="CodeEditorDemo.cpp" compile="1" resource="0" | ||||
file="Source/demos/CodeEditorDemo.cpp"/> | file="Source/demos/CodeEditorDemo.cpp"/> | ||||
<FILE id="Biv7Wl" name="DirectShowDemo.cpp" compile="1" resource="0" | |||||
file="Source/demos/DirectShowDemo.cpp"/> | |||||
<FILE id="LQxkyT31Q" name="DragAndDropDemo.cpp" compile="1" resource="0" | <FILE id="LQxkyT31Q" name="DragAndDropDemo.cpp" compile="1" resource="0" | ||||
file="Source/demos/DragAndDropDemo.cpp"/> | file="Source/demos/DragAndDropDemo.cpp"/> | ||||
<FILE id="WlmBspVQo" name="FontsAndTextDemo.cpp" compile="1" resource="0" | <FILE id="WlmBspVQo" name="FontsAndTextDemo.cpp" compile="1" resource="0" | ||||
@@ -117,5 +119,6 @@ | |||||
JUCE_PLUGINHOST_AU="disabled" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | JUCE_PLUGINHOST_AU="disabled" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | ||||
JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | ||||
JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | ||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default"/> | |||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default" | |||||
JUCE_MEDIAFOUNDATION="default" JUCE_DIRECTSHOW="default"/> | |||||
</JUCERPROJECT> | </JUCERPROJECT> |
@@ -16,6 +16,8 @@ | |||||
//#define JUCE_ASIO | //#define JUCE_ASIO | ||||
//#define JUCE_WASAPI | //#define JUCE_WASAPI | ||||
//#define JUCE_DIRECTSOUND | //#define JUCE_DIRECTSOUND | ||||
//#define JUCE_DIRECTSHOW | |||||
//#define JUCE_MEDIAFOUNDATION | |||||
//#define JUCE_ALSA | //#define JUCE_ALSA | ||||
//#define JUCE_QUICKTIME | //#define JUCE_QUICKTIME | ||||
//#define JUCE_OPENGL | //#define JUCE_OPENGL | ||||
@@ -86,6 +86,7 @@ public: | |||||
menu.addCommandItem (commandManager, showDragAndDrop); | menu.addCommandItem (commandManager, showDragAndDrop); | ||||
menu.addCommandItem (commandManager, showOpenGL); | menu.addCommandItem (commandManager, showOpenGL); | ||||
menu.addCommandItem (commandManager, showQuicktime); | menu.addCommandItem (commandManager, showQuicktime); | ||||
menu.addCommandItem (commandManager, showDirectShow); | |||||
menu.addCommandItem (commandManager, showInterprocessComms); | menu.addCommandItem (commandManager, showInterprocessComms); | ||||
menu.addCommandItem (commandManager, showCamera); | menu.addCommandItem (commandManager, showCamera); | ||||
menu.addCommandItem (commandManager, showWebBrowser); | menu.addCommandItem (commandManager, showWebBrowser); | ||||
@@ -157,6 +158,7 @@ public: | |||||
showDragAndDrop, | showDragAndDrop, | ||||
showOpenGL, | showOpenGL, | ||||
showQuicktime, | showQuicktime, | ||||
showDirectShow, | |||||
showCamera, | showCamera, | ||||
showWebBrowser, | showWebBrowser, | ||||
showCodeEditor, | showCodeEditor, | ||||
@@ -251,6 +253,15 @@ public: | |||||
#endif | #endif | ||||
break; | break; | ||||
case showDirectShow: | |||||
result.setInfo ("DirectShow", "Shows the DirectShow demo", demosCategory, 0); | |||||
result.addDefaultKeypress ('b', ModifierKeys::commandModifier); | |||||
result.setTicked (currentDemoId == showDirectShow); | |||||
#if ! JUCE_DIRECTSHOW | |||||
result.setActive (false); | |||||
#endif | |||||
break; | |||||
case showCamera: | case showCamera: | ||||
result.setInfo ("Camera Capture", "Shows the camera demo", demosCategory, 0); | result.setInfo ("Camera Capture", "Shows the camera demo", demosCategory, 0); | ||||
result.addDefaultKeypress ('c', ModifierKeys::commandModifier); | result.addDefaultKeypress ('c', ModifierKeys::commandModifier); | ||||
@@ -374,6 +385,13 @@ public: | |||||
#endif | #endif | ||||
break; | break; | ||||
case showDirectShow: | |||||
#if JUCE_DIRECTSHOW | |||||
showDemo (createDirectShowDemo()); | |||||
currentDemoId = showDirectShow; | |||||
#endif | |||||
break; | |||||
case showCamera: | case showCamera: | ||||
#if JUCE_USE_CAMERA | #if JUCE_USE_CAMERA | ||||
showDemo (createCameraDemo()); | showDemo (createCameraDemo()); | ||||
@@ -474,6 +492,7 @@ private: | |||||
showCamera = 0x2011, | showCamera = 0x2011, | ||||
showWebBrowser = 0x2012, | showWebBrowser = 0x2012, | ||||
showCodeEditor = 0x2013, | showCodeEditor = 0x2013, | ||||
showDirectShow = 0x2014, | |||||
setDefaultLookAndFeel = 0x200b, | setDefaultLookAndFeel = 0x200b, | ||||
setOldSchoolLookAndFeel = 0x200c, | setOldSchoolLookAndFeel = 0x200c, | ||||
@@ -0,0 +1,155 @@ | |||||
#include "../jucedemo_headers.h" | |||||
#if JUCE_DIRECTSHOW | |||||
//============================================================================== | |||||
class DirectShowWindowWithFileBrowser : public Component, | |||||
public FilenameComponentListener | |||||
{ | |||||
public: | |||||
DirectShowWindowWithFileBrowser (DirectShowComponent::VideoRendererType type) | |||||
: fileChooser ("movie", File::nonexistent, true, false, false, | |||||
"*", String::empty, "(choose a video file to play)"), | |||||
dshowComp (type) | |||||
{ | |||||
addAndMakeVisible (&dshowComp); | |||||
addAndMakeVisible (&fileChooser); | |||||
fileChooser.addListener (this); | |||||
fileChooser.setBrowseButtonText ("browse"); | |||||
} | |||||
void resized() | |||||
{ | |||||
dshowComp.setBounds (0, 0, getWidth(), getHeight() - 60); | |||||
if (transportControl != 0) | |||||
transportControl->setBounds (0, dshowComp.getBottom() + 4, getWidth(), 26); | |||||
fileChooser.setBounds (0, getHeight() - 24, getWidth(), 24); | |||||
} | |||||
void filenameComponentChanged (FilenameComponent*) | |||||
{ | |||||
// this is called when the user changes the filename in the file chooser box | |||||
if (dshowComp.loadMovie (fileChooser.getCurrentFile())) | |||||
{ | |||||
addAndMakeVisible (transportControl = new TransportControl (dshowComp)); | |||||
resized(); | |||||
dshowComp.play(); | |||||
} | |||||
else | |||||
{ | |||||
AlertWindow::showMessageBox (AlertWindow::WarningIcon, | |||||
"Couldn't load the file!", | |||||
"Sorry, DirectShow didn't manage to load that file!"); | |||||
} | |||||
} | |||||
private: | |||||
DirectShowComponent dshowComp; | |||||
FilenameComponent fileChooser; | |||||
//============================================================================== | |||||
// A quick-and-dirty transport control, containing a play button and a position slider.. | |||||
class TransportControl : public Component, | |||||
public ButtonListener, | |||||
public SliderListener, | |||||
public Timer | |||||
{ | |||||
public: | |||||
TransportControl (DirectShowComponent& dshowComp_) | |||||
: playButton ("Play/Pause"), | |||||
position (String::empty), | |||||
dshowComp (dshowComp_) | |||||
{ | |||||
addAndMakeVisible (&playButton); | |||||
playButton.addListener (this); | |||||
addAndMakeVisible (&position); | |||||
position.setRange (0, dshowComp.getMovieDuration(), 0); | |||||
position.setSliderStyle (Slider::LinearHorizontal); | |||||
position.setTextBoxStyle (Slider::NoTextBox, false, 80, 20); | |||||
position.addListener (this); | |||||
startTimer (1000 / 50); | |||||
} | |||||
void buttonClicked (Button* buttonThatWasClicked) | |||||
{ | |||||
if (dshowComp.isPlaying()) | |||||
dshowComp.stop(); | |||||
else | |||||
dshowComp.play(); | |||||
} | |||||
void sliderValueChanged (Slider* sliderThatWasMoved) | |||||
{ | |||||
dshowComp.setPosition (position.getValue()); | |||||
} | |||||
void resized() | |||||
{ | |||||
const int playButtonWidth = 90; | |||||
playButton.setBounds (0, 0, playButtonWidth, getHeight()); | |||||
position.setBounds (playButtonWidth, 0, getWidth() - playButtonWidth, getHeight()); | |||||
} | |||||
void timerCallback() | |||||
{ | |||||
if (! position.isMouseButtonDown()) | |||||
position.setValue (dshowComp.getPosition(), false); | |||||
} | |||||
private: | |||||
TextButton playButton; | |||||
Slider position; | |||||
DirectShowComponent& dshowComp; | |||||
}; | |||||
ScopedPointer<TransportControl> transportControl; | |||||
}; | |||||
//============================================================================== | |||||
class DirectShowDemo : public Component | |||||
{ | |||||
public: | |||||
//============================================================================== | |||||
DirectShowDemo() | |||||
: dsComp1 (DirectShowComponent::dshowVMR7), | |||||
dsComp2 (DirectShowComponent::dshowEVR) | |||||
{ | |||||
setName ("DirectShow"); | |||||
// add a movie component.. | |||||
addAndMakeVisible (&dsComp1); | |||||
addAndMakeVisible (&dsComp2); | |||||
} | |||||
~DirectShowDemo() | |||||
{ | |||||
dsComp1.setVisible (false); | |||||
dsComp2.setVisible (false); | |||||
} | |||||
void resized() | |||||
{ | |||||
dsComp1.setBoundsRelative (0.05f, 0.05f, 0.425f, 0.9f); | |||||
dsComp2.setBoundsRelative (0.525f, 0.05f, 0.425f, 0.9f); | |||||
} | |||||
private: | |||||
//============================================================================== | |||||
DirectShowWindowWithFileBrowser dsComp1, dsComp2; | |||||
}; | |||||
//============================================================================== | |||||
Component* createDirectShowDemo() | |||||
{ | |||||
return new DirectShowDemo(); | |||||
} | |||||
#endif |
@@ -61,5 +61,8 @@ Component* createCodeEditorDemo(); | |||||
Component* createCameraDemo(); | Component* createCameraDemo(); | ||||
#endif | #endif | ||||
#if JUCE_DIRECTSHOW | |||||
Component* createDirectShowDemo(); | |||||
#endif | |||||
#endif // __JUCEDEMO_HEADERS_JUCEHEADER__ | #endif // __JUCEDEMO_HEADERS_JUCEHEADER__ |
@@ -37,5 +37,6 @@ | |||||
JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="enabled" | JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="enabled" | ||||
JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | ||||
JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | ||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default"/> | |||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default" | |||||
JUCE_DIRECTSHOW="default" JUCE_MEDIAFOUNDATION="default"/> | |||||
</JUCERPROJECT> | </JUCERPROJECT> |
@@ -16,6 +16,8 @@ | |||||
//#define JUCE_ASIO | //#define JUCE_ASIO | ||||
//#define JUCE_WASAPI | //#define JUCE_WASAPI | ||||
//#define JUCE_DIRECTSOUND | //#define JUCE_DIRECTSOUND | ||||
//#define JUCE_DIRECTSHOW | |||||
//#define JUCE_MEDIAFOUNDATION | |||||
//#define JUCE_ALSA | //#define JUCE_ALSA | ||||
//#define JUCE_QUICKTIME | //#define JUCE_QUICKTIME | ||||
//#define JUCE_OPENGL | //#define JUCE_OPENGL | ||||
@@ -16,6 +16,8 @@ | |||||
//#define JUCE_ASIO | //#define JUCE_ASIO | ||||
#define JUCE_WASAPI 1 | #define JUCE_WASAPI 1 | ||||
#define JUCE_DIRECTSOUND 1 | #define JUCE_DIRECTSOUND 1 | ||||
//#define JUCE_DIRECTSHOW | |||||
//#define JUCE_MEDIAFOUNDATION | |||||
#define JUCE_ALSA 1 | #define JUCE_ALSA 1 | ||||
//#define JUCE_QUICKTIME | //#define JUCE_QUICKTIME | ||||
//#define JUCE_OPENGL | //#define JUCE_OPENGL | ||||
@@ -57,5 +57,6 @@ | |||||
JUCE_PLUGINHOST_AU="enabled" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | JUCE_PLUGINHOST_AU="enabled" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | ||||
JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | ||||
JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | ||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default"/> | |||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default" | |||||
JUCE_DIRECTSHOW="default" JUCE_MEDIAFOUNDATION="default"/> | |||||
</JUCERPROJECT> | </JUCERPROJECT> |
@@ -45,5 +45,5 @@ | |||||
JUCE_PLUGINHOST_VST="default" JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | JUCE_PLUGINHOST_VST="default" JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | ||||
JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | ||||
JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_USE_XCURSOR="default" | JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_USE_XCURSOR="default" | ||||
JUCE_DIRECT2D="default"/> | |||||
JUCE_DIRECT2D="default" JUCE_DIRECTSHOW="default" JUCE_MEDIAFOUNDATION="default"/> | |||||
</JUCERPROJECT> | </JUCERPROJECT> |
@@ -16,6 +16,8 @@ | |||||
//#define JUCE_ASIO | //#define JUCE_ASIO | ||||
//#define JUCE_WASAPI | //#define JUCE_WASAPI | ||||
//#define JUCE_DIRECTSOUND | //#define JUCE_DIRECTSOUND | ||||
//#define JUCE_DIRECTSHOW | |||||
//#define JUCE_MEDIAFOUNDATION | |||||
//#define JUCE_ALSA | //#define JUCE_ALSA | ||||
#define JUCE_QUICKTIME 0 | #define JUCE_QUICKTIME 0 | ||||
//#define JUCE_OPENGL | //#define JUCE_OPENGL | ||||
@@ -38,5 +38,6 @@ | |||||
JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="enabled" | JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="enabled" | ||||
JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | ||||
JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | ||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default"/> | |||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default" | |||||
JUCE_DIRECTSHOW="default" JUCE_MEDIAFOUNDATION="default"/> | |||||
</JUCERPROJECT> | </JUCERPROJECT> |
@@ -16,6 +16,8 @@ | |||||
//#define JUCE_ASIO | //#define JUCE_ASIO | ||||
//#define JUCE_WASAPI | //#define JUCE_WASAPI | ||||
//#define JUCE_DIRECTSOUND | //#define JUCE_DIRECTSOUND | ||||
//#define JUCE_DIRECTSHOW | |||||
//#define JUCE_MEDIAFOUNDATION | |||||
//#define JUCE_ALSA | //#define JUCE_ALSA | ||||
//#define JUCE_QUICKTIME | //#define JUCE_QUICKTIME | ||||
//#define JUCE_OPENGL | //#define JUCE_OPENGL | ||||
@@ -45,5 +45,6 @@ | |||||
JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | JUCE_PLUGINHOST_AU="default" JUCE_ONLY_BUILD_CORE_LIBRARY="default" | ||||
JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | JUCE_WEB_BROWSER="default" JUCE_SUPPORT_CARBON="default" JUCE_CHECK_MEMORY_LEAKS="default" | ||||
JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | JUCE_CATCH_UNHANDLED_EXCEPTIONS="default" JUCE_STRINGS_ARE_UNICODE="default" | ||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default"/> | |||||
JUCE_USE_XRENDER="default" JUCE_USE_XCURSOR="default" JUCE_DIRECT2D="default" | |||||
JUCE_DIRECTSHOW="default" JUCE_MEDIAFOUNDATION="default"/> | |||||
</JUCERPROJECT> | </JUCERPROJECT> |
@@ -16,6 +16,8 @@ | |||||
//#define JUCE_ASIO | //#define JUCE_ASIO | ||||
//#define JUCE_WASAPI | //#define JUCE_WASAPI | ||||
//#define JUCE_DIRECTSOUND | //#define JUCE_DIRECTSOUND | ||||
//#define JUCE_DIRECTSHOW | |||||
//#define JUCE_MEDIAFOUNDATION | |||||
//#define JUCE_ALSA | //#define JUCE_ALSA | ||||
//#define JUCE_QUICKTIME | //#define JUCE_QUICKTIME | ||||
//#define JUCE_OPENGL | //#define JUCE_OPENGL | ||||
@@ -86,6 +86,25 @@ | |||||
#define JUCE_DIRECTSOUND 1 | #define JUCE_DIRECTSOUND 1 | ||||
#endif | #endif | ||||
/** JUCE_DIRECTSHOW: Enables DirectShow media-streaming architecture | |||||
(MS Windows only). | |||||
*/ | |||||
#ifndef JUCE_DIRECTSHOW | |||||
#define JUCE_DIRECTSHOW 1 | |||||
#endif | |||||
/** JUCE_MEDIAFOUNDATION: Enables Media Foundation multimedia platform | |||||
(Windows Vista and above). | |||||
*/ | |||||
#ifndef JUCE_MEDIAFOUNDATION | |||||
#define JUCE_MEDIAFOUNDATION 1 | |||||
#endif | |||||
#if ! JUCE_WINDOWS | |||||
#undef JUCE_DIRECTSHOW | |||||
#undef JUCE_MEDIAFOUNDATION | |||||
#endif | |||||
/** JUCE_ALSA: Enables ALSA audio devices (Linux only). */ | /** JUCE_ALSA: Enables ALSA audio devices (Linux only). */ | ||||
#ifndef JUCE_ALSA | #ifndef JUCE_ALSA | ||||
#define JUCE_ALSA 1 | #define JUCE_ALSA 1 | ||||
@@ -73,7 +73,7 @@ namespace JuceDummyNamespace {} | |||||
*/ | */ | ||||
#define JUCE_MAJOR_VERSION 1 | #define JUCE_MAJOR_VERSION 1 | ||||
#define JUCE_MINOR_VERSION 53 | #define JUCE_MINOR_VERSION 53 | ||||
#define JUCE_BUILDNUMBER 99 | |||||
#define JUCE_BUILDNUMBER 100 | |||||
/** Current Juce version number. | /** Current Juce version number. | ||||
@@ -305,6 +305,25 @@ namespace JuceDummyNamespace {} | |||||
#define JUCE_DIRECTSOUND 1 | #define JUCE_DIRECTSOUND 1 | ||||
#endif | #endif | ||||
/** JUCE_DIRECTSHOW: Enables DirectShow media-streaming architecture | |||||
(MS Windows only). | |||||
*/ | |||||
#ifndef JUCE_DIRECTSHOW | |||||
#define JUCE_DIRECTSHOW 1 | |||||
#endif | |||||
/** JUCE_MEDIAFOUNDATION: Enables Media Foundation multimedia platform | |||||
(Windows Vista and above). | |||||
*/ | |||||
#ifndef JUCE_MEDIAFOUNDATION | |||||
#define JUCE_MEDIAFOUNDATION 1 | |||||
#endif | |||||
#if ! JUCE_WINDOWS | |||||
#undef JUCE_DIRECTSHOW | |||||
#undef JUCE_MEDIAFOUNDATION | |||||
#endif | |||||
/** JUCE_ALSA: Enables ALSA audio devices (Linux only). */ | /** JUCE_ALSA: Enables ALSA audio devices (Linux only). */ | ||||
#ifndef JUCE_ALSA | #ifndef JUCE_ALSA | ||||
#define JUCE_ALSA 1 | #define JUCE_ALSA 1 | ||||
@@ -64223,6 +64242,202 @@ private: | |||||
/*** End of inlined file: juce_ColourSelector.h ***/ | /*** End of inlined file: juce_ColourSelector.h ***/ | ||||
#endif | |||||
#ifndef __JUCE_DIRECTSHOWCOMPONENT_JUCEHEADER__ | |||||
/*** Start of inlined file: juce_DirectShowComponent.h ***/ | |||||
#ifndef __JUCE_DIRECTSHOWCOMPONENT_JUCEHEADER__ | |||||
#define __JUCE_DIRECTSHOWCOMPONENT_JUCEHEADER__ | |||||
#if JUCE_DIRECTSHOW || DOXYGEN | |||||
/** | |||||
A window that can play back a DirectShow video. | |||||
@note Controller is not implemented | |||||
*/ | |||||
class JUCE_API DirectShowComponent : public Component | |||||
{ | |||||
public: | |||||
/** DirectShow video renderer type. | |||||
See MSDN for adivce about choosing the right renderer. | |||||
*/ | |||||
enum VideoRendererType | |||||
{ | |||||
dshowDefault, /**< VMR7 for Windows XP, EVR for Windows Vista and later */ | |||||
dshowVMR7, /**< Video Mixing Renderer 7 */ | |||||
dshowEVR /**< Enhanced Video Renderer */ | |||||
}; | |||||
/** Creates a DirectShowComponent, initially blank. | |||||
Use the loadMovie() method to load a video once you've added the | |||||
component to a window, (or put it on the desktop as a heavyweight window). | |||||
Loading a video when the component isn't visible can cause problems, as | |||||
DirectShow needs a window handle to initialise properly. | |||||
@see VideoRendererType | |||||
*/ | |||||
DirectShowComponent (VideoRendererType type = dshowDefault); | |||||
/** Destructor. */ | |||||
~DirectShowComponent(); | |||||
/** Returns true if DirectShow is installed and working on this machine. */ | |||||
static bool isDirectShowAvailable(); | |||||
/** Tries to load a DirectShow video from a file or URL into the player. | |||||
It's best to call this function once you've added the component to a window, | |||||
(or put it on the desktop as a heavyweight window). Loading a video when the | |||||
component isn't visible can cause problems, because DirectShow needs a window | |||||
handle to do its stuff. | |||||
@param fileOrURLPath the file or URL path to open | |||||
@returns true if the video opens successfully | |||||
*/ | |||||
bool loadMovie (const String& fileOrURLPath); | |||||
/** Tries to load a DirectShow video from a file into the player. | |||||
It's best to call this function once you've added the component to a window, | |||||
(or put it on the desktop as a heavyweight window). Loading a video when the | |||||
component isn't visible can cause problems, because DirectShow needs a window | |||||
handle to do its stuff. | |||||
@param videoFile the video file to open | |||||
@returns true if the video opens successfully | |||||
*/ | |||||
bool loadMovie (const File& videoFile); | |||||
/** Tries to load a DirectShow video from a URL into the player. | |||||
It's best to call this function once you've added the component to a window, | |||||
(or put it on the desktop as a heavyweight window). Loading a video when the | |||||
component isn't visible can cause problems, because DirectShow needs a window | |||||
handle to do its stuff. | |||||
@param videoURL the video URL to open | |||||
@returns true if the video opens successfully | |||||
*/ | |||||
bool loadMovie (const URL& videoURL); | |||||
/** Closes the video, if one is open. */ | |||||
void closeMovie(); | |||||
/** Returns the file path or URL from which the video file was loaded. | |||||
If there isn't one, this returns an empty string. | |||||
*/ | |||||
const File getCurrentMoviePath() const; | |||||
/** Returns true if there's currently a video open. */ | |||||
bool isMovieOpen() const; | |||||
/** Returns the length of the video, in seconds. */ | |||||
double getMovieDuration() const; | |||||
/** Returns the video's natural size, in pixels. | |||||
You can use this to resize the component to show the video at its preferred | |||||
scale. | |||||
If no video is loaded, the size returned will be 0 x 0. | |||||
*/ | |||||
void getMovieNormalSize (int& width, int& height) const; | |||||
/** This will position the component within a given area, keeping its aspect | |||||
ratio correct according to the video's normal size. | |||||
The component will be made as large as it can go within the space, and will | |||||
be aligned according to the justification value if this means there are gaps at | |||||
the top or sides. | |||||
@note Not implemented | |||||
*/ | |||||
void setBoundsWithCorrectAspectRatio (const Rectangle<int>& spaceToFitWithin, | |||||
const RectanglePlacement& placement); | |||||
/** Starts the video playing. */ | |||||
void play(); | |||||
/** Stops the video playing. */ | |||||
void stop(); | |||||
/** Returns true if the video is currently playing. */ | |||||
bool isPlaying() const; | |||||
/** Moves the video's position back to the start. */ | |||||
void goToStart(); | |||||
/** Sets the video's position to a given time. */ | |||||
void setPosition (double seconds); | |||||
/** Returns the current play position of the video. */ | |||||
double getPosition() const; | |||||
/** Changes the video playback rate. | |||||
A value of 1 is normal speed, greater values play it proportionately faster, | |||||
smaller values play it slower. | |||||
*/ | |||||
void setSpeed (float newSpeed); | |||||
/** Changes the video's playback volume. | |||||
@param newVolume the volume in the range 0 (silent) to 1.0 (full) | |||||
*/ | |||||
void setMovieVolume (float newVolume); | |||||
/** Returns the video's playback volume. | |||||
@returns the volume in the range 0 (silent) to 1.0 (full) | |||||
*/ | |||||
float getMovieVolume() const; | |||||
/** Tells the video whether it should loop. */ | |||||
void setLooping (bool shouldLoop); | |||||
/** Returns true if the video is currently looping. | |||||
@see setLooping | |||||
*/ | |||||
bool isLooping() const; | |||||
/** @internal */ | |||||
void paint (Graphics& g); | |||||
private: | |||||
String videoPath; | |||||
bool videoLoaded, looping; | |||||
class DirectShowContext; | |||||
friend class DirectShowContext; | |||||
friend class ScopedPointer <DirectShowContext>; | |||||
ScopedPointer <DirectShowContext> context; | |||||
class DirectShowComponentWatcher; | |||||
friend class DirectShowComponentWatcher; | |||||
friend class ScopedPointer <DirectShowComponentWatcher>; | |||||
ScopedPointer <DirectShowComponentWatcher> componentWatcher; | |||||
bool needToUpdateViewport, needToRecreateNativeWindow; | |||||
void updateContextPosition(); | |||||
void showContext (bool shouldBeVisible); | |||||
void recreateNativeWindowAsync(); | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DirectShowComponent); | |||||
}; | |||||
#endif | |||||
#endif // __JUCE_DIRECTSHOWCOMPONENT_JUCEHEADER__ | |||||
/*** End of inlined file: juce_DirectShowComponent.h ***/ | |||||
#endif | #endif | ||||
#ifndef __JUCE_DROPSHADOWER_JUCEHEADER__ | #ifndef __JUCE_DROPSHADOWER_JUCEHEADER__ | ||||
@@ -64786,7 +65001,7 @@ public: | |||||
/** For windowed contexts, this moves the context within the bounds of | /** For windowed contexts, this moves the context within the bounds of | ||||
its parent window. | its parent window. | ||||
*/ | */ | ||||
virtual void updateWindowPosition (int x, int y, int w, int h, int outerWindowHeight) = 0; | |||||
virtual void updateWindowPosition (const Rectangle<int>& bounds) = 0; | |||||
/** For windowed contexts, this triggers a repaint of the window. | /** For windowed contexts, this triggers a repaint of the window. | ||||
@@ -69544,6 +69759,14 @@ END_JUCE_NAMESPACE | |||||
#pragma comment (lib, "D2d1.lib") | #pragma comment (lib, "D2d1.lib") | ||||
#endif | #endif | ||||
#if JUCE_DIRECTSHOW | |||||
#pragma comment (lib, "strmiids.lib") | |||||
#endif | |||||
#if JUCE_MEDIAFOUNDATION | |||||
#pragma comment (lib, "mfuuid.lib") | |||||
#endif | |||||
/*** End of inlined file: juce_win32_AutoLinkLibraries.h ***/ | /*** End of inlined file: juce_win32_AutoLinkLibraries.h ***/ | ||||
@@ -33,7 +33,7 @@ | |||||
*/ | */ | ||||
#define JUCE_MAJOR_VERSION 1 | #define JUCE_MAJOR_VERSION 1 | ||||
#define JUCE_MINOR_VERSION 53 | #define JUCE_MINOR_VERSION 53 | ||||
#define JUCE_BUILDNUMBER 99 | |||||
#define JUCE_BUILDNUMBER 100 | |||||
/** Current Juce version number. | /** Current Juce version number. | ||||
@@ -0,0 +1,221 @@ | |||||
/* | |||||
============================================================================== | |||||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
Copyright 2004-11 by Raw Material Software Ltd. | |||||
------------------------------------------------------------------------------ | |||||
JUCE can be redistributed and/or modified under the terms of the GNU General | |||||
Public License (Version 2), as published by the Free Software Foundation. | |||||
A copy of the license is included in the JUCE distribution, or can be found | |||||
online at www.gnu.org/licenses. | |||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY | |||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |||||
------------------------------------------------------------------------------ | |||||
To release a closed-source product which uses JUCE, commercial licenses are | |||||
available: visit www.rawmaterialsoftware.com/juce for more information. | |||||
============================================================================== | |||||
*/ | |||||
#ifndef __JUCE_DIRECTSHOWCOMPONENT_JUCEHEADER__ | |||||
#define __JUCE_DIRECTSHOWCOMPONENT_JUCEHEADER__ | |||||
#include "../juce_Component.h" | |||||
#if JUCE_DIRECTSHOW || DOXYGEN | |||||
//============================================================================== | |||||
/** | |||||
A window that can play back a DirectShow video. | |||||
@note Controller is not implemented | |||||
*/ | |||||
class JUCE_API DirectShowComponent : public Component | |||||
{ | |||||
public: | |||||
//============================================================================== | |||||
/** DirectShow video renderer type. | |||||
See MSDN for adivce about choosing the right renderer. | |||||
*/ | |||||
enum VideoRendererType | |||||
{ | |||||
dshowDefault, /**< VMR7 for Windows XP, EVR for Windows Vista and later */ | |||||
dshowVMR7, /**< Video Mixing Renderer 7 */ | |||||
dshowEVR /**< Enhanced Video Renderer */ | |||||
}; | |||||
/** Creates a DirectShowComponent, initially blank. | |||||
Use the loadMovie() method to load a video once you've added the | |||||
component to a window, (or put it on the desktop as a heavyweight window). | |||||
Loading a video when the component isn't visible can cause problems, as | |||||
DirectShow needs a window handle to initialise properly. | |||||
@see VideoRendererType | |||||
*/ | |||||
DirectShowComponent (VideoRendererType type = dshowDefault); | |||||
/** Destructor. */ | |||||
~DirectShowComponent(); | |||||
/** Returns true if DirectShow is installed and working on this machine. */ | |||||
static bool isDirectShowAvailable(); | |||||
//============================================================================== | |||||
/** Tries to load a DirectShow video from a file or URL into the player. | |||||
It's best to call this function once you've added the component to a window, | |||||
(or put it on the desktop as a heavyweight window). Loading a video when the | |||||
component isn't visible can cause problems, because DirectShow needs a window | |||||
handle to do its stuff. | |||||
@param fileOrURLPath the file or URL path to open | |||||
@returns true if the video opens successfully | |||||
*/ | |||||
bool loadMovie (const String& fileOrURLPath); | |||||
/** Tries to load a DirectShow video from a file into the player. | |||||
It's best to call this function once you've added the component to a window, | |||||
(or put it on the desktop as a heavyweight window). Loading a video when the | |||||
component isn't visible can cause problems, because DirectShow needs a window | |||||
handle to do its stuff. | |||||
@param videoFile the video file to open | |||||
@returns true if the video opens successfully | |||||
*/ | |||||
bool loadMovie (const File& videoFile); | |||||
/** Tries to load a DirectShow video from a URL into the player. | |||||
It's best to call this function once you've added the component to a window, | |||||
(or put it on the desktop as a heavyweight window). Loading a video when the | |||||
component isn't visible can cause problems, because DirectShow needs a window | |||||
handle to do its stuff. | |||||
@param videoURL the video URL to open | |||||
@returns true if the video opens successfully | |||||
*/ | |||||
bool loadMovie (const URL& videoURL); | |||||
/** Closes the video, if one is open. */ | |||||
void closeMovie(); | |||||
/** Returns the file path or URL from which the video file was loaded. | |||||
If there isn't one, this returns an empty string. | |||||
*/ | |||||
const File getCurrentMoviePath() const; | |||||
/** Returns true if there's currently a video open. */ | |||||
bool isMovieOpen() const; | |||||
/** Returns the length of the video, in seconds. */ | |||||
double getMovieDuration() const; | |||||
/** Returns the video's natural size, in pixels. | |||||
You can use this to resize the component to show the video at its preferred | |||||
scale. | |||||
If no video is loaded, the size returned will be 0 x 0. | |||||
*/ | |||||
void getMovieNormalSize (int& width, int& height) const; | |||||
/** This will position the component within a given area, keeping its aspect | |||||
ratio correct according to the video's normal size. | |||||
The component will be made as large as it can go within the space, and will | |||||
be aligned according to the justification value if this means there are gaps at | |||||
the top or sides. | |||||
@note Not implemented | |||||
*/ | |||||
void setBoundsWithCorrectAspectRatio (const Rectangle<int>& spaceToFitWithin, | |||||
const RectanglePlacement& placement); | |||||
/** Starts the video playing. */ | |||||
void play(); | |||||
/** Stops the video playing. */ | |||||
void stop(); | |||||
/** Returns true if the video is currently playing. */ | |||||
bool isPlaying() const; | |||||
/** Moves the video's position back to the start. */ | |||||
void goToStart(); | |||||
/** Sets the video's position to a given time. */ | |||||
void setPosition (double seconds); | |||||
/** Returns the current play position of the video. */ | |||||
double getPosition() const; | |||||
/** Changes the video playback rate. | |||||
A value of 1 is normal speed, greater values play it proportionately faster, | |||||
smaller values play it slower. | |||||
*/ | |||||
void setSpeed (float newSpeed); | |||||
/** Changes the video's playback volume. | |||||
@param newVolume the volume in the range 0 (silent) to 1.0 (full) | |||||
*/ | |||||
void setMovieVolume (float newVolume); | |||||
/** Returns the video's playback volume. | |||||
@returns the volume in the range 0 (silent) to 1.0 (full) | |||||
*/ | |||||
float getMovieVolume() const; | |||||
/** Tells the video whether it should loop. */ | |||||
void setLooping (bool shouldLoop); | |||||
/** Returns true if the video is currently looping. | |||||
@see setLooping | |||||
*/ | |||||
bool isLooping() const; | |||||
//============================================================================== | |||||
/** @internal */ | |||||
void paint (Graphics& g); | |||||
private: | |||||
//============================================================================== | |||||
String videoPath; | |||||
bool videoLoaded, looping; | |||||
class DirectShowContext; | |||||
friend class DirectShowContext; | |||||
friend class ScopedPointer <DirectShowContext>; | |||||
ScopedPointer <DirectShowContext> context; | |||||
class DirectShowComponentWatcher; | |||||
friend class DirectShowComponentWatcher; | |||||
friend class ScopedPointer <DirectShowComponentWatcher>; | |||||
ScopedPointer <DirectShowComponentWatcher> componentWatcher; | |||||
bool needToUpdateViewport, needToRecreateNativeWindow; | |||||
//============================================================================== | |||||
void updateContextPosition(); | |||||
void showContext (bool shouldBeVisible); | |||||
void recreateNativeWindowAsync(); | |||||
//============================================================================== | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DirectShowComponent); | |||||
}; | |||||
#endif | |||||
#endif // __JUCE_DIRECTSHOWCOMPONENT_JUCEHEADER__ |
@@ -359,11 +359,7 @@ void OpenGLComponent::updateContextPosition() | |||||
const ScopedLock sl (contextLock); | const ScopedLock sl (contextLock); | ||||
if (context != nullptr) | if (context != nullptr) | ||||
context->updateWindowPosition (getScreenX() - topComp->getScreenX(), | |||||
getScreenY() - topComp->getScreenY(), | |||||
getWidth(), | |||||
getHeight(), | |||||
topComp->getHeight()); | |||||
context->updateWindowPosition (topComp->getLocalArea (this, getLocalBounds())); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -132,7 +132,7 @@ public: | |||||
/** For windowed contexts, this moves the context within the bounds of | /** For windowed contexts, this moves the context within the bounds of | ||||
its parent window. | its parent window. | ||||
*/ | */ | ||||
virtual void updateWindowPosition (int x, int y, int w, int h, int outerWindowHeight) = 0; | |||||
virtual void updateWindowPosition (const Rectangle<int>& bounds) = 0; | |||||
/** For windowed contexts, this triggers a repaint of the window. | /** For windowed contexts, this triggers a repaint of the window. | ||||
@@ -587,6 +587,9 @@ | |||||
#ifndef __JUCE_COLOURSELECTOR_JUCEHEADER__ | #ifndef __JUCE_COLOURSELECTOR_JUCEHEADER__ | ||||
#include "gui/components/special/juce_ColourSelector.h" | #include "gui/components/special/juce_ColourSelector.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_DIRECTSHOWCOMPONENT_JUCEHEADER__ | |||||
#include "gui/components/special/juce_DirectShowComponent.h" | |||||
#endif | |||||
#ifndef __JUCE_DROPSHADOWER_JUCEHEADER__ | #ifndef __JUCE_DROPSHADOWER_JUCEHEADER__ | ||||
#include "gui/components/special/juce_DropShadower.h" | #include "gui/components/special/juce_DropShadower.h" | ||||
#endif | #endif | ||||
@@ -3213,11 +3213,11 @@ public: | |||||
return renderContext; | return renderContext; | ||||
} | } | ||||
void updateWindowPosition (int x, int y, int w, int h, int) | |||||
void updateWindowPosition (const Rectangle<int>& bounds) | |||||
{ | { | ||||
ScopedXLock xlock; | ScopedXLock xlock; | ||||
XMoveResizeWindow (display, embeddedWindow, | XMoveResizeWindow (display, embeddedWindow, | ||||
x, y, jmax (1, w), jmax (1, h)); | |||||
bounds.getX(), bounds.getY(), jmax (1, bounds.getWidth()), jmax (1, bounds.getHeight())); | |||||
} | } | ||||
void swapBuffers() | void swapBuffers() | ||||
@@ -215,9 +215,7 @@ public: | |||||
const OpenGLPixelFormat getPixelFormat() const { return pixelFormat; } | const OpenGLPixelFormat getPixelFormat() const { return pixelFormat; } | ||||
void* getRawContext() const noexcept { return renderContext; } | void* getRawContext() const noexcept { return renderContext; } | ||||
void updateWindowPosition (int /*x*/, int /*y*/, int /*w*/, int /*h*/, int /*outerWindowHeight*/) | |||||
{ | |||||
} | |||||
void updateWindowPosition (const Rectangle<int>&) {} | |||||
void swapBuffers() | void swapBuffers() | ||||
{ | { | ||||
@@ -424,9 +422,10 @@ public: | |||||
const OpenGLPixelFormat getPixelFormat() const { return pixelFormat; } | const OpenGLPixelFormat getPixelFormat() const { return pixelFormat; } | ||||
void* getRawContext() const noexcept { return glLayer; } | void* getRawContext() const noexcept { return glLayer; } | ||||
void updateWindowPosition (int x, int y, int w, int h, int outerWindowHeight) | |||||
void updateWindowPosition (const Rectangle<int>& bounds) | |||||
{ | { | ||||
view.frame = CGRectMake ((CGFloat) x, (CGFloat) y, (CGFloat) w, (CGFloat) h); | |||||
view.frame = CGRectMake ((CGFloat) bounds.getX(), (CGFloat) bounds.getY(), | |||||
(CGFloat) bounds.getWidth(), (CGFloat) bounds.getHeight()); | |||||
if (lastWidth != w || lastHeight != h) | if (lastWidth != w || lastHeight != h) | ||||
{ | { | ||||
@@ -48,3 +48,11 @@ | |||||
#pragma comment (lib, "Dwrite.lib") | #pragma comment (lib, "Dwrite.lib") | ||||
#pragma comment (lib, "D2d1.lib") | #pragma comment (lib, "D2d1.lib") | ||||
#endif | #endif | ||||
#if JUCE_DIRECTSHOW | |||||
#pragma comment (lib, "strmiids.lib") | |||||
#endif | |||||
#if JUCE_MEDIAFOUNDATION | |||||
#pragma comment (lib, "mfuuid.lib") | |||||
#endif |
@@ -0,0 +1,941 @@ | |||||
/* | |||||
============================================================================== | |||||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
Copyright 2004-11 by Raw Material Software Ltd. | |||||
------------------------------------------------------------------------------ | |||||
JUCE can be redistributed and/or modified under the terms of the GNU General | |||||
Public License (Version 2), as published by the Free Software Foundation. | |||||
A copy of the license is included in the JUCE distribution, or can be found | |||||
online at www.gnu.org/licenses. | |||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY | |||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |||||
------------------------------------------------------------------------------ | |||||
To release a closed-source product which uses JUCE, commercial licenses are | |||||
available: visit www.rawmaterialsoftware.com/juce for more information. | |||||
============================================================================== | |||||
*/ | |||||
#if JUCE_INCLUDED_FILE | |||||
//====================================================================== | |||||
namespace DirectShowHelpers | |||||
{ | |||||
bool checkDShowAvailability() | |||||
{ | |||||
ComSmartPtr <IGraphBuilder> graph; | |||||
return SUCCEEDED (graph.CoCreateInstance (CLSID_FilterGraph)); | |||||
} | |||||
//====================================================================== | |||||
class VideoRenderer | |||||
{ | |||||
public: | |||||
VideoRenderer() {} | |||||
virtual ~VideoRenderer() {} | |||||
virtual HRESULT create (ComSmartPtr <IGraphBuilder>& graphBuilder, | |||||
ComSmartPtr <IBaseFilter>& baseFilter, HWND hwnd) = 0; | |||||
virtual void setVideoWindow (HWND hwnd) = 0; | |||||
virtual void setVideoPosition (HWND hwnd, long videoWidth, long videoHeight) = 0; | |||||
virtual void repaintVideo (HWND hwnd, HDC hdc) = 0; | |||||
virtual void displayModeChanged() = 0; | |||||
virtual HRESULT getVideoSize (long& videoWidth, long& videoHeight) = 0; | |||||
}; | |||||
//====================================================================== | |||||
class VMR7 : public VideoRenderer | |||||
{ | |||||
public: | |||||
VMR7() {} | |||||
HRESULT create (ComSmartPtr <IGraphBuilder>& graphBuilder, | |||||
ComSmartPtr <IBaseFilter>& baseFilter, HWND hwnd) | |||||
{ | |||||
ComSmartPtr <IVMRFilterConfig> filterConfig; | |||||
HRESULT hr = baseFilter.CoCreateInstance (CLSID_VideoMixingRenderer); | |||||
if (SUCCEEDED (hr)) | |||||
hr = graphBuilder->AddFilter (baseFilter, L"VMR-7"); | |||||
if (SUCCEEDED (hr)) | |||||
hr = baseFilter.QueryInterface (IID_IVMRFilterConfig, filterConfig); | |||||
if (SUCCEEDED (hr)) | |||||
hr = filterConfig->SetRenderingMode (VMRMode_Windowless); | |||||
if (SUCCEEDED (hr)) | |||||
hr = baseFilter.QueryInterface (IID_IVMRWindowlessControl, windowlessControl); | |||||
if (SUCCEEDED (hr)) | |||||
hr = windowlessControl->SetVideoClippingWindow (hwnd); | |||||
if (SUCCEEDED (hr)) | |||||
hr = windowlessControl->SetAspectRatioMode (VMR_ARMODE_LETTER_BOX); | |||||
return hr; | |||||
} | |||||
void setVideoWindow (HWND hwnd) | |||||
{ | |||||
windowlessControl->SetVideoClippingWindow (hwnd); | |||||
} | |||||
void setVideoPosition (HWND hwnd, long videoWidth, long videoHeight) | |||||
{ | |||||
RECT src, dest; | |||||
SetRect (&src, 0, 0, videoWidth, videoHeight); | |||||
GetClientRect (hwnd, &dest); | |||||
windowlessControl->SetVideoPosition (&src, &dest); | |||||
} | |||||
void repaintVideo (HWND hwnd, HDC hdc) | |||||
{ | |||||
windowlessControl->RepaintVideo (hwnd, hdc); | |||||
} | |||||
void displayModeChanged() | |||||
{ | |||||
windowlessControl->DisplayModeChanged(); | |||||
} | |||||
HRESULT getVideoSize (long& videoWidth, long& videoHeight) | |||||
{ | |||||
return windowlessControl->GetNativeVideoSize (&videoWidth, &videoHeight, nullptr, nullptr); | |||||
} | |||||
private: | |||||
ComSmartPtr <IVMRWindowlessControl> windowlessControl; | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VMR7); | |||||
}; | |||||
//====================================================================== | |||||
#if JUCE_MEDIAFOUNDATION | |||||
class EVR : public VideoRenderer | |||||
{ | |||||
public: | |||||
EVR() {} | |||||
HRESULT create (ComSmartPtr <IGraphBuilder>& graphBuilder, | |||||
ComSmartPtr <IBaseFilter>& baseFilter, HWND hwnd) | |||||
{ | |||||
ComSmartPtr <IMFGetService> getService; | |||||
HRESULT hr = baseFilter.CoCreateInstance (CLSID_EnhancedVideoRenderer); | |||||
if (SUCCEEDED (hr)) | |||||
hr = graphBuilder->AddFilter (baseFilter, L"EVR"); | |||||
if (SUCCEEDED (hr)) | |||||
hr = baseFilter.QueryInterface (IID_IMFGetService, getService); | |||||
if (SUCCEEDED (hr)) | |||||
hr = getService->GetService (MR_VIDEO_RENDER_SERVICE, IID_IMFVideoDisplayControl, | |||||
(LPVOID*) videoDisplayControl.resetAndGetPointerAddress()); | |||||
if (SUCCEEDED (hr)) | |||||
hr = videoDisplayControl->SetVideoWindow (hwnd); | |||||
if (SUCCEEDED (hr)) | |||||
hr = videoDisplayControl->SetAspectRatioMode (MFVideoARMode_PreservePicture); | |||||
return hr; | |||||
} | |||||
void setVideoWindow (HWND hwnd) | |||||
{ | |||||
videoDisplayControl->SetVideoWindow (hwnd); | |||||
} | |||||
void setVideoPosition (HWND hwnd, long /*videoWidth*/, long /*videoHeight*/) | |||||
{ | |||||
const MFVideoNormalizedRect src = { 0.0f, 0.0f, 1.0f, 1.0f }; | |||||
RECT dest; | |||||
GetClientRect (hwnd, &dest); | |||||
videoDisplayControl->SetVideoPosition (&src, &dest); | |||||
} | |||||
void repaintVideo (HWND /*hwnd*/, HDC /*hdc*/) | |||||
{ | |||||
videoDisplayControl->RepaintVideo(); | |||||
} | |||||
void displayModeChanged() {} | |||||
HRESULT getVideoSize (long& videoWidth, long& videoHeight) | |||||
{ | |||||
SIZE sz; | |||||
HRESULT hr = videoDisplayControl->GetNativeVideoSize (&sz, nullptr); | |||||
videoWidth = sz.cx; | |||||
videoHeight = sz.cy; | |||||
return hr; | |||||
} | |||||
private: | |||||
ComSmartPtr <IMFVideoDisplayControl> videoDisplayControl; | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EVR); | |||||
}; | |||||
#endif | |||||
} | |||||
//====================================================================== | |||||
class DirectShowComponent::DirectShowContext | |||||
{ | |||||
public: | |||||
DirectShowContext (DirectShowComponent& component_, VideoRendererType type_) | |||||
: component (component_), | |||||
hwnd (0), | |||||
hdc (0), | |||||
state (uninitializedState), | |||||
hasVideo (false), | |||||
videoWidth (0), | |||||
videoHeight (0), | |||||
type (type_) | |||||
{ | |||||
CoInitialize (0); | |||||
if (type == dshowDefault) | |||||
{ | |||||
type = dshowVMR7; | |||||
#if JUCE_MEDIAFOUNDATION | |||||
if (SystemStats::getOperatingSystemType() >= SystemStats::WinVista) | |||||
type = dshowEVR; | |||||
#endif | |||||
} | |||||
} | |||||
~DirectShowContext() | |||||
{ | |||||
release(); | |||||
CoUninitialize(); | |||||
} | |||||
//====================================================================== | |||||
HWND getNativeWindowHandle() const | |||||
{ | |||||
return nativeWindow != nullptr ? nativeWindow->getHandle() : 0; | |||||
} | |||||
//====================================================================== | |||||
void updateWindowPosition (const Rectangle<int>& newBounds) | |||||
{ | |||||
nativeWindow->setWindowPosition (newBounds); | |||||
} | |||||
void showWindow (bool shouldBeVisible) | |||||
{ | |||||
nativeWindow->showWindow (shouldBeVisible); | |||||
} | |||||
//====================================================================== | |||||
void repaint() | |||||
{ | |||||
if (hasVideo) | |||||
videoRenderer->repaintVideo (nativeWindow->getHandle(), nativeWindow->getContext()); | |||||
} | |||||
void updateVideoPosition() | |||||
{ | |||||
if (hasVideo) | |||||
videoRenderer->setVideoPosition (nativeWindow->getHandle(), videoWidth, videoHeight); | |||||
} | |||||
void displayResolutionChanged() | |||||
{ | |||||
if (hasVideo) | |||||
videoRenderer->displayModeChanged(); | |||||
} | |||||
//====================================================================== | |||||
void peerChanged() | |||||
{ | |||||
deleteNativeWindow(); | |||||
mediaEvent->SetNotifyWindow (0, 0, 0); | |||||
if (videoRenderer != nullptr) | |||||
videoRenderer->setVideoWindow (nullptr); | |||||
createNativeWindow(); | |||||
mediaEvent->SetNotifyWindow ((OAHWND) hwnd, graphEventID, 0); | |||||
if (videoRenderer != nullptr) | |||||
videoRenderer->setVideoWindow (hwnd); | |||||
} | |||||
//====================================================================== | |||||
bool loadFile (const String& fileOrURLPath) | |||||
{ | |||||
jassert (state == uninitializedState); | |||||
if (! createNativeWindow()) | |||||
return false; | |||||
HRESULT hr = graphBuilder.CoCreateInstance (CLSID_FilterGraph); | |||||
// basic playback interfaces | |||||
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (IID_IMediaControl, mediaControl); | |||||
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (IID_IMediaPosition, mediaPosition); | |||||
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (IID_IMediaEventEx, mediaEvent); | |||||
if (SUCCEEDED (hr)) hr = graphBuilder.QueryInterface (IID_IBasicAudio, basicAudio); | |||||
// video renderer interface | |||||
if (SUCCEEDED (hr)) | |||||
{ | |||||
#if JUCE_MEDIAFOUNDATION | |||||
if (type == dshowEVR) | |||||
videoRenderer = new DirectShowHelpers::EVR(); | |||||
else | |||||
#endif | |||||
videoRenderer = new DirectShowHelpers::VMR7(); | |||||
hr = videoRenderer->create (graphBuilder, baseFilter, hwnd); | |||||
} | |||||
// build filter graph | |||||
if (SUCCEEDED (hr)) | |||||
hr = graphBuilder->RenderFile (fileOrURLPath.toWideCharPointer(), nullptr); | |||||
// remove video renderer if not connected (no video) | |||||
if (SUCCEEDED (hr)) | |||||
{ | |||||
if (isRendererConnected()) | |||||
{ | |||||
hasVideo = true; | |||||
hr = videoRenderer->getVideoSize (videoWidth, videoHeight); | |||||
} | |||||
else | |||||
{ | |||||
hasVideo = false; | |||||
graphBuilder->RemoveFilter (baseFilter); | |||||
videoRenderer = nullptr; | |||||
baseFilter = nullptr; | |||||
} | |||||
} | |||||
// set window to receive events | |||||
if (SUCCEEDED (hr)) | |||||
hr = mediaEvent->SetNotifyWindow ((OAHWND) hwnd, graphEventID, 0); | |||||
if (SUCCEEDED (hr)) | |||||
{ | |||||
state = stoppedState; | |||||
return true; | |||||
} | |||||
release(); | |||||
return false; | |||||
} | |||||
void release() | |||||
{ | |||||
if (mediaControl != nullptr) | |||||
mediaControl->Stop(); | |||||
if (mediaEvent != nullptr) | |||||
mediaEvent->SetNotifyWindow (0, 0, 0); | |||||
if (videoRenderer != nullptr) | |||||
videoRenderer->setVideoWindow (0); | |||||
hasVideo = false; | |||||
videoRenderer = nullptr; | |||||
baseFilter = nullptr; | |||||
basicAudio = nullptr; | |||||
mediaEvent = nullptr; | |||||
mediaPosition = nullptr; | |||||
mediaControl = nullptr; | |||||
graphBuilder = nullptr; | |||||
state = uninitializedState; | |||||
videoWidth = 0; | |||||
videoHeight = 0; | |||||
if (nativeWindow != nullptr) | |||||
deleteNativeWindow(); | |||||
} | |||||
void graphEventProc() | |||||
{ | |||||
LONG ec; | |||||
LONG_PTR p1, p2; | |||||
jassert (mediaEvent != nullptr); | |||||
while (SUCCEEDED (mediaEvent->GetEvent (&ec, &p1, &p2, 0))) | |||||
{ | |||||
switch (ec) | |||||
{ | |||||
case EC_REPAINT: | |||||
component.repaint(); | |||||
break; | |||||
case EC_COMPLETE: | |||||
if (component.isLooping()) | |||||
component.goToStart(); | |||||
else | |||||
component.stop(); | |||||
break; | |||||
case EC_USERABORT: | |||||
case EC_ERRORABORT: | |||||
case EC_ERRORABORTEX: | |||||
component.closeMovie(); | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
mediaEvent->FreeEventParams (ec, p1, p2); | |||||
} | |||||
} | |||||
//====================================================================== | |||||
void run() | |||||
{ | |||||
mediaControl->Run(); | |||||
state = runningState; | |||||
} | |||||
void stop() | |||||
{ | |||||
mediaControl->Stop(); | |||||
state = stoppedState; | |||||
} | |||||
void pause() | |||||
{ | |||||
mediaControl->Pause(); | |||||
state = pausedState; | |||||
} | |||||
//====================================================================== | |||||
bool isInitialised() const noexcept { return state != uninitializedState; } | |||||
bool isRunning() const noexcept { return state == runningState; } | |||||
bool isPaused() const noexcept { return state == pausedState; } | |||||
bool isStopped() const noexcept { return state == stoppedState; } | |||||
bool containsVideo() const noexcept { return hasVideo; } | |||||
int getVideoWidth() const noexcept { return (int) videoWidth; } | |||||
int getVideoHeight() const noexcept { return (int) videoHeight; } | |||||
//====================================================================== | |||||
double getDuration() const | |||||
{ | |||||
REFTIME duration; | |||||
mediaPosition->get_Duration (&duration); | |||||
return duration; | |||||
} | |||||
double getPosition() const | |||||
{ | |||||
REFTIME seconds; | |||||
mediaPosition->get_CurrentPosition (&seconds); | |||||
return seconds; | |||||
} | |||||
//====================================================================== | |||||
void setSpeed (const float newSpeed) { mediaPosition->put_Rate (newSpeed); } | |||||
void setPosition (const double seconds) { mediaPosition->put_CurrentPosition (seconds); } | |||||
void setVolume (const float newVolume) { basicAudio->put_Volume (convertToDShowVolume (newVolume)); } | |||||
// in DirectShow, full volume is 0, silence is -10000 | |||||
static long convertToDShowVolume (const float vol) noexcept | |||||
{ | |||||
if (vol >= 1.0f) return 0; | |||||
if (vol <= 0.0f) return -10000; | |||||
return roundToInt ((vol * 10000.0f) - 10000.0f); | |||||
} | |||||
float getVolume() const | |||||
{ | |||||
long volume; | |||||
basicAudio->get_Volume (&volume); | |||||
return (volume + 10000) / 10000.0f; | |||||
} | |||||
private: | |||||
//====================================================================== | |||||
enum { graphEventID = WM_APP + 0x43f0 }; | |||||
DirectShowComponent& component; | |||||
HWND hwnd; | |||||
HDC hdc; | |||||
enum State { uninitializedState, runningState, pausedState, stoppedState }; | |||||
State state; | |||||
bool hasVideo; | |||||
long videoWidth, videoHeight; | |||||
VideoRendererType type; | |||||
ComSmartPtr <IGraphBuilder> graphBuilder; | |||||
ComSmartPtr <IMediaControl> mediaControl; | |||||
ComSmartPtr <IMediaPosition> mediaPosition; | |||||
ComSmartPtr <IMediaEventEx> mediaEvent; | |||||
ComSmartPtr <IBasicAudio> basicAudio; | |||||
ComSmartPtr <IBaseFilter> baseFilter; | |||||
ScopedPointer <DirectShowHelpers::VideoRenderer> videoRenderer; | |||||
//====================================================================== | |||||
class NativeWindowClass : public DeletedAtShutdown | |||||
{ | |||||
private: | |||||
NativeWindowClass() | |||||
: atom (0) | |||||
{ | |||||
String windowClassName ("JUCE_DIRECTSHOW_"); | |||||
windowClassName << (int) (Time::currentTimeMillis() & 0x7fffffff); | |||||
HINSTANCE moduleHandle = (HINSTANCE) PlatformUtilities::getCurrentModuleInstanceHandle(); | |||||
TCHAR moduleFile [1024] = { 0 }; | |||||
GetModuleFileName (moduleHandle, moduleFile, 1024); | |||||
WNDCLASSEX wcex = { 0 }; | |||||
wcex.cbSize = sizeof (wcex); | |||||
wcex.style = CS_OWNDC; | |||||
wcex.lpfnWndProc = (WNDPROC) wndProc; | |||||
wcex.lpszClassName = windowClassName.toWideCharPointer(); | |||||
wcex.hInstance = moduleHandle; | |||||
atom = RegisterClassEx (&wcex); | |||||
jassert (atom != 0); | |||||
} | |||||
~NativeWindowClass() | |||||
{ | |||||
if (atom != 0) | |||||
UnregisterClass (getWindowClassName(), (HINSTANCE) PlatformUtilities::getCurrentModuleInstanceHandle()); | |||||
clearSingletonInstance(); | |||||
} | |||||
static LRESULT CALLBACK wndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) | |||||
{ | |||||
DirectShowContext* c = (DirectShowContext*) GetWindowLongPtr (hwnd, GWLP_USERDATA); | |||||
if (c != nullptr) | |||||
{ | |||||
jassert (c->getNativeWindowHandle() == hwnd); | |||||
switch (msg) | |||||
{ | |||||
case WM_ERASEBKGND: return 1; | |||||
case WM_DISPLAYCHANGE: c->displayResolutionChanged(); break; | |||||
case graphEventID: c->graphEventProc(); return 0; | |||||
default: break; | |||||
} | |||||
} | |||||
return DefWindowProc (hwnd, msg, wParam, lParam); | |||||
} | |||||
public: | |||||
bool isRegistered() const noexcept { return atom != 0; } | |||||
LPCTSTR getWindowClassName() const noexcept { return (LPCTSTR) MAKELONG (atom, 0); } | |||||
juce_DeclareSingleton_SingleThreaded_Minimal (NativeWindowClass); | |||||
private: | |||||
ATOM atom; | |||||
JUCE_DECLARE_NON_COPYABLE (NativeWindowClass); | |||||
}; | |||||
//====================================================================== | |||||
class NativeWindow | |||||
{ | |||||
public: | |||||
NativeWindow (HWND parentToAddTo, void* const userData) | |||||
: hwnd (0), hdc (0) | |||||
{ | |||||
NativeWindowClass* const wc = NativeWindowClass::getInstance(); | |||||
if (wc->isRegistered()) | |||||
{ | |||||
DWORD exstyle = 0; | |||||
DWORD type = WS_CHILD; | |||||
hwnd = CreateWindowEx (exstyle, wc->getWindowClassName(), | |||||
L"", type, 0, 0, 0, 0, parentToAddTo, 0, | |||||
(HINSTANCE) PlatformUtilities::getCurrentModuleInstanceHandle(), 0); | |||||
if (hwnd != 0) | |||||
{ | |||||
hdc = GetDC (hwnd); | |||||
SetWindowLongPtr (hwnd, GWLP_USERDATA, (LONG_PTR) userData); | |||||
} | |||||
} | |||||
jassert (hwnd != 0); | |||||
} | |||||
~NativeWindow() | |||||
{ | |||||
if (hwnd != 0) | |||||
{ | |||||
SetWindowLongPtr (hwnd, GWLP_USERDATA, (LONG_PTR) 0); | |||||
DestroyWindow (hwnd); | |||||
} | |||||
} | |||||
HWND getHandle() const noexcept { return hwnd; } | |||||
HDC getContext() const noexcept { return hdc; } | |||||
void setWindowPosition (const Rectangle<int>& newBounds) | |||||
{ | |||||
SetWindowPos (hwnd, 0, newBounds.getX(), newBounds.getY(), | |||||
newBounds.getWidth(), newBounds.getHeight(), | |||||
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOOWNERZORDER); | |||||
} | |||||
void showWindow (const bool shouldBeVisible) | |||||
{ | |||||
ShowWindow (hwnd, shouldBeVisible ? SW_SHOWNA : SW_HIDE); | |||||
} | |||||
private: | |||||
HWND hwnd; | |||||
HDC hdc; | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NativeWindow); | |||||
}; | |||||
ScopedPointer<NativeWindow> nativeWindow; | |||||
//====================================================================== | |||||
bool createNativeWindow() | |||||
{ | |||||
jassert (nativeWindow == nullptr); | |||||
ComponentPeer* topLevelPeer = component.getTopLevelComponent()->getPeer(); | |||||
jassert (topLevelPeer != nullptr); | |||||
if (topLevelPeer != nullptr) | |||||
{ | |||||
nativeWindow = new NativeWindow ((HWND) topLevelPeer->getNativeHandle(), this); | |||||
hwnd = nativeWindow->getHandle(); | |||||
if (hwnd != 0) | |||||
{ | |||||
hdc = GetDC (hwnd); | |||||
component.updateContextPosition(); | |||||
component.showContext (component.isShowing()); | |||||
return true; | |||||
} | |||||
else | |||||
{ | |||||
nativeWindow = nullptr; | |||||
} | |||||
} | |||||
return false; | |||||
} | |||||
void deleteNativeWindow() | |||||
{ | |||||
jassert (nativeWindow != nullptr); | |||||
ReleaseDC (hwnd, hdc); | |||||
hwnd = 0; | |||||
hdc = 0; | |||||
nativeWindow = nullptr; | |||||
} | |||||
bool isRendererConnected() | |||||
{ | |||||
ComSmartPtr <IEnumPins> enumPins; | |||||
HRESULT hr = baseFilter->EnumPins (enumPins.resetAndGetPointerAddress()); | |||||
if (SUCCEEDED (hr)) | |||||
hr = enumPins->Reset(); | |||||
ComSmartPtr<IPin> pin; | |||||
while (SUCCEEDED (hr) | |||||
&& enumPins->Next (1, pin.resetAndGetPointerAddress(), nullptr) == S_OK) | |||||
{ | |||||
ComSmartPtr<IPin> otherPin; | |||||
hr = pin->ConnectedTo (otherPin.resetAndGetPointerAddress()); | |||||
if (SUCCEEDED (hr)) | |||||
{ | |||||
PIN_DIRECTION direction; | |||||
hr = pin->QueryDirection (&direction); | |||||
if (SUCCEEDED (hr) && direction == PINDIR_INPUT) | |||||
return true; | |||||
} | |||||
else if (hr == VFW_E_NOT_CONNECTED) | |||||
{ | |||||
hr = S_OK; | |||||
} | |||||
} | |||||
return false; | |||||
} | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DirectShowContext); | |||||
}; | |||||
juce_ImplementSingleton_SingleThreaded (DirectShowComponent::DirectShowContext::NativeWindowClass); | |||||
//====================================================================== | |||||
class DirectShowComponent::DirectShowComponentWatcher : public ComponentMovementWatcher | |||||
{ | |||||
public: | |||||
DirectShowComponentWatcher (DirectShowComponent* const owner_) | |||||
: ComponentMovementWatcher (owner_), | |||||
owner (owner_) | |||||
{ | |||||
} | |||||
void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) | |||||
{ | |||||
if (owner->videoLoaded) | |||||
owner->updateContextPosition(); | |||||
} | |||||
void componentPeerChanged() | |||||
{ | |||||
if (owner->videoLoaded) | |||||
owner->recreateNativeWindowAsync(); | |||||
} | |||||
void componentVisibilityChanged() | |||||
{ | |||||
if (owner->videoLoaded) | |||||
owner->showContext (owner->isShowing()); | |||||
} | |||||
//====================================================================== | |||||
private: | |||||
DirectShowComponent* const owner; | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DirectShowComponentWatcher); | |||||
}; | |||||
//====================================================================== | |||||
DirectShowComponent::DirectShowComponent (VideoRendererType type) | |||||
: videoLoaded (false), | |||||
looping (false), | |||||
needToUpdateViewport (true), | |||||
needToRecreateNativeWindow (false) | |||||
{ | |||||
setOpaque (true); | |||||
context = new DirectShowContext (*this, type); | |||||
componentWatcher = new DirectShowComponentWatcher (this); | |||||
} | |||||
DirectShowComponent::~DirectShowComponent() | |||||
{ | |||||
componentWatcher = nullptr; | |||||
} | |||||
bool DirectShowComponent::isDirectShowAvailable() | |||||
{ | |||||
static bool isDSAvailable = DirectShowHelpers::checkDShowAvailability(); | |||||
return isDSAvailable; | |||||
} | |||||
void DirectShowComponent::recreateNativeWindowAsync() | |||||
{ | |||||
needToRecreateNativeWindow = true; | |||||
repaint(); | |||||
} | |||||
void DirectShowComponent::updateContextPosition() | |||||
{ | |||||
needToUpdateViewport = true; | |||||
if (getWidth() > 0 && getHeight() > 0) | |||||
{ | |||||
Component* const topComp = getTopLevelComponent(); | |||||
if (topComp->getPeer() != nullptr) | |||||
context->updateWindowPosition (topComp->getLocalArea (this, getLocalBounds())); | |||||
} | |||||
} | |||||
void DirectShowComponent::showContext (const bool shouldBeVisible) | |||||
{ | |||||
context->showWindow (shouldBeVisible); | |||||
} | |||||
void DirectShowComponent::paint (Graphics& g) | |||||
{ | |||||
if (videoLoaded) | |||||
{ | |||||
if (needToRecreateNativeWindow) | |||||
{ | |||||
context->peerChanged(); | |||||
needToRecreateNativeWindow = false; | |||||
} | |||||
if (needToUpdateViewport) | |||||
{ | |||||
context->updateVideoPosition(); | |||||
needToUpdateViewport = false; | |||||
} | |||||
context->repaint(); | |||||
ComponentPeer* const peer = getPeer(); | |||||
if (peer != nullptr) | |||||
{ | |||||
const Point<int> topLeft (getScreenPosition() - peer->getScreenPosition()); | |||||
peer->addMaskedRegion (topLeft.getX(), topLeft.getY(), getWidth(), getHeight()); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
g.fillAll (Colours::grey); | |||||
} | |||||
} | |||||
//====================================================================== | |||||
bool DirectShowComponent::loadMovie (const String& fileOrURLPath) | |||||
{ | |||||
closeMovie(); | |||||
videoLoaded = context->loadFile (fileOrURLPath); | |||||
if (videoLoaded) | |||||
{ | |||||
videoPath = fileOrURLPath; | |||||
context->updateVideoPosition(); | |||||
} | |||||
return videoLoaded; | |||||
} | |||||
bool DirectShowComponent::loadMovie (const File& videoFile) | |||||
{ | |||||
return loadMovie (videoFile.getFullPathName()); | |||||
} | |||||
bool DirectShowComponent::loadMovie (const URL& videoURL) | |||||
{ | |||||
return loadMovie (videoURL.toString (false)); | |||||
} | |||||
void DirectShowComponent::closeMovie() | |||||
{ | |||||
if (videoLoaded) | |||||
context->release(); | |||||
videoLoaded = false; | |||||
videoPath = String::empty; | |||||
} | |||||
//====================================================================== | |||||
const File DirectShowComponent::getCurrentMoviePath() const { return videoPath; } | |||||
bool DirectShowComponent::isMovieOpen() const { return videoLoaded; } | |||||
double DirectShowComponent::getMovieDuration() const { return videoLoaded ? context->getDuration() : 0.0; } | |||||
void DirectShowComponent::setLooping (const bool shouldLoop) { looping = shouldLoop; } | |||||
bool DirectShowComponent::isLooping() const { return looping; } | |||||
void DirectShowComponent::getMovieNormalSize (int &width, int &height) const | |||||
{ | |||||
width = context->getVideoWidth(); | |||||
height = context->getVideoHeight(); | |||||
} | |||||
//====================================================================== | |||||
void DirectShowComponent::setBoundsWithCorrectAspectRatio (const Rectangle<int>& spaceToFitWithin, | |||||
const RectanglePlacement& placement) | |||||
{ | |||||
int normalWidth, normalHeight; | |||||
getMovieNormalSize (normalWidth, normalHeight); | |||||
const Rectangle<int> normalSize (0, 0, normalWidth, normalHeight); | |||||
if (! (spaceToFitWithin.isEmpty() || normalSize.isEmpty())) | |||||
setBounds (placement.appliedTo (normalSize, spaceToFitWithin)); | |||||
else | |||||
setBounds (spaceToFitWithin); | |||||
} | |||||
//====================================================================== | |||||
void DirectShowComponent::play() | |||||
{ | |||||
if (videoLoaded) | |||||
context->run(); | |||||
} | |||||
void DirectShowComponent::stop() | |||||
{ | |||||
if (videoLoaded) | |||||
context->stop(); | |||||
} | |||||
bool DirectShowComponent::isPlaying() const | |||||
{ | |||||
return context->isRunning(); | |||||
} | |||||
void DirectShowComponent::goToStart() | |||||
{ | |||||
setPosition (0.0); | |||||
} | |||||
void DirectShowComponent::setPosition (const double seconds) | |||||
{ | |||||
if (videoLoaded) | |||||
context->setPosition (seconds); | |||||
} | |||||
double DirectShowComponent::getPosition() const | |||||
{ | |||||
return videoLoaded ? context->getPosition() : 0.0; | |||||
} | |||||
void DirectShowComponent::setSpeed (const float newSpeed) | |||||
{ | |||||
if (videoLoaded) | |||||
context->setSpeed (newSpeed); | |||||
} | |||||
void DirectShowComponent::setMovieVolume (const float newVolume) | |||||
{ | |||||
if (videoLoaded) | |||||
context->setVolume (newVolume); | |||||
} | |||||
float DirectShowComponent::getMovieVolume() const | |||||
{ | |||||
return videoLoaded ? context->getVolume() : 0.0f; | |||||
} | |||||
#endif |
@@ -307,7 +307,7 @@ MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMo | |||||
{ | { | ||||
jassert (mode == readOnly || mode == readWrite); | jassert (mode == readOnly || mode == readWrite); | ||||
DWORD accessMode = GENERIC_READ, shareMode = FILE_SHARE_READ, createType = OPEN_EXISTING; | |||||
DWORD accessMode = GENERIC_READ, createType = OPEN_EXISTING; | |||||
DWORD protect = PAGE_READONLY, access = FILE_MAP_READ; | DWORD protect = PAGE_READONLY, access = FILE_MAP_READ; | ||||
if (mode == readWrite) | if (mode == readWrite) | ||||
@@ -74,6 +74,7 @@ BEGIN_JUCE_NAMESPACE | |||||
#include "../../gui/components/menus/juce_MenuBarModel.h" | #include "../../gui/components/menus/juce_MenuBarModel.h" | ||||
#include "../../gui/components/special/juce_OpenGLComponent.h" | #include "../../gui/components/special/juce_OpenGLComponent.h" | ||||
#include "../../gui/components/special/juce_QuickTimeMovieComponent.h" | #include "../../gui/components/special/juce_QuickTimeMovieComponent.h" | ||||
#include "../../gui/components/special/juce_DirectShowComponent.h" | |||||
#include "../../gui/components/mouse/juce_DragAndDropContainer.h" | #include "../../gui/components/mouse/juce_DragAndDropContainer.h" | ||||
#include "../../gui/components/mouse/juce_MouseInputSource.h" | #include "../../gui/components/mouse/juce_MouseInputSource.h" | ||||
#include "../../gui/components/keyboard/juce_KeyPressMappingSet.h" | #include "../../gui/components/keyboard/juce_KeyPressMappingSet.h" | ||||
@@ -114,6 +115,7 @@ BEGIN_JUCE_NAMESPACE | |||||
#include "juce_win32_Misc.cpp" | #include "juce_win32_Misc.cpp" | ||||
#include "juce_win32_ActiveXComponent.cpp" | #include "juce_win32_ActiveXComponent.cpp" | ||||
#include "juce_win32_QuickTimeMovieComponent.cpp" | #include "juce_win32_QuickTimeMovieComponent.cpp" | ||||
#include "juce_win32_DirectShowComponent.cpp" | |||||
#include "juce_win32_WebBrowserComponent.cpp" | #include "juce_win32_WebBrowserComponent.cpp" | ||||
#include "juce_win32_OpenGLComponent.cpp" | #include "juce_win32_OpenGLComponent.cpp" | ||||
#include "juce_win32_AudioCDReader.cpp" | #include "juce_win32_AudioCDReader.cpp" | ||||
@@ -183,6 +183,14 @@ | |||||
#import <QTOControl.dll> | #import <QTOControl.dll> | ||||
#endif | #endif | ||||
#if JUCE_DIRECTSHOW && JUCE_BUILD_NATIVE | |||||
#include <DShow.h> | |||||
#endif | |||||
#if JUCE_MEDIAFOUNDATION && JUCE_BUILD_NATIVE | |||||
#include <evr.h> | |||||
#endif | |||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_MSVC | #if JUCE_MSVC | ||||
#pragma warning (pop) | #pragma warning (pop) | ||||
@@ -287,10 +287,10 @@ public: | |||||
return false; | return false; | ||||
} | } | ||||
void updateWindowPosition (int x, int y, int w, int h, int) | |||||
void updateWindowPosition (const Rectangle<int>& bounds) | |||||
{ | { | ||||
SetWindowPos ((HWND) nativeWindow->getNativeHandle(), 0, | SetWindowPos ((HWND) nativeWindow->getNativeHandle(), 0, | ||||
x, y, w, h, | |||||
bounds.getX(), bounds.getY(), bounds.getWidth(), bounds.getHeight(), | |||||
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOOWNERZORDER); | SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOOWNERZORDER); | ||||
} | } | ||||