From b5b7dd5696472acf98f795572d89468dff7ec925 Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 9 Apr 2025 13:17:13 +0100 Subject: [PATCH] Direct2D: Move Direct2DHelpers into juce_DirectX_windows.h --- .../Builds/Android/app/CMakeLists.txt | 2 - .../VisualStudio2019/DemoRunner_App.vcxproj | 3 - .../DemoRunner_App.vcxproj.filters | 3 - .../VisualStudio2022/DemoRunner_App.vcxproj | 3 - .../DemoRunner_App.vcxproj.filters | 3 - .../Builds/Android/app/CMakeLists.txt | 2 - .../AudioPerformanceTest_App.vcxproj | 3 - .../AudioPerformanceTest_App.vcxproj.filters | 3 - .../Builds/Android/app/CMakeLists.txt | 2 - .../AudioPluginHost_App.vcxproj | 3 - .../AudioPluginHost_App.vcxproj.filters | 3 - .../AudioPluginHost_App.vcxproj | 3 - .../AudioPluginHost_App.vcxproj.filters | 3 - .../Builds/Android/app/CMakeLists.txt | 2 - .../NetworkGraphicsDemo_App.vcxproj | 3 - .../NetworkGraphicsDemo_App.vcxproj.filters | 3 - .../VisualStudio2019/Projucer_App.vcxproj | 3 - .../Projucer_App.vcxproj.filters | 3 - .../VisualStudio2022/Projucer_App.vcxproj | 3 - .../Projucer_App.vcxproj.filters | 3 - .../UnitTestRunner_ConsoleApp.vcxproj | 3 - .../UnitTestRunner_ConsoleApp.vcxproj.filters | 3 - .../UnitTestRunner_ConsoleApp.vcxproj | 3 - .../UnitTestRunner_ConsoleApp.vcxproj.filters | 3 - .../WindowsDLL_DynamicLibrary.vcxproj | 3 - .../WindowsDLL_DynamicLibrary.vcxproj.filters | 3 - modules/juce_graphics/juce_graphics.cpp | 1 - .../native/juce_Direct2DHelpers_windows.cpp | 364 ------------------ .../native/juce_DirectX_windows.h | 326 ++++++++++++++++ modules/juce_gui_basics/juce_gui_basics.cpp | 2 + 30 files changed, 328 insertions(+), 439 deletions(-) delete mode 100644 modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index 6937aaa490..72b6547b68 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -1981,7 +1981,6 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h" - "../../../../../modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h" "../../../../../modules/juce_graphics/native/juce_Direct2DImage_windows.cpp" @@ -4635,7 +4634,6 @@ set_source_files_properties( "../../../../../modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h" - "../../../../../modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h" "../../../../../modules/juce_graphics/native/juce_Direct2DImage_windows.cpp" diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj index 0ebdc91dc7..ff6d1306c2 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj @@ -2406,9 +2406,6 @@ true - - true - true diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters index d2615a7b33..6932001272 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters @@ -3184,9 +3184,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj index f424965b46..08e1fb346e 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj @@ -2406,9 +2406,6 @@ true - - true - true diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters index dc2f1aba16..78181d2f39 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters @@ -3184,9 +3184,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt index 728848ae48..74fb7850f5 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt @@ -1743,7 +1743,6 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h" - "../../../../../modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h" "../../../../../modules/juce_graphics/native/juce_Direct2DImage_windows.cpp" @@ -4011,7 +4010,6 @@ set_source_files_properties( "../../../../../modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h" - "../../../../../modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h" "../../../../../modules/juce_graphics/native/juce_Direct2DImage_windows.cpp" diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj index 2462f9fe16..26faa98a92 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj @@ -2097,9 +2097,6 @@ true - - true - true diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters index 5c1f3f3100..ae73bf9263 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters @@ -2692,9 +2692,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index e9d3bbcf13..38a6fdaeca 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -1873,7 +1873,6 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h" - "../../../../../modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h" "../../../../../modules/juce_graphics/native/juce_Direct2DImage_windows.cpp" @@ -4294,7 +4293,6 @@ set_source_files_properties( "../../../../../modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h" - "../../../../../modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h" "../../../../../modules/juce_graphics/native/juce_Direct2DImage_windows.cpp" diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj index f9a74186af..819d9e6515 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj @@ -2231,9 +2231,6 @@ true - - true - true diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters index 6b0a3c25d0..a2b6d40386 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters @@ -2899,9 +2899,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj index 8e53833351..9ad8708791 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj @@ -2231,9 +2231,6 @@ true - - true - true diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters index e0abc080ed..638ee8e089 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters @@ -2899,9 +2899,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt index 5aefd05e71..2790ed2335 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt @@ -1762,7 +1762,6 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h" - "../../../../../modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h" "../../../../../modules/juce_graphics/native/juce_Direct2DImage_windows.cpp" @@ -4110,7 +4109,6 @@ set_source_files_properties( "../../../../../modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h" - "../../../../../modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp" "../../../../../modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h" "../../../../../modules/juce_graphics/native/juce_Direct2DImage_windows.cpp" diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj index d87ef157d8..a7b2bbfedd 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj @@ -2118,9 +2118,6 @@ true - - true - true diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters index 43f7543ab1..6f0578ebf9 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters @@ -2746,9 +2746,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj index 082e3b8daa..87dc2749b0 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj @@ -1260,9 +1260,6 @@ true - - true - true diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters index 04cc52b656..38c21b37e2 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters @@ -1585,9 +1585,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj index 686034b3b4..c8414367c6 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj @@ -1260,9 +1260,6 @@ true - - true - true diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters index bd919d3745..bad3e2c0ab 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters @@ -1585,9 +1585,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj index 36bab30742..4865e4f55a 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj @@ -2239,9 +2239,6 @@ true - - true - true diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters index 34eb2eac29..d8104cbaca 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -2947,9 +2947,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj index b26ba19806..99e600adb3 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj @@ -2239,9 +2239,6 @@ true - - true - true diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters index 2ccbb18b5f..cfa2f6cc46 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -2947,9 +2947,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj index fed1c6b250..bbfce27bd3 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj @@ -2117,9 +2117,6 @@ true - - true - true diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters index 62abda9a53..01163314a8 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters @@ -2743,9 +2743,6 @@ JUCE Modules\juce_graphics\native - - JUCE Modules\juce_graphics\native - JUCE Modules\juce_graphics\native diff --git a/modules/juce_graphics/juce_graphics.cpp b/modules/juce_graphics/juce_graphics.cpp index 161f712efe..4222121cb0 100644 --- a/modules/juce_graphics/juce_graphics.cpp +++ b/modules/juce_graphics/juce_graphics.cpp @@ -229,7 +229,6 @@ extern "C" #include "native/juce_DirectWriteTypeface_windows.cpp" #include "native/juce_IconHelpers_windows.cpp" - #include "native/juce_Direct2DHelpers_windows.cpp" #include "native/juce_Direct2DResources_windows.cpp" #include "native/juce_Direct2DGraphicsContext_windows.cpp" #include "native/juce_Direct2DHwndContext_windows.cpp" diff --git a/modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp b/modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp deleted file mode 100644 index 585bddc3c0..0000000000 --- a/modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp +++ /dev/null @@ -1,364 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE framework. - Copyright (c) Raw Material Software Limited - - JUCE is an open source framework subject to commercial or open source - licensing. - - By downloading, installing, or using the JUCE framework, or combining the - JUCE framework with any other source code, object code, content or any other - copyrightable work, you agree to the terms of the JUCE End User Licence - Agreement, and all incorporated terms including the JUCE Privacy Policy and - the JUCE Website Terms of Service, as applicable, which will bind you. If you - do not agree to the terms of these agreements, we will not license the JUCE - framework to you, and you must discontinue the installation or download - process and cease use of the JUCE framework. - - JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ - JUCE Privacy Policy: https://juce.com/juce-privacy-policy - JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ - - Or: - - You may also use this code under the terms of the AGPLv3: - https://www.gnu.org/licenses/agpl-3.0.en.html - - THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL - WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF - MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. - - ============================================================================== -*/ - -namespace juce -{ - -class ScopedMultithread -{ -public: - explicit ScopedMultithread (ID2D1Multithread* multithreadIn) - : multithread (addComSmartPtrOwner (multithreadIn)) - { - multithreadIn->Enter(); - } - - ~ScopedMultithread() - { - multithread->Leave(); - } - -private: - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ScopedMultithread) - - ComSmartPtr multithread; -}; - -/* ScopedGeometryWithSink creates an ID2D1PathGeometry object with an open sink. */ -struct ScopedGeometryWithSink -{ - ScopedGeometryWithSink (ID2D1Factory* factory, D2D1_FILL_MODE fillMode) - { - if (const auto hr = factory->CreatePathGeometry (geometry.resetAndGetPointerAddress()); FAILED (hr)) - return; - - if (const auto hr = geometry->Open (sink.resetAndGetPointerAddress()); FAILED (hr)) - return; - - sink->SetFillMode (fillMode); - } - - ~ScopedGeometryWithSink() - { - if (sink == nullptr) - return; - - const auto hr = sink->Close(); - jassertquiet (SUCCEEDED (hr)); - } - - ComSmartPtr geometry; - ComSmartPtr sink; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ScopedGeometryWithSink) -}; - -class WindowsScopedEvent -{ -public: - explicit WindowsScopedEvent (HANDLE handleIn) - : handle (handleIn) - { - } - - WindowsScopedEvent() - : WindowsScopedEvent (CreateEvent (nullptr, FALSE, FALSE, nullptr)) - { - } - - HANDLE getHandle() const noexcept - { - return handle.get(); - } - -private: - std::unique_ptr, FunctionPointerDestructor> handle; -}; - -//============================================================================== -struct D2DHelpers -{ - static bool isTransformAxisAligned (const AffineTransform& transform) - { - return transform.mat01 == 0.0f && transform.mat10 == 0.0f; - } - - static void pathToGeometrySink (const Path& path, - ID2D1GeometrySink* sink, - const AffineTransform& transform, - D2D1_FIGURE_BEGIN figureMode) - { - class ScopedFigure - { - public: - ScopedFigure (ID2D1GeometrySink* s, D2D1_POINT_2F pt, D2D1_FIGURE_BEGIN mode) - : sink (s) - { - sink->BeginFigure (pt, mode); - } - - ~ScopedFigure() - { - if (sink != nullptr) - sink->EndFigure (end); - } - - void setClosed() - { - end = D2D1_FIGURE_END_CLOSED; - } - - private: - ID2D1GeometrySink* sink = nullptr; - D2D1_FIGURE_END end = D2D1_FIGURE_END_OPEN; - - JUCE_DECLARE_NON_COPYABLE (ScopedFigure) - JUCE_DECLARE_NON_MOVEABLE (ScopedFigure) - }; - - // Every call to BeginFigure must have a matching call to EndFigure. But - the Path does not necessarily - // have matching startNewSubPath and closePath markers. - D2D1_POINT_2F lastLocation{}; - std::optional figure; - Path::Iterator it (path); - - const auto doTransform = [&transform] (float x, float y) - { - transform.transformPoint (x, y); - return D2D1_POINT_2F { x, y }; - }; - - const auto updateFigure = [&] (float x, float y) - { - if (! figure.has_value()) - figure.emplace (sink, lastLocation, figureMode); - - lastLocation = doTransform (x, y); - }; - - while (it.next()) - { - switch (it.elementType) - { - case Path::Iterator::lineTo: - updateFigure (it.x1, it.y1); - sink->AddLine (lastLocation); - break; - - case Path::Iterator::quadraticTo: - updateFigure (it.x2, it.y2); - sink->AddQuadraticBezier ({ doTransform (it.x1, it.y1), lastLocation }); - break; - - case Path::Iterator::cubicTo: - updateFigure (it.x3, it.y3); - sink->AddBezier ({ doTransform (it.x1, it.y1), doTransform (it.x2, it.y2), lastLocation }); - break; - - case Path::Iterator::closePath: - if (figure.has_value()) - figure->setClosed(); - - figure.reset(); - break; - - case Path::Iterator::startNewSubPath: - figure.reset(); - lastLocation = doTransform (it.x1, it.y1); - figure.emplace (sink, lastLocation, figureMode); - break; - } - } - } - - static D2D1_POINT_2F pointTransformed (Point pt, const AffineTransform& transform) - { - transform.transformPoint (pt.x, pt.y); - return { (FLOAT) pt.x, (FLOAT) pt.y }; - } - - static void rectToGeometrySink (const Rectangle& rect, - ID2D1GeometrySink* sink, - const AffineTransform& transform, - D2D1_FIGURE_BEGIN figureMode) - { - const auto a = pointTransformed (rect.getTopLeft(), transform); - const auto b = pointTransformed (rect.getTopRight(), transform); - const auto c = pointTransformed (rect.getBottomRight(), transform); - const auto d = pointTransformed (rect.getBottomLeft(), transform); - - sink->BeginFigure (a, figureMode); - sink->AddLine (b); - sink->AddLine (c); - sink->AddLine (d); - sink->EndFigure (D2D1_FIGURE_END_CLOSED); - } - - static ComSmartPtr rectListToPathGeometry (ID2D1Factory* factory, - const RectangleList& clipRegion, - const AffineTransform& transform, - D2D1_FILL_MODE fillMode, - D2D1_FIGURE_BEGIN figureMode, - [[maybe_unused]] Direct2DMetrics* metrics) - { - JUCE_D2DMETRICS_SCOPED_ELAPSED_TIME (metrics, createGeometryTime) - ScopedGeometryWithSink objects { factory, fillMode }; - - if (objects.sink == nullptr) - return {}; - - for (int i = clipRegion.getNumRectangles(); --i >= 0;) - rectToGeometrySink (clipRegion.getRectangle (i), objects.sink, transform, figureMode); - - return objects.geometry; - } - - static ComSmartPtr pathToPathGeometry (ID2D1Factory* factory, - const Path& path, - const AffineTransform& transform, - D2D1_FIGURE_BEGIN figureMode, - [[maybe_unused]] Direct2DMetrics* metrics) - { - JUCE_D2DMETRICS_SCOPED_ELAPSED_TIME (metrics, createGeometryTime) - ScopedGeometryWithSink objects { factory, path.isUsingNonZeroWinding() ? D2D1_FILL_MODE_WINDING : D2D1_FILL_MODE_ALTERNATE }; - - if (objects.sink == nullptr) - return {}; - - pathToGeometrySink (path, objects.sink, transform, figureMode); - - return objects.geometry; - } - - static ComSmartPtr pathStrokeTypeToStrokeStyle (ID2D1Factory1* factory, const PathStrokeType& strokeType) - { - // JUCE JointStyle ID2D1StrokeStyle - // --------------- ---------------- - // mitered D2D1_LINE_JOIN_MITER - // curved D2D1_LINE_JOIN_ROUND - // beveled D2D1_LINE_JOIN_BEVEL - // - // JUCE EndCapStyle ID2D1StrokeStyle - // ---------------- ---------------- - // butt D2D1_CAP_STYLE_FLAT - // square D2D1_CAP_STYLE_SQUARE - // rounded D2D1_CAP_STYLE_ROUND - auto lineJoin = D2D1_LINE_JOIN_MITER; - switch (strokeType.getJointStyle()) - { - case PathStrokeType::JointStyle::mitered: - // already set - break; - - case PathStrokeType::JointStyle::curved: - lineJoin = D2D1_LINE_JOIN_ROUND; - break; - - case PathStrokeType::JointStyle::beveled: - lineJoin = D2D1_LINE_JOIN_BEVEL; - break; - - default: - // invalid EndCapStyle - jassertfalse; - break; - } - - auto capStyle = D2D1_CAP_STYLE_FLAT; - switch (strokeType.getEndStyle()) - { - case PathStrokeType::EndCapStyle::butt: - // already set - break; - - case PathStrokeType::EndCapStyle::square: - capStyle = D2D1_CAP_STYLE_SQUARE; - break; - - case PathStrokeType::EndCapStyle::rounded: - capStyle = D2D1_CAP_STYLE_ROUND; - break; - - default: - // invalid EndCapStyle - jassertfalse; - break; - } - - D2D1_STROKE_STYLE_PROPERTIES1 strokeStyleProperties - { - capStyle, - capStyle, - capStyle, - lineJoin, - strokeType.getStrokeThickness(), - D2D1_DASH_STYLE_SOLID, - 0.0f, - D2D1_STROKE_TRANSFORM_TYPE_NORMAL - }; - ComSmartPtr strokeStyle; - factory->CreateStrokeStyle (strokeStyleProperties, - nullptr, - 0, - strokeStyle.resetAndGetPointerAddress()); - - return strokeStyle; - } - -}; - -//============================================================================== -/** Heap storage for a DirectWrite glyph run */ -class DirectWriteGlyphRun -{ -public: - void replace (Span> positions, float scale) - { - advances.resize (positions.size(), 0.0f); - offsets.resize (positions.size()); - std::transform (positions.begin(), positions.end(), offsets.begin(), [&] (auto& g) - { - return DWRITE_GLYPH_OFFSET { g.x / scale, -g.y }; - }); - } - - auto* getAdvances() const { return advances.data(); } - auto* getOffsets() const { return offsets .data(); } - -private: - std::vector advances; - std::vector offsets; -}; - -} // namespace juce diff --git a/modules/juce_graphics/native/juce_DirectX_windows.h b/modules/juce_graphics/native/juce_DirectX_windows.h index b7f19264fe..2160a19b46 100644 --- a/modules/juce_graphics/native/juce_DirectX_windows.h +++ b/modules/juce_graphics/native/juce_DirectX_windows.h @@ -37,6 +37,332 @@ namespace juce constexpr auto enableDirectXDebugLayer = false; +class ScopedMultithread +{ +public: + explicit ScopedMultithread (ID2D1Multithread* multithreadIn) + : multithread (addComSmartPtrOwner (multithreadIn)) + { + multithreadIn->Enter(); + } + + ~ScopedMultithread() + { + multithread->Leave(); + } + +private: + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ScopedMultithread) + + ComSmartPtr multithread; +}; + +/* ScopedGeometryWithSink creates an ID2D1PathGeometry object with an open sink. */ +struct ScopedGeometryWithSink +{ + ScopedGeometryWithSink (ID2D1Factory* factory, D2D1_FILL_MODE fillMode) + { + if (const auto hr = factory->CreatePathGeometry (geometry.resetAndGetPointerAddress()); FAILED (hr)) + return; + + if (const auto hr = geometry->Open (sink.resetAndGetPointerAddress()); FAILED (hr)) + return; + + sink->SetFillMode (fillMode); + } + + ~ScopedGeometryWithSink() + { + if (sink == nullptr) + return; + + const auto hr = sink->Close(); + jassertquiet (SUCCEEDED (hr)); + } + + ComSmartPtr geometry; + ComSmartPtr sink; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ScopedGeometryWithSink) +}; + +class WindowsScopedEvent +{ +public: + explicit WindowsScopedEvent (HANDLE handleIn) + : handle (handleIn) + { + } + + WindowsScopedEvent() + : WindowsScopedEvent (CreateEvent (nullptr, FALSE, FALSE, nullptr)) + { + } + + HANDLE getHandle() const noexcept + { + return handle.get(); + } + +private: + std::unique_ptr, FunctionPointerDestructor> handle; +}; + +//============================================================================== +struct D2DHelpers +{ + static bool isTransformAxisAligned (const AffineTransform& transform) + { + return transform.mat01 == 0.0f && transform.mat10 == 0.0f; + } + + static void pathToGeometrySink (const Path& path, + ID2D1GeometrySink* sink, + const AffineTransform& transform, + D2D1_FIGURE_BEGIN figureMode) + { + class ScopedFigure + { + public: + ScopedFigure (ID2D1GeometrySink* s, D2D1_POINT_2F pt, D2D1_FIGURE_BEGIN mode) + : sink (s) + { + sink->BeginFigure (pt, mode); + } + + ~ScopedFigure() + { + if (sink != nullptr) + sink->EndFigure (end); + } + + void setClosed() + { + end = D2D1_FIGURE_END_CLOSED; + } + + private: + ID2D1GeometrySink* sink = nullptr; + D2D1_FIGURE_END end = D2D1_FIGURE_END_OPEN; + + JUCE_DECLARE_NON_COPYABLE (ScopedFigure) + JUCE_DECLARE_NON_MOVEABLE (ScopedFigure) + }; + + // Every call to BeginFigure must have a matching call to EndFigure. But - the Path does not necessarily + // have matching startNewSubPath and closePath markers. + D2D1_POINT_2F lastLocation{}; + std::optional figure; + Path::Iterator it (path); + + const auto doTransform = [&transform] (float x, float y) + { + transform.transformPoint (x, y); + return D2D1_POINT_2F { x, y }; + }; + + const auto updateFigure = [&] (float x, float y) + { + if (! figure.has_value()) + figure.emplace (sink, lastLocation, figureMode); + + lastLocation = doTransform (x, y); + }; + + while (it.next()) + { + switch (it.elementType) + { + case Path::Iterator::lineTo: + updateFigure (it.x1, it.y1); + sink->AddLine (lastLocation); + break; + + case Path::Iterator::quadraticTo: + updateFigure (it.x2, it.y2); + sink->AddQuadraticBezier ({ doTransform (it.x1, it.y1), lastLocation }); + break; + + case Path::Iterator::cubicTo: + updateFigure (it.x3, it.y3); + sink->AddBezier ({ doTransform (it.x1, it.y1), doTransform (it.x2, it.y2), lastLocation }); + break; + + case Path::Iterator::closePath: + if (figure.has_value()) + figure->setClosed(); + + figure.reset(); + break; + + case Path::Iterator::startNewSubPath: + figure.reset(); + lastLocation = doTransform (it.x1, it.y1); + figure.emplace (sink, lastLocation, figureMode); + break; + } + } + } + + static D2D1_POINT_2F pointTransformed (Point pt, const AffineTransform& transform) + { + transform.transformPoint (pt.x, pt.y); + return { (FLOAT) pt.x, (FLOAT) pt.y }; + } + + static void rectToGeometrySink (const Rectangle& rect, + ID2D1GeometrySink* sink, + const AffineTransform& transform, + D2D1_FIGURE_BEGIN figureMode) + { + const auto a = pointTransformed (rect.getTopLeft(), transform); + const auto b = pointTransformed (rect.getTopRight(), transform); + const auto c = pointTransformed (rect.getBottomRight(), transform); + const auto d = pointTransformed (rect.getBottomLeft(), transform); + + sink->BeginFigure (a, figureMode); + sink->AddLine (b); + sink->AddLine (c); + sink->AddLine (d); + sink->EndFigure (D2D1_FIGURE_END_CLOSED); + } + + static ComSmartPtr rectListToPathGeometry (ID2D1Factory* factory, + const RectangleList& clipRegion, + const AffineTransform& transform, + D2D1_FILL_MODE fillMode, + D2D1_FIGURE_BEGIN figureMode, + [[maybe_unused]] Direct2DMetrics* metrics) + { + JUCE_D2DMETRICS_SCOPED_ELAPSED_TIME (metrics, createGeometryTime) + ScopedGeometryWithSink objects { factory, fillMode }; + + if (objects.sink == nullptr) + return {}; + + for (int i = clipRegion.getNumRectangles(); --i >= 0;) + rectToGeometrySink (clipRegion.getRectangle (i), objects.sink, transform, figureMode); + + return objects.geometry; + } + + static ComSmartPtr pathToPathGeometry (ID2D1Factory* factory, + const Path& path, + const AffineTransform& transform, + D2D1_FIGURE_BEGIN figureMode, + [[maybe_unused]] Direct2DMetrics* metrics) + { + JUCE_D2DMETRICS_SCOPED_ELAPSED_TIME (metrics, createGeometryTime) + ScopedGeometryWithSink objects { factory, path.isUsingNonZeroWinding() ? D2D1_FILL_MODE_WINDING : D2D1_FILL_MODE_ALTERNATE }; + + if (objects.sink == nullptr) + return {}; + + pathToGeometrySink (path, objects.sink, transform, figureMode); + + return objects.geometry; + } + + static ComSmartPtr pathStrokeTypeToStrokeStyle (ID2D1Factory1* factory, const PathStrokeType& strokeType) + { + // JUCE JointStyle ID2D1StrokeStyle + // --------------- ---------------- + // mitered D2D1_LINE_JOIN_MITER + // curved D2D1_LINE_JOIN_ROUND + // beveled D2D1_LINE_JOIN_BEVEL + // + // JUCE EndCapStyle ID2D1StrokeStyle + // ---------------- ---------------- + // butt D2D1_CAP_STYLE_FLAT + // square D2D1_CAP_STYLE_SQUARE + // rounded D2D1_CAP_STYLE_ROUND + auto lineJoin = D2D1_LINE_JOIN_MITER; + switch (strokeType.getJointStyle()) + { + case PathStrokeType::JointStyle::mitered: + // already set + break; + + case PathStrokeType::JointStyle::curved: + lineJoin = D2D1_LINE_JOIN_ROUND; + break; + + case PathStrokeType::JointStyle::beveled: + lineJoin = D2D1_LINE_JOIN_BEVEL; + break; + + default: + // invalid EndCapStyle + jassertfalse; + break; + } + + auto capStyle = D2D1_CAP_STYLE_FLAT; + switch (strokeType.getEndStyle()) + { + case PathStrokeType::EndCapStyle::butt: + // already set + break; + + case PathStrokeType::EndCapStyle::square: + capStyle = D2D1_CAP_STYLE_SQUARE; + break; + + case PathStrokeType::EndCapStyle::rounded: + capStyle = D2D1_CAP_STYLE_ROUND; + break; + + default: + // invalid EndCapStyle + jassertfalse; + break; + } + + D2D1_STROKE_STYLE_PROPERTIES1 strokeStyleProperties + { + capStyle, + capStyle, + capStyle, + lineJoin, + strokeType.getStrokeThickness(), + D2D1_DASH_STYLE_SOLID, + 0.0f, + D2D1_STROKE_TRANSFORM_TYPE_NORMAL + }; + ComSmartPtr strokeStyle; + factory->CreateStrokeStyle (strokeStyleProperties, + nullptr, + 0, + strokeStyle.resetAndGetPointerAddress()); + + return strokeStyle; + } + +}; + +//============================================================================== +/** Heap storage for a DirectWrite glyph run */ +class DirectWriteGlyphRun +{ +public: + void replace (Span> positions, float scale) + { + advances.resize (positions.size(), 0.0f); + offsets.resize (positions.size()); + std::transform (positions.begin(), positions.end(), offsets.begin(), [&] (auto& g) + { + return DWRITE_GLYPH_OFFSET { g.x / scale, -g.y }; + }); + } + + auto* getAdvances() const { return advances.data(); } + auto* getOffsets() const { return offsets .data(); } + +private: + std::vector advances; + std::vector offsets; +}; + struct DxgiAdapter : public ReferenceCountedObject { using Ptr = ReferenceCountedObjectPtr; diff --git a/modules/juce_gui_basics/juce_gui_basics.cpp b/modules/juce_gui_basics/juce_gui_basics.cpp index e70d1a3401..21dc145cb6 100644 --- a/modules/juce_gui_basics/juce_gui_basics.cpp +++ b/modules/juce_gui_basics/juce_gui_basics.cpp @@ -91,6 +91,7 @@ #include #include #include + #include #if JUCE_ETW_TRACELOGGING #include @@ -197,6 +198,7 @@ #include "native/juce_MouseCursor_mac.mm" #elif JUCE_WINDOWS + #include #include #include #include