diff --git a/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj b/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj index 1d445ec279..ef8324d11c 100644 --- a/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj +++ b/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj @@ -188,6 +188,7 @@ 2E540A9137E245EFADCFABB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; 2E680E2C65684A4272AE079A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_SourceCodeEditor.cpp"; path = "../../Source/Code Editor/jucer_SourceCodeEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; 2E96852D55A9C1DEAF76FF6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + 2ED5D4ABB34DAA5D6E93A171 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; 2EEB1C074162F363C6599282 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CommandLine.h"; path = "../../Source/Application/jucer_CommandLine.h"; sourceTree = "SOURCE_ROOT"; }; 2FADEBA1901F74204DE253BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; 2FBA1138907F4DE651870008 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; @@ -372,6 +373,7 @@ 795AF1D634CA3E6FA899E0B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; 796AEF1400580E81AAF23CE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; 79F7CC3E9B848AAA3A5C682B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B824A2F1BBE334B140BD8AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; 7C02936574E000C436E3AD8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; 7C48EA717C5B1136A39FF4FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; 7CBB297E627A7DC7EA12A8B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -551,6 +553,7 @@ B92070A7D5952D560DAD32C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; B945EB1DEE6D684E980B7428 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectangleList.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.cpp"; sourceTree = "SOURCE_ROOT"; }; B9F806910507E82E7BFB15E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + BA1E340A922D0D7E543563CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; BA5C7DE347A73A87F687703C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; BA95268EEE80F9509EC1F76F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; BAC43B20E14A340CCF14119C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Project.cpp"; path = "../../Source/Project/jucer_Project.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -631,6 +634,7 @@ D4E56676E2EF83404EDCBA8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; D4F2D42C58F4D86E00E76F31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; D503780AB98993E8F0BA1311 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D5057D7B18ABD5E810A6F830 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; D526C38D581425949BA0E4AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FilePreviewComponent.h"; path = "../../Source/Application/jucer_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; D53B54D1786A1FFC024BF064 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography.mm"; path = "../../../../modules/juce_cryptography/juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; D5A6D00DEFDC650AF432A698 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_gui_basics/application/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1179,6 +1183,8 @@ DB20268A566DABEAE3F2CBEE, 93D165846B65A638F1C25C4C ); name = placement; sourceTree = ""; }; 59C2687AA614A77DA150AFAB = { isa = PBXGroup; children = ( + BA1E340A922D0D7E543563CF, + 7B824A2F1BBE334B140BD8AF, 3F1501FE4867042830B25DD5, CD3216F23C7B273B010A8D12, 14B7611971E56AC319072A5A, @@ -1205,6 +1211,8 @@ 0B96A219A0CFF707E5A13B68, 2AADCE9D8BADF4DAC05CCA1E, 21FAFA7F2C5D0E8D99876EA8, + D5057D7B18ABD5E810A6F830, + 2ED5D4ABB34DAA5D6E93A171, 5843A5060852C6ACC4770EC7 ); name = native; sourceTree = ""; }; E9819C83D0B797FC71811B1B = { isa = PBXGroup; children = ( C3FB0CB81D460B4263689CAF, diff --git a/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj b/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj index 57e75a4627..c64fe09c23 100644 --- a/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj +++ b/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj @@ -1758,6 +1758,17 @@ + + + + + + + + + @@ -1885,6 +1896,26 @@ + + + + + + + + + + + + + + + + diff --git a/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj b/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj index b97107b193..5604482437 100644 --- a/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj +++ b/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj @@ -1758,6 +1758,17 @@ + + + + + + + + + @@ -1885,6 +1896,26 @@ + + + + + + + + + + + + + + + + diff --git a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj index 96c43495d7..046f3d5590 100644 --- a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj +++ b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj @@ -509,6 +509,9 @@ true + + true + true @@ -542,6 +545,12 @@ true + + true + + + true + true @@ -1156,6 +1165,7 @@ + diff --git a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters index 20a5305d1d..7a8b90ebe7 100644 --- a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters +++ b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters @@ -706,6 +706,9 @@ Juce Modules\juce_graphics\placement + + Juce Modules\juce_graphics\fonts + Juce Modules\juce_graphics\fonts @@ -745,6 +748,12 @@ Juce Modules\juce_graphics\native + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + Juce Modules\juce_graphics\native @@ -1821,6 +1830,9 @@ Juce Modules\juce_graphics\placement + + Juce Modules\juce_graphics\fonts + Juce Modules\juce_graphics\fonts diff --git a/extras/Introjucer/JuceLibraryCode/AppConfig.h b/extras/Introjucer/JuceLibraryCode/AppConfig.h index ef8e7b369b..ab478d28f0 100644 --- a/extras/Introjucer/JuceLibraryCode/AppConfig.h +++ b/extras/Introjucer/JuceLibraryCode/AppConfig.h @@ -34,6 +34,7 @@ // juce_graphics flags: #define JUCE_USE_COREIMAGE_LOADER 0 +//#define JUCE_USE_DIRECTWRITE //============================================================================== // juce_gui_basics flags: diff --git a/extras/Introjucer/JuceLibraryCode/BinaryData.cpp b/extras/Introjucer/JuceLibraryCode/BinaryData.cpp index d0307aabf7..af8ef250a1 100644 --- a/extras/Introjucer/JuceLibraryCode/BinaryData.cpp +++ b/extras/Introjucer/JuceLibraryCode/BinaryData.cpp @@ -381,7 +381,7 @@ static const unsigned char temp_98c9479f[] = "/*\r\n" " ==============================================================================\r\n" "\r\n" -" This file was auto-generated by the Jucer!\r\n" +" This file was auto-generated!\r\n" "\r\n" " It contains the basic startup code for a Juce application.\r\n" "\r\n" @@ -563,7 +563,7 @@ static const unsigned char temp_62b91564[] = "/*\r\n" " ==============================================================================\r\n" "\r\n" -" This file was auto-generated by the Jucer!\r\n" +" This file was auto-generated!\r\n" "\r\n" " It contains the basic startup code for a Juce application.\r\n" "\r\n" @@ -640,7 +640,7 @@ static const unsigned char temp_794304c3[] = "/*\r\n" " ==============================================================================\r\n" "\r\n" -" This file was auto-generated by the Jucer!\r\n" +" This file was auto-generated!\r\n" "\r\n" " It contains the basic startup code for a Juce application.\r\n" "\r\n" @@ -783,7 +783,7 @@ static const unsigned char temp_6fd7e50[] = "/*\r\n" " ==============================================================================\r\n" "\r\n" -" This file was auto-generated by the Jucer!\r\n" +" This file was auto-generated!\r\n" "\r\n" " It contains the basic outline for a simple desktop window.\r\n" "\r\n" @@ -819,7 +819,7 @@ static const unsigned char temp_613d4455[] = "/*\r\n" " ==============================================================================\r\n" "\r\n" -" This file was auto-generated by the Jucer!\r\n" +" This file was auto-generated!\r\n" "\r\n" " It contains the basic outline for a simple desktop window.\r\n" "\r\n" diff --git a/extras/Introjucer/JuceLibraryCode/BinaryData.h b/extras/Introjucer/JuceLibraryCode/BinaryData.h index db8d2b1cb2..22a570087f 100644 --- a/extras/Introjucer/JuceLibraryCode/BinaryData.h +++ b/extras/Introjucer/JuceLibraryCode/BinaryData.h @@ -20,13 +20,13 @@ namespace BinaryData const int jucer_AudioPluginEditorTemplate_hSize = 799; extern const char* jucer_AudioPluginFilterTemplate_cpp; - const int jucer_AudioPluginFilterTemplate_cppSize = 4468; + const int jucer_AudioPluginFilterTemplate_cppSize = 4455; extern const char* jucer_AudioPluginFilterTemplate_h; - const int jucer_AudioPluginFilterTemplate_hSize = 2413; + const int jucer_AudioPluginFilterTemplate_hSize = 2400; extern const char* jucer_MainConsoleAppTemplate_cpp; - const int jucer_MainConsoleAppTemplate_cppSize = 483; + const int jucer_MainConsoleAppTemplate_cppSize = 470; extern const char* jucer_MainTemplate_cpp; const int jucer_MainTemplate_cppSize = 1825; @@ -38,10 +38,10 @@ namespace BinaryData const int jucer_NewCppFileTemplate_hSize = 308; extern const char* jucer_WindowTemplate_cpp; - const int jucer_WindowTemplate_cppSize = 794; + const int jucer_WindowTemplate_cppSize = 781; extern const char* jucer_WindowTemplate_h; - const int jucer_WindowTemplate_hSize = 1229; + const int jucer_WindowTemplate_hSize = 1216; extern const char* juce_icon_png; const int juce_icon_pngSize = 19826; diff --git a/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj b/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj index 5022108bd1..bb18d0bb4f 100644 --- a/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj +++ b/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj @@ -271,8 +271,10 @@ 38CDDFDC6697BF7BCFC8DAFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; 38E0255E6BB9600DEECD39F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; 393CDFCFA0358C689E5A3691 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + 39DADA0AAD7468C535ECD5A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; 39ED2CD3C8A17DF313A0838B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; 3A3C8D765CD02651E2C39102 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A7C2EA6B6C8E00BBE6A29B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; 3A9AB41831037CF68FF5719F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; 3ADBF520293DBBCE5A605902 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; 3AEC36869846977B0C09A881 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; @@ -428,6 +430,7 @@ 669FD4C70B8BF2B87DEAFB73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; 66E3497A9DCF883BCE6A27A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 66F2929C04B6E230FFA975C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6704DC3810D991DADFF947AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; 678034FB9D177C3D08044AB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; 67B45F46192481A24287B06C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; 67DA4E3A02A5697DE923E0C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -529,6 +532,7 @@ 86DF811859C602F24589AC3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 877D61C08ADC5B13C2627327 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OpenGLDemo.cpp; path = ../../Source/demos/OpenGLDemo.cpp; sourceTree = "SOURCE_ROOT"; }; 87EDA764A802069F89CEC355 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 87FB016388B49E97FCCBE69B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Matrix3D.h"; path = "../../../../modules/juce_opengl/opengl/juce_Matrix3D.h"; sourceTree = "SOURCE_ROOT"; }; 8878426C7F58CB22969E7133 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLContext.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLContext.h"; sourceTree = "SOURCE_ROOT"; }; 89006BBD5040A06E6C559F16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; 890F3D7DA5BC01DACF8E5431 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events.mm"; path = "../../../../modules/juce_events/juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -779,6 +783,7 @@ D27A3A58DCC37B5EFC3AD745 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; D27D41D4A06E286FDBDF7549 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; D2C40CDF46D894BFC72BDC56 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLHelpers.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + D2F161366612A4CDA6372113 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Vector3D.h"; path = "../../../../modules/juce_opengl/opengl/juce_Vector3D.h"; sourceTree = "SOURCE_ROOT"; }; D33142A214D7AC7A8ED27E4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; D33EBA9793C56D73135BD1F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; D3AD73A360B24493ECC4E092 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -795,6 +800,7 @@ D7239D5B984E07808E2DB28C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLHelpers.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp"; sourceTree = "SOURCE_ROOT"; }; D7E6E92AA32B7D51489FD256 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; D8081154AA3072D2F2C4B625 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + D866C4735BF1EF0CA24FC1FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Draggable3DOrientation.h"; path = "../../../../modules/juce_opengl/opengl/juce_Draggable3DOrientation.h"; sourceTree = "SOURCE_ROOT"; }; D8AFC87A918360FFC9D96BE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; D9282DF6556197822D2BD5D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; DA0D464BE6E90C3668AD7C73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -807,7 +813,6 @@ DEA38275A65473112CD34252 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; DEB23C98FEC261260F63B6A4 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; DED6D04CFED991C5924B78F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; - DEE1FC30E2FBB97921616CA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; DF2D86EEA8031481C1FD08B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; DF590CD70352A30FA3BD9835 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; E0AE248F52C70AA1DEA1A5A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; @@ -821,8 +826,10 @@ E6448B3F03DD2B41519DF93D = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; D119A3871626EC2B8EFCB0D4 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JuceDemo.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; D2F7081BE9A6E24BA7CD1A46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + DEE1FC30E2FBB97921616CA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; DF3B7E1BC0AF0C826C47745B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; DF47E8197FF5A9309C062C61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; + DFEAB699C98B89FF0B85F557 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; DFF6BF0BB64714A494A25E93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; E15F577E82B2E12597447472 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; E2732267CD7C0C3BDB17456A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -848,6 +855,7 @@ EB902A37F3AA5BC62D523F5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; EB9E8921A8D36EDD7FF3245B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; EC180AD91D1B068D7A8F33BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + EC89003BF30329181BB3EA4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Quaternion.h"; path = "../../../../modules/juce_opengl/opengl/juce_Quaternion.h"; sourceTree = "SOURCE_ROOT"; }; EC93857F367028441A067F45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; EC97B274D075920B2490E0D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; ECCEB7E5D6B18F1376E34EDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1490,6 +1498,8 @@ C30EE4EFDB359E2A9D58F677, 989587AD131FF27180BEB3D1 ); name = placement; sourceTree = ""; }; 0FC4D9918A17F33EEF6831F1 = { isa = PBXGroup; children = ( + 39DADA0AAD7468C535ECD5A2, + 3A7C2EA6B6C8E00BBE6A29B1, 36DD59799C3C4279B18DEAD3, 1118BAEA98C38755FEB9E274, DEE1FC30E2FBB97921616CA9, @@ -1516,6 +1526,8 @@ 0BBEDD3E8C0C2B7C4B52016A, 2649F70294DB168919CBCAD3, 5712EB90A8B51DBBC4E19A39, + 6704DC3810D991DADFF947AC, + DFEAB699C98B89FF0B85F557, 5CABE190EBD0F4EEB763114A ); name = native; sourceTree = ""; }; 980520A52BB3BF76E45AECA8 = { isa = PBXGroup; children = ( 6B073962B4485C2D4419DB53, @@ -1866,6 +1878,8 @@ 5E12C726C5DBB9C81963FAB5, A97EC32975392744C62684F9 ); name = "juce_gui_extra"; sourceTree = ""; }; EB8917291F41B7345B13B53E = { isa = PBXGroup; children = ( + D866C4735BF1EF0CA24FC1FB, + 87FB016388B49E97FCCBE69B, 4F802BD98072EA49F7F4FE4A, D6D0F076F54C7D669A9717C9, 8878426C7F58CB22969E7133, @@ -1880,7 +1894,9 @@ B81FA2ED22BCC03D124031ED, 942191F317B1B2B1CFBB7C60, FE9A5898294228EB7F439951, - 4CFB262AA9778621B8B33A7D ); name = opengl; sourceTree = ""; }; + 4CFB262AA9778621B8B33A7D, + EC89003BF30329181BB3EA4B, + D2F161366612A4CDA6372113 ); name = opengl; sourceTree = ""; }; C92FEA88254DAAE793DB3CF7 = { isa = PBXGroup; children = ( 22C2C932398DC1EFE0880A9A, ED9FAEA9116C568942BAD000, diff --git a/extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj b/extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj index f49513f88c..acb817386a 100644 --- a/extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj +++ b/extras/JuceDemo/Builds/VisualStudio2005/Juce Demo.vcproj @@ -2492,6 +2492,17 @@ + + + + + + + + + @@ -2619,6 +2630,26 @@ + + + + + + + + + + + + + + + + @@ -4197,6 +4228,8 @@ + + @@ -4266,6 +4299,8 @@ + + diff --git a/extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj b/extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj index 84cb693340..7f55741ea5 100644 --- a/extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj +++ b/extras/JuceDemo/Builds/VisualStudio2008/Juce Demo.vcproj @@ -2492,6 +2492,17 @@ + + + + + + + + + @@ -2619,6 +2630,26 @@ + + + + + + + + + + + + + + + + @@ -4197,6 +4228,8 @@ + + @@ -4266,6 +4299,8 @@ + + diff --git a/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj b/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj index 2ee0b709bb..15a5e6ce6b 100644 --- a/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj +++ b/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj @@ -692,6 +692,9 @@ true + + true + true @@ -725,6 +728,12 @@ true + + true + + + true + true @@ -1424,6 +1433,7 @@ + @@ -1578,6 +1588,8 @@ + + @@ -1587,6 +1599,8 @@ + + diff --git a/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters b/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters index 9db7eaca1c..62fca2b4d6 100644 --- a/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters +++ b/extras/JuceDemo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters @@ -997,6 +997,9 @@ Juce Modules\juce_graphics\placement + + Juce Modules\juce_graphics\fonts + Juce Modules\juce_graphics\fonts @@ -1036,6 +1039,12 @@ Juce Modules\juce_graphics\native + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + Juce Modules\juce_graphics\native @@ -2307,6 +2316,9 @@ Juce Modules\juce_graphics\placement + + Juce Modules\juce_graphics\fonts + Juce Modules\juce_graphics\fonts @@ -2769,6 +2781,12 @@ Juce Modules\juce_gui_extra + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\opengl + Juce Modules\juce_opengl\opengl @@ -2796,6 +2814,12 @@ Juce Modules\juce_opengl\opengl + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\opengl + Juce Modules\juce_opengl diff --git a/extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj b/extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj index 693c8d2694..8800f08f47 100644 --- a/extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj +++ b/extras/JuceDemo/Builds/iOS/Juce Demo.xcodeproj/project.pbxproj @@ -264,8 +264,10 @@ 38CDDFDC6697BF7BCFC8DAFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; 38E0255E6BB9600DEECD39F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; 393CDFCFA0358C689E5A3691 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + 39DADA0AAD7468C535ECD5A2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; 39ED2CD3C8A17DF313A0838B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; 3A3C8D765CD02651E2C39102 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3A7C2EA6B6C8E00BBE6A29B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; 3A9AB41831037CF68FF5719F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; 3ADBF520293DBBCE5A605902 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; 3AEC36869846977B0C09A881 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; @@ -420,6 +422,7 @@ 669FD4C70B8BF2B87DEAFB73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; 66E3497A9DCF883BCE6A27A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 66F2929C04B6E230FFA975C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6704DC3810D991DADFF947AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; 678034FB9D177C3D08044AB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; 67B45F46192481A24287B06C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; 67DA4E3A02A5697DE923E0C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -522,6 +525,7 @@ 86DF811859C602F24589AC3D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 877D61C08ADC5B13C2627327 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OpenGLDemo.cpp; path = ../../Source/demos/OpenGLDemo.cpp; sourceTree = "SOURCE_ROOT"; }; 87EDA764A802069F89CEC355 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 87FB016388B49E97FCCBE69B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Matrix3D.h"; path = "../../../../modules/juce_opengl/opengl/juce_Matrix3D.h"; sourceTree = "SOURCE_ROOT"; }; 8878426C7F58CB22969E7133 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLContext.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLContext.h"; sourceTree = "SOURCE_ROOT"; }; 89006BBD5040A06E6C559F16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; 890F3D7DA5BC01DACF8E5431 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events.mm"; path = "../../../../modules/juce_events/juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -770,6 +774,7 @@ D27A3A58DCC37B5EFC3AD745 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; D27D41D4A06E286FDBDF7549 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; D2C40CDF46D894BFC72BDC56 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLHelpers.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + D2F161366612A4CDA6372113 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Vector3D.h"; path = "../../../../modules/juce_opengl/opengl/juce_Vector3D.h"; sourceTree = "SOURCE_ROOT"; }; D2F7081BE9A6E24BA7CD1A46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; }; D33142A214D7AC7A8ED27E4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; D33EBA9793C56D73135BD1F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -786,6 +791,7 @@ D7239D5B984E07808E2DB28C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLHelpers.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp"; sourceTree = "SOURCE_ROOT"; }; D7E6E92AA32B7D51489FD256 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; D8081154AA3072D2F2C4B625 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + D866C4735BF1EF0CA24FC1FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Draggable3DOrientation.h"; path = "../../../../modules/juce_opengl/opengl/juce_Draggable3DOrientation.h"; sourceTree = "SOURCE_ROOT"; }; D8AFC87A918360FFC9D96BE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; D9282DF6556197822D2BD5D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; DA0D464BE6E90C3668AD7C73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -803,6 +809,7 @@ DF3B7E1BC0AF0C826C47745B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; DF47E8197FF5A9309C062C61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Justification.cpp"; path = "../../../../modules/juce_graphics/placement/juce_Justification.cpp"; sourceTree = "SOURCE_ROOT"; }; DF590CD70352A30FA3BD9835 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + DFEAB699C98B89FF0B85F557 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; DFF6BF0BB64714A494A25E93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; E0AE248F52C70AA1DEA1A5A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; E15F577E82B2E12597447472 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; @@ -838,6 +845,7 @@ EB902A37F3AA5BC62D523F5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; EB9E8921A8D36EDD7FF3245B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; EC180AD91D1B068D7A8F33BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + EC89003BF30329181BB3EA4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Quaternion.h"; path = "../../../../modules/juce_opengl/opengl/juce_Quaternion.h"; sourceTree = "SOURCE_ROOT"; }; EC93857F367028441A067F45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; EC97B274D075920B2490E0D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; ECCEB7E5D6B18F1376E34EDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1480,6 +1488,8 @@ C30EE4EFDB359E2A9D58F677, 989587AD131FF27180BEB3D1 ); name = placement; sourceTree = ""; }; 0FC4D9918A17F33EEF6831F1 = { isa = PBXGroup; children = ( + 39DADA0AAD7468C535ECD5A2, + 3A7C2EA6B6C8E00BBE6A29B1, 36DD59799C3C4279B18DEAD3, 1118BAEA98C38755FEB9E274, DEE1FC30E2FBB97921616CA9, @@ -1506,6 +1516,8 @@ 0BBEDD3E8C0C2B7C4B52016A, 2649F70294DB168919CBCAD3, 5712EB90A8B51DBBC4E19A39, + 6704DC3810D991DADFF947AC, + DFEAB699C98B89FF0B85F557, 5CABE190EBD0F4EEB763114A ); name = native; sourceTree = ""; }; 980520A52BB3BF76E45AECA8 = { isa = PBXGroup; children = ( 6B073962B4485C2D4419DB53, @@ -1856,6 +1868,8 @@ 5E12C726C5DBB9C81963FAB5, A97EC32975392744C62684F9 ); name = "juce_gui_extra"; sourceTree = ""; }; EB8917291F41B7345B13B53E = { isa = PBXGroup; children = ( + D866C4735BF1EF0CA24FC1FB, + 87FB016388B49E97FCCBE69B, 4F802BD98072EA49F7F4FE4A, D6D0F076F54C7D669A9717C9, 8878426C7F58CB22969E7133, @@ -1870,7 +1884,9 @@ B81FA2ED22BCC03D124031ED, 942191F317B1B2B1CFBB7C60, FE9A5898294228EB7F439951, - 4CFB262AA9778621B8B33A7D ); name = opengl; sourceTree = ""; }; + 4CFB262AA9778621B8B33A7D, + EC89003BF30329181BB3EA4B, + D2F161366612A4CDA6372113 ); name = opengl; sourceTree = ""; }; C92FEA88254DAAE793DB3CF7 = { isa = PBXGroup; children = ( 22C2C932398DC1EFE0880A9A, ED9FAEA9116C568942BAD000, diff --git a/extras/JuceDemo/JuceLibraryCode/AppConfig.h b/extras/JuceDemo/JuceLibraryCode/AppConfig.h index fa8947e961..e2b636a32e 100644 --- a/extras/JuceDemo/JuceLibraryCode/AppConfig.h +++ b/extras/JuceDemo/JuceLibraryCode/AppConfig.h @@ -64,6 +64,7 @@ // juce_graphics flags: //#define JUCE_USE_COREIMAGE_LOADER +//#define JUCE_USE_DIRECTWRITE //============================================================================== // juce_gui_basics flags: diff --git a/extras/audio plugin demo/Builds/Linux/Makefile b/extras/audio plugin demo/Builds/Linux/Makefile index ff1e5c5965..3fba1201a8 100644 --- a/extras/audio plugin demo/Builds/Linux/Makefile +++ b/extras/audio plugin demo/Builds/Linux/Makefile @@ -20,7 +20,7 @@ ifeq ($(CONFIG),Debug) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -shared -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -shared -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" TARGET := JuceDemoPlugin.so @@ -35,7 +35,7 @@ ifeq ($(CONFIG),Release) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -Os CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -shared -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -shared -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" TARGET := JuceDemoPlugin.so diff --git a/extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj b/extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj index f10f573ab7..38e5d92e59 100644 --- a/extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj +++ b/extras/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj @@ -431,6 +431,7 @@ 768D64C69F7B45E93D789C98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; 76D55C11232DE62691A084B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; 76E1F46C757D4704DD0F7DFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + 7729ACF65D9863D2582C3ED8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; 773A8DF54F59CFC1C062FDA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; 7763B76C3E036AC3C028DBAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; 7808ECB520277B59485718C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -452,6 +453,7 @@ 7DC4334C7DA62856B8E70B25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; 7E1239926CC4A760AE07FF37 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; 7EC813E6F2E7303438F82090 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 7F38C9D398788039FD8CAF23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; 7F4472B4691BF3FED1C2025C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; 7F85C06C86BD056B387ED7A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; 7FBA208089BE0BD3949776EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -633,6 +635,7 @@ B829B4BAE71C6F09169542B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core.mm"; path = "../../../../modules/juce_core/juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; B8B25605AB1A04A8AE545227 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; B8B760CB559864834CC9AB32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + B9BE6469604B9D3252EFA7E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; BAF34E1248A8D20DDA992AFD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; BB1148DE7477E7B58ABD2B95 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; BB84A0B296CFBF17FAF145B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; @@ -712,6 +715,7 @@ D61536C96044EF9D6AC724F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; D6274E461525C6F6FB84B336 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; D6C649F04F03DA0744EA0456 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + D722F49E225A9A47AA348628 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; D79B9A384D018B252B6C4D6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; D85ABD84770A6A66B78C288B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; D88796A40E58D524DE34989B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1404,6 +1408,8 @@ EDD6B4608C8E4C7E7581489D, E95E53ABEA2884BA27EF0545 ); name = placement; sourceTree = ""; }; A6DB78E18DD0399D8FA6881E = { isa = PBXGroup; children = ( + 7729ACF65D9863D2582C3ED8, + B9BE6469604B9D3252EFA7E7, B57C430D154C1C86350F246A, 0E87CC46EB3070AD4D904EF5, F04CF5D4410243EF3DEDBEB8, @@ -1430,6 +1436,8 @@ 56A295F04B7F248D0A52B878, 1127215528CC4A4A504078BF, C8302DD07934EBD796C2BFBB, + 7F38C9D398788039FD8CAF23, + D722F49E225A9A47AA348628, 78959840E3EF9DC06998BB42 ); name = native; sourceTree = ""; }; F0F89564A3784EB052CEE01B = { isa = PBXGroup; children = ( 07D63FE21B0E6CB624B00E8D, diff --git a/extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj b/extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj index ebd311a1fa..305ba608e6 100644 --- a/extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj +++ b/extras/audio plugin demo/Builds/VisualStudio2005/JuceDemoPlugin.vcproj @@ -2369,6 +2369,17 @@ + + + + + + + + + @@ -2496,6 +2507,26 @@ + + + + + + + + + + + + + + + + diff --git a/extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj b/extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj index a88830e6bd..f4e7ddee2a 100644 --- a/extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj +++ b/extras/audio plugin demo/Builds/VisualStudio2008/JuceDemoPlugin.vcproj @@ -2369,6 +2369,17 @@ + + + + + + + + + @@ -2496,6 +2507,26 @@ + + + + + + + + + + + + + + + + diff --git a/extras/audio plugin demo/JuceLibraryCode/AppConfig.h b/extras/audio plugin demo/JuceLibraryCode/AppConfig.h index a8fa6577af..8157db3782 100644 --- a/extras/audio plugin demo/JuceLibraryCode/AppConfig.h +++ b/extras/audio plugin demo/JuceLibraryCode/AppConfig.h @@ -61,6 +61,7 @@ // juce_graphics flags: //#define JUCE_USE_COREIMAGE_LOADER +//#define JUCE_USE_DIRECTWRITE //============================================================================== // juce_gui_basics flags: diff --git a/extras/audio plugin host/Builds/Linux/Makefile b/extras/audio plugin host/Builds/Linux/Makefile index 783662b0cd..4ee82d7f75 100644 --- a/extras/audio plugin host/Builds/Linux/Makefile +++ b/extras/audio plugin host/Builds/Linux/Makefile @@ -20,7 +20,7 @@ ifeq ($(CONFIG),Debug) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" TARGET := Plugin\ Host @@ -35,7 +35,7 @@ ifeq ($(CONFIG),Release) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "~/SDKs/vstsdk2.4" -I "../../JuceLibraryCode" TARGET := Plugin\ Host diff --git a/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj b/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj index 15e42d017c..a75ed1c1ed 100644 --- a/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj +++ b/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj @@ -294,6 +294,7 @@ 47C408503AAF7D0AAF1484D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; 47D5DB3D6E203E43E808C4C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; 480EB4F8B71B880C74AA82F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + 483527FCBD7F07A7AF4743CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Matrix3D.h"; path = "../../../../modules/juce_opengl/opengl/juce_Matrix3D.h"; sourceTree = "SOURCE_ROOT"; }; 4876E03AA7977023BDABA2A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDescription.h"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.h"; sourceTree = "SOURCE_ROOT"; }; 492D3AE0538BC4DA6A6F7A27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/json/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; 4A394735BB54B32F3BA7A221 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; @@ -357,6 +358,7 @@ 5C24DE268797C1C7AC932837 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; 5CAD4033015519DB9995E82C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; 5CD825D3FEC4CA9FEE05D4D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5D6AF55EDB77231E95C23086 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; 5DF1460C31CD1BF8FADF56D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; 5E0882CA277CB65EBD9292BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; 5E362FF0C74127A56DB805BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; @@ -364,6 +366,7 @@ 5FA7C14489B6B17B022ACB6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; 600E61BFB0C43971B0A5D720 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; 60BDD56D876ECD61169BD3D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; + 60FEADAA8A60C12E4F2AEDD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; 616738BCE455C5D3DD13CDFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 61DCCE39ADAE59345FE119C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; 627709CC8F994ADFE362022E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics.mm"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -423,6 +426,7 @@ 736D23CB06CFD14ECE4471CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; 7399BECD1499CBFE6CB6C9B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; 740BB2D6D4D42F73A8334824 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + 74CAA9C9A8F37A9FF99103F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Draggable3DOrientation.h"; path = "../../../../modules/juce_opengl/opengl/juce_Draggable3DOrientation.h"; sourceTree = "SOURCE_ROOT"; }; 75F290D7B7C53C03DC653FC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; 75FCAA8D3DF24813844D6552 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; 7646DD91B282525F32FB8518 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -568,6 +572,7 @@ A00EEAF2F98E0988499D2A92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; A0582351AC1B641E0590F7AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; A0D98B5B7E49B6D7BB1FAA6B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + A1DC3C215187E6DD24DD7330 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Quaternion.h"; path = "../../../../modules/juce_opengl/opengl/juce_Quaternion.h"; sourceTree = "SOURCE_ROOT"; }; A249AD24A52F52ACBFDA6149 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; A24D1AD27646BD96ED513A2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; A2C29B131B0CF45F91AEAB8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; @@ -599,6 +604,7 @@ AE7BE10688B3F7C18D21E9B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; AEB543D49F0CD263051AC7ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; AEC8535EE0876B4B29206E6E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + AED08170765217A058A8C3BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Vector3D.h"; path = "../../../../modules/juce_opengl/opengl/juce_Vector3D.h"; sourceTree = "SOURCE_ROOT"; }; B03CEB6B84C7C8D1840CEFF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; B0935EBBA4F6E2B05F3D1C0A = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; B1068476E683AADD3CD8AD55 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; @@ -705,6 +711,7 @@ CF0F1D933CE2A89A9D05FF38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; CF27DFD59466D38E34428405 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; CF299925A6A365E288DC206E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D0A714338F6B7A47BA1F8F45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; D104AE78E68E1C382F5F1A81 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; }; D313CF37B25D7FD313C4F336 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; D314CF2F97529FCF35042263 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -817,6 +824,7 @@ F0BFBF49596C78EA5FA009DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; F0E65E0A0D9C0F8D9D6A8116 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; F1784ECBF60C425066642C81 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; + F186D87D177BE735EA9D6BC2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; F1C0CFDC6BF9AD9502D78223 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; F1FFDABA2B6EFBD4F57EF676 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; F242FFC66D5385888A14744E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1412,6 +1420,8 @@ 6462581CC4840341D6E7903F, 5B4DD89CB29AEF782C6D878C ); name = placement; sourceTree = ""; }; 9C8B57AFB5296F6948159935 = { isa = PBXGroup; children = ( + 60FEADAA8A60C12E4F2AEDD4, + 5D6AF55EDB77231E95C23086, E513696B3670F32F12D807C0, E66AB26776DD0039834DBC76, 8FF2B48D3DC38ABCDA0BBE83, @@ -1438,6 +1448,8 @@ AA7350771ED17561EB915EED, 94D27CA81B1481621186F4D5, C62FBDF34D1B74CCF12AEA2F, + D0A714338F6B7A47BA1F8F45, + F186D87D177BE735EA9D6BC2, 64A1DACEA71957604AD58B3C ); name = native; sourceTree = ""; }; 735136A0AB9278D0871D9684 = { isa = PBXGroup; children = ( EEC8570C058DC7EBFF48BF5E, @@ -1788,6 +1800,8 @@ 016748F561B0B5046F24DDA0, 923E4322525FD5CCAA5F911B ); name = "juce_gui_extra"; sourceTree = ""; }; E23F6FDE88C4164420DC07F6 = { isa = PBXGroup; children = ( + 74CAA9C9A8F37A9FF99103F5, + 483527FCBD7F07A7AF4743CC, CD96180DDD8610A155629CE1, E89669EB797637247F52D30F, BE0231D93CBB02BBC2704D1D, @@ -1802,7 +1816,9 @@ 8BA1AF085755958342C9213A, 597D5688E23397FE09F53BA3, 651055751E902F40B83EFD55, - 09089786B542AEB678DDE38F ); name = opengl; sourceTree = ""; }; + 09089786B542AEB678DDE38F, + A1DC3C215187E6DD24DD7330, + AED08170765217A058A8C3BA ); name = opengl; sourceTree = ""; }; E8C88E6E3FEC2E7A4373205B = { isa = PBXGroup; children = ( 0DA6343549C1279EEDA7A81A, 6E673B706EA21387275F30FD, diff --git a/extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj b/extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj index 3860e9871b..179109a09d 100644 --- a/extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj +++ b/extras/audio plugin host/Builds/VisualStudio2005/Plugin Host.vcproj @@ -2415,6 +2415,17 @@ + + + + + + + + + @@ -2542,6 +2553,26 @@ + + + + + + + + + + + + + + + + @@ -4120,6 +4151,8 @@ + + @@ -4189,6 +4222,8 @@ + + diff --git a/extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj b/extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj index c23e1c5af5..5978d34b49 100644 --- a/extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj +++ b/extras/audio plugin host/Builds/VisualStudio2008/Plugin Host.vcproj @@ -2415,6 +2415,17 @@ + + + + + + + + + @@ -2542,6 +2553,26 @@ + + + + + + + + + + + + + + + + @@ -4120,6 +4151,8 @@ + + @@ -4189,6 +4222,8 @@ + + diff --git a/extras/audio plugin host/JuceLibraryCode/AppConfig.h b/extras/audio plugin host/JuceLibraryCode/AppConfig.h index 353c2e414c..ccf02dee7e 100644 --- a/extras/audio plugin host/JuceLibraryCode/AppConfig.h +++ b/extras/audio plugin host/JuceLibraryCode/AppConfig.h @@ -64,6 +64,7 @@ // juce_graphics flags: //#define JUCE_USE_COREIMAGE_LOADER +//#define JUCE_USE_DIRECTWRITE //============================================================================== // juce_gui_basics flags: diff --git a/extras/binarybuilder/Builds/Linux/Makefile b/extras/binarybuilder/Builds/Linux/Makefile index dfe46f8bbf..073ca29399 100644 --- a/extras/binarybuilder/Builds/Linux/Makefile +++ b/extras/binarybuilder/Builds/Linux/Makefile @@ -20,7 +20,7 @@ ifeq ($(CONFIG),Debug) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" TARGET := BinaryBuilder @@ -35,7 +35,7 @@ ifeq ($(CONFIG),Release) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" TARGET := BinaryBuilder diff --git a/extras/example projects/Builds/Linux/Makefile b/extras/example projects/Builds/Linux/Makefile index f87bdc0f20..b086fc067e 100644 --- a/extras/example projects/Builds/Linux/Makefile +++ b/extras/example projects/Builds/Linux/Makefile @@ -20,7 +20,7 @@ ifeq ($(CONFIG),Debug) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" TARGET := HelloWorld @@ -35,7 +35,7 @@ ifeq ($(CONFIG),Release) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" TARGET := HelloWorld diff --git a/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj b/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj index d627de60c7..b53381fdc5 100644 --- a/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj +++ b/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ 02FA201D32033D122C04A1B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; 0324378725B8DEBC11E93953 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; 03E4C81E1D323C0CD78DC8A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + 0493323D5A1374BBEFCFE455 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; 04A6FE27FC63E4D27E857CBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 0525B4E0F2387B1F3AA520F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; 068349E735D107BE09BEC641 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; @@ -63,6 +64,7 @@ 118B13BE32C7FDCE82BDC495 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 1259079CB2A8907577BBBAA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; 130A28E84D438B08C6B5D5A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1316BB7ACE3F151F3B44A3EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; 133B528A88E99C116B75BFDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 140B14E0142DF835F1C6D951 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; 140BFF25B0078C0709FF2461 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -224,6 +226,7 @@ 52AAE149F3EC7BAB0E7703DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; 52D7E72C26E3D1589A6A1BD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; 536EB9664EDB02A4CBF9BD28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53F3EB3D456B15EF5CC6FC67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; 543A10EED475842E60CE7F3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; 5457E4C7D67E767CCD8B0964 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; 54FF1D1CC748FA043A28004F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -430,6 +433,7 @@ AC0B866AA2C5F577AA221143 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; AC488F0777290DB214E6E937 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; AC975C4D82A4C525F6D879A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + ACD09DE112FDD1028AC1E11B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; ACD0AD8EACA79E8A6273413E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; AD0FE0F54DE76E0C35A3B692 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; ADC3125F0DCD2924ACB173EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -574,12 +578,12 @@ E96CBEBCDABA3EA741C4C2EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; E9904E84AFCF3AB39B03BAA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; ED577465CA22A65861192A35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + ED872E47438BBE6325FE78F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; EE785DBFA288EFA2E7AB2108 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; EF28BA2B5E24F4749F732230 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; EF54929F7151858D8FF8107B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; EF932865774E86525CE7FC55 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; EA398D9C544440E06637C134 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - ED872E47438BBE6325FE78F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; EF3A7A1A871BAB32EA1B46EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; EFE00478AEAFE39D81B0E59D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; EFE65E031B01332448C2BE5E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; @@ -964,6 +968,8 @@ 7EE080AF681F1D927DF35B95, C71BB293CEF65605741E0CDA ); name = placement; sourceTree = ""; }; CBF50CCCB6412B6D1DC75BAC = { isa = PBXGroup; children = ( + 1316BB7ACE3F151F3B44A3EC, + ACD09DE112FDD1028AC1E11B, CB85029BEDE10DB68C5BAA21, EFE00478AEAFE39D81B0E59D, FF49DBB348CFFF3F396FB712, @@ -990,6 +996,8 @@ C6BCFCD2732C7153C33B6168, 4C34CB4DC542D86A193C055A, A3961F3261459774B65EBD3B, + 0493323D5A1374BBEFCFE455, + 53F3EB3D456B15EF5CC6FC67, A5E748EC8CB636CEBF7BA497 ); name = native; sourceTree = ""; }; 0BD57F3380CCDFE06E36335D = { isa = PBXGroup; children = ( 39D7580AE0D199F462A0411D, diff --git a/extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj b/extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj index 62d8786ed4..f9912cc096 100644 --- a/extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj +++ b/extras/example projects/Builds/VisualStudio2005/HelloWorld.vcproj @@ -1486,6 +1486,17 @@ + + + + + + + + + @@ -1613,6 +1624,26 @@ + + + + + + + + + + + + + + + + diff --git a/extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj b/extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj index 12856b972c..5e0dee1399 100644 --- a/extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj +++ b/extras/example projects/Builds/VisualStudio2008/HelloWorld.vcproj @@ -1486,6 +1486,17 @@ + + + + + + + + + @@ -1613,6 +1624,26 @@ + + + + + + + + + + + + + + + + diff --git a/extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj b/extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj index b73023bf0d..726a15ae42 100644 --- a/extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj +++ b/extras/example projects/Builds/iOS/HelloWorld.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ 02FA201D32033D122C04A1B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; 0324378725B8DEBC11E93953 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; 03E4C81E1D323C0CD78DC8A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + 0493323D5A1374BBEFCFE455 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; 04A6FE27FC63E4D27E857CBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 0525B4E0F2387B1F3AA520F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; 068349E735D107BE09BEC641 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; @@ -64,6 +65,7 @@ 118B13BE32C7FDCE82BDC495 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 1259079CB2A8907577BBBAA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; 130A28E84D438B08C6B5D5A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1316BB7ACE3F151F3B44A3EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; 133B528A88E99C116B75BFDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 140B14E0142DF835F1C6D951 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; 140BFF25B0078C0709FF2461 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -223,6 +225,7 @@ 52AAE149F3EC7BAB0E7703DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; 52D7E72C26E3D1589A6A1BD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; 536EB9664EDB02A4CBF9BD28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53F3EB3D456B15EF5CC6FC67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; 543A10EED475842E60CE7F3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; 5457E4C7D67E767CCD8B0964 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; 54FF1D1CC748FA043A28004F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -427,6 +430,7 @@ AC0B866AA2C5F577AA221143 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; AC488F0777290DB214E6E937 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../../modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; AC975C4D82A4C525F6D879A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + ACD09DE112FDD1028AC1E11B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; ACD0AD8EACA79E8A6273413E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; AD0FE0F54DE76E0C35A3B692 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; ADC3125F0DCD2924ACB173EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -608,19 +612,19 @@ F9816E9564DF0FD05C77B845 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; FA3161F4692D54C87001BCD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; FB1A1B08CB724305EBC233A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; - FB3723E1113ED13B4B8DF09A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; FB6FA17C00AB569935B5CFF8 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - FB845B6C46248D66EB02A862 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; FB9E2985FBE36494513C83A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; FC00A16A6756DBFE0B875F5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; FC47B303DF1BE68BE78F9079 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; FD5D001673478C39B79A9C6A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../../modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; - FE8B93BA3F56CCC0BB37A5C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; FE9531D38CA4C273B6FB87A7 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; EA398D9C544440E06637C134 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; + FB3723E1113ED13B4B8DF09A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + FB845B6C46248D66EB02A862 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; FD7E5A4B8C6532BD458B2A94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; FDDA86C3FCCC3C74F7CDA53D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; FE39F19585CBAE3EE247840C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + FE8B93BA3F56CCC0BB37A5C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; FEA9C3FC8BE313C619C3D195 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; FED2586B3C7EA1BBA5512D58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; FF263A986694A1ADAA51D156 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; @@ -964,6 +968,8 @@ 7EE080AF681F1D927DF35B95, C71BB293CEF65605741E0CDA ); name = placement; sourceTree = ""; }; CBF50CCCB6412B6D1DC75BAC = { isa = PBXGroup; children = ( + 1316BB7ACE3F151F3B44A3EC, + ACD09DE112FDD1028AC1E11B, CB85029BEDE10DB68C5BAA21, EFE00478AEAFE39D81B0E59D, FF49DBB348CFFF3F396FB712, @@ -990,6 +996,8 @@ C6BCFCD2732C7153C33B6168, 4C34CB4DC542D86A193C055A, A3961F3261459774B65EBD3B, + 0493323D5A1374BBEFCFE455, + 53F3EB3D456B15EF5CC6FC67, A5E748EC8CB636CEBF7BA497 ); name = native; sourceTree = ""; }; 0BD57F3380CCDFE06E36335D = { isa = PBXGroup; children = ( 39D7580AE0D199F462A0411D, diff --git a/extras/example projects/JuceLibraryCode/AppConfig.h b/extras/example projects/JuceLibraryCode/AppConfig.h index f20be3c8af..a56a9c1b66 100644 --- a/extras/example projects/JuceLibraryCode/AppConfig.h +++ b/extras/example projects/JuceLibraryCode/AppConfig.h @@ -33,6 +33,7 @@ // juce_graphics flags: //#define JUCE_USE_COREIMAGE_LOADER +//#define JUCE_USE_DIRECTWRITE //============================================================================== // juce_gui_basics flags: diff --git a/extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj b/extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj index 957a63724b..636d3153d5 100644 --- a/extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj +++ b/extras/static library/Builds/MacOSX/juce.xcodeproj/project.pbxproj @@ -53,6 +53,7 @@ 0A94BFA7B633930A9C44B763 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 0A9D5E19342D4BC010667063 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; 0AD571BCA7AB6C47B2C84D15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatWriter.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.h"; sourceTree = "SOURCE_ROOT"; }; + 0B41301E2279379BE7955E65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Matrix3D.h"; path = "../../../../modules/juce_opengl/opengl/juce_Matrix3D.h"; sourceTree = "SOURCE_ROOT"; }; 0B85A2AF6033752E00F83AFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; 0B9605D6761053F7125515C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; 0BC458FE29429B837EEB24C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -83,6 +84,7 @@ 148062D5F6A256ABF0841A45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; 149649AEA7AD7B8E13B3A35F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; 14B6A11EE9B15221B81E6690 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 154C4985C134E2B4A7B87025 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Quaternion.h"; path = "../../../../modules/juce_opengl/opengl/juce_Quaternion.h"; sourceTree = "SOURCE_ROOT"; }; 159A717B2A67C75CA01B6881 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; 164740F3A950758FD901C617 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; 16F854A6404E0E6A78094CA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; @@ -139,6 +141,7 @@ 2A86DFBFC0BF1E11B8011835 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; 2A91AADEA4837E131C449373 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; 2AA365F4A1C76090431D4FBC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + 2AC1E88F92FCBD06A1A60D42 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Vector3D.h"; path = "../../../../modules/juce_opengl/opengl/juce_Vector3D.h"; sourceTree = "SOURCE_ROOT"; }; 2AC249BFE13A76A1C82F7CD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; 2AD527E12013D8D75B76B8E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; 2B047EE6050EF3D2BB99ECBE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; @@ -477,6 +480,7 @@ 9639E00C68CB8C0B7E7B5427 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; 964B8F8E07FC8A58A0EA70EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; 966CF33B8DD2ABBE0C28B0F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + 96A82204F17CFBC13483F6BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Draggable3DOrientation.h"; path = "../../../../modules/juce_opengl/opengl/juce_Draggable3DOrientation.h"; sourceTree = "SOURCE_ROOT"; }; 96BAE779F62C8730A1CF260D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; 96BBDC1A586AB8CA8A1B5F9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 973FCBE47D459A85D83D40A5 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_formats/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; @@ -620,6 +624,7 @@ C804DA12663C47DC571AB802 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; C851A41BC906656B1D0BC964 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; C895897BD517D9599C4349FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + C927C4EC22D48CAEF52F0318 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; C9501187BF1860F357D619D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; C960619F9F73C79C3EAB8742 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; C96A2D385114E17C879D137B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; @@ -640,6 +645,7 @@ CCE11AF21E47604E76CA0132 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; CDADF6A067C358C08803D1B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; CDF3D87F97FF1526499CC3A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE2A5EB678139DE00D7CFF75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; CE55DEAD4829A44E6F68EBA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_opengl.mm"; path = "../../../../modules/juce_opengl/juce_opengl.mm"; sourceTree = "SOURCE_ROOT"; }; CE598F0D6317056C9958D8DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; CEBE83A5D278021237C24D66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLGraphicsContext.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -667,6 +673,7 @@ D5175D86941170D0903C9FB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; D5273722A99718EB4DFA0B3E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; D577544641EB343E2E579659 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; + D581DBED583DE1627B76D774 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; D5F1EA308D0BA7F03C20362C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; D5FD80BD808E23FDB4A82DFD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; D6EE042FD59ED0AE9BB38B2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -787,6 +794,7 @@ F980FF71809C8486735F3D56 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; F9C5498B3C2A6B0C77905000 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; F9EC7037E4226BA0AFADE0B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + F9F0CCD33C30298CF6BE0485 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; FA89AC987131D027ACE40582 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; FAA2D69119B5C2DE43A24080 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; FAE81B90A814666653AC92A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1331,6 +1339,8 @@ 7927D0B392E6CD799FB92B43, 7C3D9F9E65342D71FD04B5D4 ); name = placement; sourceTree = ""; }; 16C7C34F1CFA7CF4529574D7 = { isa = PBXGroup; children = ( + F9F0CCD33C30298CF6BE0485, + CE2A5EB678139DE00D7CFF75, CFAFA5FC6E25226D681818D9, D4AB3337D8F963E10EDFE91C, D2ED6CC1A967F79A35AB0105, @@ -1357,6 +1367,8 @@ FA89AC987131D027ACE40582, 593F1523B6A7AB5415E2CD53, 124BDF35CA497A669F44F8A0, + C927C4EC22D48CAEF52F0318, + D581DBED583DE1627B76D774, AF1FAE38CC1CE6EA02FFD06E ); name = native; sourceTree = ""; }; CEDD2E509C8955328B9E4338 = { isa = PBXGroup; children = ( 3B8E447448A1378605FAF59A, @@ -1707,6 +1719,8 @@ 7DF5547A341057A483389810, C960619F9F73C79C3EAB8742 ); name = "juce_gui_extra"; sourceTree = ""; }; 543980D718ACBB76513A4AF0 = { isa = PBXGroup; children = ( + 96A82204F17CFBC13483F6BF, + 0B41301E2279379BE7955E65, 1227115BD17EB8F0667DB117, DC76043392FDF3B5BD7D2554, 6096E343983724F254B268C3, @@ -1721,7 +1735,9 @@ 6D95302F8D68BA3F0538214F, 9E067C6101B6E2D11365EBDC, A0D54F01BC8018CC41FA34E9, - 53B9B6090EDB9B6E0FA8577F ); name = opengl; sourceTree = ""; }; + 53B9B6090EDB9B6E0FA8577F, + 154C4985C134E2B4A7B87025, + 2AC1E88F92FCBD06A1A60D42 ); name = opengl; sourceTree = ""; }; 637D3A9082C214CA0E067538 = { isa = PBXGroup; children = ( BF25BBF1072EE73925E688D0, BFBA3FCA1C3F9FD3BB8146B8, diff --git a/extras/static library/Builds/VisualStudio2008/juce.vcproj b/extras/static library/Builds/VisualStudio2008/juce.vcproj index 3f24242da0..c2de1e44de 100644 --- a/extras/static library/Builds/VisualStudio2008/juce.vcproj +++ b/extras/static library/Builds/VisualStudio2008/juce.vcproj @@ -2306,6 +2306,17 @@ + + + + + + + + + @@ -2433,6 +2444,26 @@ + + + + + + + + + + + + + + + + @@ -4011,6 +4042,8 @@ + + @@ -4080,6 +4113,8 @@ + + diff --git a/extras/static library/Builds/VisualStudio2010/juce.vcxproj b/extras/static library/Builds/VisualStudio2010/juce.vcxproj index 5b202f8414..09c14ca1e1 100644 --- a/extras/static library/Builds/VisualStudio2010/juce.vcxproj +++ b/extras/static library/Builds/VisualStudio2010/juce.vcxproj @@ -655,6 +655,9 @@ true + + true + true @@ -688,6 +691,12 @@ true + + true + + + true + true @@ -1370,6 +1379,7 @@ + @@ -1524,6 +1534,8 @@ + + @@ -1533,6 +1545,8 @@ + + diff --git a/extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters b/extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters index 7b628553cd..fa9add3003 100644 --- a/extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters +++ b/extras/static library/Builds/VisualStudio2010/juce.vcxproj.filters @@ -883,6 +883,9 @@ Juce Modules\juce_graphics\placement + + Juce Modules\juce_graphics\fonts + Juce Modules\juce_graphics\fonts @@ -922,6 +925,12 @@ Juce Modules\juce_graphics\native + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + Juce Modules\juce_graphics\native @@ -2142,6 +2151,9 @@ Juce Modules\juce_graphics\placement + + Juce Modules\juce_graphics\fonts + Juce Modules\juce_graphics\fonts @@ -2604,6 +2616,12 @@ Juce Modules\juce_gui_extra + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\opengl + Juce Modules\juce_opengl\opengl @@ -2631,6 +2649,12 @@ Juce Modules\juce_opengl\opengl + + Juce Modules\juce_opengl\opengl + + + Juce Modules\juce_opengl\opengl + Juce Modules\juce_opengl diff --git a/extras/static library/JuceLibraryCode/AppConfig.h b/extras/static library/JuceLibraryCode/AppConfig.h index 400ad6f21d..aec7256688 100644 --- a/extras/static library/JuceLibraryCode/AppConfig.h +++ b/extras/static library/JuceLibraryCode/AppConfig.h @@ -63,6 +63,7 @@ // juce_graphics flags: //#define JUCE_USE_COREIMAGE_LOADER +//#define JUCE_USE_DIRECTWRITE //============================================================================== // juce_gui_basics flags: diff --git a/extras/the jucer/Builds/Linux/Makefile b/extras/the jucer/Builds/Linux/Makefile index b7ecc263bf..6ecdead5c2 100644 --- a/extras/the jucer/Builds/Linux/Makefile +++ b/extras/the jucer/Builds/Linux/Makefile @@ -20,7 +20,7 @@ ifeq ($(CONFIG),Debug) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" TARGET := Jucer @@ -35,7 +35,7 @@ ifeq ($(CONFIG),Release) CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os CXXFLAGS += $(CFLAGS) - LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound + LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../../../../juce/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lXext LDDEPS := RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" -I "../../JuceLibraryCode" TARGET := Jucer diff --git a/extras/the jucer/Builds/MacOSX/Jucer.xcodeproj/project.pbxproj b/extras/the jucer/Builds/MacOSX/Jucer.xcodeproj/project.pbxproj index 637846abdc..a27d6c86fa 100644 --- a/extras/the jucer/Builds/MacOSX/Jucer.xcodeproj/project.pbxproj +++ b/extras/the jucer/Builds/MacOSX/Jucer.xcodeproj/project.pbxproj @@ -370,6 +370,7 @@ 6D4F04497FDE7DEB17308D3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; 6D72E18850E8708F0B9AB85D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; 6E82C9C39339B4D35930F5C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6EA69D5F453B736C1AC1AABC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; 6F03F26F8FD9DCF9C336C7C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; 6F67B1874F95EF2376AA9753 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; 700F70E54315881EB5D45567 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_GeneratedCode.cpp"; path = "../../src/model/jucer_GeneratedCode.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -462,6 +463,7 @@ 8C96948B01B70F125652B4A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; 8C9987F812960988EBE4CC6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; 8CBAA0DE1F30C590E248CE92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8D4A3D0BDE86DEA5FF304FD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; 8D7CCBC48D3D21B535663490 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; 8DBDD4F65CC8C34616C34255 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; 8E412B488CC4A124A64B3793 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; @@ -562,6 +564,7 @@ AEE21B60BDB0DBEDECC0A194 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerComponentHandler.h"; path = "../../src/model/components/jucer_JucerComponentHandler.h"; sourceTree = "SOURCE_ROOT"; }; AEE78FC2ACC32C9446C6D055 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; AFBE132DCF46D754AB003320 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + B106EF8F90D0851DA971007B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; B13B3784D431CBC967A43A23 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; B2155B56194AEBA21C1DE8D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TextButtonHandler.h"; path = "../../src/model/components/jucer_TextButtonHandler.h"; sourceTree = "SOURCE_ROOT"; }; B22AF25F5DEB48469657B759 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -742,6 +745,7 @@ F893F4BF51977AD2C0A65A61 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../../modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; F8C5FCB2CCEC869DD5AEF806 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; F8EF61F18821D1F9ED3CCF15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + F9D4A57B315F77043BF6DE49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; FA2410FA658C17A930890FFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; FA95E1B6FD8D263A36A449B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; FB03386CEAF2975CFB81C485 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OldSchoolLookAndFeel.cpp"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1224,6 +1228,8 @@ 4B75F7762F3BF16B19CE7092, A77B76A12F2E43B7DE9D43DB ); name = placement; sourceTree = ""; }; 1928B752EB0E2D436E7D9058 = { isa = PBXGroup; children = ( + F9D4A57B315F77043BF6DE49, + 8D4A3D0BDE86DEA5FF304FD3, 6644D131E809965C53E72229, 852C44541F302ECE66F1369D, DC5F33450FDAF78D3C918F87, @@ -1250,6 +1256,8 @@ 4E07995C0E9951843B936AF1, 570D06B805FFCB2D29247478, A27536EAA6565A95670917FE, + B106EF8F90D0851DA971007B, + 6EA69D5F453B736C1AC1AABC, A639ECE96CA7798C1E61F5FA ); name = native; sourceTree = ""; }; 8E157165495A4C0D5FE429BE = { isa = PBXGroup; children = ( 8DEFDD87D21258051455B4DF, diff --git a/extras/the jucer/Builds/VisualStudio2008/Jucer.vcproj b/extras/the jucer/Builds/VisualStudio2008/Jucer.vcproj index 6c7a288f44..0b6dae6acf 100644 --- a/extras/the jucer/Builds/VisualStudio2008/Jucer.vcproj +++ b/extras/the jucer/Builds/VisualStudio2008/Jucer.vcproj @@ -1653,6 +1653,17 @@ + + + + + + + + + @@ -1780,6 +1791,26 @@ + + + + + + + + + + + + + + + + diff --git a/extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj b/extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj index 4224622c51..7cad1391d0 100644 --- a/extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj +++ b/extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj @@ -485,6 +485,9 @@ true + + true + true @@ -518,6 +521,12 @@ true + + true + + + true + true @@ -1153,6 +1162,7 @@ + diff --git a/extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj.filters b/extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj.filters index 0b48d5361b..ae3f49fbdb 100644 --- a/extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj.filters +++ b/extras/the jucer/Builds/VisualStudio2010/Jucer.vcxproj.filters @@ -700,6 +700,9 @@ Juce Modules\juce_graphics\placement + + Juce Modules\juce_graphics\fonts + Juce Modules\juce_graphics\fonts @@ -739,6 +742,12 @@ Juce Modules\juce_graphics\native + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + Juce Modules\juce_graphics\native @@ -1878,6 +1887,9 @@ Juce Modules\juce_graphics\placement + + Juce Modules\juce_graphics\fonts + Juce Modules\juce_graphics\fonts diff --git a/extras/the jucer/JuceLibraryCode/AppConfig.h b/extras/the jucer/JuceLibraryCode/AppConfig.h index c4a37d132a..4cdaeea29d 100644 --- a/extras/the jucer/JuceLibraryCode/AppConfig.h +++ b/extras/the jucer/JuceLibraryCode/AppConfig.h @@ -33,6 +33,7 @@ // juce_graphics flags: //#define JUCE_USE_COREIMAGE_LOADER +//#define JUCE_USE_DIRECTWRITE //============================================================================== // juce_gui_basics flags: diff --git a/modules/juce_graphics/colour/juce_Colour.cpp b/modules/juce_graphics/colour/juce_Colour.cpp index 650555098c..f6bfe06d76 100644 --- a/modules/juce_graphics/colour/juce_Colour.cpp +++ b/modules/juce_graphics/colour/juce_Colour.cpp @@ -30,11 +30,11 @@ namespace ColourHelpers { uint8 floatToUInt8 (const float n) noexcept { - return (uint8) jlimit (0, 255, roundToInt (n * 255.0f)); + return n <= 0.0f ? 0 : (n >= 1.0f ? 255 : (uint8) (n * 255.0f)); } - // This is an adjusted brightness value, based on the way the human eye responds to - // different colour channels.. + // This is an adjusted brightness value, based on the way the human + // eye responds to different colour channels.. float getPerceivedBrightness (float r, float g, float b) noexcept { return std::sqrt (r * r * 0.241f diff --git a/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h b/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h index ce4d51e372..d31a40e616 100644 --- a/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h +++ b/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h @@ -31,7 +31,7 @@ #include "../geometry/juce_RectangleList.h" #include "../colour/juce_ColourGradient.h" #include "../colour/juce_FillType.h" - +class AttributedString; //============================================================================== /** @@ -103,6 +103,7 @@ public: virtual void setFont (const Font& newFont) = 0; virtual Font getFont() = 0; virtual void drawGlyph (int glyphNumber, const AffineTransform& transform) = 0; + virtual bool drawTextLayout (const AttributedString&, const Rectangle&) { return false; } }; diff --git a/modules/juce_graphics/fonts/juce_AttributedString.cpp b/modules/juce_graphics/fonts/juce_AttributedString.cpp new file mode 100644 index 0000000000..8389d6912b --- /dev/null +++ b/modules/juce_graphics/fonts/juce_AttributedString.cpp @@ -0,0 +1,634 @@ +/* + ============================================================================== + + This file is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-11 by Raw Material Software Ltd. + + ------------------------------------------------------------------------------ + + JUCE can be redistributed and/or modified under the terms of the GNU General + Public License (Version 2), as published by the Free Software Foundation. + A copy of the license is included in the JUCE distribution, or can be found + online at www.gnu.org/licenses. + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.rawmaterialsoftware.com/juce for more information. + + ============================================================================== +*/ + +BEGIN_JUCE_NAMESPACE + +//============================================================================== +AttributedString::Attribute::Attribute (const Range& range_, const Colour& colour_) + : range (range_), colour (new Colour (colour_)) +{ +} + +AttributedString::Attribute::Attribute (const Range& range_, const Font& font_) + : range (range_), font (new Font (font_)) +{ +} + +AttributedString::Attribute::Attribute (const Attribute& other) + : range (other.range), + font (other.font.createCopy()), + colour (other.colour.createCopy()) +{ +} + +AttributedString::Attribute::~Attribute() {} + +//============================================================================== +AttributedString::AttributedString() + : lineSpacing (0.0f), + justification (Justification::left), + wordWrap (AttributedString::byWord), + readingDirection (AttributedString::natural) +{ +} + +AttributedString::AttributedString (const String& newString) + : text (newString), + lineSpacing (0.0f), + justification (Justification::left), + wordWrap (AttributedString::byWord), + readingDirection (AttributedString::natural) +{ +} + +AttributedString::AttributedString (const AttributedString& other) + : text (other.text), + lineSpacing (other.lineSpacing), + justification (other.justification), + wordWrap (other.wordWrap), + readingDirection (other.readingDirection) +{ + attributes.addCopiesOf (other.attributes); +} + +AttributedString& AttributedString::operator= (const AttributedString& other) +{ + if (this != &other) + { + text = other.text; + lineSpacing = other.lineSpacing; + justification = other.justification; + wordWrap = other.wordWrap; + readingDirection = other.readingDirection; + attributes.clear(); + attributes.addCopiesOf (other.attributes); + } + + return *this; +} + +AttributedString::~AttributedString() {} + +void AttributedString::setText (const String& other) +{ + text = other; +} + +void AttributedString::setJustification (const Justification& newJustification) noexcept +{ + justification = newJustification; +} + +void AttributedString::setWordWrap (WordWrap newWordWrap) noexcept +{ + wordWrap = newWordWrap; +} + +void AttributedString::setReadingDirection (ReadingDirection newReadingDirection) noexcept +{ + readingDirection = newReadingDirection; +} + +void AttributedString::setLineSpacing (const float newLineSpacing) noexcept +{ + lineSpacing = newLineSpacing; +} + +void AttributedString::setColour (const Range& range, const Colour& colour) +{ + attributes.add (new Attribute (range, colour)); +} + +void AttributedString::setFont (const Range& range, const Font& font) +{ + attributes.add (new Attribute (range, font)); +} + +void AttributedString::draw (Graphics& g, const Rectangle& area) const +{ + if (text.isNotEmpty() && g.clipRegionIntersects (area.getSmallestIntegerContainer())) + { + if (! g.getInternalContext()->drawTextLayout (*this, area)) + { + GlyphLayout layout; + layout.setText (*this, area.getWidth()); + layout.draw (g, area); + } + } +} + + +//============================================================================== +GlyphLayout::Glyph::Glyph (const int glyphCode_, const Point& anchor_) noexcept + : glyphCode (glyphCode_), anchor (anchor_) +{ +} + +GlyphLayout::Glyph::~Glyph() {} + +//============================================================================== +GlyphLayout::Run::Run() + : colour (0xff000000) +{ +} + +GlyphLayout::Run::Run (const Range& range, const int numGlyphsToPreallocate) + : stringRange (range), colour (0xff000000) +{ + glyphs.ensureStorageAllocated (numGlyphsToPreallocate); +} + +GlyphLayout::Run::~Run() {} + +GlyphLayout::Glyph& GlyphLayout::Run::getGlyph (const int index) const +{ + return *glyphs.getUnchecked (index); +} + +void GlyphLayout::Run::ensureStorageAllocated (int numGlyphsNeeded) +{ + glyphs.ensureStorageAllocated (numGlyphsNeeded); +} + +void GlyphLayout::Run::setStringRange (const Range& newStringRange) noexcept +{ + stringRange = newStringRange; +} + +void GlyphLayout::Run::setFont (const Font& newFont) +{ + font = newFont; +} + +void GlyphLayout::Run::setColour (const Colour& newColour) noexcept +{ + colour = newColour; +} + +void GlyphLayout::Run::addGlyph (Glyph* glyph) +{ + glyphs.add (glyph); +} + +//============================================================================== +GlyphLayout::Line::Line() noexcept + : ascent (0.0f), descent (0.0f), leading (0.0f) +{ +} + +GlyphLayout::Line::Line (const Range& stringRange_, const Point& lineOrigin_, + const float ascent_, const float descent_, const float leading_, + const int numRunsToPreallocate) + : stringRange (stringRange_), lineOrigin (lineOrigin_), + ascent (ascent_), descent (descent_), leading (leading_) +{ + runs.ensureStorageAllocated (numRunsToPreallocate); +} + +GlyphLayout::Line::~Line() +{ +} + +GlyphLayout::Run& GlyphLayout::Line::getRun (const int index) const noexcept +{ + return *runs.getUnchecked (index); +} + +void GlyphLayout::Line::setStringRange (const Range& newStringRange) noexcept +{ + stringRange = newStringRange; +} + +void GlyphLayout::Line::setLineOrigin (const Point& newLineOrigin) noexcept +{ + lineOrigin = newLineOrigin; +} + +void GlyphLayout::Line::setLeading (float newLeading) noexcept +{ + leading = newLeading; +} + +void GlyphLayout::Line::increaseAscentDescent (float newAscent, float newDescent) noexcept +{ + ascent = jmax (ascent, newAscent); + descent = jmax (descent, newDescent); +} + +void GlyphLayout::Line::addRun (Run* run) +{ + runs.add (run); +} + +//============================================================================== +GlyphLayout::GlyphLayout() + : width (0), justification (Justification::topLeft) +{ +} + +GlyphLayout::~GlyphLayout() +{ +} + +void GlyphLayout::setText (const AttributedString& text, float maxWidth) +{ + lines.clear(); + width = maxWidth; + justification = text.getJustification(); + + if (! createNativeLayout (text)) + createStandardLayout (text); +} + +float GlyphLayout::getHeight() const noexcept +{ + const Line* const lastLine = lines.getLast(); + + return lastLine != nullptr ? lastLine->getLineOrigin().getY() + lastLine->getDescent() + : 0; +} + +GlyphLayout::Line& GlyphLayout::getLine (const int index) const +{ + return *lines[index]; +} + +void GlyphLayout::ensureStorageAllocated (int numLinesNeeded) +{ + lines.ensureStorageAllocated (numLinesNeeded); +} + +void GlyphLayout::addLine (Line* line) +{ + lines.add (line); +} + +void GlyphLayout::draw (Graphics& g, const Rectangle& area) const +{ + const Point origin (justification.appliedToRectangle (Rectangle (0, 0, width, getHeight()), area).getPosition()); + + LowLevelGraphicsContext& context = *g.getInternalContext(); + + for (int i = 0; i < getNumLines(); ++i) + { + const Line& line = getLine (i); + const Point lineOrigin (origin + line.getLineOrigin()); + + for (int j = 0; j < line.getNumRuns(); ++j) + { + const Run& run = line.getRun (j); + context.setFont (run.getFont()); + context.setFill (run.getColour()); + + for (int k = 0; k < run.getNumGlyphs(); ++k) + { + const Glyph& glyph = run.getGlyph (k); + context.drawGlyph (glyph.glyphCode, AffineTransform::translation (lineOrigin.x + glyph.anchor.x, + lineOrigin.y + glyph.anchor.y)); + } + } + } +} + +//============================================================================== +namespace GlyphLayoutHelpers +{ + struct FontAndColour + { + FontAndColour (const Font* font_) noexcept : font (font_), colour (0xff000000) {} + + const Font* font; + Colour colour; + + bool operator!= (const FontAndColour& other) const noexcept + { + return (font != other.font && *font != *other.font) || colour != other.colour; + } + }; + + struct RunAttribute + { + RunAttribute (const FontAndColour& fontAndColour_, const Range& range_) noexcept + : fontAndColour (fontAndColour_), range (range_) + {} + + FontAndColour fontAndColour; + Range range; + }; + + struct Token + { + Token (const String& t, const Font& f, const Colour& c, const bool isWhitespace_) + : text (t), font (f), colour (c), + area (font.getStringWidth (t), roundToInt (f.getHeight())), + isWhitespace (isWhitespace_), + isNewLine (t.containsChar ('\n') || t.containsChar ('\r')) + {} + + const String text; + const Font font; + const Colour colour; + Rectangle area; + int line, lineHeight; + const bool isWhitespace, isNewLine; + + private: + Token& operator= (const Token&); + }; + + class TokenList + { + public: + TokenList() noexcept : totalLines (0) {} + + void createLayout (const AttributedString& text, GlyphLayout& glyphLayout) + { + tokens.ensureStorageAllocated (64); + glyphLayout.ensureStorageAllocated (totalLines); + + addTextRuns (text); + + layout ((int) glyphLayout.getWidth()); + + int charPosition = 0; + int lineStartPosition = 0; + int runStartPosition = 0; + + GlyphLayout::Line* glyphLine = new GlyphLayout::Line(); + GlyphLayout::Run* glyphRun = new GlyphLayout::Run(); + + for (int i = 0; i < tokens.size(); ++i) + { + const Token* const t = tokens.getUnchecked (i); + const Point tokenPos (t->area.getPosition().toFloat()); + + Array newGlyphs; + Array xOffsets; + t->font.getGlyphPositions (t->text.trimEnd(), newGlyphs, xOffsets); + + glyphRun->ensureStorageAllocated (glyphRun->getNumGlyphs() + newGlyphs.size()); + + for (int j = 0; j < newGlyphs.size(); ++j) + { + if (charPosition == lineStartPosition) + glyphLine->setLineOrigin (tokenPos.translated (0, t->font.getAscent())); + + glyphRun->addGlyph (new GlyphLayout::Glyph (newGlyphs.getUnchecked(j), + Point (tokenPos.getX() + xOffsets.getUnchecked (j), 0))); + ++charPosition; + } + + if (t->isWhitespace || t->isNewLine) + ++charPosition; + + const Token* const nextToken = tokens [i + 1]; + + if (nextToken == nullptr) // this is the last token + { + addRun (glyphLine, glyphRun, t, runStartPosition, charPosition); + glyphLine->setStringRange (Range (lineStartPosition, charPosition)); + glyphLayout.addLine (glyphLine); + } + else + { + if (t->font != nextToken->font || t->colour != nextToken->colour) + { + addRun (glyphLine, glyphRun, t, runStartPosition, charPosition); + runStartPosition = charPosition; + glyphRun = new GlyphLayout::Run(); + } + + if (t->line != nextToken->line) + { + addRun (glyphLine, glyphRun, t, runStartPosition, charPosition); + glyphLine->setStringRange (Range (lineStartPosition, charPosition)); + glyphLayout.addLine (glyphLine); + + runStartPosition = charPosition; + lineStartPosition = charPosition; + glyphLine = new GlyphLayout::Line(); + glyphRun = new GlyphLayout::Run(); + } + } + } + + if ((text.getJustification().getFlags() & (Justification::right | Justification::horizontallyCentred)) != 0) + { + const int totalW = (int) glyphLayout.getWidth(); + + for (int i = 0; i < totalLines; ++i) + { + const int lineW = getLineWidth (i); + float dx = 0; + + if ((text.getJustification().getFlags() & Justification::right) != 0) + dx = (float) (totalW - lineW); + else + dx = (totalW - lineW) / 2.0f; + + GlyphLayout::Line& glyphLine = glyphLayout.getLine (i); + glyphLine.setLineOrigin (glyphLine.getLineOrigin().translated (dx, 0)); + } + } + } + + private: + static void addRun (GlyphLayout::Line* glyphLine, GlyphLayout::Run* glyphRun, + const Token* const t, const int start, const int end) + { + glyphRun->setStringRange (Range (start, end)); + glyphRun->setFont (t->font); + glyphRun->setColour (t->colour); + glyphLine->increaseAscentDescent (t->font.getAscent(), t->font.getDescent()); + glyphLine->addRun (glyphRun); + } + + void appendText (const AttributedString& text, const Range& stringRange, + const Font& font, const Colour& colour) + { + String stringText (text.getText().substring(stringRange.getStart(), stringRange.getEnd())); + String::CharPointerType t (stringText.getCharPointer()); + String currentString; + int lastCharType = 0; + + for (;;) + { + const juce_wchar c = t.getAndAdvance(); + if (c == 0) + break; + + int charType; + if (c == '\r' || c == '\n') + charType = 0; + else if (CharacterFunctions::isWhitespace (c)) + charType = 2; + else + charType = 1; + + if (charType == 0 || charType != lastCharType) + { + if (currentString.isNotEmpty()) + tokens.add (new Token (currentString, font, colour, + lastCharType == 2 || lastCharType == 0)); + + currentString = String::charToString (c); + + if (c == '\r' && *t == '\n') + currentString += t.getAndAdvance(); + } + else + { + currentString += c; + } + + lastCharType = charType; + } + + if (currentString.isNotEmpty()) + tokens.add (new Token (currentString, font, colour, lastCharType == 2)); + } + + void layout (const int maxWidth) + { + int x = 0, y = 0, h = 0; + int i; + + for (i = 0; i < tokens.size(); ++i) + { + Token* const t = tokens.getUnchecked(i); + t->area.setPosition (x, y); + t->line = totalLines; + x += t->area.getWidth(); + h = jmax (h, t->area.getHeight()); + + const Token* nextTok = tokens[i + 1]; + + if (nextTok == 0) + break; + + if (t->isNewLine || ((! nextTok->isWhitespace) && x + nextTok->area.getWidth() > maxWidth)) + { + setLastLineHeight (i + 1, h); + x = 0; + y += h; + h = 0; + ++totalLines; + } + } + + setLastLineHeight (jmin (i + 1, tokens.size()), h); + ++totalLines; + } + + void setLastLineHeight (int i, const int height) noexcept + { + while (--i >= 0) + { + Token* const tok = tokens.getUnchecked (i); + + if (tok->line == totalLines) + tok->lineHeight = height; + else + break; + } + } + + int getLineWidth (const int lineNumber) const noexcept + { + int maxW = 0; + + for (int i = tokens.size(); --i >= 0;) + { + const Token* const t = tokens.getUnchecked (i); + + if (t->line == lineNumber && ! t->isWhitespace) + maxW = jmax (maxW, t->area.getRight()); + } + + return maxW; + } + + void addTextRuns (const AttributedString& text) + { + Font defaultFont; + Array runAttributes; + + { + const int stringLength = text.getText().length(); + int rangeStart = 0; + FontAndColour lastFontAndColour (nullptr); + + // Iterate through every character in the string + for (int i = 0; i < stringLength; ++i) + { + FontAndColour newFontAndColour (&defaultFont); + const int numCharacterAttributes = text.getNumAttributes(); + + for (int j = 0; j < numCharacterAttributes; ++j) + { + const AttributedString::Attribute* const attr = text.getAttribute (j); + + // Check if the current character falls within the range of a font attribute + if (attr->getFont() != nullptr && (i >= attr->range.getStart()) && (i < attr->range.getEnd())) + newFontAndColour.font = attr->getFont(); + + // Check if the current character falls within the range of a foreground colour attribute + if (attr->getColour() != nullptr && (i >= attr->range.getStart()) && (i < attr->range.getEnd())) + newFontAndColour.colour = *attr->getColour(); + } + + if (i > 0 && (newFontAndColour != lastFontAndColour || i == stringLength - 1)) + { + runAttributes.add (RunAttribute (lastFontAndColour, + Range (rangeStart, (i < stringLength - 1) ? i : (i + 1)))); + rangeStart = i; + } + + lastFontAndColour = newFontAndColour; + } + } + + for (int i = 0; i < runAttributes.size(); ++i) + { + const RunAttribute& r = runAttributes.getReference(i); + appendText (text, r.range, *(r.fontAndColour.font), r.fontAndColour.colour); + } + } + + OwnedArray tokens; + int totalLines; + + JUCE_DECLARE_NON_COPYABLE (TokenList); + }; +} + +//============================================================================== +void GlyphLayout::createStandardLayout (const AttributedString& text) +{ + GlyphLayoutHelpers::TokenList l; + l.createLayout (text, *this); +} + +END_JUCE_NAMESPACE diff --git a/modules/juce_graphics/fonts/juce_AttributedString.h b/modules/juce_graphics/fonts/juce_AttributedString.h new file mode 100644 index 0000000000..4e7b554cf2 --- /dev/null +++ b/modules/juce_graphics/fonts/juce_AttributedString.h @@ -0,0 +1,318 @@ +/* + ============================================================================== + + This file is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-11 by Raw Material Software Ltd. + + ------------------------------------------------------------------------------ + + JUCE can be redistributed and/or modified under the terms of the GNU General + Public License (Version 2), as published by the Free Software Foundation. + A copy of the license is included in the JUCE distribution, or can be found + online at www.gnu.org/licenses. + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.rawmaterialsoftware.com/juce for more information. + + ============================================================================== +*/ + +#ifndef __JUCE_ATTRIBUTEDSTRING_JUCEHEADER__ +#define __JUCE_ATTRIBUTEDSTRING_JUCEHEADER__ + + +//============================================================================== +/** + A text string with a set of colour/font settings that are associated with sub-ranges + of the text. + + An attributed string lets you create a string with varied fonts, colours, word-wrapping, + layout, etc., and draw it using AttributedString::draw(). +*/ +class JUCE_API AttributedString +{ +public: + /** Creates an empty attributed string. */ + AttributedString(); + + /** Creates an attributed string with the given text. */ + explicit AttributedString (const String& text); + + AttributedString (const AttributedString& other); + AttributedString& operator= (const AttributedString& other); + + /** Destructor. */ + ~AttributedString(); + + //============================================================================== + /** Returns the complete text of this attributed string. */ + const String& getText() const noexcept { return text; } + + /** Sets the text. + This will change the text, but won't affect any of the attributes that have + been added. + */ + void setText (const String& newText); + + //============================================================================== + /** Draws this string within the given area. + The layout of the string within the rectangle is controlled by the justification + value passed to setJustification(). + */ + void draw (Graphics& g, const Rectangle& area) const; + + //============================================================================== + /** Returns the justification that should be used for laying-out the text. + This may include both vertical and horizontal flags. + */ + Justification getJustification() const noexcept { return justification; } + + /** Sets the justification that should be used for laying-out the text. + This may include both vertical and horizontal flags. + */ + void setJustification (const Justification& newJustification) noexcept; + + //============================================================================== + /** Types of word-wrap behaviour. + @see getWordWrap, setWordWrap + */ + enum WordWrap + { + none, /**< No word-wrapping: lines extend indefinitely. */ + byWord, /**< Lines are wrapped on a word boundary. */ + byChar, /**< Lines are wrapped on a character boundary. */ + }; + + /** Returns the word-wrapping behaviour. */ + WordWrap getWordWrap() const noexcept { return wordWrap; } + + /** Sets the word-wrapping behaviour. */ + void setWordWrap (WordWrap newWordWrap) noexcept; + + //============================================================================== + /** Types of reading direction that can be used. + @see getReadingDirection, setReadingDirection + */ + enum ReadingDirection + { + natural, + leftToRight, + rightToLeft, + }; + + /** Returns the reading direction for the text. */ + ReadingDirection getReadingDirection() const noexcept { return readingDirection; } + + /** Sets the reading direction that should be used for the text. */ + void setReadingDirection (ReadingDirection newReadingDirection) noexcept; + + //============================================================================== + /** Returns the extra line-spacing distance. */ + float getLineSpacing() const noexcept { return lineSpacing; } + + /** Sets an extra line-spacing distance. */ + void setLineSpacing (float newLineSpacing) noexcept; + + //============================================================================== + /** An attribute that has been applied to a range of characters in an AttributedString. */ + class JUCE_API Attribute + { + public: + /** Creates an attribute that changes the colour for a range of characters. + @see AttributedString::setColour() + */ + Attribute (const Range& range, const Colour& colour); + + /** Creates an attribute that changes the font for a range of characters. + @see AttributedString::setFont() + */ + Attribute (const Range& range, const Font& font); + + Attribute (const Attribute&); + ~Attribute(); + + /** If this attribute specifies a font, this returns it; otherwise it returns nullptr. */ + const Font* getFont() const noexcept { return font; } + + /** If this attribute specifies a colour, this returns it; otherwise it returns nullptr. */ + const Colour* getColour() const noexcept { return colour; } + + /** The range of characters to which this attribute should be applied. */ + const Range range; + + private: + ScopedPointer font; + ScopedPointer colour; + + Attribute& operator= (const Attribute&); + }; + + /** Returns the number of attributes that have been added to this string. */ + int getNumAttributes() const noexcept { return attributes.size(); } + + /** Returns one of the string's attributes. + The index provided must be less than getNumAttributes(), and >= 0. + */ + const Attribute* getAttribute (int index) const noexcept { return attributes.getUnchecked (index); } + + //============================================================================== + /** Adds a colour attribute for the specified range. */ + void setColour (const Range& range, const Colour& colour); + + /** Adds a font attribute for the specified range. */ + void setFont (const Range& range, const Font& font); + +private: + String text; + float lineSpacing; + Justification justification; + WordWrap wordWrap; + ReadingDirection readingDirection; + OwnedArray attributes; +}; + + +//============================================================================== +/** + +*/ +class JUCE_API GlyphLayout +{ +public: + /** Creates an empty layout. */ + GlyphLayout(); + + /** Destructor. */ + ~GlyphLayout(); + + //============================================================================== + /** Creates a layout from the given attributed string. + This will replace any data that is currently stored in the layout. + */ + void setText (const AttributedString& text, float maxWidth); + + /** Draws the layout within the specified area. + The position of the text within the rectangle is controlled by the justification + flags set in the original AttributedString that was used to create this layout. + */ + void draw (Graphics& g, const Rectangle& area) const; + + //============================================================================== + /** A positioned glyph. */ + class JUCE_API Glyph + { + public: + Glyph (int glyphCode, const Point& anchor) noexcept; + ~Glyph(); + + const int glyphCode; + const Point anchor; + + private: + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Glyph); + }; + + //============================================================================== + /** A sequence of glyphs. */ + class JUCE_API Run + { + public: + Run(); + Run (const Range& range, int numGlyphsToPreallocate); + ~Run(); + + int getNumGlyphs() const noexcept { return glyphs.size(); } + const Font& getFont() const noexcept { return font; } + const Colour& getColour() const { return colour; } + Glyph& getGlyph (int index) const; + + void setStringRange (const Range& newStringRange) noexcept; + void setFont (const Font& newFont); + void setColour (const Colour& newColour) noexcept; + + void addGlyph (Glyph* glyph); + void ensureStorageAllocated (int numGlyphsNeeded); + + private: + OwnedArray glyphs; + Range stringRange; + Font font; + Colour colour; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Run); + }; + + //============================================================================== + /** A line containing a sequence of glyph-runs. */ + class JUCE_API Line + { + public: + Line() noexcept; + Line (const Range& stringRange, const Point& lineOrigin, + float ascent, float descent, float leading, int numRunsToPreallocate); + ~Line(); + + const Point& getLineOrigin() const noexcept { return lineOrigin; } + + float getAscent() const noexcept { return ascent; } + float getDescent() const noexcept { return descent; } + float getLeading() const noexcept { return leading; } + + int getNumRuns() const noexcept { return runs.size(); } + Run& getRun (int index) const noexcept; + + void setStringRange (const Range& newStringRange) noexcept; + void setLineOrigin (const Point& newLineOrigin) noexcept; + void setLeading (float newLeading) noexcept; + void increaseAscentDescent (float newAscent, float newDescent) noexcept; + + void addRun (Run* run); + + private: + OwnedArray runs; + Range stringRange; + Point lineOrigin; + float ascent, descent, leading; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Line); + }; + + //============================================================================== + /** Returns the maximum width of the content. */ + float getWidth() const noexcept { return width; } + + /** Returns the maximum height of the content. */ + float getHeight() const noexcept; + + /** Returns the number of lines in the layout. */ + int getNumLines() const noexcept { return lines.size(); } + + /** Returns one of the lines. */ + Line& getLine (int index) const; + + /** Adds a line to the layout. The object passed-in will be owned and deleted by the layout + when it is no longer needed. + */ + void addLine (Line* line); + + /** Pre-allocates space for the specified number of lines. */ + void ensureStorageAllocated (int numLinesNeeded); + +private: + OwnedArray lines; + float width; + Justification justification; + + void createStandardLayout (const AttributedString&); + bool createNativeLayout (const AttributedString&); + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (GlyphLayout); +}; + +#endif // __JUCE_ATTRIBUTEDSTRING_JUCEHEADER__ diff --git a/modules/juce_graphics/juce_graphics.cpp b/modules/juce_graphics/juce_graphics.cpp index 6b385bdf72..7a16c95962 100644 --- a/modules/juce_graphics/juce_graphics.cpp +++ b/modules/juce_graphics/juce_graphics.cpp @@ -43,6 +43,12 @@ #if JUCE_MAC #import +#elif JUCE_WINDOWS + #if JUCE_USE_DIRECTWRITE + #include + #include + #endif + #elif JUCE_IOS #import #import @@ -78,6 +84,7 @@ #include "image_formats/juce_GIFLoader.cpp" #include "image_formats/juce_JPEGLoader.cpp" #include "image_formats/juce_PNGLoader.cpp" +#include "fonts/juce_AttributedString.cpp" #include "fonts/juce_CustomTypeface.cpp" #include "fonts/juce_Font.cpp" #include "fonts/juce_GlyphArrangement.cpp" @@ -93,13 +100,17 @@ BEGIN_JUCE_NAMESPACE #if JUCE_MAC || JUCE_IOS #include "../juce_core/native/juce_osx_ObjCHelpers.h" #include "../juce_core/native/juce_mac_ObjCSuffix.h" + #include "native/juce_mac_CoreGraphicsHelpers.h" #include "native/juce_mac_Fonts.mm" #include "native/juce_mac_CoreGraphicsContext.mm" #elif JUCE_WINDOWS + #include "../juce_core/native/juce_win32_ComSmartPtr.h" #if JUCE_DIRECT2D #include "native/juce_win32_Direct2DGraphicsContext.cpp" #endif + #include "native/juce_win32_DirectWriteTypeface.cpp" + #include "native/juce_win32_DirectWriteTypeLayout.cpp" #include "native/juce_win32_Fonts.cpp" #elif JUCE_LINUX diff --git a/modules/juce_graphics/juce_graphics.h b/modules/juce_graphics/juce_graphics.h index c694611321..8cbbcb96de 100644 --- a/modules/juce_graphics/juce_graphics.h +++ b/modules/juce_graphics/juce_graphics.h @@ -40,6 +40,15 @@ #define JUCE_USE_COREIMAGE_LOADER 1 #endif +/** Config: JUCE_USE_DIRECTWRITE + + Enabling this flag means that DirectWrite will be used when available for font + management and layout. +*/ +#ifndef JUCE_USE_DIRECTWRITE + #define JUCE_USE_DIRECTWRITE 1 +#endif + #ifndef JUCE_INCLUDE_PNGLIB_CODE #define JUCE_INCLUDE_PNGLIB_CODE 1 #endif @@ -132,6 +141,9 @@ BEGIN_JUCE_NAMESPACE #ifndef __JUCE_IMAGEFILEFORMAT_JUCEHEADER__ #include "images/juce_ImageFileFormat.h" #endif +#ifndef __JUCE_ATTRIBUTEDSTRING_JUCEHEADER__ + #include "fonts/juce_AttributedString.h" +#endif #ifndef __JUCE_CUSTOMTYPEFACE_JUCEHEADER__ #include "fonts/juce_CustomTypeface.h" #endif diff --git a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h index 03b9ab3102..d2d9aee444 100644 --- a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h +++ b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h @@ -72,6 +72,7 @@ public: void setFont (const Font& newFont); Font getFont(); void drawGlyph (int glyphNumber, const AffineTransform& transform); + bool drawTextLayout (const AttributedString& text, const Rectangle&); private: CGContextRef context; diff --git a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm index 577813f3df..6018b5d9f1 100644 --- a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm +++ b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm @@ -23,7 +23,6 @@ ============================================================================== */ -#include "juce_mac_CoreGraphicsHelpers.h" #include "juce_mac_CoreGraphicsContext.h" //============================================================================== @@ -622,6 +621,16 @@ void CoreGraphicsContext::drawGlyph (int glyphNumber, const AffineTransform& tra } } +bool CoreGraphicsContext::drawTextLayout (const AttributedString& text, const Rectangle& area) +{ + #if JUCE_CORETEXT_AVAILABLE + CoreTextTypeLayout::drawToCGContext (text, area, context, flipHeight); + return true; + #else + return false; + #endif +} + CoreGraphicsContext::SavedState::SavedState() : font (1.0f), fontRef (0), fontTransform (CGAffineTransformIdentity), shading (0), numGradientLookupEntries (0) diff --git a/modules/juce_graphics/native/juce_mac_Fonts.mm b/modules/juce_graphics/native/juce_mac_Fonts.mm index a01d4d6307..09f4413939 100644 --- a/modules/juce_graphics/native/juce_mac_Fonts.mm +++ b/modules/juce_graphics/native/juce_mac_Fonts.mm @@ -31,6 +31,270 @@ #if JUCE_CORETEXT_AVAILABLE +namespace CoreTextTypeLayout +{ + CFAttributedStringRef createCFAttributedString (const AttributedString& text) + { + #if JUCE_IOS + CGColorSpaceRef rgbColourSpace = CGColorSpaceCreateDeviceRGB(); + #endif + + CFStringRef cfText = text.getText().toCFString(); + CFMutableAttributedStringRef attribString = CFAttributedStringCreateMutable (kCFAllocatorDefault, 0); + CFAttributedStringReplaceString (attribString, CFRangeMake(0, 0), cfText); + CFRelease (cfText); + + const int numCharacterAttributes = text.getNumAttributes(); + + for (int i = 0; i < numCharacterAttributes; ++i) + { + const AttributedString::Attribute* const attr = text.getAttribute (i); + + if (attr->range.getStart() > CFAttributedStringGetLength (attribString)) + continue; + + Range range (attr->range); + range.setEnd (jmin (range.getEnd(), (int) CFAttributedStringGetLength (attribString))); + + if (attr->getFont() != nullptr) + { + // Apply fontHeightToCGSizeFactor to the font size since this is how glyphs are drawn + CTFontRef ctFontRef = CTFontCreateWithName (attr->getFont()->getTypefaceName().toCFString(), 1024, nullptr); + CGFontRef cgFontRef = CTFontCopyGraphicsFont (ctFontRef, nullptr); + CFRelease (ctFontRef); + + const int totalHeight = abs (CGFontGetAscent (cgFontRef)) + abs (CGFontGetDescent (cgFontRef)); + float fontHeightToCGSizeFactor = CGFontGetUnitsPerEm (cgFontRef) / (float) totalHeight; + CGFontRelease (cgFontRef); + + ctFontRef = CTFontCreateWithName (attr->getFont()->getTypefaceName().toCFString(), + attr->getFont()->getHeight() * fontHeightToCGSizeFactor, nullptr); + + CFAttributedStringSetAttribute (attribString, CFRangeMake (range.getStart(), range.getLength()), + kCTFontAttributeName, ctFontRef); + CFRelease (ctFontRef); + } + + if (attr->getColour() != nullptr) + { + #if JUCE_IOS + const CGFloat components[] = { attr->getColour()->getFloatRed(), + attr->getColour()->getFloatGreen(), + attr->getColour()->getFloatBlue(), + attr->getColour()->getFloatAlpha() }; + CGColorRef colour = CGColorCreate (rgbColourSpace, components); + #else + CGColorRef colour = CGColorCreateGenericRGB (attr->getColour()->getFloatRed(), + attr->getColour()->getFloatGreen(), + attr->getColour()->getFloatBlue(), + attr->getColour()->getFloatAlpha()); + #endif + + CFAttributedStringSetAttribute (attribString, + CFRangeMake (range.getStart(), range.getLength()), + kCTForegroundColorAttributeName, colour); + CGColorRelease (colour); + } + } + + // Paragraph Attributes + CTTextAlignment ctTextAlignment = kCTLeftTextAlignment; + CTLineBreakMode ctLineBreakMode = kCTLineBreakByWordWrapping; + const CGFloat ctLineSpacing = text.getLineSpacing(); + + switch (text.getJustification().getOnlyHorizontalFlags()) + { + case Justification::left: break; + case Justification::right: ctTextAlignment = kCTRightTextAlignment; break; + case Justification::horizontallyCentred: ctTextAlignment = kCTCenterTextAlignment; break; + case Justification::horizontallyJustified: ctTextAlignment = kCTJustifiedTextAlignment; break; + default: jassertfalse; break; // Illegal justification flags + } + + switch (text.getWordWrap()) + { + case AttributedString::byWord: break; + case AttributedString::none: ctLineBreakMode = kCTLineBreakByClipping; break; + case AttributedString::byChar: ctLineBreakMode = kCTLineBreakByCharWrapping; break; + default: break; + } + + CTParagraphStyleSetting settings[] = + { + { kCTParagraphStyleSpecifierAlignment, sizeof (CTTextAlignment), &ctTextAlignment }, + { kCTParagraphStyleSpecifierLineBreakMode, sizeof (CTLineBreakMode), &ctLineBreakMode }, + { kCTParagraphStyleSpecifierLineSpacing, sizeof (CGFloat), &ctLineSpacing } + }; + + CTParagraphStyleRef ctParagraphStyleRef = CTParagraphStyleCreate (settings, numElementsInArray (settings)); + CFAttributedStringSetAttribute (attribString, CFRangeMake (0, CFAttributedStringGetLength (attribString)), + kCTParagraphStyleAttributeName, ctParagraphStyleRef); + CFRelease (ctParagraphStyleRef); + #if JUCE_IOS + CGColorSpaceRelease (rgbColourSpace); + #endif + return attribString; + } + + float getTextHeight (CTFrameRef frame, const CGRect& bounds) + { + CFArrayRef lines = CTFrameGetLines (frame); + CFIndex numLines = CFArrayGetCount (lines); + CFIndex lastLineIndex = numLines - 1; + CGFloat descent; + CTLineRef line = (CTLineRef) CFArrayGetValueAtIndex (lines, lastLineIndex); + CTLineGetTypographicBounds (line, nullptr, &descent, nullptr); + CGPoint lastLineOrigin; + CTFrameGetLineOrigins (frame, CFRangeMake (lastLineIndex, 1), &lastLineOrigin); + return bounds.size.height - lastLineOrigin.y + descent; + } + + void drawToCGContext (const AttributedString& text, const Rectangle& area, + const CGContextRef& context, const float flipHeight) + { + CFAttributedStringRef attribString = CoreTextTypeLayout::createCFAttributedString (text); + CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString (attribString); + CFRelease (attribString); + + CGMutablePathRef path = CGPathCreateMutable(); + CGRect bounds = CGRectMake ((CGFloat) area.getX(), flipHeight - (CGFloat) area.getBottom(), + (CGFloat) area.getWidth(), (CGFloat) area.getHeight()); + CGPathAddRect (path, nullptr, bounds); + + CTFrameRef frame = CTFramesetterCreateFrame (framesetter, CFRangeMake (0, 0), path, NULL); + CFRelease (framesetter); + CGPathRelease (path); + + float dy = 0; + if (text.getJustification().getOnlyVerticalFlags() == Justification::bottom) + dy = bounds.size.height - getTextHeight (frame, bounds); + else if (text.getJustification().getOnlyVerticalFlags() == Justification::verticallyCentred) + dy = (bounds.size.height - getTextHeight (frame, bounds)) / 2.0f; + + if (dy != 0) + { + CGContextSaveGState (context); + CGContextTranslateCTM (context, 0, -dy); + } + + CTFrameDraw (frame, context); + + if (dy != 0) + CGContextRestoreGState (context); + + CFRelease (frame); + } + + void createLayout (GlyphLayout& glyphLayout, const AttributedString& text) + { + CFAttributedStringRef attribString = CoreTextTypeLayout::createCFAttributedString (text); + CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString (attribString); + CFRelease (attribString); + + CGMutablePathRef path = CGPathCreateMutable(); + const CGRect bounds = CGRectMake (0, 0, glyphLayout.getWidth(), 1.0e6f); + CGPathAddRect (path, nullptr, bounds); + + CTFrameRef frame = CTFramesetterCreateFrame (framesetter, CFRangeMake(0, 0), path, nullptr); + CFRelease (framesetter); + CGPathRelease (path); + + CFArrayRef lines = CTFrameGetLines (frame); + const CFIndex numLines = CFArrayGetCount (lines); + + glyphLayout.ensureStorageAllocated (numLines); + + for (CFIndex i = 0; i < numLines; ++i) + { + CTLineRef line = (CTLineRef) CFArrayGetValueAtIndex (lines, i); + + CFArrayRef runs = CTLineGetGlyphRuns (line); + const CFIndex numRuns = CFArrayGetCount (runs); + + const CFRange cfrlineStringRange = CTLineGetStringRange (line); + const CFIndex lineStringEnd = cfrlineStringRange.location + cfrlineStringRange.length - 1; + const Range lineStringRange ((int) cfrlineStringRange.location, (int) lineStringEnd); + + CGPoint cgpLineOrigin; + CTFrameGetLineOrigins (frame, CFRangeMake(i, 1), &cgpLineOrigin); + + Point lineOrigin ((float) cgpLineOrigin.x, bounds.size.height - (float) cgpLineOrigin.y); + + CGFloat ascent, descent, leading; + CTLineGetTypographicBounds (line, &ascent, &descent, &leading); + + GlyphLayout::Line* const glyphLine = new GlyphLayout::Line (lineStringRange, lineOrigin, + (float) ascent, (float) descent, (float) leading, + (int) numRuns); + glyphLayout.addLine (glyphLine); + + for (CFIndex j = 0; j < numRuns; ++j) + { + CTRunRef run = (CTRunRef) CFArrayGetValueAtIndex (runs, j); + const CFIndex numGlyphs = CTRunGetGlyphCount (run); + const CFRange runStringRange = CTRunGetStringRange (run); + + GlyphLayout::Run* const glyphRun = new GlyphLayout::Run (Range ((int) runStringRange.location, + (int) (runStringRange.location + runStringRange.length - 1)), + (int) numGlyphs); + glyphLine->addRun (glyphRun); + + CFDictionaryRef runAttributes = CTRunGetAttributes (run); + + CTFontRef ctRunFont; + if (CFDictionaryGetValueIfPresent (runAttributes, kCTFontAttributeName, (const void **) &ctRunFont)) + { + CFStringRef cfsFontName = CTFontCopyPostScriptName (ctRunFont); + const String fontName (String::fromCFString (cfsFontName)); + + CTFontRef ctFontRef = CTFontCreateWithName (cfsFontName, 1024, nullptr); + CFRelease (cfsFontName); + CGFontRef cgFontRef = CTFontCopyGraphicsFont (ctFontRef, nullptr); + CFRelease (ctFontRef); + + const int totalHeight = std::abs (CGFontGetAscent (cgFontRef)) + std::abs (CGFontGetDescent (cgFontRef)); + const float fontHeightToCGSizeFactor = CGFontGetUnitsPerEm (cgFontRef) / (float) totalHeight; + CGFontRelease (cgFontRef); + + glyphRun->setFont (Font (fontName, CTFontGetSize (ctRunFont) / fontHeightToCGSizeFactor, 0)); + } + + CGColorRef cgRunColor; + if (CFDictionaryGetValueIfPresent (runAttributes, kCTForegroundColorAttributeName, (const void**) &cgRunColor) + && CGColorGetNumberOfComponents (cgRunColor) == 4) + { + const CGFloat* const components = CGColorGetComponents (cgRunColor); + + glyphRun->setColour (Colour::fromFloatRGBA (components[0], components[1], components[2], components[3])); + } + + const CGGlyph* glyphsPtr = CTRunGetGlyphsPtr (run); + const CGPoint* posPtr = CTRunGetPositionsPtr (run); + HeapBlock glyphBuffer; + HeapBlock positionBuffer; + + if (glyphsPtr == nullptr || posPtr == nullptr) + { + // If we can't get a direct pointer, we have to copy the metrics to get them.. + glyphBuffer.malloc (numGlyphs); + glyphsPtr = glyphBuffer; + CTRunGetGlyphs (run, CFRangeMake (0, 0), glyphBuffer); + + positionBuffer.malloc (numGlyphs); + posPtr = positionBuffer; + CTRunGetPositions (run, CFRangeMake (0, 0), positionBuffer); + } + + for (CFIndex k = 0; k < numGlyphs; ++k) + glyphRun->addGlyph (new GlyphLayout::Glyph (glyphsPtr[k], Point (posPtr[k].x, posPtr[k].y))); + } + } + + CFRelease (frame); + } +} + + //============================================================================== class OSXTypeface : public Typeface { @@ -778,3 +1042,14 @@ Typeface::Ptr Font::getDefaultTypefaceForFont (const Font& font) f.setTypefaceName (faceName); return Typeface::createSystemTypefaceFor (f); } + +bool GlyphLayout::createNativeLayout (const AttributedString& text) +{ + #if JUCE_CORETEXT_AVAILABLE + CoreTextTypeLayout::createLayout (*this, text); + return true; + #else + (void) text; + return false; + #endif +} diff --git a/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp b/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp new file mode 100644 index 0000000000..43464d54a7 --- /dev/null +++ b/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp @@ -0,0 +1,349 @@ +/* + ============================================================================== + + This file is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-11 by Raw Material Software Ltd. + + ------------------------------------------------------------------------------ + + JUCE can be redistributed and/or modified under the terms of the GNU General + Public License (Version 2), as published by the Free Software Foundation. + A copy of the license is included in the JUCE distribution, or can be found + online at www.gnu.org/licenses. + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.rawmaterialsoftware.com/juce for more information. + + ============================================================================== +*/ + +//================================================================================================== +#if JUCE_USE_DIRECTWRITE +namespace DirectWriteTypeLayout +{ + class CustomDirectWriteTextRenderer : public ComBaseClassHelper + { + public: + CustomDirectWriteTextRenderer (IDWriteFontCollection* const fontCollection_) + : fontCollection (fontCollection_), + currentLine (-1), + lastOriginY (-10000.0f) + { + resetReferenceCount(); + } + + JUCE_COMRESULT QueryInterface (REFIID refId, void** result) + { + #if ! JUCE_MINGW + if (refId == __uuidof (IDWritePixelSnapping)) { AddRef(); *result = dynamic_cast (this); return S_OK; } + #else + jassertfalse; // need to find a mingw equivalent of __uuidof to make this possible + #endif + + return ComBaseClassHelper::QueryInterface (refId, result); + } + + JUCE_COMRESULT IsPixelSnappingDisabled (void* /*clientDrawingContext*/, BOOL* isDisabled) + { + *isDisabled = FALSE; + return S_OK; + } + + JUCE_COMRESULT GetCurrentTransform (void*, DWRITE_MATRIX*) { return S_OK; } + JUCE_COMRESULT GetPixelsPerDip (void*, FLOAT*) { return S_OK; } + JUCE_COMRESULT DrawUnderline (void*, FLOAT, FLOAT, DWRITE_UNDERLINE const*, IUnknown*) { return S_OK; } + JUCE_COMRESULT DrawStrikethrough (void*, FLOAT, FLOAT, DWRITE_STRIKETHROUGH const*, IUnknown*) { return S_OK; } + JUCE_COMRESULT DrawInlineObject (void*, FLOAT, FLOAT, IDWriteInlineObject*, BOOL, BOOL, IUnknown*) { return E_NOTIMPL; } + + JUCE_COMRESULT DrawGlyphRun (void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE, + DWRITE_GLYPH_RUN const* glyphRun, DWRITE_GLYPH_RUN_DESCRIPTION const* runDescription, + IUnknown* clientDrawingEffect) + { + GlyphLayout* const glyphLayout = static_cast (clientDrawingContext); + + if (baselineOriginY != lastOriginY) + { + lastOriginY = baselineOriginY; + ++currentLine; + + // The x value is only correct when dealing with LTR text + glyphLayout->getLine (currentLine).setLineOrigin (Point (baselineOriginX, baselineOriginY)); + } + + if (currentLine < 0) + return S_OK; + + GlyphLayout::Line& glyphLine = glyphLayout->getLine (currentLine); + + DWRITE_FONT_METRICS dwFontMetrics; + glyphRun->fontFace->GetMetrics (&dwFontMetrics); + + const float ascent = scaledFontSize (dwFontMetrics.ascent, dwFontMetrics, glyphRun); + const float descent = scaledFontSize (dwFontMetrics.descent, dwFontMetrics, glyphRun); + glyphLine.increaseAscentDescent (ascent, descent); + + int styleFlags = 0; + const String fontName (getFontName (glyphRun, styleFlags)); + + GlyphLayout::Run* const glyphRunLayout = new GlyphLayout::Run (Range (runDescription->textPosition, + runDescription->textPosition + runDescription->stringLength), + glyphRun->glyphCount); + glyphLine.addRun (glyphRunLayout); + + glyphRun->fontFace->GetMetrics (&dwFontMetrics); + + const float totalHeight = std::abs ((float) dwFontMetrics.ascent) + std::abs ((float) dwFontMetrics.descent); + const float fontHeightToEmSizeFactor = (float) dwFontMetrics.designUnitsPerEm / totalHeight; + + glyphRunLayout->setFont (Font (fontName, glyphRun->fontEmSize / fontHeightToEmSizeFactor, styleFlags)); + glyphRunLayout->setColour (getColourOf (static_cast (clientDrawingEffect))); + + const Point lineOrigin (glyphLayout->getLine (currentLine).getLineOrigin()); + float x = baselineOriginX - lineOrigin.x; + + for (UINT32 i = 0; i < glyphRun->glyphCount; ++i) + { + if ((glyphRun->bidiLevel & 1) != 0) + x -= glyphRun->glyphAdvances[i]; // RTL text + + glyphRunLayout->addGlyph (new GlyphLayout::Glyph (glyphRun->glyphIndices[i], Point (x, baselineOriginY - lineOrigin.y))); + + if ((glyphRun->bidiLevel & 1) == 0) + x += glyphRun->glyphAdvances[i]; // LTR text + } + + return S_OK; + } + + private: + IDWriteFontCollection* const fontCollection; + int currentLine; + float lastOriginY; + + static float scaledFontSize (int n, const DWRITE_FONT_METRICS& metrics, const DWRITE_GLYPH_RUN* glyphRun) noexcept + { + return (std::abs ((float) n) / (float) metrics.designUnitsPerEm) * glyphRun->fontEmSize; + } + + static Colour getColourOf (ID2D1SolidColorBrush* d2dBrush) + { + if (d2dBrush == nullptr) + return Colours::black; + + const D2D1_COLOR_F colour (d2dBrush->GetColor()); + return Colour::fromFloatRGBA (colour.r, colour.g, colour.b, colour.a); + } + + String getFontName (DWRITE_GLYPH_RUN const* glyphRun, int& styleFlags) const + { + ComSmartPtr dwFont; + + HRESULT hr = fontCollection->GetFontFromFontFace (glyphRun->fontFace, dwFont.resetAndGetPointerAddress()); + jassert (dwFont != nullptr); + + if (dwFont->GetWeight() == DWRITE_FONT_WEIGHT_BOLD) styleFlags &= Font::bold; + if (dwFont->GetStyle() == DWRITE_FONT_STYLE_ITALIC) styleFlags &= Font::italic; + + ComSmartPtr dwFontFamily; + hr = dwFont->GetFontFamily (dwFontFamily.resetAndGetPointerAddress()); + jassert (dwFontFamily != nullptr); + + // Get the Font Family Names + ComSmartPtr dwFamilyNames; + hr = dwFontFamily->GetFamilyNames (dwFamilyNames.resetAndGetPointerAddress()); + jassert (dwFamilyNames != nullptr); + + UINT32 index = 0; + BOOL exists = false; + hr = dwFamilyNames->FindLocaleName (L"en-us", &index, &exists); + if (! exists) + index = 0; + + UINT32 length = 0; + hr = dwFamilyNames->GetStringLength (index, &length); + + HeapBlock name (length + 1); + hr = dwFamilyNames->GetString (index, name, length + 1); + + return String (name); + } + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomDirectWriteTextRenderer); + }; + + //================================================================================================== + float getFontHeightToEmSizeFactor (const Font& font, IDWriteFontCollection& dwFontCollection) + { + BOOL fontFound = false; + uint32 fontIndex; + dwFontCollection.FindFamilyName (font.getTypefaceName().toWideCharPointer(), &fontIndex, &fontFound); + + if (! fontFound) + fontIndex = 0; + + ComSmartPtr dwFontFamily; + HRESULT hr = dwFontCollection.GetFontFamily (fontIndex, dwFontFamily.resetAndGetPointerAddress()); + + ComSmartPtr dwFont; + hr = dwFontFamily->GetFirstMatchingFont (DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STRETCH_NORMAL, DWRITE_FONT_STYLE_NORMAL, + dwFont.resetAndGetPointerAddress()); + + ComSmartPtr dwFontFace; + hr = dwFont->CreateFontFace (dwFontFace.resetAndGetPointerAddress()); + + DWRITE_FONT_METRICS dwFontMetrics; + dwFontFace->GetMetrics (&dwFontMetrics); + + const float totalHeight = (float) (std::abs (dwFontMetrics.ascent) + std::abs (dwFontMetrics.descent)); + return dwFontMetrics.designUnitsPerEm / totalHeight; + } + + void setTextFormatProperties (const AttributedString& text, IDWriteTextFormat* const format) + { + DWRITE_TEXT_ALIGNMENT alignment = DWRITE_TEXT_ALIGNMENT_LEADING; + DWRITE_WORD_WRAPPING wrapType = DWRITE_WORD_WRAPPING_WRAP; + + switch (text.getJustification().getOnlyHorizontalFlags()) + { + case Justification::left: break; + case Justification::right: alignment = DWRITE_TEXT_ALIGNMENT_TRAILING; break; + case Justification::horizontallyCentred: alignment = DWRITE_TEXT_ALIGNMENT_CENTER; break; + case Justification::horizontallyJustified: break; // DirectWrite cannot justify text, default to left alignment + default: jassertfalse; break; // Illegal justification flags + } + + switch (text.getWordWrap()) + { + case AttributedString::none: wrapType = DWRITE_WORD_WRAPPING_NO_WRAP; break; + case AttributedString::byWord: break; + case AttributedString::byChar: break; // DirectWrite doesn't support wrapping by character, default to word-wrap + default: jassertfalse; break; // Illegal flags! + } + + format->SetTextAlignment (alignment); + format->SetWordWrapping (wrapType); + + // DirectWrite does not automatically set reading direction + // This must be set correctly and manually when using RTL Scripts (Hebrew, Arabic) + if (text.getReadingDirection() == AttributedString::rightToLeft) + format->SetReadingDirection (DWRITE_READING_DIRECTION_RIGHT_TO_LEFT); + } + + void addAttributedRange (const AttributedString::Attribute& attr, IDWriteTextLayout* textLayout, + const int textLen, ID2D1DCRenderTarget* const renderTarget, IDWriteFontCollection* const fontCollection) + { + DWRITE_TEXT_RANGE range; + range.startPosition = attr.range.getStart(); + range.length = jmin (attr.range.getLength(), textLen - attr.range.getStart()); + + if (attr.getFont() != nullptr) + { + textLayout->SetFontFamilyName (attr.getFont()->getTypefaceName().toWideCharPointer(), range); + + const float fontHeightToEmSizeFactor = getFontHeightToEmSizeFactor (*attr.getFont(), *fontCollection); + textLayout->SetFontSize (attr.getFont()->getHeight() * fontHeightToEmSizeFactor, range); + } + + if (attr.getColour() != nullptr) + { + ComSmartPtr d2dBrush; + renderTarget->CreateSolidColorBrush (D2D1::ColorF (D2D1::ColorF (attr.getColour()->getFloatRed(), + attr.getColour()->getFloatGreen(), + attr.getColour()->getFloatBlue(), + attr.getColour()->getFloatAlpha())), + d2dBrush.resetAndGetPointerAddress()); + + // We need to call SetDrawingEffect with a legimate brush to get DirectWrite to break text based on colours + textLayout->SetDrawingEffect (d2dBrush, range); + } + } + + void createLayout (GlyphLayout& glyphLayout, const AttributedString& text, IDWriteFactory* const directWriteFactory, + ID2D1Factory* const direct2dFactory, IDWriteFontCollection* const fontCollection) + { + // To add color to text, we need to create a D2D render target + // Since we are not actually rendering to a D2D context we create a temporary GDI render target + + D2D1_RENDER_TARGET_PROPERTIES d2dRTProp = D2D1::RenderTargetProperties (D2D1_RENDER_TARGET_TYPE_SOFTWARE, + D2D1::PixelFormat (DXGI_FORMAT_B8G8R8A8_UNORM, + D2D1_ALPHA_MODE_IGNORE), + 0, 0, + D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE, + D2D1_FEATURE_LEVEL_DEFAULT); + ComSmartPtr renderTarget; + HRESULT hr = direct2dFactory->CreateDCRenderTarget (&d2dRTProp, renderTarget.resetAndGetPointerAddress()); + + Font defaultFont; + const float defaultFontHeightToEmSizeFactor = getFontHeightToEmSizeFactor (defaultFont, *fontCollection); + + jassert (directWriteFactory != nullptr); + + ComSmartPtr dwTextFormat; + hr = directWriteFactory->CreateTextFormat (defaultFont.getTypefaceName().toWideCharPointer(), fontCollection, + DWRITE_FONT_WEIGHT_REGULAR, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, + defaultFont.getHeight() * defaultFontHeightToEmSizeFactor, + L"en-us", dwTextFormat.resetAndGetPointerAddress()); + + setTextFormatProperties (text, dwTextFormat); + + const int textLen = text.getText().length(); + + ComSmartPtr dwTextLayout; + hr = directWriteFactory->CreateTextLayout (text.getText().toWideCharPointer(), textLen, + dwTextFormat, glyphLayout.getWidth(), + 1.0e7f, dwTextLayout.resetAndGetPointerAddress()); + + const int numAttributes = text.getNumAttributes(); + + for (int i = 0; i < numAttributes; ++i) + addAttributedRange (*text.getAttribute (i), dwTextLayout, textLen, renderTarget, fontCollection); + + UINT32 actualLineCount = 0; + hr = dwTextLayout->GetLineMetrics (nullptr, 0, &actualLineCount); + + glyphLayout.ensureStorageAllocated (actualLineCount); + + HeapBlock dwLineMetrics (actualLineCount); + hr = dwTextLayout->GetLineMetrics (dwLineMetrics, actualLineCount, &actualLineCount); + int lastLocation = 0; + + for (UINT32 i = 0; i < actualLineCount; ++i) + { + const Range lineStringRange (lastLocation, (int) lastLocation + dwLineMetrics[i].length); + lastLocation = dwLineMetrics[i].length; + + GlyphLayout::Line* glyphLine = new GlyphLayout::Line(); + glyphLayout.addLine (glyphLine); + glyphLine->setStringRange (lineStringRange); + } + + ComSmartPtr textRenderer (new CustomDirectWriteTextRenderer (fontCollection)); + + hr = dwTextLayout->Draw (&glyphLayout, textRenderer, 0, 0); + } +} +#endif + +bool GlyphLayout::createNativeLayout (const AttributedString& text) +{ + #if JUCE_USE_DIRECTWRITE + const Direct2DFactories& factories = Direct2DFactories::getInstance(); + + if (factories.d2dFactory != nullptr && factories.systemFonts != nullptr) + { + DirectWriteTypeLayout::createLayout (*this, text, factories.directWriteFactory, + factories.d2dFactory, factories.systemFonts); + return true; + } + #else + (void) text; + #endif + + return false; +} diff --git a/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp b/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp new file mode 100644 index 0000000000..0ac1775d32 --- /dev/null +++ b/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp @@ -0,0 +1,253 @@ +/* + ============================================================================== + + This file is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-11 by Raw Material Software Ltd. + + ------------------------------------------------------------------------------ + + JUCE can be redistributed and/or modified under the terms of the GNU General + Public License (Version 2), as published by the Free Software Foundation. + A copy of the license is included in the JUCE distribution, or can be found + online at www.gnu.org/licenses. + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.rawmaterialsoftware.com/juce for more information. + + ============================================================================== +*/ + +#if JUCE_USE_DIRECTWRITE +class Direct2DFactories +{ +public: + Direct2DFactories() + { + if (direct2dDll.open ("d2d1.dll")) + { + JUCE_DLL_FUNCTION (D2D1CreateFactory, d2d1CreateFactory, HRESULT, direct2dDll, (D2D1_FACTORY_TYPE, REFIID, D2D1_FACTORY_OPTIONS*, void**)) + + if (d2d1CreateFactory != nullptr) + { + D2D1_FACTORY_OPTIONS options; + options.debugLevel = D2D1_DEBUG_LEVEL_NONE; + + d2d1CreateFactory (D2D1_FACTORY_TYPE_SINGLE_THREADED, __uuidof (ID2D1Factory), &options, + (void**) d2dFactory.resetAndGetPointerAddress()); + } + } + + if (directWriteDll.open ("DWrite.dll")) + { + JUCE_DLL_FUNCTION (DWriteCreateFactory, dWriteCreateFactory, HRESULT, directWriteDll, (DWRITE_FACTORY_TYPE, REFIID, IUnknown**)) + + if (dWriteCreateFactory != nullptr) + { + dWriteCreateFactory (DWRITE_FACTORY_TYPE_SHARED, __uuidof (IDWriteFactory), + (IUnknown**) directWriteFactory.resetAndGetPointerAddress()); + + if (directWriteFactory != nullptr) + directWriteFactory->GetSystemFontCollection (systemFonts.resetAndGetPointerAddress()); + } + } + } + + ~Direct2DFactories() + { + d2dFactory = nullptr; // (need to make sure these are released before deleting the DynamicLibrary objects) + directWriteFactory = nullptr; + systemFonts = nullptr; + } + + static const Direct2DFactories& getInstance() + { + static Direct2DFactories instance; + return instance; + } + + ComSmartPtr d2dFactory; + ComSmartPtr directWriteFactory; + ComSmartPtr systemFonts; + +private: + DynamicLibrary direct2dDll, directWriteDll; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Direct2DFactories); +}; + +//================================================================================================== +class WindowsDirectWriteTypeface : public Typeface +{ +public: + WindowsDirectWriteTypeface (const Font& font, IDWriteFontCollection* fontCollection) + : Typeface (font.getTypefaceName()), + ascent (0.0f) + { + jassert (fontCollection != nullptr); + + BOOL fontFound = false; + uint32 fontIndex = 0; + HRESULT hr = fontCollection->FindFamilyName (font.getTypefaceName().toWideCharPointer(), &fontIndex, &fontFound); + if (! fontFound) + fontIndex = 0; + + // Get the font family using the search results + // Fonts like: Times New Roman, Times New Roman Bold, Times New Roman Italic are all in the same font family + ComSmartPtr dwFontFamily; + hr = fontCollection->GetFontFamily (fontIndex, dwFontFamily.resetAndGetPointerAddress()); + + // Get a specific font in the font family using certain weight and style flags + ComSmartPtr dwFont; + DWRITE_FONT_WEIGHT dwWeight = font.isBold() ? DWRITE_FONT_WEIGHT_BOLD : DWRITE_FONT_WEIGHT_NORMAL; + DWRITE_FONT_STYLE dwStyle = font.isItalic() ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL; + + hr = dwFontFamily->GetFirstMatchingFont (dwWeight, DWRITE_FONT_STRETCH_NORMAL, dwStyle, dwFont.resetAndGetPointerAddress()); + hr = dwFont->CreateFontFace (dwFontFace.resetAndGetPointerAddress()); + + DWRITE_FONT_METRICS dwFontMetrics; + dwFontFace->GetMetrics (&dwFontMetrics); + + // All Font Metrics are in design units so we need to get designUnitsPerEm value to get the metrics + // into Em/Design Independent Pixels + designUnitsPerEm = dwFontMetrics.designUnitsPerEm; + + ascent = std::abs ((float) dwFontMetrics.ascent); + const float totalSize = ascent + std::abs ((float) dwFontMetrics.descent); + ascent /= totalSize; + unitsToHeightScaleFactor = 1.0f / (totalSize / designUnitsPerEm); + const float pathAscent = (((float) dwFontMetrics.ascent) / ((float) designUnitsPerEm)) * 1024.0f; + const float pathDescent = (((float) dwFontMetrics.descent) / ((float) designUnitsPerEm)) * 1024.0f; + const float pathTotalSize = std::abs (pathAscent) + std::abs (pathDescent); + pathTransform = AffineTransform::identity.scale (1.0f / pathTotalSize, 1.0f / pathTotalSize); + } + + float getAscent() const { return ascent; } + float getDescent() const { return 1.0f - ascent; } + + float getStringWidth (const String& text) + { + const CharPointer_UTF32 textUTF32 (text.toUTF32()); + const size_t len = textUTF32.length(); + + HeapBlock glyphIndices (len); + dwFontFace->GetGlyphIndices (textUTF32, len, glyphIndices); + + HeapBlock dwGlyphMetrics (len); + dwFontFace->GetDesignGlyphMetrics (glyphIndices, len, dwGlyphMetrics, false); + + float x = 0; + for (size_t i = 0; i < len; ++i) + x += (float) dwGlyphMetrics[i].advanceWidth / designUnitsPerEm; + + return x * unitsToHeightScaleFactor; + } + + void getGlyphPositions (const String& text, Array & resultGlyphs, Array & xOffsets) + { + xOffsets.add (0); + + const CharPointer_UTF32 textUTF32 (text.toUTF32()); + const size_t len = textUTF32.length(); + + HeapBlock glyphIndices (len); + dwFontFace->GetGlyphIndices (textUTF32, len, glyphIndices); + HeapBlock dwGlyphMetrics (len); + dwFontFace->GetDesignGlyphMetrics (glyphIndices, len, dwGlyphMetrics, false); + + float x = 0; + for (size_t i = 0; i < len; ++i) + { + x += (float) dwGlyphMetrics[i].advanceWidth / designUnitsPerEm; + xOffsets.add (x * unitsToHeightScaleFactor); + resultGlyphs.add (glyphIndices[i]); + } + } + + EdgeTable* getEdgeTableForGlyph (int glyphNumber, const AffineTransform& transform) + { + Path path; + + if (getOutlineForGlyph (glyphNumber, path) && ! path.isEmpty()) + return new EdgeTable (path.getBoundsTransformed (transform).getSmallestIntegerContainer().expanded (1, 0), + path, transform); + + return nullptr; + } + + bool getOutlineForGlyph (int glyphNumber, Path& path) + { + jassert (path.isEmpty()); // we might need to apply a transform to the path, so this must be empty + UINT16 glyphIndex = (UINT16) glyphNumber; + ComSmartPtr pathGeometrySink (new PathGeometrySink()); + + dwFontFace->GetGlyphRunOutline (1024.0f, &glyphIndex, nullptr, nullptr, 1, false, false, pathGeometrySink); + path = pathGeometrySink->path; + + if (! pathTransform.isIdentity()) + path.applyTransform (pathTransform); + + return true; + } + +private: + ComSmartPtr dwFontFace; + float unitsToHeightScaleFactor, ascent; + int designUnitsPerEm; + AffineTransform pathTransform; + + class PathGeometrySink : public ComBaseClassHelper + { + public: + PathGeometrySink() { resetReferenceCount(); } + + void __stdcall AddBeziers (const D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount) + { + for (UINT i = 0; i < beziersCount; ++i) + path.cubicTo ((float) beziers[i].point1.x, (float) beziers[i].point1.y, + (float) beziers[i].point2.x, (float) beziers[i].point2.y, + (float) beziers[i].point3.x, (float) beziers[i].point3.y); + } + + void __stdcall AddLines (const D2D1_POINT_2F* points, UINT pointsCount) + { + for (UINT i = 0; i < pointsCount; ++i) + path.lineTo ((float) points[i].x, + (float) points[i].y); + } + + void __stdcall BeginFigure (D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN) + { + path.startNewSubPath ((float) startPoint.x, + (float) startPoint.y); + } + + void __stdcall EndFigure (D2D1_FIGURE_END figureEnd) + { + if (figureEnd == D2D1_FIGURE_END_CLOSED) + path.closeSubPath(); + } + + void __stdcall SetFillMode (D2D1_FILL_MODE fillMode) + { + path.setUsingNonZeroWinding (fillMode == D2D1_FILL_MODE_WINDING); + } + + void __stdcall SetSegmentFlags (D2D1_PATH_SEGMENT) {} + JUCE_COMRESULT Close() { return S_OK; } + + Path path; + + private: + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PathGeometrySink); + }; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WindowsDirectWriteTypeface); +}; + +#endif diff --git a/modules/juce_graphics/native/juce_win32_Fonts.cpp b/modules/juce_graphics/native/juce_win32_Fonts.cpp index f28e43b544..8d692a30af 100644 --- a/modules/juce_graphics/native/juce_win32_Fonts.cpp +++ b/modules/juce_graphics/native/juce_win32_Fonts.cpp @@ -416,5 +416,12 @@ const MAT2 WindowsTypeface::identityMatrix = { { 0, 1 }, { 0, 0 }, { 0, 0 }, { 0 Typeface::Ptr Typeface::createSystemTypefaceFor (const Font& font) { - return new WindowsTypeface (font); + #if JUCE_USE_DIRECTWRITE + const Direct2DFactories& factories = Direct2DFactories::getInstance(); + + if (factories.systemFonts != nullptr) + return new WindowsDirectWriteTypeface (font, factories.systemFonts); + else + #endif + return new WindowsTypeface (font); }