@@ -330,6 +330,22 @@ OBJECTS := \ | |||
$(OBJDIR)/juce_win32_WASAPI_c7c6c3c3.o \ | |||
$(OBJDIR)/juce_win32_WebBrowserComponent_2a4dd461.o \ | |||
$(OBJDIR)/juce_win32_Windowing_635b4f6a.o \ | |||
$(OBJDIR)/juce_android_Audio_93f83bd6.o \ | |||
$(OBJDIR)/juce_android_CameraDevice_d2743865.o \ | |||
$(OBJDIR)/juce_android_FileChooser_205cbb5f.o \ | |||
$(OBJDIR)/juce_android_Files_3b5721f7.o \ | |||
$(OBJDIR)/juce_android_Fonts_2e035704.o \ | |||
$(OBJDIR)/juce_android_GraphicsContext_d0fb27e4.o \ | |||
$(OBJDIR)/juce_android_Messaging_59717284.o \ | |||
$(OBJDIR)/juce_android_Midi_4fa64fab.o \ | |||
$(OBJDIR)/juce_android_Misc_68ea73f6.o \ | |||
$(OBJDIR)/juce_android_NativeCode_dc186dee.o \ | |||
$(OBJDIR)/juce_android_Network_28d2276e.o \ | |||
$(OBJDIR)/juce_android_OpenGLComponent_8fd9ef4e.o \ | |||
$(OBJDIR)/juce_android_SystemStats_848ae670.o \ | |||
$(OBJDIR)/juce_android_Threads_10a24b69.o \ | |||
$(OBJDIR)/juce_android_WebBrowserComponent_178c6569.o \ | |||
$(OBJDIR)/juce_android_Windowing_2a620a72.o \ | |||
$(OBJDIR)/juce_CharacterFunctions_b1a5ac62.o \ | |||
$(OBJDIR)/juce_Identifier_e99ee619.o \ | |||
$(OBJDIR)/juce_LocalisedStrings_3ddfa55e.o \ | |||
@@ -1820,6 +1836,86 @@ $(OBJDIR)/juce_win32_Windowing_635b4f6a.o: ../../src/native/windows/juce_win32_W | |||
@echo "Compiling juce_win32_Windowing.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_Audio_93f83bd6.o: ../../src/native/android/juce_android_Audio.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_Audio.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_CameraDevice_d2743865.o: ../../src/native/android/juce_android_CameraDevice.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_CameraDevice.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_FileChooser_205cbb5f.o: ../../src/native/android/juce_android_FileChooser.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_FileChooser.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_Files_3b5721f7.o: ../../src/native/android/juce_android_Files.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_Files.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_Fonts_2e035704.o: ../../src/native/android/juce_android_Fonts.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_Fonts.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_GraphicsContext_d0fb27e4.o: ../../src/native/android/juce_android_GraphicsContext.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_GraphicsContext.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_Messaging_59717284.o: ../../src/native/android/juce_android_Messaging.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_Messaging.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_Midi_4fa64fab.o: ../../src/native/android/juce_android_Midi.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_Midi.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_Misc_68ea73f6.o: ../../src/native/android/juce_android_Misc.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_Misc.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_NativeCode_dc186dee.o: ../../src/native/android/juce_android_NativeCode.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_NativeCode.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_Network_28d2276e.o: ../../src/native/android/juce_android_Network.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_Network.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_OpenGLComponent_8fd9ef4e.o: ../../src/native/android/juce_android_OpenGLComponent.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_OpenGLComponent.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_SystemStats_848ae670.o: ../../src/native/android/juce_android_SystemStats.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_SystemStats.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_Threads_10a24b69.o: ../../src/native/android/juce_android_Threads.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_Threads.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_WebBrowserComponent_178c6569.o: ../../src/native/android/juce_android_WebBrowserComponent.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_WebBrowserComponent.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_android_Windowing_2a620a72.o: ../../src/native/android/juce_android_Windowing.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_android_Windowing.cpp" | |||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
$(OBJDIR)/juce_CharacterFunctions_b1a5ac62.o: ../../src/text/juce_CharacterFunctions.cpp | |||
-@mkdir -p $(OBJDIR) | |||
@echo "Compiling juce_CharacterFunctions.cpp" | |||
@@ -325,6 +325,22 @@ | |||
6801797B247CB3A6890C0AB0 = { isa = PBXBuildFile; fileRef = 5D32C8856093B33438AEB758; }; | |||
B0B82AB2D9B0950F67B11BEA = { isa = PBXBuildFile; fileRef = 8758E6857070D7E5406FDE3F; }; | |||
379B4A89E5403B57A2009E76 = { isa = PBXBuildFile; fileRef = 8E8BE2F1C182E418BBA6903C; }; | |||
6ED121D4FEE575408B9612AB = { isa = PBXBuildFile; fileRef = 03B9D3D9042E85BDD691325E; }; | |||
9ADE436BC62FB84E297C1CA0 = { isa = PBXBuildFile; fileRef = 13C661B79E1E9508512A6B21; }; | |||
03D534E5B18011C3E03CDD40 = { isa = PBXBuildFile; fileRef = F2F68E50F42BD0F124E89E2C; }; | |||
06E2ED69E9FAC199D559F276 = { isa = PBXBuildFile; fileRef = 59C46E289F86C80D4341EAA3; }; | |||
9801CCC32F01818B39CFD88E = { isa = PBXBuildFile; fileRef = FA82460758BDCB2DCCE1EAAA; }; | |||
FE553DDF4F83DABF13DF4A2B = { isa = PBXBuildFile; fileRef = CE06EEED7426AA45C27B629C; }; | |||
68DB48B0EC9E5E37C6B5281C = { isa = PBXBuildFile; fileRef = 1D74C9567283836ECC70E48B; }; | |||
96E9017FBE104E9EADC586B1 = { isa = PBXBuildFile; fileRef = 40216CE846A54CE706131A23; }; | |||
BA6C6EF4C88D49C640DA7BF6 = { isa = PBXBuildFile; fileRef = E646726910F110DC34DD1662; }; | |||
0B124D9CE361014F815A5958 = { isa = PBXBuildFile; fileRef = 9AF9F1C0D766D4F894E4A7B0; }; | |||
C701E3FCB168A3B4A31C4242 = { isa = PBXBuildFile; fileRef = A404CD721E2A0F0CAE9326C5; }; | |||
04F6D85CCF26A7F6DE589876 = { isa = PBXBuildFile; fileRef = 32B7C3609BDA01AA09740139; }; | |||
62912A2DA2F01212517938E7 = { isa = PBXBuildFile; fileRef = CEF7210E311274F1DFAB6882; }; | |||
36D770FCDAC86084A495B96E = { isa = PBXBuildFile; fileRef = 755C440534C0EB494572B3F3; }; | |||
DA2A4714F1A6957A4F2B8D48 = { isa = PBXBuildFile; fileRef = EE855319AF344A05C92580C7; }; | |||
CE9A64287FCEF00DD2BA6AEE = { isa = PBXBuildFile; fileRef = FCD02A40985242A8A6648311; }; | |||
2AC6F3BFAAA21E21076A9F8D = { isa = PBXBuildFile; fileRef = 76E2084D2148068F9138A816; }; | |||
B8DD4DB0BD1A6B38BBF92413 = { isa = PBXBuildFile; fileRef = 8273A206FB309671284959DD; }; | |||
63BEC07A51CB8E516B38ECD4 = { isa = PBXBuildFile; fileRef = 4A97C8D2FF6454DDD3AF4BE5; }; | |||
@@ -997,6 +1013,23 @@ | |||
5D32C8856093B33438AEB758 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_WASAPI.cpp; path = ../../src/native/windows/juce_win32_WASAPI.cpp; sourceTree = SOURCE_ROOT; }; | |||
8758E6857070D7E5406FDE3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_WebBrowserComponent.cpp; path = ../../src/native/windows/juce_win32_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
8E8BE2F1C182E418BBA6903C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Windowing.cpp; path = ../../src/native/windows/juce_win32_Windowing.cpp; sourceTree = SOURCE_ROOT; }; | |||
03B9D3D9042E85BDD691325E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Audio.cpp; path = ../../src/native/android/juce_android_Audio.cpp; sourceTree = SOURCE_ROOT; }; | |||
13C661B79E1E9508512A6B21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_CameraDevice.cpp; path = ../../src/native/android/juce_android_CameraDevice.cpp; sourceTree = SOURCE_ROOT; }; | |||
F2F68E50F42BD0F124E89E2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_FileChooser.cpp; path = ../../src/native/android/juce_android_FileChooser.cpp; sourceTree = SOURCE_ROOT; }; | |||
59C46E289F86C80D4341EAA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Files.cpp; path = ../../src/native/android/juce_android_Files.cpp; sourceTree = SOURCE_ROOT; }; | |||
FA82460758BDCB2DCCE1EAAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Fonts.cpp; path = ../../src/native/android/juce_android_Fonts.cpp; sourceTree = SOURCE_ROOT; }; | |||
CE06EEED7426AA45C27B629C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_GraphicsContext.cpp; path = ../../src/native/android/juce_android_GraphicsContext.cpp; sourceTree = SOURCE_ROOT; }; | |||
1D74C9567283836ECC70E48B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Messaging.cpp; path = ../../src/native/android/juce_android_Messaging.cpp; sourceTree = SOURCE_ROOT; }; | |||
40216CE846A54CE706131A23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Midi.cpp; path = ../../src/native/android/juce_android_Midi.cpp; sourceTree = SOURCE_ROOT; }; | |||
E646726910F110DC34DD1662 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Misc.cpp; path = ../../src/native/android/juce_android_Misc.cpp; sourceTree = SOURCE_ROOT; }; | |||
9AF9F1C0D766D4F894E4A7B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_NativeCode.cpp; path = ../../src/native/android/juce_android_NativeCode.cpp; sourceTree = SOURCE_ROOT; }; | |||
902C32F471DA6C435E80372B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_android_NativeIncludes.h; path = ../../src/native/android/juce_android_NativeIncludes.h; sourceTree = SOURCE_ROOT; }; | |||
A404CD721E2A0F0CAE9326C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Network.cpp; path = ../../src/native/android/juce_android_Network.cpp; sourceTree = SOURCE_ROOT; }; | |||
32B7C3609BDA01AA09740139 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_OpenGLComponent.cpp; path = ../../src/native/android/juce_android_OpenGLComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
CEF7210E311274F1DFAB6882 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_SystemStats.cpp; path = ../../src/native/android/juce_android_SystemStats.cpp; sourceTree = SOURCE_ROOT; }; | |||
755C440534C0EB494572B3F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Threads.cpp; path = ../../src/native/android/juce_android_Threads.cpp; sourceTree = SOURCE_ROOT; }; | |||
EE855319AF344A05C92580C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_WebBrowserComponent.cpp; path = ../../src/native/android/juce_android_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
FCD02A40985242A8A6648311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Windowing.cpp; path = ../../src/native/android/juce_android_Windowing.cpp; sourceTree = SOURCE_ROOT; }; | |||
76E2084D2148068F9138A816 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CharacterFunctions.cpp; path = ../../src/text/juce_CharacterFunctions.cpp; sourceTree = SOURCE_ROOT; }; | |||
33F16EE4F38C9B76E7FAEF78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharacterFunctions.h; path = ../../src/text/juce_CharacterFunctions.h; sourceTree = SOURCE_ROOT; }; | |||
4007410FACA2F865FD8EF769 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharPointer_UTF8.h; path = ../../src/text/juce_CharPointer_UTF8.h; sourceTree = SOURCE_ROOT; }; | |||
@@ -1798,11 +1831,30 @@ | |||
5D32C8856093B33438AEB758, | |||
8758E6857070D7E5406FDE3F, | |||
8E8BE2F1C182E418BBA6903C ); name = windows; sourceTree = "<group>"; }; | |||
FBE56423C0482E49EF317C85 = { isa = PBXGroup; children = ( | |||
03B9D3D9042E85BDD691325E, | |||
13C661B79E1E9508512A6B21, | |||
F2F68E50F42BD0F124E89E2C, | |||
59C46E289F86C80D4341EAA3, | |||
FA82460758BDCB2DCCE1EAAA, | |||
CE06EEED7426AA45C27B629C, | |||
1D74C9567283836ECC70E48B, | |||
40216CE846A54CE706131A23, | |||
E646726910F110DC34DD1662, | |||
9AF9F1C0D766D4F894E4A7B0, | |||
902C32F471DA6C435E80372B, | |||
A404CD721E2A0F0CAE9326C5, | |||
32B7C3609BDA01AA09740139, | |||
CEF7210E311274F1DFAB6882, | |||
755C440534C0EB494572B3F3, | |||
EE855319AF344A05C92580C7, | |||
FCD02A40985242A8A6648311 ); name = android; sourceTree = "<group>"; }; | |||
B3E58752D519C56B78A95ACE = { isa = PBXGroup; children = ( | |||
DDB94A7300C3D1F2E9E51C47, | |||
1004A23965A4DB0FCC441ED3, | |||
13513EE40AD6BAB30E26C88B, | |||
64DE2D4534D79E74C40A0DEE ); name = native; sourceTree = "<group>"; }; | |||
64DE2D4534D79E74C40A0DEE, | |||
FBE56423C0482E49EF317C85 ); name = native; sourceTree = "<group>"; }; | |||
C6B52BCD0CB1B809D6DE555A = { isa = PBXGroup; children = ( | |||
76E2084D2148068F9138A816, | |||
33F16EE4F38C9B76E7FAEF78, | |||
@@ -2281,6 +2333,22 @@ | |||
6801797B247CB3A6890C0AB0, | |||
B0B82AB2D9B0950F67B11BEA, | |||
379B4A89E5403B57A2009E76, | |||
6ED121D4FEE575408B9612AB, | |||
9ADE436BC62FB84E297C1CA0, | |||
03D534E5B18011C3E03CDD40, | |||
06E2ED69E9FAC199D559F276, | |||
9801CCC32F01818B39CFD88E, | |||
FE553DDF4F83DABF13DF4A2B, | |||
68DB48B0EC9E5E37C6B5281C, | |||
96E9017FBE104E9EADC586B1, | |||
BA6C6EF4C88D49C640DA7BF6, | |||
0B124D9CE361014F815A5958, | |||
C701E3FCB168A3B4A31C4242, | |||
04F6D85CCF26A7F6DE589876, | |||
62912A2DA2F01212517938E7, | |||
36D770FCDAC86084A495B96E, | |||
DA2A4714F1A6957A4F2B8D48, | |||
CE9A64287FCEF00DD2BA6AEE, | |||
2AC6F3BFAAA21E21076A9F8D, | |||
B8DD4DB0BD1A6B38BBF92413, | |||
63BEC07A51CB8E516B38ECD4, | |||
@@ -933,6 +933,25 @@ | |||
<File RelativePath="..\..\src\native\windows\juce_win32_WebBrowserComponent.cpp"/> | |||
<File RelativePath="..\..\src\native\windows\juce_win32_Windowing.cpp"/> | |||
</Filter> | |||
<Filter Name="android"> | |||
<File RelativePath="..\..\src\native\android\juce_android_Audio.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_CameraDevice.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_FileChooser.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Files.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Fonts.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_GraphicsContext.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Messaging.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Midi.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Misc.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_NativeCode.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_NativeIncludes.h"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Network.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_OpenGLComponent.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_SystemStats.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Threads.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_WebBrowserComponent.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Windowing.cpp"/> | |||
</Filter> | |||
</Filter> | |||
<Filter Name="text"> | |||
<File RelativePath="..\..\src\text\juce_CharacterFunctions.cpp"/> | |||
@@ -933,6 +933,25 @@ | |||
<File RelativePath="..\..\src\native\windows\juce_win32_WebBrowserComponent.cpp"/> | |||
<File RelativePath="..\..\src\native\windows\juce_win32_Windowing.cpp"/> | |||
</Filter> | |||
<Filter Name="android"> | |||
<File RelativePath="..\..\src\native\android\juce_android_Audio.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_CameraDevice.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_FileChooser.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Files.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Fonts.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_GraphicsContext.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Messaging.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Midi.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Misc.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_NativeCode.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_NativeIncludes.h"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Network.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_OpenGLComponent.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_SystemStats.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Threads.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_WebBrowserComponent.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Windowing.cpp"/> | |||
</Filter> | |||
</Filter> | |||
<Filter Name="text"> | |||
<File RelativePath="..\..\src\text\juce_CharacterFunctions.cpp"/> | |||
@@ -935,6 +935,25 @@ | |||
<File RelativePath="..\..\src\native\windows\juce_win32_WebBrowserComponent.cpp"/> | |||
<File RelativePath="..\..\src\native\windows\juce_win32_Windowing.cpp"/> | |||
</Filter> | |||
<Filter Name="android"> | |||
<File RelativePath="..\..\src\native\android\juce_android_Audio.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_CameraDevice.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_FileChooser.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Files.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Fonts.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_GraphicsContext.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Messaging.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Midi.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Misc.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_NativeCode.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_NativeIncludes.h"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Network.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_OpenGLComponent.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_SystemStats.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Threads.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_WebBrowserComponent.cpp"/> | |||
<File RelativePath="..\..\src\native\android\juce_android_Windowing.cpp"/> | |||
</Filter> | |||
</Filter> | |||
<Filter Name="text"> | |||
<File RelativePath="..\..\src\text\juce_CharacterFunctions.cpp"/> | |||
@@ -413,6 +413,22 @@ | |||
<ClCompile Include="..\..\src\native\windows\juce_win32_WASAPI.cpp"/> | |||
<ClCompile Include="..\..\src\native\windows\juce_win32_WebBrowserComponent.cpp"/> | |||
<ClCompile Include="..\..\src\native\windows\juce_win32_Windowing.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Audio.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_CameraDevice.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_FileChooser.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Files.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Fonts.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_GraphicsContext.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Messaging.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Midi.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Misc.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_NativeCode.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Network.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_OpenGLComponent.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_SystemStats.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Threads.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_WebBrowserComponent.cpp"/> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Windowing.cpp"/> | |||
<ClCompile Include="..\..\src\text\juce_CharacterFunctions.cpp"/> | |||
<ClCompile Include="..\..\src\text\juce_Identifier.cpp"/> | |||
<ClCompile Include="..\..\src\text\juce_LocalisedStrings.cpp"/> | |||
@@ -756,6 +772,7 @@ | |||
<ClInclude Include="..\..\src\native\windows\juce_win32_AutoLinkLibraries.h"/> | |||
<ClInclude Include="..\..\src\native\windows\juce_win32_DynamicLibraryLoader.h"/> | |||
<ClInclude Include="..\..\src\native\windows\juce_win32_NativeIncludes.h"/> | |||
<ClInclude Include="..\..\src\native\android\juce_android_NativeIncludes.h"/> | |||
<ClInclude Include="..\..\src\text\juce_CharacterFunctions.h"/> | |||
<ClInclude Include="..\..\src\text\juce_CharPointer_UTF8.h"/> | |||
<ClInclude Include="..\..\src\text\juce_CharPointer_UTF16.h"/> | |||
@@ -173,6 +173,9 @@ | |||
<Filter Include="Juce\Source\native\windows"> | |||
<UniqueIdentifier>{CFBC5FA1-5A68-B012-A852-1D798CD2CBDF}</UniqueIdentifier> | |||
</Filter> | |||
<Filter Include="Juce\Source\native\android"> | |||
<UniqueIdentifier>{31BF14BA-F3B3-9EAE-8D43-0972CA67D1CF}</UniqueIdentifier> | |||
</Filter> | |||
<Filter Include="Juce\Source\text"> | |||
<UniqueIdentifier>{56CD7BE1-9B0B-A873-6126-8F47C2268CD3}</UniqueIdentifier> | |||
</Filter> | |||
@@ -1174,6 +1177,54 @@ | |||
<ClCompile Include="..\..\src\native\windows\juce_win32_Windowing.cpp"> | |||
<Filter>Juce\Source\native\windows</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Audio.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_CameraDevice.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_FileChooser.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Files.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Fonts.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_GraphicsContext.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Messaging.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Midi.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Misc.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_NativeCode.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Network.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_OpenGLComponent.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_SystemStats.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Threads.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_WebBrowserComponent.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\native\android\juce_android_Windowing.cpp"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClCompile> | |||
<ClCompile Include="..\..\src\text\juce_CharacterFunctions.cpp"> | |||
<Filter>Juce\Source\text</Filter> | |||
</ClCompile> | |||
@@ -2199,6 +2250,9 @@ | |||
<ClInclude Include="..\..\src\native\windows\juce_win32_NativeIncludes.h"> | |||
<Filter>Juce\Source\native\windows</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\src\native\android\juce_android_NativeIncludes.h"> | |||
<Filter>Juce\Source\native\android</Filter> | |||
</ClInclude> | |||
<ClInclude Include="..\..\src\text\juce_CharacterFunctions.h"> | |||
<Filter>Juce\Source\text</Filter> | |||
</ClInclude> | |||
@@ -325,6 +325,22 @@ | |||
6801797B247CB3A6890C0AB0 = { isa = PBXBuildFile; fileRef = 5D32C8856093B33438AEB758; }; | |||
B0B82AB2D9B0950F67B11BEA = { isa = PBXBuildFile; fileRef = 8758E6857070D7E5406FDE3F; }; | |||
379B4A89E5403B57A2009E76 = { isa = PBXBuildFile; fileRef = 8E8BE2F1C182E418BBA6903C; }; | |||
6ED121D4FEE575408B9612AB = { isa = PBXBuildFile; fileRef = 03B9D3D9042E85BDD691325E; }; | |||
9ADE436BC62FB84E297C1CA0 = { isa = PBXBuildFile; fileRef = 13C661B79E1E9508512A6B21; }; | |||
03D534E5B18011C3E03CDD40 = { isa = PBXBuildFile; fileRef = F2F68E50F42BD0F124E89E2C; }; | |||
06E2ED69E9FAC199D559F276 = { isa = PBXBuildFile; fileRef = 59C46E289F86C80D4341EAA3; }; | |||
9801CCC32F01818B39CFD88E = { isa = PBXBuildFile; fileRef = FA82460758BDCB2DCCE1EAAA; }; | |||
FE553DDF4F83DABF13DF4A2B = { isa = PBXBuildFile; fileRef = CE06EEED7426AA45C27B629C; }; | |||
68DB48B0EC9E5E37C6B5281C = { isa = PBXBuildFile; fileRef = 1D74C9567283836ECC70E48B; }; | |||
96E9017FBE104E9EADC586B1 = { isa = PBXBuildFile; fileRef = 40216CE846A54CE706131A23; }; | |||
BA6C6EF4C88D49C640DA7BF6 = { isa = PBXBuildFile; fileRef = E646726910F110DC34DD1662; }; | |||
0B124D9CE361014F815A5958 = { isa = PBXBuildFile; fileRef = 9AF9F1C0D766D4F894E4A7B0; }; | |||
C701E3FCB168A3B4A31C4242 = { isa = PBXBuildFile; fileRef = A404CD721E2A0F0CAE9326C5; }; | |||
04F6D85CCF26A7F6DE589876 = { isa = PBXBuildFile; fileRef = 32B7C3609BDA01AA09740139; }; | |||
62912A2DA2F01212517938E7 = { isa = PBXBuildFile; fileRef = CEF7210E311274F1DFAB6882; }; | |||
36D770FCDAC86084A495B96E = { isa = PBXBuildFile; fileRef = 755C440534C0EB494572B3F3; }; | |||
DA2A4714F1A6957A4F2B8D48 = { isa = PBXBuildFile; fileRef = EE855319AF344A05C92580C7; }; | |||
CE9A64287FCEF00DD2BA6AEE = { isa = PBXBuildFile; fileRef = FCD02A40985242A8A6648311; }; | |||
2AC6F3BFAAA21E21076A9F8D = { isa = PBXBuildFile; fileRef = 76E2084D2148068F9138A816; }; | |||
B8DD4DB0BD1A6B38BBF92413 = { isa = PBXBuildFile; fileRef = 8273A206FB309671284959DD; }; | |||
63BEC07A51CB8E516B38ECD4 = { isa = PBXBuildFile; fileRef = 4A97C8D2FF6454DDD3AF4BE5; }; | |||
@@ -997,6 +1013,23 @@ | |||
5D32C8856093B33438AEB758 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_WASAPI.cpp; path = ../../src/native/windows/juce_win32_WASAPI.cpp; sourceTree = SOURCE_ROOT; }; | |||
8758E6857070D7E5406FDE3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_WebBrowserComponent.cpp; path = ../../src/native/windows/juce_win32_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
8E8BE2F1C182E418BBA6903C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_win32_Windowing.cpp; path = ../../src/native/windows/juce_win32_Windowing.cpp; sourceTree = SOURCE_ROOT; }; | |||
03B9D3D9042E85BDD691325E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Audio.cpp; path = ../../src/native/android/juce_android_Audio.cpp; sourceTree = SOURCE_ROOT; }; | |||
13C661B79E1E9508512A6B21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_CameraDevice.cpp; path = ../../src/native/android/juce_android_CameraDevice.cpp; sourceTree = SOURCE_ROOT; }; | |||
F2F68E50F42BD0F124E89E2C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_FileChooser.cpp; path = ../../src/native/android/juce_android_FileChooser.cpp; sourceTree = SOURCE_ROOT; }; | |||
59C46E289F86C80D4341EAA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Files.cpp; path = ../../src/native/android/juce_android_Files.cpp; sourceTree = SOURCE_ROOT; }; | |||
FA82460758BDCB2DCCE1EAAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Fonts.cpp; path = ../../src/native/android/juce_android_Fonts.cpp; sourceTree = SOURCE_ROOT; }; | |||
CE06EEED7426AA45C27B629C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_GraphicsContext.cpp; path = ../../src/native/android/juce_android_GraphicsContext.cpp; sourceTree = SOURCE_ROOT; }; | |||
1D74C9567283836ECC70E48B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Messaging.cpp; path = ../../src/native/android/juce_android_Messaging.cpp; sourceTree = SOURCE_ROOT; }; | |||
40216CE846A54CE706131A23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Midi.cpp; path = ../../src/native/android/juce_android_Midi.cpp; sourceTree = SOURCE_ROOT; }; | |||
E646726910F110DC34DD1662 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Misc.cpp; path = ../../src/native/android/juce_android_Misc.cpp; sourceTree = SOURCE_ROOT; }; | |||
9AF9F1C0D766D4F894E4A7B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_NativeCode.cpp; path = ../../src/native/android/juce_android_NativeCode.cpp; sourceTree = SOURCE_ROOT; }; | |||
902C32F471DA6C435E80372B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_android_NativeIncludes.h; path = ../../src/native/android/juce_android_NativeIncludes.h; sourceTree = SOURCE_ROOT; }; | |||
A404CD721E2A0F0CAE9326C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Network.cpp; path = ../../src/native/android/juce_android_Network.cpp; sourceTree = SOURCE_ROOT; }; | |||
32B7C3609BDA01AA09740139 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_OpenGLComponent.cpp; path = ../../src/native/android/juce_android_OpenGLComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
CEF7210E311274F1DFAB6882 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_SystemStats.cpp; path = ../../src/native/android/juce_android_SystemStats.cpp; sourceTree = SOURCE_ROOT; }; | |||
755C440534C0EB494572B3F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Threads.cpp; path = ../../src/native/android/juce_android_Threads.cpp; sourceTree = SOURCE_ROOT; }; | |||
EE855319AF344A05C92580C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_WebBrowserComponent.cpp; path = ../../src/native/android/juce_android_WebBrowserComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
FCD02A40985242A8A6648311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_android_Windowing.cpp; path = ../../src/native/android/juce_android_Windowing.cpp; sourceTree = SOURCE_ROOT; }; | |||
76E2084D2148068F9138A816 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CharacterFunctions.cpp; path = ../../src/text/juce_CharacterFunctions.cpp; sourceTree = SOURCE_ROOT; }; | |||
33F16EE4F38C9B76E7FAEF78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharacterFunctions.h; path = ../../src/text/juce_CharacterFunctions.h; sourceTree = SOURCE_ROOT; }; | |||
4007410FACA2F865FD8EF769 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = juce_CharPointer_UTF8.h; path = ../../src/text/juce_CharPointer_UTF8.h; sourceTree = SOURCE_ROOT; }; | |||
@@ -1798,11 +1831,30 @@ | |||
5D32C8856093B33438AEB758, | |||
8758E6857070D7E5406FDE3F, | |||
8E8BE2F1C182E418BBA6903C ); name = windows; sourceTree = "<group>"; }; | |||
FBE56423C0482E49EF317C85 = { isa = PBXGroup; children = ( | |||
03B9D3D9042E85BDD691325E, | |||
13C661B79E1E9508512A6B21, | |||
F2F68E50F42BD0F124E89E2C, | |||
59C46E289F86C80D4341EAA3, | |||
FA82460758BDCB2DCCE1EAAA, | |||
CE06EEED7426AA45C27B629C, | |||
1D74C9567283836ECC70E48B, | |||
40216CE846A54CE706131A23, | |||
E646726910F110DC34DD1662, | |||
9AF9F1C0D766D4F894E4A7B0, | |||
902C32F471DA6C435E80372B, | |||
A404CD721E2A0F0CAE9326C5, | |||
32B7C3609BDA01AA09740139, | |||
CEF7210E311274F1DFAB6882, | |||
755C440534C0EB494572B3F3, | |||
EE855319AF344A05C92580C7, | |||
FCD02A40985242A8A6648311 ); name = android; sourceTree = "<group>"; }; | |||
B3E58752D519C56B78A95ACE = { isa = PBXGroup; children = ( | |||
DDB94A7300C3D1F2E9E51C47, | |||
1004A23965A4DB0FCC441ED3, | |||
13513EE40AD6BAB30E26C88B, | |||
64DE2D4534D79E74C40A0DEE ); name = native; sourceTree = "<group>"; }; | |||
64DE2D4534D79E74C40A0DEE, | |||
FBE56423C0482E49EF317C85 ); name = native; sourceTree = "<group>"; }; | |||
C6B52BCD0CB1B809D6DE555A = { isa = PBXGroup; children = ( | |||
76E2084D2148068F9138A816, | |||
33F16EE4F38C9B76E7FAEF78, | |||
@@ -2285,6 +2337,22 @@ | |||
6801797B247CB3A6890C0AB0, | |||
B0B82AB2D9B0950F67B11BEA, | |||
379B4A89E5403B57A2009E76, | |||
6ED121D4FEE575408B9612AB, | |||
9ADE436BC62FB84E297C1CA0, | |||
03D534E5B18011C3E03CDD40, | |||
06E2ED69E9FAC199D559F276, | |||
9801CCC32F01818B39CFD88E, | |||
FE553DDF4F83DABF13DF4A2B, | |||
68DB48B0EC9E5E37C6B5281C, | |||
96E9017FBE104E9EADC586B1, | |||
BA6C6EF4C88D49C640DA7BF6, | |||
0B124D9CE361014F815A5958, | |||
C701E3FCB168A3B4A31C4242, | |||
04F6D85CCF26A7F6DE589876, | |||
62912A2DA2F01212517938E7, | |||
36D770FCDAC86084A495B96E, | |||
DA2A4714F1A6957A4F2B8D48, | |||
CE9A64287FCEF00DD2BA6AEE, | |||
2AC6F3BFAAA21E21076A9F8D, | |||
B8DD4DB0BD1A6B38BBF92413, | |||
63BEC07A51CB8E516B38ECD4, | |||
@@ -1429,6 +1429,42 @@ | |||
<FILE id="u1rCbQqVT" name="juce_win32_Windowing.cpp" compile="1" resource="0" | |||
file="src/native/windows/juce_win32_Windowing.cpp"/> | |||
</GROUP> | |||
<GROUP id="oKVTWQ" name="android"> | |||
<FILE id="JBId31" name="juce_android_Audio.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_Audio.cpp"/> | |||
<FILE id="svLEk9" name="juce_android_CameraDevice.cpp" compile="1" | |||
resource="0" file="src/native/android/juce_android_CameraDevice.cpp"/> | |||
<FILE id="p8LoRE" name="juce_android_FileChooser.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_FileChooser.cpp"/> | |||
<FILE id="vphAaz" name="juce_android_Files.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_Files.cpp"/> | |||
<FILE id="XrSKE" name="juce_android_Fonts.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_Fonts.cpp"/> | |||
<FILE id="VFjwst" name="juce_android_GraphicsContext.cpp" compile="1" | |||
resource="0" file="src/native/android/juce_android_GraphicsContext.cpp"/> | |||
<FILE id="TV84om" name="juce_android_Messaging.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_Messaging.cpp"/> | |||
<FILE id="mJh1wV" name="juce_android_Midi.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_Midi.cpp"/> | |||
<FILE id="cTwU1I" name="juce_android_Misc.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_Misc.cpp"/> | |||
<FILE id="kCijWU" name="juce_android_NativeCode.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_NativeCode.cpp"/> | |||
<FILE id="nE5bBA" name="juce_android_NativeIncludes.h" compile="0" | |||
resource="0" file="src/native/android/juce_android_NativeIncludes.h"/> | |||
<FILE id="fXioLO" name="juce_android_Network.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_Network.cpp"/> | |||
<FILE id="YQ8ZrU" name="juce_android_OpenGLComponent.cpp" compile="1" | |||
resource="0" file="src/native/android/juce_android_OpenGLComponent.cpp"/> | |||
<FILE id="dEw2jT" name="juce_android_SystemStats.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_SystemStats.cpp"/> | |||
<FILE id="M4x7Lf" name="juce_android_Threads.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_Threads.cpp"/> | |||
<FILE id="IyYfds" name="juce_android_WebBrowserComponent.cpp" compile="1" | |||
resource="0" file="src/native/android/juce_android_WebBrowserComponent.cpp"/> | |||
<FILE id="RN0NVL" name="juce_android_Windowing.cpp" compile="1" resource="0" | |||
file="src/native/android/juce_android_Windowing.cpp"/> | |||
</GROUP> | |||
</GROUP> | |||
<GROUP id="DmPUetFJW" name="text"> | |||
<FILE id="jr5l0DTZv" name="juce_CharacterFunctions.cpp" compile="1" | |||
@@ -253754,7 +253754,23 @@ const String File::getVolumeLabel() const | |||
int File::getVolumeSerialNumber() const | |||
{ | |||
return 0; // xxx | |||
int result = 0; | |||
/* int fd = open (getFullPathName().toUTF8(), O_RDONLY | O_NONBLOCK); | |||
char info [512]; | |||
#ifndef HDIO_GET_IDENTITY | |||
#define HDIO_GET_IDENTITY 0x030d | |||
#endif | |||
if (ioctl (fd, HDIO_GET_IDENTITY, info) == 0) | |||
{ | |||
DBG (String (info + 20, 20)); | |||
result = String (info + 20, 20).trim().getIntValue(); | |||
} | |||
close (fd);*/ | |||
return result; | |||
} | |||
void juce_runSystemCommand (const String& command) | |||
@@ -263645,7 +263661,23 @@ const String File::getVolumeLabel() const | |||
int File::getVolumeSerialNumber() const | |||
{ | |||
return 0; // xxx | |||
int result = 0; | |||
/* int fd = open (getFullPathName().toUTF8(), O_RDONLY | O_NONBLOCK); | |||
char info [512]; | |||
#ifndef HDIO_GET_IDENTITY | |||
#define HDIO_GET_IDENTITY 0x030d | |||
#endif | |||
if (ioctl (fd, HDIO_GET_IDENTITY, info) == 0) | |||
{ | |||
DBG (String (info + 20, 20)); | |||
result = String (info + 20, 20).trim().getIntValue(); | |||
} | |||
close (fd);*/ | |||
return result; | |||
} | |||
void juce_runSystemCommand (const String& command) | |||
@@ -275429,7 +275461,7 @@ public: | |||
{ | |||
if (JUCEApplication::getInstance() != 0) | |||
{ | |||
JUCEApplication::getInstance()->anotherInstanceStarted (nsStringToJuce (filename)); | |||
JUCEApplication::getInstance()->anotherInstanceStarted (quotedIfContainsSpaces (filename)); | |||
return YES; | |||
} | |||
@@ -275440,18 +275472,10 @@ public: | |||
{ | |||
StringArray files; | |||
for (unsigned int i = 0; i < [filenames count]; ++i) | |||
{ | |||
String filename (nsStringToJuce ((NSString*) [filenames objectAtIndex: i])); | |||
if (filename.containsChar (' ')) | |||
filename = filename.quoted('"'); | |||
files.add (filename); | |||
} | |||
files.add (quotedIfContainsSpaces ((NSString*) [filenames objectAtIndex: i])); | |||
if (files.size() > 0 && JUCEApplication::getInstance() != 0) | |||
{ | |||
JUCEApplication::getInstance()->anotherInstanceStarted (files.joinIntoString (" ")); | |||
} | |||
} | |||
virtual void focusChanged() | |||
@@ -275487,6 +275511,15 @@ private: | |||
CFRunLoopRef runLoop; | |||
CFRunLoopSourceRef runLoopSource; | |||
MessageQueue messageQueue; | |||
static const String quotedIfContainsSpaces (NSString* file) | |||
{ | |||
String s (nsStringToJuce (file)); | |||
if (s.containsChar (' ')) | |||
s = s.quoted ('"'); | |||
return s; | |||
} | |||
}; | |||
END_JUCE_NAMESPACE | |||
@@ -278925,7 +278958,23 @@ const String File::getVolumeLabel() const | |||
int File::getVolumeSerialNumber() const | |||
{ | |||
return 0; // xxx | |||
int result = 0; | |||
/* int fd = open (getFullPathName().toUTF8(), O_RDONLY | O_NONBLOCK); | |||
char info [512]; | |||
#ifndef HDIO_GET_IDENTITY | |||
#define HDIO_GET_IDENTITY 0x030d | |||
#endif | |||
if (ioctl (fd, HDIO_GET_IDENTITY, info) == 0) | |||
{ | |||
DBG (String (info + 20, 20)); | |||
result = String (info + 20, 20).trim().getIntValue(); | |||
} | |||
close (fd);*/ | |||
return result; | |||
} | |||
void juce_runSystemCommand (const String& command) | |||
@@ -279178,7 +279227,7 @@ void Thread::setCurrentThreadAffinityMask (const uint32 affinityMask) | |||
bool File::copyInternal (const File& dest) const | |||
{ | |||
// TODO this is a brute-force copy, better to use an OS function if one exists.. | |||
// TODO | |||
FileInputStream in (*this); | |||
@@ -279202,7 +279251,7 @@ bool File::copyInternal (const File& dest) const | |||
void File::findFileSystemRoots (Array<File>& destArray) | |||
{ | |||
// TODO appropriate on android? | |||
// TODO | |||
destArray.add (File ("/")); | |||
} | |||
@@ -279224,7 +279273,7 @@ bool File::isOnRemovableDrive() const | |||
bool File::isHidden() const | |||
{ | |||
// TODO is this appropriate for android? | |||
// TODO | |||
return getFileName().startsWithChar ('.'); | |||
} | |||
@@ -279248,7 +279297,7 @@ namespace | |||
const File File::getLinkedTarget() const | |||
{ | |||
// TODO - same as linux? | |||
// TODO | |||
return juce_readlink (getFullPathName().toUTF8(), *this); | |||
} | |||
@@ -279257,7 +279306,7 @@ const char* juce_Argv0 = 0; // referenced from juce_Application.cpp | |||
const File File::getSpecialLocation (const SpecialLocationType type) | |||
{ | |||
// TODO this stuff is all copied from linux, needs sanity-checking for android | |||
// TODO | |||
switch (type) | |||
{ | |||
@@ -279340,8 +279389,6 @@ bool File::moveToTrash() const | |||
return false; | |||
} | |||
// TODO If the normal posix directory functions work, the following stuff should all be fine... | |||
class DirectoryIterator::NativeIterator::Pimpl | |||
{ | |||
public: | |||
@@ -279630,7 +279677,7 @@ void PlatformUtilities::beep() | |||
void Logger::outputDebugString (const String& text) | |||
{ | |||
// TODO is this ok..? | |||
// TODO | |||
std::cerr << text << std::endl; | |||
} | |||
@@ -279655,7 +279702,7 @@ bool SystemStats::isOperatingSystem64Bit() | |||
namespace LinuxStatsHelpers | |||
{ | |||
// TODO would this work? If not, the CPU info functions aren't of huge importance.. | |||
// TODO | |||
const String getCpuInfo (const char* const key) | |||
{ | |||
StringArray lines; | |||
@@ -279693,7 +279740,7 @@ int SystemStats::getMemorySizeInMegabytes() | |||
int SystemStats::getPageSize() | |||
{ | |||
// TODO if this doesn't work, just return 0, it's not important | |||
// TODO | |||
return sysconf (_SC_PAGESIZE); | |||
} | |||
@@ -279720,15 +279767,14 @@ const String SystemStats::getFullUserName() | |||
void SystemStats::initialiseStats() | |||
{ | |||
// TODO these flags should be set, but if we're only running on ARM they can all just be false | |||
// TODO | |||
const String flags (LinuxStatsHelpers::getCpuInfo ("flags")); | |||
cpuFlags.hasMMX = flags.contains ("mmx"); | |||
cpuFlags.hasSSE = flags.contains ("sse"); | |||
cpuFlags.hasSSE2 = flags.contains ("sse2"); | |||
cpuFlags.has3DNow = flags.contains ("3dnow"); | |||
// TODO this should probably be set to the number of cores if possible | |||
// TODO | |||
cpuFlags.numCpus = LinuxStatsHelpers::getCpuInfo ("processor").getIntValue() + 1; | |||
} | |||
@@ -279736,8 +279782,7 @@ void PlatformUtilities::fpuReset() {} | |||
uint32 juce_millisecondsSinceStartup() throw() | |||
{ | |||
// TODO must return a monotonically rising clock with decent accuracy | |||
// TODO | |||
timespec t; | |||
clock_gettime (CLOCK_MONOTONIC, &t); | |||
@@ -279786,14 +279831,10 @@ bool Time::setSystemTimeToThisTime() const | |||
live in juce_posix_SharedCode.h! | |||
*/ | |||
// TODO all the main thread code lives inside juce_posix_SharedCode.h, so if there's | |||
// anything in there that doesn't work with android, it'd need to be #ifdef'ed out in that file and | |||
// done in this file instead.. | |||
// sets the process to 0=low priority, 1=normal, 2=high, 3=realtime | |||
void Process::setPriority (ProcessPriority prior) | |||
{ | |||
// TODO this might work, but if not, it might need tweaking | |||
// TODO | |||
struct sched_param param; | |||
int policy, maxp, minp; | |||
@@ -279822,7 +279863,7 @@ void Process::setPriority (ProcessPriority prior) | |||
void Process::terminate() | |||
{ | |||
// TODO correct way to kill the process? | |||
// TODO | |||
exit (0); | |||
} | |||
@@ -279850,8 +279891,7 @@ void Process::lowerPrivilege() {} | |||
void MACAddress::findAllAddresses (Array<MACAddress>& result) | |||
{ | |||
// TODO not a big priority to do this | |||
// TODO | |||
} | |||
bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAddress, | |||
@@ -279859,13 +279899,11 @@ bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAdd | |||
const String& bodyText, | |||
const StringArray& filesToAttach) | |||
{ | |||
// TODO might be nice, but low priority | |||
// TODO | |||
return false; | |||
} | |||
// TODO This class needs to act as a HTTP or FTP stream | |||
class WebInputStream : public InputStream | |||
{ | |||
public: | |||
@@ -279874,7 +279912,7 @@ public: | |||
URL::OpenStreamProgressCallback* progressCallback, void* progressCallbackContext, | |||
const String& headers_, int timeOutMs_, StringPairArray* responseHeaders) | |||
{ | |||
// TODO try to open, set this flag if it fails | |||
// TODO | |||
openedOk = false; | |||
} | |||
@@ -279964,15 +280002,11 @@ bool juce_dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages | |||
bool juce_postMessageToSystemQueue (Message* message) | |||
{ | |||
// TODO Must use some kind of mechanism to post the given message to the system | |||
// queue, in such a way that juce_dispatchNextMessageOnSystemQueue will be able | |||
// to deliver it when it arrives | |||
// TODO | |||
return true; | |||
} | |||
// TODO this stuff will probably work as it is.. | |||
class AsyncFunctionCaller : public AsyncUpdater | |||
{ | |||
public: | |||
@@ -280013,7 +280047,6 @@ void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* func | |||
void MessageManager::broadcastMessage (const String&) | |||
{ | |||
// TODO no need to bother with this | |||
} | |||
#endif | |||
@@ -280029,26 +280062,20 @@ const StringArray Font::findAllTypefaceNames() | |||
{ | |||
StringArray results; | |||
// TODO find all the typefaces | |||
// TODO | |||
return results; | |||
} | |||
void Font::getPlatformDefaultFontNames (String& defaultSans, String& defaultSerif, String& defaultFixed, String& defaultFallback) | |||
{ | |||
// TODO these need to be set to some kind of sensible defaults.. | |||
// TODO | |||
defaultSans = "Verdana"; | |||
defaultSerif = "Times"; | |||
defaultFixed = "Lucida Console"; | |||
defaultFallback = "Tahoma"; | |||
} | |||
// TODO the nature of this class depends on the way it's going to be drawn - if the rendering | |||
// engine draws the glyphs itself (e.g. the CoreGraphicsContext), then this may only need | |||
// to hold some kind of platform-specific font handle, which the rendering engine can use. | |||
// If the glyphs are drawn as shapes (as done by the software renderer), then this will need | |||
// to make sure the getOutlineForGlyph method works. | |||
class AndroidTypeface : public Typeface | |||
{ | |||
public: | |||
@@ -280060,35 +280087,28 @@ public: | |||
float getAscent() const | |||
{ | |||
return 0; // TODO this is the font's ascent expressed as a proportion of its height, so should be 0 -> 1.0f | |||
return 0; // TODO | |||
} | |||
float getDescent() const | |||
{ | |||
return 0; // TODO this is font's decscent expressed as a proportion of its height, so should be 0 -> 1.0f | |||
return 0; // TODO | |||
} | |||
float getStringWidth (const String& text) | |||
{ | |||
// TODO this must lay out the given text and return the width of the text as a multiple of the font's height | |||
// TODO | |||
return 0; | |||
} | |||
void getGlyphPositions (const String& text, Array<int>& glyphs, Array<float>& xOffsets) | |||
{ | |||
// TODO this must lay out the given text, and return the set of glyph numbers used, and their | |||
// positions, in the arrays provided. | |||
// The glyph numbers are whatever is appropriate for use by the rendering engine, and the offsets | |||
// are expressed as distances along the X axis from the left of the first character, and are | |||
// measured in multiples of the font's height (like all other sizes in the typeface) | |||
// TODO | |||
} | |||
bool getOutlineForGlyph (int glyphNumber, Path& destPath) | |||
{ | |||
// TODO must return the path that can be used to draw the given glyph number (where the glyph | |||
// number will have been returned by the getGlyphPositions method). | |||
// The path must have its origin at the character's left-hand baseline, and must be scaled so that | |||
// the font's height maps onto a length of 1.0f in the path. | |||
// TODO | |||
return false; | |||
} | |||
@@ -280110,8 +280130,7 @@ const Typeface::Ptr Typeface::createSystemTypefaceFor (const Font& font) | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
// TODO - implement this lot! Probably need to make it wrap a Java2D graphics context. | |||
// TODO | |||
class AndroidLowLevelGraphicsContext : public LowLevelGraphicsContext | |||
{ | |||
public: | |||
@@ -280253,15 +280272,6 @@ private: | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
/* | |||
TODO The main windowing object | |||
As well as implementing all the methods below, the ComponentPeer base class has a whole bunch | |||
of callback methods like handlePaint, handleMouseEvent, handleKeyPress, handleFocusGain, etc which | |||
must be called by the subclass when the appropriate events occur. | |||
*/ | |||
class AndroidComponentPeer : public ComponentPeer | |||
{ | |||
public: | |||
@@ -280269,8 +280279,7 @@ public: | |||
AndroidComponentPeer (Component* const component, const int windowStyleFlags) | |||
: ComponentPeer (component, windowStyleFlags) | |||
{ | |||
// TODO create the window, obeying the appropriate style flags, which | |||
// are from the set of flags in ComponentPeer::StyleFlags | |||
// TODO | |||
} | |||
~AndroidComponentPeer() | |||
@@ -280279,7 +280288,7 @@ public: | |||
void* getNativeHandle() const | |||
{ | |||
return 0; // TODO gets returned by Component::getWindowHandle() so should be whatever makes sense | |||
return 0; // TODO | |||
} | |||
void setVisible (bool shouldBeVisible) | |||
@@ -280292,7 +280301,7 @@ public: | |||
void setPosition (int x, int y) | |||
{ | |||
// TODO relative to desktop top-left | |||
// TODO | |||
} | |||
void setSize (int w, int h) | |||
@@ -280301,36 +280310,36 @@ public: | |||
void setBounds (int x, int y, int w, int h, bool isNowFullScreen) | |||
{ | |||
// TODO relative to desktop top-left | |||
// TODO | |||
} | |||
const Rectangle<int> getBounds() const | |||
{ | |||
// TODO relative to desktop top-left | |||
// TODO | |||
return Rectangle<int>(); | |||
} | |||
const Point<int> getScreenPosition() const | |||
{ | |||
// TODO relative to desktop top-left | |||
// TODO | |||
return Point<int>(); | |||
} | |||
const Point<int> localToGlobal (const Point<int>& relativePosition) | |||
{ | |||
// TODO probably ok as it is.. | |||
// TODO | |||
return relativePosition + getScreenPosition(); | |||
} | |||
const Point<int> globalToLocal (const Point<int>& screenPosition) | |||
{ | |||
// TODO probably ok as it is.. | |||
// TODO | |||
return screenPosition - getScreenPosition(); | |||
} | |||
void setMinimised (bool shouldBeMinimised) | |||
{ | |||
// TODO probably irrelevant on android | |||
// TODO | |||
} | |||
bool isMinimised() const | |||
@@ -280350,12 +280359,12 @@ public: | |||
void setIcon (const Image& newIcon) | |||
{ | |||
// TODO probably irrelevant | |||
// TODO | |||
} | |||
bool contains (const Point<int>& position, bool trueIfInAChildWindow) const | |||
{ | |||
// TODO should check that other windows aren't in front of this point | |||
// TODO | |||
return isPositiveAndBelow (position.getX(), component->getWidth()) | |||
&& isPositiveAndBelow (position.getY(), component->getHeight()); | |||
@@ -280369,7 +280378,7 @@ public: | |||
bool setAlwaysOnTop (bool alwaysOnTop) | |||
{ | |||
// TODO probably not needed | |||
// TODO | |||
return false; | |||
} | |||
@@ -280396,23 +280405,22 @@ public: | |||
void textInputRequired (const Point<int>& position) | |||
{ | |||
// TODO called when the on-screen keyboard should appear - the position indicates roughly where | |||
// the text entry position is | |||
// TODO | |||
} | |||
void repaint (const Rectangle<int>& area) | |||
{ | |||
// TODO invalidate the given area (relative to this window's top left) | |||
// TODO | |||
} | |||
void performAnyPendingRepaintsNow() | |||
{ | |||
// TODO probably not needed | |||
// TODO | |||
} | |||
void setAlpha (float newAlpha) | |||
{ | |||
// TODO changes the window's overall transparency | |||
// TODO | |||
} | |||
private: | |||
@@ -280427,7 +280435,7 @@ ComponentPeer* Component::createNewPeer (int styleFlags, void*) | |||
bool Desktop::canUseSemiTransparentWindows() throw() | |||
{ | |||
return true; // TODO presumably this is true | |||
return true; // TODO | |||
} | |||
Desktop::DisplayOrientation Desktop::getCurrentOrientation() const | |||
@@ -280468,21 +280476,20 @@ void ModifierKeys::updateCurrentModifiers() throw() | |||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() throw() | |||
{ | |||
// TODO must return the state of mouse buttons, so if there are any | |||
// touches underway, this should set the left-button flag | |||
// TODO | |||
return ModifierKeys(); | |||
} | |||
bool Process::isForegroundProcess() | |||
{ | |||
return true; // TODO ? | |||
return true; // TODO | |||
} | |||
bool AlertWindow::showNativeDialogBox (const String& title, | |||
const String& bodyText, | |||
bool isOkCancel) | |||
{ | |||
// TODO just show a simple native box | |||
// TODO | |||
} | |||
@@ -280493,7 +280500,7 @@ Image::SharedImage* Image::SharedImage::createNativeImage (PixelFormat format, i | |||
void Desktop::setScreenSaverEnabled (const bool isEnabled) | |||
{ | |||
// TODO low priority, but might need doing at some point | |||
// TODO | |||
} | |||
bool Desktop::isScreenSaverEnabled() | |||
@@ -280507,7 +280514,7 @@ void juce_setKioskComponent (Component* kioskModeComponent, bool enableOrDisable | |||
void juce_updateMultiMonitorInfo (Array <Rectangle<int> >& monitorCoords, const bool clipToWorkArea) | |||
{ | |||
// TODO must set the correct screen size in this rectangle.. | |||
// TODO | |||
monitorCoords.add (Rectangle<int> (0, 0, 640, 480)); | |||
} | |||
@@ -280516,7 +280523,7 @@ const Image juce_createIconForFile (const File& file) | |||
{ | |||
Image image; | |||
// TODO returns a file's icon.. No need to implement yet. | |||
// TODO | |||
return image; | |||
} | |||
@@ -280624,7 +280631,7 @@ void FileChooser::showPlatformDialog (Array<File>& results, | |||
bool selectMultipleFiles, | |||
FilePreviewComponent* extraInfoComponent) | |||
{ | |||
// TODO probably not important to implement this right away.. | |||
// TODO | |||
} | |||
@@ -280660,8 +280667,6 @@ const String SystemClipboard::getTextFromClipboard() | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE && JUCE_WEB_BROWSER | |||
// TODO this stuff isn't a high priority, but is where an embedded web browser would be done.. | |||
WebBrowserComponent::WebBrowserComponent (const bool unloadPageWhenBrowserIsHidden_) | |||
: browser (0), | |||
blankPageShown (false), | |||
@@ -280759,8 +280764,7 @@ bool WebBrowserComponent::pageAboutToLoad (const String& url) | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE && JUCE_OPENGL | |||
// TODO - not urgent to implement the opengl stuff.. | |||
// TODO | |||
OpenGLContext* OpenGLComponent::createContext() | |||
{ | |||
return 0; | |||
@@ -280791,8 +280795,6 @@ void OpenGLPixelFormat::getAvailablePixelFormats (Component* component, | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
// TODO not a big priority, the stuff in here should act as stubs for the midi classes | |||
const StringArray MidiOutput::getDevices() | |||
{ | |||
StringArray devices; | |||
@@ -280891,7 +280893,7 @@ public: | |||
numInputChannels = 2; | |||
numOutputChannels = 2; | |||
// TODO initialise as needed.. | |||
// TODO | |||
} | |||
~AndroidAudioIODevice() | |||
@@ -280902,7 +280904,7 @@ public: | |||
const StringArray getOutputChannelNames() | |||
{ | |||
StringArray s; | |||
s.add ("Left"); // TODO if the device is anything other than stereo, this might need to be smarter | |||
s.add ("Left"); // TODO | |||
s.add ("Right"); | |||
return s; | |||
} | |||
@@ -280940,7 +280942,7 @@ public: | |||
activeInputChans.setRange (2, activeInputChans.getHighestBit(), false); | |||
numInputChannels = activeInputChans.countNumberOfSetBits(); | |||
// TODO actually open it here, setting lastError if it fails.. | |||
// TODO | |||
actualBufferSize = 0; // whatever is possible based on preferredBufferSize | |||
@@ -280955,18 +280957,18 @@ public: | |||
{ | |||
isRunning = false; | |||
// TODO close the device here | |||
// TODO | |||
} | |||
} | |||
int getOutputLatencyInSamples() | |||
{ | |||
return 0; // TODO should be found out if poss | |||
return 0; // TODO | |||
} | |||
int getInputLatencyInSamples() | |||
{ | |||
return 0; // TODO should be found out if poss | |||
return 0; // TODO | |||
} | |||
bool isOpen() { return isRunning; } | |||
@@ -280978,7 +280980,7 @@ public: | |||
const String getLastError() { return lastError; } | |||
bool isPlaying() { return isRunning && callback != 0; } | |||
// TODO the start/stop methods are probably ok to leave as they are... | |||
// TODO | |||
void start (AudioIODeviceCallback* newCallback) | |||
{ | |||
@@ -281023,7 +281025,7 @@ private: | |||
JUCE_DECLARE_NON_COPYABLE (AndroidAudioIODevice); | |||
}; | |||
// TODO assuming there's only one type of audio device, this class is pretty much ok as it is... | |||
// TODO | |||
class AndroidAudioIODeviceType : public AudioIODeviceType | |||
{ | |||
public: | |||
@@ -281084,7 +281086,7 @@ AudioIODeviceType* juce_createAudioIODeviceType_Android() | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE && JUCE_USE_CAMERA | |||
// TODO this is an internal data structure that can be used to hold all the platform-specific handles and stuff | |||
// TODO | |||
class AndroidCameraInternal | |||
{ | |||
public: | |||
@@ -281105,7 +281107,7 @@ CameraDevice::CameraDevice (const String& name_, int /*index*/) | |||
{ | |||
internal = new AndroidCameraInternal(); | |||
// TODO probably initialisation here | |||
// TODO | |||
} | |||
CameraDevice::~CameraDevice() | |||
@@ -281117,7 +281119,7 @@ CameraDevice::~CameraDevice() | |||
Component* CameraDevice::createViewerComponent() | |||
{ | |||
// TODO returns some kind of Component that can preview the camera | |||
// TODO | |||
return 0; | |||
} | |||
@@ -281157,7 +281159,7 @@ const StringArray CameraDevice::getAvailableDevices() | |||
{ | |||
StringArray devs; | |||
// TODO scan for devices.. | |||
// TODO | |||
return devs; | |||
} | |||
@@ -281166,7 +281168,7 @@ CameraDevice* CameraDevice::openDevice (int index, | |||
int minWidth, int minHeight, | |||
int maxWidth, int maxHeight) | |||
{ | |||
// TODO opens a device, returning a new CameraDevice object if this works. | |||
// TODO | |||
return 0; | |||
} | |||
@@ -0,0 +1,239 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
class AndroidAudioIODevice : public AudioIODevice | |||
{ | |||
public: | |||
//============================================================================== | |||
AndroidAudioIODevice (const String& deviceName) | |||
: AudioIODevice (deviceName, "Audio"), | |||
callback (0), | |||
sampleRate (0), | |||
numInputChannels (0), | |||
numOutputChannels (0), | |||
actualBufferSize (0), | |||
isRunning (false) | |||
{ | |||
numInputChannels = 2; | |||
numOutputChannels = 2; | |||
// TODO | |||
} | |||
~AndroidAudioIODevice() | |||
{ | |||
close(); | |||
} | |||
const StringArray getOutputChannelNames() | |||
{ | |||
StringArray s; | |||
s.add ("Left"); // TODO | |||
s.add ("Right"); | |||
return s; | |||
} | |||
const StringArray getInputChannelNames() | |||
{ | |||
StringArray s; | |||
s.add ("Left"); | |||
s.add ("Right"); | |||
return s; | |||
} | |||
int getNumSampleRates() { return 1;} | |||
double getSampleRate (int index) { return sampleRate; } | |||
int getNumBufferSizesAvailable() { return 1; } | |||
int getBufferSizeSamples (int index) { return getDefaultBufferSize(); } | |||
int getDefaultBufferSize() { return 1024; } | |||
const String open (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sampleRate, | |||
int bufferSize) | |||
{ | |||
close(); | |||
lastError = String::empty; | |||
int preferredBufferSize = (bufferSize <= 0) ? getDefaultBufferSize() : bufferSize; | |||
activeOutputChans = outputChannels; | |||
activeOutputChans.setRange (2, activeOutputChans.getHighestBit(), false); | |||
numOutputChannels = activeOutputChans.countNumberOfSetBits(); | |||
activeInputChans = inputChannels; | |||
activeInputChans.setRange (2, activeInputChans.getHighestBit(), false); | |||
numInputChannels = activeInputChans.countNumberOfSetBits(); | |||
// TODO | |||
actualBufferSize = 0; // whatever is possible based on preferredBufferSize | |||
isRunning = true; | |||
return lastError; | |||
} | |||
void close() | |||
{ | |||
if (isRunning) | |||
{ | |||
isRunning = false; | |||
// TODO | |||
} | |||
} | |||
int getOutputLatencyInSamples() | |||
{ | |||
return 0; // TODO | |||
} | |||
int getInputLatencyInSamples() | |||
{ | |||
return 0; // TODO | |||
} | |||
bool isOpen() { return isRunning; } | |||
int getCurrentBufferSizeSamples() { return actualBufferSize; } | |||
int getCurrentBitDepth() { return 16; } | |||
double getCurrentSampleRate() { return sampleRate; } | |||
const BigInteger getActiveOutputChannels() const { return activeOutputChans; } | |||
const BigInteger getActiveInputChannels() const { return activeInputChans; } | |||
const String getLastError() { return lastError; } | |||
bool isPlaying() { return isRunning && callback != 0; } | |||
// TODO | |||
void start (AudioIODeviceCallback* newCallback) | |||
{ | |||
if (isRunning && callback != newCallback) | |||
{ | |||
if (newCallback != 0) | |||
newCallback->audioDeviceAboutToStart (this); | |||
const ScopedLock sl (callbackLock); | |||
callback = newCallback; | |||
} | |||
} | |||
void stop() | |||
{ | |||
if (isRunning) | |||
{ | |||
AudioIODeviceCallback* lastCallback; | |||
{ | |||
const ScopedLock sl (callbackLock); | |||
lastCallback = callback; | |||
callback = 0; | |||
} | |||
if (lastCallback != 0) | |||
lastCallback->audioDeviceStopped(); | |||
} | |||
} | |||
private: | |||
//================================================================================================== | |||
CriticalSection callbackLock; | |||
AudioIODeviceCallback* callback; | |||
double sampleRate; | |||
int numInputChannels, numOutputChannels; | |||
int actualBufferSize; | |||
bool isRunning; | |||
String lastError; | |||
BigInteger activeOutputChans, activeInputChans; | |||
JUCE_DECLARE_NON_COPYABLE (AndroidAudioIODevice); | |||
}; | |||
//============================================================================== | |||
// TODO | |||
class AndroidAudioIODeviceType : public AudioIODeviceType | |||
{ | |||
public: | |||
AndroidAudioIODeviceType() | |||
: AudioIODeviceType ("Android Audio") | |||
{ | |||
} | |||
//============================================================================== | |||
void scanForDevices() | |||
{ | |||
} | |||
const StringArray getDeviceNames (bool wantInputNames) const | |||
{ | |||
StringArray s; | |||
s.add ("Android Audio"); | |||
return s; | |||
} | |||
int getDefaultDeviceIndex (bool forInput) const | |||
{ | |||
return 0; | |||
} | |||
int getIndexOfDevice (AudioIODevice* device, bool asInput) const | |||
{ | |||
return device != 0 ? 0 : -1; | |||
} | |||
bool hasSeparateInputsAndOutputs() const { return false; } | |||
AudioIODevice* createDevice (const String& outputDeviceName, | |||
const String& inputDeviceName) | |||
{ | |||
if (outputDeviceName.isNotEmpty() || inputDeviceName.isNotEmpty()) | |||
return new AndroidAudioIODevice (outputDeviceName.isNotEmpty() ? outputDeviceName | |||
: inputDeviceName); | |||
return 0; | |||
} | |||
private: | |||
//============================================================================== | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AndroidAudioIODeviceType); | |||
}; | |||
//============================================================================== | |||
AudioIODeviceType* juce_createAudioIODeviceType_Android() | |||
{ | |||
return new AndroidAudioIODeviceType(); | |||
} | |||
#endif |
@@ -0,0 +1,122 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE && JUCE_USE_CAMERA | |||
//============================================================================== | |||
// TODO | |||
class AndroidCameraInternal | |||
{ | |||
public: | |||
AndroidCameraInternal() | |||
{ | |||
} | |||
~AndroidCameraInternal() | |||
{ | |||
} | |||
private: | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AndroidCameraInternal); | |||
}; | |||
//============================================================================== | |||
CameraDevice::CameraDevice (const String& name_, int /*index*/) | |||
: name (name_) | |||
{ | |||
internal = new AndroidCameraInternal(); | |||
// TODO | |||
} | |||
CameraDevice::~CameraDevice() | |||
{ | |||
stopRecording(); | |||
delete static_cast <AndroidCameraInternal*> (internal); | |||
internal = 0; | |||
} | |||
Component* CameraDevice::createViewerComponent() | |||
{ | |||
// TODO | |||
return 0; | |||
} | |||
const String CameraDevice::getFileExtension() | |||
{ | |||
return ".m4a"; // TODO correct? | |||
} | |||
void CameraDevice::startRecordingToFile (const File& file, int quality) | |||
{ | |||
// TODO | |||
} | |||
const Time CameraDevice::getTimeOfFirstRecordedFrame() const | |||
{ | |||
// TODO | |||
return Time(); | |||
} | |||
void CameraDevice::stopRecording() | |||
{ | |||
// TODO | |||
} | |||
void CameraDevice::addListener (Listener* listenerToAdd) | |||
{ | |||
// TODO | |||
} | |||
void CameraDevice::removeListener (Listener* listenerToRemove) | |||
{ | |||
// TODO | |||
} | |||
const StringArray CameraDevice::getAvailableDevices() | |||
{ | |||
StringArray devs; | |||
// TODO | |||
return devs; | |||
} | |||
CameraDevice* CameraDevice::openDevice (int index, | |||
int minWidth, int minHeight, | |||
int maxWidth, int maxHeight) | |||
{ | |||
// TODO | |||
return 0; | |||
} | |||
#endif |
@@ -0,0 +1,49 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
void FileChooser::showPlatformDialog (Array<File>& results, | |||
const String& title, | |||
const File& currentFileOrDirectory, | |||
const String& filter, | |||
bool selectsDirectory, | |||
bool selectsFiles, | |||
bool isSaveDialogue, | |||
bool warnAboutOverwritingExistingFiles, | |||
bool selectMultipleFiles, | |||
FilePreviewComponent* extraInfoComponent) | |||
{ | |||
// TODO | |||
} | |||
#endif |
@@ -0,0 +1,290 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
bool File::copyInternal (const File& dest) const | |||
{ | |||
// TODO | |||
FileInputStream in (*this); | |||
if (dest.deleteFile()) | |||
{ | |||
{ | |||
FileOutputStream out (dest); | |||
if (out.failedToOpen()) | |||
return false; | |||
if (out.writeFromInputStream (in, -1) == getSize()) | |||
return true; | |||
} | |||
dest.deleteFile(); | |||
} | |||
return false; | |||
} | |||
void File::findFileSystemRoots (Array<File>& destArray) | |||
{ | |||
// TODO | |||
destArray.add (File ("/")); | |||
} | |||
//============================================================================== | |||
bool File::isOnCDRomDrive() const | |||
{ | |||
return false; | |||
} | |||
bool File::isOnHardDisk() const | |||
{ | |||
return true; | |||
} | |||
bool File::isOnRemovableDrive() const | |||
{ | |||
return false; | |||
} | |||
bool File::isHidden() const | |||
{ | |||
// TODO | |||
return getFileName().startsWithChar ('.'); | |||
} | |||
//============================================================================== | |||
namespace | |||
{ | |||
const File juce_readlink (const String& file, const File& defaultFile) | |||
{ | |||
const int size = 8192; | |||
HeapBlock<char> buffer; | |||
buffer.malloc (size + 4); | |||
const size_t numBytes = readlink (file.toUTF8(), buffer, size); | |||
if (numBytes > 0 && numBytes <= size) | |||
return File (file).getSiblingFile (String::fromUTF8 (buffer, (int) numBytes)); | |||
return defaultFile; | |||
} | |||
} | |||
const File File::getLinkedTarget() const | |||
{ | |||
// TODO | |||
return juce_readlink (getFullPathName().toUTF8(), *this); | |||
} | |||
//============================================================================== | |||
const char* juce_Argv0 = 0; // referenced from juce_Application.cpp | |||
const File File::getSpecialLocation (const SpecialLocationType type) | |||
{ | |||
// TODO | |||
switch (type) | |||
{ | |||
case userHomeDirectory: | |||
{ | |||
const char* homeDir = getenv ("HOME"); | |||
if (homeDir == 0) | |||
{ | |||
struct passwd* const pw = getpwuid (getuid()); | |||
if (pw != 0) | |||
homeDir = pw->pw_dir; | |||
} | |||
return File (String::fromUTF8 (homeDir)); | |||
} | |||
case userDocumentsDirectory: | |||
case userMusicDirectory: | |||
case userMoviesDirectory: | |||
case userApplicationDataDirectory: | |||
return File ("~"); | |||
case userDesktopDirectory: | |||
return File ("~/Desktop"); | |||
case commonApplicationDataDirectory: | |||
return File ("/var"); | |||
case globalApplicationsDirectory: | |||
return File ("/usr"); | |||
case tempDirectory: | |||
{ | |||
File tmp ("/var/tmp"); | |||
if (! tmp.isDirectory()) | |||
{ | |||
tmp = "/tmp"; | |||
if (! tmp.isDirectory()) | |||
tmp = File::getCurrentWorkingDirectory(); | |||
} | |||
return tmp; | |||
} | |||
case invokedExecutableFile: | |||
if (juce_Argv0 != 0) | |||
return File (String::fromUTF8 (juce_Argv0)); | |||
// deliberate fall-through... | |||
case currentExecutableFile: | |||
case currentApplicationFile: | |||
return juce_getExecutableFile(); | |||
case hostApplicationPath: | |||
return juce_readlink ("/proc/self/exe", juce_getExecutableFile()); | |||
default: | |||
jassertfalse; // unknown type? | |||
break; | |||
} | |||
return File::nonexistent; | |||
} | |||
//============================================================================== | |||
const String File::getVersion() const | |||
{ | |||
return String::empty; | |||
} | |||
//============================================================================== | |||
bool File::moveToTrash() const | |||
{ | |||
if (! exists()) | |||
return true; | |||
// TODO | |||
return false; | |||
} | |||
//============================================================================== | |||
class DirectoryIterator::NativeIterator::Pimpl | |||
{ | |||
public: | |||
Pimpl (const File& directory, const String& wildCard_) | |||
: parentDir (File::addTrailingSeparator (directory.getFullPathName())), | |||
wildCard (wildCard_), | |||
dir (opendir (directory.getFullPathName().toUTF8())) | |||
{ | |||
wildcardUTF8 = wildCard.toUTF8(); | |||
} | |||
~Pimpl() | |||
{ | |||
if (dir != 0) | |||
closedir (dir); | |||
} | |||
bool next (String& filenameFound, | |||
bool* const isDir, bool* const isHidden, int64* const fileSize, | |||
Time* const modTime, Time* const creationTime, bool* const isReadOnly) | |||
{ | |||
if (dir != 0) | |||
{ | |||
for (;;) | |||
{ | |||
struct dirent* const de = readdir (dir); | |||
if (de == 0) | |||
break; | |||
if (fnmatch (wildcardUTF8, de->d_name, FNM_CASEFOLD) == 0) | |||
{ | |||
filenameFound = String::fromUTF8 (de->d_name); | |||
updateStatInfoForFile (parentDir + filenameFound, isDir, fileSize, modTime, creationTime, isReadOnly); | |||
if (isHidden != 0) | |||
*isHidden = filenameFound.startsWithChar ('.'); | |||
return true; | |||
} | |||
} | |||
} | |||
return false; | |||
} | |||
private: | |||
String parentDir, wildCard; | |||
const char* wildcardUTF8; | |||
DIR* dir; | |||
JUCE_DECLARE_NON_COPYABLE (Pimpl); | |||
}; | |||
DirectoryIterator::NativeIterator::NativeIterator (const File& directory, const String& wildCard) | |||
: pimpl (new DirectoryIterator::NativeIterator::Pimpl (directory, wildCard)) | |||
{ | |||
} | |||
DirectoryIterator::NativeIterator::~NativeIterator() | |||
{ | |||
} | |||
bool DirectoryIterator::NativeIterator::next (String& filenameFound, | |||
bool* const isDir, bool* const isHidden, int64* const fileSize, | |||
Time* const modTime, Time* const creationTime, bool* const isReadOnly) | |||
{ | |||
return pimpl->next (filenameFound, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly); | |||
} | |||
//============================================================================== | |||
bool PlatformUtilities::openDocument (const String& fileName, const String& parameters) | |||
{ | |||
} | |||
void File::revealToUser() const | |||
{ | |||
} | |||
#endif |
@@ -0,0 +1,98 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
const StringArray Font::findAllTypefaceNames() | |||
{ | |||
StringArray results; | |||
// TODO | |||
return results; | |||
} | |||
void Font::getPlatformDefaultFontNames (String& defaultSans, String& defaultSerif, String& defaultFixed, String& defaultFallback) | |||
{ | |||
// TODO | |||
defaultSans = "Verdana"; | |||
defaultSerif = "Times"; | |||
defaultFixed = "Lucida Console"; | |||
defaultFallback = "Tahoma"; | |||
} | |||
//============================================================================== | |||
class AndroidTypeface : public Typeface | |||
{ | |||
public: | |||
AndroidTypeface (const Font& font) | |||
: Typeface (font.getTypefaceName()) | |||
{ | |||
// TODO | |||
} | |||
float getAscent() const | |||
{ | |||
return 0; // TODO | |||
} | |||
float getDescent() const | |||
{ | |||
return 0; // TODO | |||
} | |||
float getStringWidth (const String& text) | |||
{ | |||
// TODO | |||
return 0; | |||
} | |||
void getGlyphPositions (const String& text, Array<int>& glyphs, Array<float>& xOffsets) | |||
{ | |||
// TODO | |||
} | |||
bool getOutlineForGlyph (int glyphNumber, Path& destPath) | |||
{ | |||
// TODO | |||
return false; | |||
} | |||
private: | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AndroidTypeface); | |||
}; | |||
//============================================================================== | |||
const Typeface::Ptr Typeface::createSystemTypefaceFor (const Font& font) | |||
{ | |||
return new AndroidTypeface (font); | |||
} | |||
#endif |
@@ -0,0 +1,169 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
// TODO | |||
class AndroidLowLevelGraphicsContext : public LowLevelGraphicsContext | |||
{ | |||
public: | |||
AndroidLowLevelGraphicsContext() | |||
{ | |||
} | |||
~AndroidLowLevelGraphicsContext() | |||
{ | |||
} | |||
bool isVectorDevice() const { return false; } | |||
//============================================================================== | |||
void setOrigin (int x, int y) | |||
{ | |||
} | |||
void addTransform (const AffineTransform& transform) | |||
{ | |||
} | |||
float getScaleFactor() | |||
{ | |||
return 1.0f; | |||
} | |||
bool clipToRectangle (const Rectangle<int>& r) | |||
{ | |||
return false; | |||
} | |||
bool clipToRectangleList (const RectangleList& clipRegion) | |||
{ | |||
return false; | |||
} | |||
void excludeClipRectangle (const Rectangle<int>& r) | |||
{ | |||
} | |||
void clipToPath (const Path& path, const AffineTransform& transform) | |||
{ | |||
} | |||
void clipToImageAlpha (const Image& sourceImage, const AffineTransform& transform) | |||
{ | |||
} | |||
bool clipRegionIntersects (const Rectangle<int>& r) | |||
{ | |||
return true; | |||
} | |||
const Rectangle<int> getClipBounds() const | |||
{ | |||
return Rectangle<int>(); | |||
} | |||
bool isClipEmpty() const | |||
{ | |||
return false; | |||
} | |||
void saveState() | |||
{ | |||
} | |||
void restoreState() | |||
{ | |||
} | |||
void beginTransparencyLayer (float opacity) | |||
{ | |||
} | |||
void endTransparencyLayer() | |||
{ | |||
} | |||
//============================================================================== | |||
void setFill (const FillType& fillType) | |||
{ | |||
} | |||
void setOpacity (float newOpacity) | |||
{ | |||
} | |||
void setInterpolationQuality (Graphics::ResamplingQuality quality) | |||
{ | |||
} | |||
//============================================================================== | |||
void fillRect (const Rectangle<int>& r, bool replaceExistingContents) | |||
{ | |||
} | |||
void fillPath (const Path& path, const AffineTransform& transform) | |||
{ | |||
} | |||
void drawImage (const Image& sourceImage, const AffineTransform& transform, bool fillEntireClipAsTiles) | |||
{ | |||
} | |||
void drawLine (const Line <float>& line) | |||
{ | |||
} | |||
void drawVerticalLine (int x, float top, float bottom) | |||
{ | |||
} | |||
void drawHorizontalLine (int y, float left, float right) | |||
{ | |||
} | |||
void setFont (const Font& newFont) | |||
{ | |||
} | |||
const Font getFont() | |||
{ | |||
return Font(); | |||
} | |||
void drawGlyph (int glyphNumber, const AffineTransform& transform) | |||
{ | |||
} | |||
private: | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AndroidLowLevelGraphicsContext); | |||
}; | |||
#endif |
@@ -0,0 +1,114 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
void MessageManager::doPlatformSpecificInitialisation() | |||
{ | |||
} | |||
void MessageManager::doPlatformSpecificShutdown() | |||
{ | |||
} | |||
//============================================================================== | |||
bool juce_dispatchNextMessageOnSystemQueue (const bool returnIfNoPendingMessages) | |||
{ | |||
// TODO | |||
/* | |||
The idea here is that this will check the system message queue, pull off a | |||
message if there is one, deliver it, and return true if a message was delivered. | |||
If the queue's empty, return false. | |||
If the message is one of our special ones (i.e. a Message object being delivered, | |||
this must call MessageManager::getInstance()->deliverMessage() to deliver it | |||
*/ | |||
return true; | |||
} | |||
//============================================================================== | |||
bool juce_postMessageToSystemQueue (Message* message) | |||
{ | |||
// TODO | |||
return true; | |||
} | |||
//============================================================================== | |||
class AsyncFunctionCaller : public AsyncUpdater | |||
{ | |||
public: | |||
static void* call (MessageCallbackFunction* func_, void* parameter_) | |||
{ | |||
if (MessageManager::getInstance()->isThisTheMessageThread()) | |||
return func_ (parameter_); | |||
AsyncFunctionCaller caller (func_, parameter_); | |||
caller.triggerAsyncUpdate(); | |||
caller.finished.wait(); | |||
return caller.result; | |||
} | |||
void handleAsyncUpdate() | |||
{ | |||
result = (*func) (parameter); | |||
finished.signal(); | |||
} | |||
private: | |||
WaitableEvent finished; | |||
MessageCallbackFunction* func; | |||
void* parameter; | |||
void* volatile result; | |||
AsyncFunctionCaller (MessageCallbackFunction* func_, void* parameter_) | |||
: result (0), func (func_), parameter (parameter_) | |||
{} | |||
JUCE_DECLARE_NON_COPYABLE (AsyncFunctionCaller); | |||
}; | |||
void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* func, void* parameter) | |||
{ | |||
return AsyncFunctionCaller::call (func, parameter); | |||
} | |||
//============================================================================== | |||
void MessageManager::broadcastMessage (const String&) | |||
{ | |||
} | |||
#endif |
@@ -0,0 +1,107 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
const StringArray MidiOutput::getDevices() | |||
{ | |||
StringArray devices; | |||
return devices; | |||
} | |||
int MidiOutput::getDefaultDeviceIndex() | |||
{ | |||
return 0; | |||
} | |||
MidiOutput* MidiOutput::openDevice (int index) | |||
{ | |||
return 0; | |||
} | |||
MidiOutput::~MidiOutput() | |||
{ | |||
} | |||
void MidiOutput::reset() | |||
{ | |||
} | |||
bool MidiOutput::getVolume (float&, float&) | |||
{ | |||
return false; | |||
} | |||
void MidiOutput::setVolume (float, float) | |||
{ | |||
} | |||
void MidiOutput::sendMessageNow (const MidiMessage&) | |||
{ | |||
} | |||
//============================================================================== | |||
MidiInput::MidiInput (const String& name_) | |||
: name (name_), | |||
internal (0) | |||
{ | |||
} | |||
MidiInput::~MidiInput() | |||
{ | |||
} | |||
void MidiInput::start() | |||
{ | |||
} | |||
void MidiInput::stop() | |||
{ | |||
} | |||
int MidiInput::getDefaultDeviceIndex() | |||
{ | |||
return 0; | |||
} | |||
const StringArray MidiInput::getDevices() | |||
{ | |||
StringArray devs; | |||
return devs; | |||
} | |||
MidiInput* MidiInput::openDevice (int index, MidiInputCallback* callback) | |||
{ | |||
return 0; | |||
} | |||
#endif |
@@ -0,0 +1,47 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
void SystemClipboard::copyTextToClipboard (const String& text) | |||
{ | |||
// TODO | |||
} | |||
const String SystemClipboard::getTextFromClipboard() | |||
{ | |||
String result; | |||
// TODO | |||
return result; | |||
} | |||
#endif |
@@ -0,0 +1,117 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
/* | |||
This file wraps together all the android-specific code, so that | |||
we can include all the native headers just once, and compile all our | |||
platform-specific stuff in one big lump, keeping it out of the way of | |||
the rest of the codebase. | |||
*/ | |||
#include "../../core/juce_TargetPlatform.h" | |||
#if JUCE_ANDROID | |||
#undef JUCE_BUILD_NATIVE | |||
#define JUCE_BUILD_NATIVE 1 | |||
#include "juce_android_NativeIncludes.h" | |||
#include "../../core/juce_StandardHeader.h" | |||
BEGIN_JUCE_NAMESPACE | |||
//============================================================================== | |||
#include "../../core/juce_Singleton.h" | |||
#include "../../maths/juce_Random.h" | |||
#include "../../core/juce_SystemStats.h" | |||
#include "../../threads/juce_Process.h" | |||
#include "../../threads/juce_Thread.h" | |||
#include "../../threads/juce_InterProcessLock.h" | |||
#include "../../io/files/juce_FileInputStream.h" | |||
#include "../../io/files/juce_FileOutputStream.h" | |||
#include "../../io/files/juce_NamedPipe.h" | |||
#include "../../io/files/juce_DirectoryIterator.h" | |||
#include "../../io/network/juce_URL.h" | |||
#include "../../io/network/juce_MACAddress.h" | |||
#include "../../core/juce_PlatformUtilities.h" | |||
#include "../../text/juce_LocalisedStrings.h" | |||
#include "../../utilities/juce_DeletedAtShutdown.h" | |||
#include "../../application/juce_Application.h" | |||
#include "../../utilities/juce_SystemClipboard.h" | |||
#include "../../events/juce_MessageManager.h" | |||
#include "../../gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h" | |||
#include "../../gui/graphics/imaging/juce_ImageFileFormat.h" | |||
#include "../../gui/graphics/imaging/juce_CameraDevice.h" | |||
#include "../../gui/components/windows/juce_ComponentPeer.h" | |||
#include "../../gui/components/windows/juce_AlertWindow.h" | |||
#include "../../gui/components/juce_Desktop.h" | |||
#include "../../gui/components/menus/juce_MenuBarModel.h" | |||
#include "../../gui/components/special/juce_OpenGLComponent.h" | |||
#include "../../gui/components/special/juce_QuickTimeMovieComponent.h" | |||
#include "../../gui/components/mouse/juce_DragAndDropContainer.h" | |||
#include "../../gui/components/mouse/juce_MouseInputSource.h" | |||
#include "../../gui/components/keyboard/juce_KeyPressMappingSet.h" | |||
#include "../../gui/components/layout/juce_ComponentMovementWatcher.h" | |||
#include "../../gui/components/special/juce_ActiveXControlComponent.h" | |||
#include "../../gui/components/special/juce_WebBrowserComponent.h" | |||
#include "../../gui/components/special/juce_DropShadower.h" | |||
#include "../../gui/components/special/juce_SystemTrayIconComponent.h" | |||
#include "../../gui/components/filebrowser/juce_FileChooser.h" | |||
#include "../../gui/components/lookandfeel/juce_LookAndFeel.h" | |||
#include "../../audio/audio_file_formats/juce_AudioCDBurner.h" | |||
#include "../../audio/audio_file_formats/juce_AudioCDReader.h" | |||
#include "../../audio/audio_sources/juce_AudioSource.h" | |||
#include "../../audio/dsp/juce_AudioDataConverters.h" | |||
#include "../../audio/devices/juce_AudioIODeviceType.h" | |||
#include "../../audio/devices/juce_MidiOutput.h" | |||
#include "../../audio/devices/juce_MidiInput.h" | |||
#include "../../containers/juce_ScopedValueSetter.h" | |||
#include "../common/juce_MidiDataConcatenator.h" | |||
//============================================================================== | |||
#define JUCE_INCLUDED_FILE 1 | |||
// Now include the actual code files.. | |||
#include "../common/juce_posix_SharedCode.h" | |||
#include "juce_android_Files.cpp" | |||
#include "../common/juce_posix_NamedPipe.cpp" | |||
#include "juce_android_SystemStats.cpp" | |||
#include "juce_android_Threads.cpp" | |||
#include "juce_android_Network.cpp" | |||
#include "juce_android_Messaging.cpp" | |||
#include "juce_android_Fonts.cpp" | |||
#include "juce_android_GraphicsContext.cpp" | |||
#include "juce_android_Windowing.cpp" | |||
#include "juce_android_FileChooser.cpp" | |||
#include "juce_android_Misc.cpp" | |||
#include "juce_android_WebBrowserComponent.cpp" | |||
#include "juce_android_OpenGLComponent.cpp" | |||
#include "juce_android_Midi.cpp" | |||
#include "juce_android_Audio.cpp" | |||
#include "juce_android_CameraDevice.cpp" | |||
END_JUCE_NAMESPACE | |||
#endif |
@@ -0,0 +1,54 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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_ANDROID_NATIVEINCLUDES_JUCEHEADER__ | |||
#define __JUCE_ANDROID_NATIVEINCLUDES_JUCEHEADER__ | |||
#include "../../core/juce_TargetPlatform.h" | |||
#include "../../../juce_Config.h" | |||
#include <pthread.h> | |||
#include <sched.h> | |||
#include <sys/time.h> | |||
#include <utime.h> | |||
#include <errno.h> | |||
#include <fcntl.h> | |||
#include <dlfcn.h> | |||
#include <sys/stat.h> | |||
#include <sys/statfs.h> | |||
#include <sys/ptrace.h> | |||
#include <sys/sysinfo.h> | |||
#include <pwd.h> | |||
#include <dirent.h> | |||
#include <fnmatch.h> | |||
#if JUCE_OPENGL | |||
#include <GLES/gl.h> | |||
#endif | |||
#endif // __JUCE_ANDROID_NATIVEINCLUDES_JUCEHEADER__ |
@@ -0,0 +1,112 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
void MACAddress::findAllAddresses (Array<MACAddress>& result) | |||
{ | |||
// TODO | |||
} | |||
bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAddress, | |||
const String& emailSubject, | |||
const String& bodyText, | |||
const StringArray& filesToAttach) | |||
{ | |||
// TODO | |||
return false; | |||
} | |||
//============================================================================== | |||
class WebInputStream : public InputStream | |||
{ | |||
public: | |||
//============================================================================== | |||
WebInputStream (const String& address_, bool isPost_, const MemoryBlock& postData_, | |||
URL::OpenStreamProgressCallback* progressCallback, void* progressCallbackContext, | |||
const String& headers_, int timeOutMs_, StringPairArray* responseHeaders) | |||
{ | |||
// TODO | |||
openedOk = false; | |||
} | |||
~WebInputStream() | |||
{ | |||
} | |||
//============================================================================== | |||
bool isExhausted() | |||
{ | |||
return true; // TODO | |||
} | |||
int64 getPosition() | |||
{ | |||
return 0; // TODO | |||
} | |||
int64 getTotalLength() | |||
{ | |||
return -1; // TODO | |||
} | |||
int read (void* buffer, int bytesToRead) | |||
{ | |||
// TODO | |||
return 0; | |||
} | |||
bool setPosition (int64 wantedPos) | |||
{ | |||
// TODO | |||
return false; | |||
} | |||
//============================================================================== | |||
bool openedOk; | |||
private: | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WebInputStream); | |||
}; | |||
InputStream* URL::createNativeStream (const String& address, bool isPost, const MemoryBlock& postData, | |||
OpenStreamProgressCallback* progressCallback, void* progressCallbackContext, | |||
const String& headers, const int timeOutMs, StringPairArray* responseHeaders) | |||
{ | |||
ScopedPointer <WebInputStream> wi (new WebInputStream (address, isPost, postData, | |||
progressCallback, progressCallbackContext, | |||
headers, timeOutMs, responseHeaders)); | |||
return wi->openedOk ? wi.release() : 0; | |||
} | |||
#endif |
@@ -0,0 +1,55 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE && JUCE_OPENGL | |||
//============================================================================== | |||
// TODO | |||
OpenGLContext* OpenGLComponent::createContext() | |||
{ | |||
return 0; | |||
} | |||
void* OpenGLComponent::getNativeWindowHandle() const | |||
{ | |||
return 0; | |||
} | |||
void juce_glViewport (const int w, const int h) | |||
{ | |||
// glViewport (0, 0, w, h); | |||
} | |||
void OpenGLPixelFormat::getAvailablePixelFormats (Component* component, | |||
OwnedArray <OpenGLPixelFormat>& results) | |||
{ | |||
} | |||
#endif |
@@ -0,0 +1,185 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
void PlatformUtilities::beep() | |||
{ | |||
// TODO | |||
} | |||
//============================================================================== | |||
void Logger::outputDebugString (const String& text) | |||
{ | |||
// TODO | |||
std::cerr << text << std::endl; | |||
} | |||
//============================================================================== | |||
SystemStats::OperatingSystemType SystemStats::getOperatingSystemType() | |||
{ | |||
return Android; | |||
} | |||
const String SystemStats::getOperatingSystemName() | |||
{ | |||
return "Android"; | |||
} | |||
bool SystemStats::isOperatingSystem64Bit() | |||
{ | |||
#if JUCE_64BIT | |||
return true; | |||
#else | |||
return false; | |||
#endif | |||
} | |||
//============================================================================== | |||
namespace LinuxStatsHelpers | |||
{ | |||
// TODO | |||
const String getCpuInfo (const char* const key) | |||
{ | |||
StringArray lines; | |||
lines.addLines (File ("/proc/cpuinfo").loadFileAsString()); | |||
for (int i = lines.size(); --i >= 0;) // (NB - it's important that this runs in reverse order) | |||
if (lines[i].startsWithIgnoreCase (key)) | |||
return lines[i].fromFirstOccurrenceOf (":", false, false).trim(); | |||
return String::empty; | |||
} | |||
} | |||
const String SystemStats::getCpuVendor() | |||
{ | |||
return LinuxStatsHelpers::getCpuInfo ("vendor_id"); | |||
} | |||
int SystemStats::getCpuSpeedInMegaherz() | |||
{ | |||
return roundToInt (LinuxStatsHelpers::getCpuInfo ("cpu MHz").getFloatValue()); | |||
} | |||
int SystemStats::getMemorySizeInMegabytes() | |||
{ | |||
// TODO | |||
struct sysinfo sysi; | |||
if (sysinfo (&sysi) == 0) | |||
return (sysi.totalram * sysi.mem_unit / (1024 * 1024)); | |||
return 0; | |||
} | |||
int SystemStats::getPageSize() | |||
{ | |||
// TODO | |||
return sysconf (_SC_PAGESIZE); | |||
} | |||
//============================================================================== | |||
const String SystemStats::getLogonName() | |||
{ | |||
// TODO | |||
const char* user = getenv ("USER"); | |||
if (user == 0) | |||
{ | |||
struct passwd* const pw = getpwuid (getuid()); | |||
if (pw != 0) | |||
user = pw->pw_name; | |||
} | |||
return String::fromUTF8 (user); | |||
} | |||
const String SystemStats::getFullUserName() | |||
{ | |||
return getLogonName(); | |||
} | |||
//============================================================================== | |||
void SystemStats::initialiseStats() | |||
{ | |||
// TODO | |||
const String flags (LinuxStatsHelpers::getCpuInfo ("flags")); | |||
cpuFlags.hasMMX = flags.contains ("mmx"); | |||
cpuFlags.hasSSE = flags.contains ("sse"); | |||
cpuFlags.hasSSE2 = flags.contains ("sse2"); | |||
cpuFlags.has3DNow = flags.contains ("3dnow"); | |||
// TODO | |||
cpuFlags.numCpus = LinuxStatsHelpers::getCpuInfo ("processor").getIntValue() + 1; | |||
} | |||
void PlatformUtilities::fpuReset() {} | |||
//============================================================================== | |||
uint32 juce_millisecondsSinceStartup() throw() | |||
{ | |||
// TODO | |||
timespec t; | |||
clock_gettime (CLOCK_MONOTONIC, &t); | |||
return t.tv_sec * 1000 + t.tv_nsec / 1000000; | |||
} | |||
int64 Time::getHighResolutionTicks() throw() | |||
{ | |||
// TODO | |||
timespec t; | |||
clock_gettime (CLOCK_MONOTONIC, &t); | |||
return (t.tv_sec * (int64) 1000000) + (t.tv_nsec / (int64) 1000); | |||
} | |||
int64 Time::getHighResolutionTicksPerSecond() throw() | |||
{ | |||
// TODO | |||
return 1000000; // (microseconds) | |||
} | |||
double Time::getMillisecondCounterHiRes() throw() | |||
{ | |||
return getHighResolutionTicks() * 0.001; | |||
} | |||
bool Time::setSystemTimeToThisTime() const | |||
{ | |||
jassertfalse; | |||
return false; | |||
} | |||
#endif |
@@ -0,0 +1,86 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
/* | |||
Note that a lot of methods that you'd expect to find in this file actually | |||
live in juce_posix_SharedCode.h! | |||
*/ | |||
//============================================================================== | |||
// sets the process to 0=low priority, 1=normal, 2=high, 3=realtime | |||
void Process::setPriority (ProcessPriority prior) | |||
{ | |||
// TODO | |||
struct sched_param param; | |||
int policy, maxp, minp; | |||
const int p = (int) prior; | |||
if (p <= 1) | |||
policy = SCHED_OTHER; | |||
else | |||
policy = SCHED_RR; | |||
minp = sched_get_priority_min (policy); | |||
maxp = sched_get_priority_max (policy); | |||
if (p < 2) | |||
param.sched_priority = 0; | |||
else if (p == 2 ) | |||
// Set to middle of lower realtime priority range | |||
param.sched_priority = minp + (maxp - minp) / 4; | |||
else | |||
// Set to middle of higher realtime priority range | |||
param.sched_priority = minp + (3 * (maxp - minp) / 4); | |||
pthread_setschedparam (pthread_self(), policy, ¶m); | |||
} | |||
void Process::terminate() | |||
{ | |||
// TODO | |||
exit (0); | |||
} | |||
JUCE_API bool JUCE_CALLTYPE juce_isRunningUnderDebugger() | |||
{ | |||
return false; | |||
} | |||
JUCE_API bool JUCE_CALLTYPE Process::isRunningUnderDebugger() | |||
{ | |||
return juce_isRunningUnderDebugger(); | |||
} | |||
void Process::raisePrivilege() {} | |||
void Process::lowerPrivilege() {} | |||
#endif |
@@ -0,0 +1,123 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_android_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE && JUCE_WEB_BROWSER | |||
//============================================================================== | |||
WebBrowserComponent::WebBrowserComponent (const bool unloadPageWhenBrowserIsHidden_) | |||
: browser (0), | |||
blankPageShown (false), | |||
unloadPageWhenBrowserIsHidden (unloadPageWhenBrowserIsHidden_) | |||
{ | |||
setOpaque (true); | |||
} | |||
WebBrowserComponent::~WebBrowserComponent() | |||
{ | |||
} | |||
//============================================================================== | |||
void WebBrowserComponent::goToURL (const String& url, | |||
const StringArray* headers, | |||
const MemoryBlock* postData) | |||
{ | |||
lastURL = url; | |||
lastHeaders.clear(); | |||
if (headers != 0) | |||
lastHeaders = *headers; | |||
lastPostData.setSize (0); | |||
if (postData != 0) | |||
lastPostData = *postData; | |||
blankPageShown = false; | |||
} | |||
void WebBrowserComponent::stop() | |||
{ | |||
} | |||
void WebBrowserComponent::goBack() | |||
{ | |||
lastURL = String::empty; | |||
blankPageShown = false; | |||
} | |||
void WebBrowserComponent::goForward() | |||
{ | |||
lastURL = String::empty; | |||
} | |||
void WebBrowserComponent::refresh() | |||
{ | |||
} | |||
//============================================================================== | |||
void WebBrowserComponent::paint (Graphics& g) | |||
{ | |||
g.fillAll (Colours::white); | |||
} | |||
void WebBrowserComponent::checkWindowAssociation() | |||
{ | |||
} | |||
void WebBrowserComponent::reloadLastURL() | |||
{ | |||
if (lastURL.isNotEmpty()) | |||
{ | |||
goToURL (lastURL, &lastHeaders, &lastPostData); | |||
lastURL = String::empty; | |||
} | |||
} | |||
void WebBrowserComponent::parentHierarchyChanged() | |||
{ | |||
checkWindowAssociation(); | |||
} | |||
void WebBrowserComponent::resized() | |||
{ | |||
} | |||
void WebBrowserComponent::visibilityChanged() | |||
{ | |||
checkWindowAssociation(); | |||
} | |||
bool WebBrowserComponent::pageAboutToLoad (const String& url) | |||
{ | |||
return true; | |||
} | |||
#endif |
@@ -0,0 +1,389 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
Copyright 2004-10 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. | |||
============================================================================== | |||
*/ | |||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being | |||
// compiled on its own). | |||
#if JUCE_INCLUDED_FILE | |||
//============================================================================== | |||
class AndroidComponentPeer : public ComponentPeer | |||
{ | |||
public: | |||
//============================================================================== | |||
AndroidComponentPeer (Component* const component, const int windowStyleFlags) | |||
: ComponentPeer (component, windowStyleFlags) | |||
{ | |||
// TODO | |||
} | |||
~AndroidComponentPeer() | |||
{ | |||
} | |||
void* getNativeHandle() const | |||
{ | |||
return 0; // TODO | |||
} | |||
void setVisible (bool shouldBeVisible) | |||
{ | |||
} | |||
void setTitle (const String& title) | |||
{ | |||
} | |||
void setPosition (int x, int y) | |||
{ | |||
// TODO | |||
} | |||
void setSize (int w, int h) | |||
{ | |||
} | |||
void setBounds (int x, int y, int w, int h, bool isNowFullScreen) | |||
{ | |||
// TODO | |||
} | |||
const Rectangle<int> getBounds() const | |||
{ | |||
// TODO | |||
return Rectangle<int>(); | |||
} | |||
const Point<int> getScreenPosition() const | |||
{ | |||
// TODO | |||
return Point<int>(); | |||
} | |||
const Point<int> localToGlobal (const Point<int>& relativePosition) | |||
{ | |||
// TODO | |||
return relativePosition + getScreenPosition(); | |||
} | |||
const Point<int> globalToLocal (const Point<int>& screenPosition) | |||
{ | |||
// TODO | |||
return screenPosition - getScreenPosition(); | |||
} | |||
void setMinimised (bool shouldBeMinimised) | |||
{ | |||
// TODO | |||
} | |||
bool isMinimised() const | |||
{ | |||
} | |||
void setFullScreen (bool shouldBeFullScreen) | |||
{ | |||
// TODO | |||
} | |||
bool isFullScreen() const | |||
{ | |||
// TODO | |||
return false; | |||
} | |||
void setIcon (const Image& newIcon) | |||
{ | |||
// TODO | |||
} | |||
bool contains (const Point<int>& position, bool trueIfInAChildWindow) const | |||
{ | |||
// TODO | |||
return isPositiveAndBelow (position.getX(), component->getWidth()) | |||
&& isPositiveAndBelow (position.getY(), component->getHeight()); | |||
} | |||
const BorderSize<int> getFrameSize() const | |||
{ | |||
// TODO | |||
return BorderSize<int>(); | |||
} | |||
bool setAlwaysOnTop (bool alwaysOnTop) | |||
{ | |||
// TODO | |||
return false; | |||
} | |||
void toFront (bool makeActive) | |||
{ | |||
// TODO | |||
} | |||
void toBehind (ComponentPeer* other) | |||
{ | |||
// TODO | |||
} | |||
//============================================================================== | |||
bool isFocused() const | |||
{ | |||
// TODO | |||
return false; | |||
} | |||
void grabFocus() | |||
{ | |||
// TODO | |||
} | |||
void textInputRequired (const Point<int>& position) | |||
{ | |||
// TODO | |||
} | |||
//============================================================================== | |||
void repaint (const Rectangle<int>& area) | |||
{ | |||
// TODO | |||
} | |||
void performAnyPendingRepaintsNow() | |||
{ | |||
// TODO | |||
} | |||
void setAlpha (float newAlpha) | |||
{ | |||
// TODO | |||
} | |||
private: | |||
//============================================================================== | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AndroidComponentPeer); | |||
}; | |||
ComponentPeer* Component::createNewPeer (int styleFlags, void*) | |||
{ | |||
return new AndroidComponentPeer (this, styleFlags); | |||
} | |||
//============================================================================== | |||
bool Desktop::canUseSemiTransparentWindows() throw() | |||
{ | |||
return true; // TODO | |||
} | |||
Desktop::DisplayOrientation Desktop::getCurrentOrientation() const | |||
{ | |||
// TODO | |||
return upright; | |||
} | |||
void Desktop::createMouseInputSources() | |||
{ | |||
// This creates a mouse input source for each possible finger | |||
for (int i = 0; i < 10; ++i) | |||
mouseSources.add (new MouseInputSource (i, false)); | |||
} | |||
const Point<int> MouseInputSource::getCurrentMousePosition() | |||
{ | |||
// TODO | |||
return Point<int>(); | |||
} | |||
void Desktop::setMousePosition (const Point<int>& newPosition) | |||
{ | |||
// not needed | |||
} | |||
//============================================================================== | |||
bool KeyPress::isKeyCurrentlyDown (const int keyCode) | |||
{ | |||
// TODO | |||
return false; | |||
} | |||
void ModifierKeys::updateCurrentModifiers() throw() | |||
{ | |||
// not needed | |||
} | |||
const ModifierKeys ModifierKeys::getCurrentModifiersRealtime() throw() | |||
{ | |||
// TODO | |||
return ModifierKeys(); | |||
} | |||
//============================================================================== | |||
bool Process::isForegroundProcess() | |||
{ | |||
return true; // TODO | |||
} | |||
//============================================================================== | |||
bool AlertWindow::showNativeDialogBox (const String& title, | |||
const String& bodyText, | |||
bool isOkCancel) | |||
{ | |||
// TODO | |||
} | |||
//============================================================================== | |||
Image::SharedImage* Image::SharedImage::createNativeImage (PixelFormat format, int width, int height, bool clearImage) | |||
{ | |||
return createSoftwareImage (format, width, height, clearImage); | |||
} | |||
void Desktop::setScreenSaverEnabled (const bool isEnabled) | |||
{ | |||
// TODO | |||
} | |||
bool Desktop::isScreenSaverEnabled() | |||
{ | |||
return true; | |||
} | |||
//============================================================================== | |||
void juce_setKioskComponent (Component* kioskModeComponent, bool enableOrDisable, bool /*allowMenusAndBars*/) | |||
{ | |||
} | |||
//============================================================================== | |||
void juce_updateMultiMonitorInfo (Array <Rectangle<int> >& monitorCoords, const bool clipToWorkArea) | |||
{ | |||
// TODO | |||
monitorCoords.add (Rectangle<int> (0, 0, 640, 480)); | |||
} | |||
//============================================================================== | |||
const Image juce_createIconForFile (const File& file) | |||
{ | |||
Image image; | |||
// TODO | |||
return image; | |||
} | |||
//============================================================================== | |||
void* MouseCursor::createMouseCursorFromImage (const Image& image, int hotspotX, int hotspotY) | |||
{ | |||
return 0; | |||
} | |||
void MouseCursor::deleteMouseCursor (void* const cursorHandle, const bool isStandard) | |||
{ | |||
} | |||
void* MouseCursor::createStandardMouseCursor (const MouseCursor::StandardCursorType type) | |||
{ | |||
return 0; | |||
} | |||
//============================================================================== | |||
void MouseCursor::showInWindow (ComponentPeer*) const {} | |||
void MouseCursor::showInAllWindows() const {} | |||
//============================================================================== | |||
bool DragAndDropContainer::performExternalDragDropOfFiles (const StringArray& files, const bool canMove) | |||
{ | |||
return false; | |||
} | |||
bool DragAndDropContainer::performExternalDragDropOfText (const String& text) | |||
{ | |||
return false; | |||
} | |||
//============================================================================== | |||
const int extendedKeyModifier = 0x10000; | |||
const int KeyPress::spaceKey = ' '; | |||
const int KeyPress::returnKey = 0x0d; | |||
const int KeyPress::escapeKey = 0x1b; | |||
const int KeyPress::backspaceKey = 0x7f; | |||
const int KeyPress::leftKey = extendedKeyModifier + 1; | |||
const int KeyPress::rightKey = extendedKeyModifier + 2; | |||
const int KeyPress::upKey = extendedKeyModifier + 3; | |||
const int KeyPress::downKey = extendedKeyModifier + 4; | |||
const int KeyPress::pageUpKey = extendedKeyModifier + 5; | |||
const int KeyPress::pageDownKey = extendedKeyModifier + 6; | |||
const int KeyPress::endKey = extendedKeyModifier + 7; | |||
const int KeyPress::homeKey = extendedKeyModifier + 8; | |||
const int KeyPress::deleteKey = extendedKeyModifier + 9; | |||
const int KeyPress::insertKey = -1; | |||
const int KeyPress::tabKey = 9; | |||
const int KeyPress::F1Key = extendedKeyModifier + 10; | |||
const int KeyPress::F2Key = extendedKeyModifier + 11; | |||
const int KeyPress::F3Key = extendedKeyModifier + 12; | |||
const int KeyPress::F4Key = extendedKeyModifier + 13; | |||
const int KeyPress::F5Key = extendedKeyModifier + 14; | |||
const int KeyPress::F6Key = extendedKeyModifier + 16; | |||
const int KeyPress::F7Key = extendedKeyModifier + 17; | |||
const int KeyPress::F8Key = extendedKeyModifier + 18; | |||
const int KeyPress::F9Key = extendedKeyModifier + 19; | |||
const int KeyPress::F10Key = extendedKeyModifier + 20; | |||
const int KeyPress::F11Key = extendedKeyModifier + 21; | |||
const int KeyPress::F12Key = extendedKeyModifier + 22; | |||
const int KeyPress::F13Key = extendedKeyModifier + 23; | |||
const int KeyPress::F14Key = extendedKeyModifier + 24; | |||
const int KeyPress::F15Key = extendedKeyModifier + 25; | |||
const int KeyPress::F16Key = extendedKeyModifier + 26; | |||
const int KeyPress::numberPad0 = extendedKeyModifier + 27; | |||
const int KeyPress::numberPad1 = extendedKeyModifier + 28; | |||
const int KeyPress::numberPad2 = extendedKeyModifier + 29; | |||
const int KeyPress::numberPad3 = extendedKeyModifier + 30; | |||
const int KeyPress::numberPad4 = extendedKeyModifier + 31; | |||
const int KeyPress::numberPad5 = extendedKeyModifier + 32; | |||
const int KeyPress::numberPad6 = extendedKeyModifier + 33; | |||
const int KeyPress::numberPad7 = extendedKeyModifier + 34; | |||
const int KeyPress::numberPad8 = extendedKeyModifier + 35; | |||
const int KeyPress::numberPad9 = extendedKeyModifier + 36; | |||
const int KeyPress::numberPadAdd = extendedKeyModifier + 37; | |||
const int KeyPress::numberPadSubtract = extendedKeyModifier + 38; | |||
const int KeyPress::numberPadMultiply = extendedKeyModifier + 39; | |||
const int KeyPress::numberPadDivide = extendedKeyModifier + 40; | |||
const int KeyPress::numberPadSeparator = extendedKeyModifier + 41; | |||
const int KeyPress::numberPadDecimalPoint = extendedKeyModifier + 42; | |||
const int KeyPress::numberPadEquals = extendedKeyModifier + 43; | |||
const int KeyPress::numberPadDelete = extendedKeyModifier + 44; | |||
const int KeyPress::playKey = extendedKeyModifier + 45; | |||
const int KeyPress::stopKey = extendedKeyModifier + 46; | |||
const int KeyPress::fastForwardKey = extendedKeyModifier + 47; | |||
const int KeyPress::rewindKey = extendedKeyModifier + 48; | |||
#endif |
@@ -551,7 +551,23 @@ const String File::getVolumeLabel() const | |||
int File::getVolumeSerialNumber() const | |||
{ | |||
return 0; // xxx | |||
int result = 0; | |||
/* int fd = open (getFullPathName().toUTF8(), O_RDONLY | O_NONBLOCK); | |||
char info [512]; | |||
#ifndef HDIO_GET_IDENTITY | |||
#define HDIO_GET_IDENTITY 0x030d | |||
#endif | |||
if (ioctl (fd, HDIO_GET_IDENTITY, info) == 0) | |||
{ | |||
DBG (String (info + 20, 20)); | |||
result = String (info + 20, 20).trim().getIntValue(); | |||
} | |||
close (fd);*/ | |||
return result; | |||
} | |||
//============================================================================== | |||
@@ -72,7 +72,7 @@ public: | |||
{ | |||
if (JUCEApplication::getInstance() != 0) | |||
{ | |||
JUCEApplication::getInstance()->anotherInstanceStarted (nsStringToJuce (filename)); | |||
JUCEApplication::getInstance()->anotherInstanceStarted (quotedIfContainsSpaces (filename)); | |||
return YES; | |||
} | |||
@@ -83,18 +83,10 @@ public: | |||
{ | |||
StringArray files; | |||
for (unsigned int i = 0; i < [filenames count]; ++i) | |||
{ | |||
String filename (nsStringToJuce ((NSString*) [filenames objectAtIndex: i])); | |||
if (filename.containsChar (' ')) | |||
filename = filename.quoted('"'); | |||
files.add (filename); | |||
} | |||
files.add (quotedIfContainsSpaces ((NSString*) [filenames objectAtIndex: i])); | |||
if (files.size() > 0 && JUCEApplication::getInstance() != 0) | |||
{ | |||
JUCEApplication::getInstance()->anotherInstanceStarted (files.joinIntoString (" ")); | |||
} | |||
} | |||
virtual void focusChanged() | |||
@@ -130,6 +122,15 @@ private: | |||
CFRunLoopRef runLoop; | |||
CFRunLoopSourceRef runLoopSource; | |||
MessageQueue messageQueue; | |||
static const String quotedIfContainsSpaces (NSString* file) | |||
{ | |||
String s (nsStringToJuce (file)); | |||
if (s.containsChar (' ')) | |||
s = s.quoted ('"'); | |||
return s; | |||
} | |||
}; | |||