mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Direct2D: Use Image NativeExtensions to avoid dynamic casts in graphics context
This commit is contained in:
parent
9b08c8fd51
commit
d3ca5961e7
33 changed files with 252 additions and 105 deletions
|
|
@ -1983,6 +1983,7 @@ add_library( ${BINARY_NAME}
|
|||
"../../../../../modules/juce_graphics/native/juce_Direct2DImageContext_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DPixelDataPage_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DResources_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectX_windows.h"
|
||||
|
|
@ -4580,6 +4581,7 @@ set_source_files_properties(
|
|||
"../../../../../modules/juce_graphics/native/juce_Direct2DImageContext_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DPixelDataPage_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DResources_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectX_windows.h"
|
||||
|
|
|
|||
|
|
@ -4372,6 +4372,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -7518,6 +7518,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -4372,6 +4372,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -7518,6 +7518,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -1745,6 +1745,7 @@ add_library( ${BINARY_NAME}
|
|||
"../../../../../modules/juce_graphics/native/juce_Direct2DImageContext_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DPixelDataPage_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DResources_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectX_windows.h"
|
||||
|
|
@ -4002,6 +4003,7 @@ set_source_files_properties(
|
|||
"../../../../../modules/juce_graphics/native/juce_Direct2DImageContext_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DPixelDataPage_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DResources_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectX_windows.h"
|
||||
|
|
|
|||
|
|
@ -3827,6 +3827,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -6528,6 +6528,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -1875,6 +1875,7 @@ add_library( ${BINARY_NAME}
|
|||
"../../../../../modules/juce_graphics/native/juce_Direct2DImageContext_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DPixelDataPage_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DResources_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectX_windows.h"
|
||||
|
|
@ -4285,6 +4286,7 @@ set_source_files_properties(
|
|||
"../../../../../modules/juce_graphics/native/juce_Direct2DImageContext_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DPixelDataPage_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DResources_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectX_windows.h"
|
||||
|
|
|
|||
|
|
@ -4060,6 +4060,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -6963,6 +6963,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -4060,6 +4060,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -6963,6 +6963,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -1764,6 +1764,7 @@ add_library( ${BINARY_NAME}
|
|||
"../../../../../modules/juce_graphics/native/juce_Direct2DImageContext_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DPixelDataPage_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DResources_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectX_windows.h"
|
||||
|
|
@ -4101,6 +4102,7 @@ set_source_files_properties(
|
|||
"../../../../../modules/juce_graphics/native/juce_Direct2DImageContext_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DMetrics_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DPixelDataPage_windows.h"
|
||||
"../../../../../modules/juce_graphics/native/juce_Direct2DResources_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp"
|
||||
"../../../../../modules/juce_graphics/native/juce_DirectX_windows.h"
|
||||
|
|
|
|||
|
|
@ -3925,6 +3925,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -6690,6 +6690,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -2625,6 +2625,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -4332,6 +4332,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -2625,6 +2625,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -4332,6 +4332,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -4172,6 +4172,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -7122,6 +7122,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -4172,6 +4172,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -7122,6 +7122,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -3901,6 +3901,7 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DImageContext_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_EventTracing.h"/>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_RenderingHelpers.h"/>
|
||||
|
|
|
|||
|
|
@ -6657,6 +6657,9 @@
|
|||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DMetrics_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_Direct2DPixelDataPage_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\modules\juce_graphics\native\juce_DirectX_windows.h">
|
||||
<Filter>JUCE Modules\juce_graphics\native</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -276,14 +276,22 @@ public:
|
|||
/* For subsection images, this returns the top-left pixel inside the root image */
|
||||
Point<int> getTopLeft() const { return impl->getTopLeft(); }
|
||||
|
||||
#if JUCE_WINDOWS
|
||||
Span<const Direct2DPixelDataPage> getPages (ComSmartPtr<ID2D1Device1> x) const { return impl->getPages (x); }
|
||||
#endif
|
||||
|
||||
private:
|
||||
struct Base
|
||||
{
|
||||
virtual ~Base() = default;
|
||||
virtual Point<int> getTopLeft() const = 0;
|
||||
};
|
||||
|
||||
template <typename Impl>
|
||||
#if JUCE_WINDOWS
|
||||
virtual Span<const Direct2DPixelDataPage> getPages (ComSmartPtr<ID2D1Device1>) const = 0;
|
||||
#endif
|
||||
};
|
||||
|
||||
template <typename Impl>
|
||||
class Concrete : public Base
|
||||
{
|
||||
public:
|
||||
|
|
@ -292,6 +300,10 @@ private:
|
|||
|
||||
Point<int> getTopLeft() const override { return impl.getTopLeft(); }
|
||||
|
||||
#if JUCE_WINDOWS
|
||||
Span<const Direct2DPixelDataPage> getPages (ComSmartPtr<ID2D1Device1> x) const override { return impl.getPages (x); }
|
||||
#endif
|
||||
|
||||
private:
|
||||
Impl impl;
|
||||
};
|
||||
|
|
@ -377,6 +389,13 @@ public:
|
|||
explicit Wrapped (Ptr selfIn)
|
||||
: self (selfIn) {}
|
||||
|
||||
#if JUCE_WINDOWS
|
||||
Span<const Direct2DPixelDataPage> getPages (ComSmartPtr<ID2D1Device1> x) const
|
||||
{
|
||||
return self->sourceImage->getNativeExtensions().getPages (x);
|
||||
}
|
||||
#endif
|
||||
|
||||
Point<int> getTopLeft() const
|
||||
{
|
||||
return self->sourceImage->getNativeExtensions().getTopLeft() + self->area.getTopLeft();
|
||||
|
|
@ -465,6 +484,10 @@ auto ImagePixelData::getNativeExtensions() -> NativeExtensions
|
|||
struct Wrapped
|
||||
{
|
||||
Point<int> getTopLeft() const { return {}; }
|
||||
|
||||
#if JUCE_WINDOWS
|
||||
Span<const Direct2DPixelDataPage> getPages (ComSmartPtr<ID2D1Device1>) const { return {}; }
|
||||
#endif
|
||||
};
|
||||
|
||||
return NativeExtensions { Wrapped{} };
|
||||
|
|
|
|||
|
|
@ -95,6 +95,8 @@
|
|||
#pragma comment(lib, "dxguid.lib")
|
||||
#endif
|
||||
|
||||
#include "native/juce_Direct2DPixelDataPage_windows.h"
|
||||
|
||||
#elif JUCE_IOS
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
#import <CoreText/CoreText.h>
|
||||
|
|
|
|||
|
|
@ -245,6 +245,33 @@ private:
|
|||
// layer stack accordingly.
|
||||
};
|
||||
|
||||
struct PagesAndArea
|
||||
{
|
||||
Image imageHandle;
|
||||
Span<const Direct2DPixelDataPage> pages;
|
||||
Rectangle<int> area;
|
||||
|
||||
static PagesAndArea make (const Image& image, ComSmartPtr<ID2D1Device1> device)
|
||||
{
|
||||
using GetImage = Image (*) (const Image&);
|
||||
constexpr GetImage converters[] { [] (const Image& i) { return i; },
|
||||
[] (const Image& i) { return NativeImageType{}.convert (i); } };
|
||||
|
||||
for (auto* getImage : converters)
|
||||
{
|
||||
const auto converted = getImage (image);
|
||||
const auto native = converted.getPixelData()->getNativeExtensions();
|
||||
|
||||
if (auto pages = native.getPages (device); ! pages.empty())
|
||||
return PagesAndArea { converted, std::move (pages), converted.getBounds().withPosition (native.getTopLeft()) };
|
||||
}
|
||||
|
||||
// Not sure how this could happen unless the NativeImageType no longer provides Windows native details...
|
||||
jassertfalse;
|
||||
return {};
|
||||
}
|
||||
};
|
||||
|
||||
struct Direct2DGraphicsContext::SavedState
|
||||
{
|
||||
public:
|
||||
|
|
@ -338,30 +365,30 @@ public:
|
|||
if (fillType.image.isNull())
|
||||
return;
|
||||
|
||||
const auto d2d1Bitmap = [&]
|
||||
{
|
||||
if (auto direct2DPixelData = dynamic_cast<Direct2DPixelData*> (fillType.image.getPixelData().get()))
|
||||
if (const auto page = direct2DPixelData->getFirstPageForDevice (D2DUtilities::getDeviceForContext (context)))
|
||||
if (page->GetPixelFormat().format == DXGI_FORMAT_B8G8R8A8_UNORM)
|
||||
return page;
|
||||
const auto device = D2DUtilities::getDeviceForContext (context);
|
||||
const auto imageFormat = fillType.image.getFormat();
|
||||
const auto targetFormat = imageFormat == Image::SingleChannel ? Image::ARGB : imageFormat;
|
||||
const auto pagesAndArea = PagesAndArea::make (fillType.image.convertedToFormat (targetFormat), device);
|
||||
|
||||
JUCE_D2DMETRICS_SCOPED_ELAPSED_TIME (Direct2DMetricsHub::getInstance()->imageContextMetrics, createBitmapTime);
|
||||
if (pagesAndArea.pages.empty())
|
||||
return;
|
||||
|
||||
return Direct2DBitmap::toBitmap (fillType.image, context, Image::ARGB);
|
||||
}();
|
||||
const auto bitmap = pagesAndArea.pages.front().bitmap;
|
||||
|
||||
if (d2d1Bitmap != nullptr)
|
||||
{
|
||||
D2D1_BRUSH_PROPERTIES brushProps { fillType.getOpacity(), D2DUtilities::transformToMatrix (fillType.transform) };
|
||||
auto bmProps = D2D1::BitmapBrushProperties (D2D1_EXTEND_MODE_WRAP, D2D1_EXTEND_MODE_WRAP);
|
||||
if (const auto hr = context->CreateBitmapBrush (d2d1Bitmap,
|
||||
bmProps,
|
||||
brushProps,
|
||||
bitmapBrush.resetAndGetPointerAddress()); SUCCEEDED (hr))
|
||||
{
|
||||
currentBrush = bitmapBrush;
|
||||
}
|
||||
}
|
||||
if (bitmap == nullptr)
|
||||
return;
|
||||
|
||||
D2D1_BRUSH_PROPERTIES brushProps { fillType.getOpacity(), D2DUtilities::transformToMatrix (fillType.transform) };
|
||||
auto bmProps = D2D1::BitmapBrushProperties (D2D1_EXTEND_MODE_WRAP, D2D1_EXTEND_MODE_WRAP);
|
||||
const auto hr = context->CreateBitmapBrush (bitmap,
|
||||
bmProps,
|
||||
brushProps,
|
||||
bitmapBrush.resetAndGetPointerAddress());
|
||||
|
||||
if (FAILED (hr))
|
||||
return;
|
||||
|
||||
currentBrush = bitmapBrush;
|
||||
}
|
||||
else if (fillType.isGradient())
|
||||
{
|
||||
|
|
@ -1170,42 +1197,38 @@ void Direct2DGraphicsContext::clipToImageAlpha (const Image& sourceImage, const
|
|||
return;
|
||||
}
|
||||
|
||||
// Is this a Direct2D image already?
|
||||
ComSmartPtr<ID2D1Bitmap> d2d1Bitmap;
|
||||
const auto device = D2DUtilities::getDeviceForContext (deviceContext);
|
||||
const auto pagesAndArea = PagesAndArea::make (sourceImage, device);
|
||||
|
||||
if (auto direct2DPixelData = dynamic_cast<Direct2DPixelData*> (sourceImage.getPixelData().get()))
|
||||
d2d1Bitmap = direct2DPixelData->getFirstPageForDevice (D2DUtilities::getDeviceForContext (deviceContext));
|
||||
if (pagesAndArea.pages.empty())
|
||||
return;
|
||||
|
||||
if (! d2d1Bitmap)
|
||||
{
|
||||
// Convert sourceImage to single-channel alpha-only maskImage
|
||||
d2d1Bitmap = Direct2DBitmap::toBitmap (sourceImage, deviceContext, Image::SingleChannel);
|
||||
}
|
||||
const auto bitmap = pagesAndArea.pages.front().bitmap;
|
||||
|
||||
if (d2d1Bitmap)
|
||||
{
|
||||
// Make a transformed bitmap brush using the bitmap
|
||||
// As usual, apply the current transform first *then* the transform parameter
|
||||
ComSmartPtr<ID2D1BitmapBrush> brush;
|
||||
auto matrix = D2DUtilities::transformToMatrix (brushTransform);
|
||||
D2D1_BRUSH_PROPERTIES brushProps = { 1.0f, matrix };
|
||||
if (bitmap == nullptr)
|
||||
return;
|
||||
|
||||
auto bitmapBrushProps = D2D1::BitmapBrushProperties (D2D1_EXTEND_MODE_WRAP, D2D1_EXTEND_MODE_WRAP);
|
||||
auto hr = deviceContext->CreateBitmapBrush (d2d1Bitmap, bitmapBrushProps, brushProps, brush.resetAndGetPointerAddress());
|
||||
// Make a transformed bitmap brush using the bitmap
|
||||
// As usual, apply the current transform first *then* the transform parameter
|
||||
ComSmartPtr<ID2D1BitmapBrush> brush;
|
||||
auto matrix = D2DUtilities::transformToMatrix (brushTransform);
|
||||
D2D1_BRUSH_PROPERTIES brushProps = { 1.0f, matrix };
|
||||
|
||||
if (SUCCEEDED (hr))
|
||||
{
|
||||
// Push the clipping layer onto the layer stack
|
||||
// Don't set maskTransform in the LayerParameters struct; that only applies to geometry clipping
|
||||
// Do set the contentBounds member, transformed appropriately
|
||||
auto layerParams = D2D1::LayerParameters1();
|
||||
auto transformedBounds = sourceImage.getBounds().toFloat().transformedBy (brushTransform);
|
||||
layerParams.contentBounds = D2DUtilities::toRECT_F (transformedBounds);
|
||||
layerParams.opacityBrush = brush;
|
||||
auto bitmapBrushProps = D2D1::BitmapBrushProperties (D2D1_EXTEND_MODE_WRAP, D2D1_EXTEND_MODE_WRAP);
|
||||
auto hr = deviceContext->CreateBitmapBrush (bitmap, bitmapBrushProps, brushProps, brush.resetAndGetPointerAddress());
|
||||
|
||||
currentState->pushLayer (layerParams);
|
||||
}
|
||||
}
|
||||
if (FAILED (hr))
|
||||
return;
|
||||
|
||||
// Push the clipping layer onto the layer stack
|
||||
// Don't set maskTransform in the LayerParameters struct; that only applies to geometry clipping
|
||||
// Do set the contentBounds member, transformed appropriately
|
||||
auto layerParams = D2D1::LayerParameters1();
|
||||
auto transformedBounds = sourceImage.getBounds().toFloat().transformedBy (brushTransform);
|
||||
layerParams.contentBounds = D2DUtilities::toRECT_F (transformedBounds);
|
||||
layerParams.opacityBrush = brush;
|
||||
|
||||
currentState->pushLayer (layerParams);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1451,53 +1474,36 @@ void Direct2DGraphicsContext::drawImage (const Image& imageIn, const AffineTrans
|
|||
|
||||
if (auto deviceContext = getPimpl()->getDeviceContext())
|
||||
{
|
||||
auto image = NativeImageType{}.convert (imageIn);
|
||||
Direct2DPixelData* nativeBitmap = nullptr;
|
||||
Rectangle<int> imageClipArea;
|
||||
const auto device = D2DUtilities::getDeviceForContext (deviceContext);
|
||||
const auto pagesAndArea = PagesAndArea::make (imageIn, device);
|
||||
|
||||
const auto imageTransform = currentState->currentTransform.getTransformWith (transform);
|
||||
|
||||
if (auto* subsectionPixelData = dynamic_cast<SubsectionPixelData*> (image.getPixelData().get()))
|
||||
{
|
||||
if (auto direct2DPixelData = dynamic_cast<Direct2DPixelData*> (subsectionPixelData->getSourcePixelData().get()))
|
||||
{
|
||||
nativeBitmap = direct2DPixelData;
|
||||
imageClipArea = subsectionPixelData->getSubsection();
|
||||
}
|
||||
}
|
||||
else if (auto direct2DPixelData = dynamic_cast<Direct2DPixelData*> (image.getPixelData().get()))
|
||||
{
|
||||
nativeBitmap = direct2DPixelData;
|
||||
imageClipArea = { direct2DPixelData->width, direct2DPixelData->height };
|
||||
}
|
||||
else
|
||||
{
|
||||
// This shouldn't happen, we converted the image to a native type already
|
||||
jassertfalse;
|
||||
}
|
||||
|
||||
if (! nativeBitmap)
|
||||
if (pagesAndArea.pages.empty())
|
||||
{
|
||||
jassertfalse;
|
||||
return;
|
||||
}
|
||||
|
||||
auto drawTiles = [&] (const auto& pixelData, auto&& getRect)
|
||||
const auto imageTransform = currentState->currentTransform.getTransformWith (transform);
|
||||
|
||||
auto drawTiles = [&] (auto&& getRect)
|
||||
{
|
||||
for (const auto& page : pixelData->getPagesForDevice (D2DUtilities::getDeviceForContext (deviceContext)))
|
||||
for (const auto& page : pagesAndArea.pages)
|
||||
{
|
||||
if (page.bitmap == nullptr)
|
||||
continue;
|
||||
|
||||
const auto pageBounds = page.getBounds();
|
||||
const auto intersection = pageBounds.toFloat().getIntersection (imageClipArea.toFloat());
|
||||
const auto intersection = pageBounds.toFloat().getIntersection (pagesAndArea.area.toFloat());
|
||||
|
||||
if (intersection.isEmpty())
|
||||
continue;
|
||||
|
||||
const auto src = intersection - pageBounds.getPosition().toFloat();
|
||||
const auto dst = getRect (intersection - imageClipArea.getPosition().toFloat());
|
||||
const auto dst = getRect (intersection - pagesAndArea.area.getPosition().toFloat());
|
||||
const auto [srcConverted, dstConverted] = std::tuple (D2DUtilities::toRECT_F (src),
|
||||
D2DUtilities::toRECT_F (dst));
|
||||
|
||||
if (nativeBitmap->pixelFormat == Image::SingleChannel)
|
||||
if (page.bitmap->GetPixelFormat().format == DXGI_FORMAT_A8_UNORM)
|
||||
{
|
||||
const auto lastColour = currentState->colourBrush->GetColor();
|
||||
const auto lastMode = deviceContext->GetAntialiasMode();
|
||||
|
|
@ -1526,7 +1532,7 @@ void Direct2DGraphicsContext::drawImage (const Image& imageIn, const AffineTrans
|
|||
|
||||
if (imageTransform.isOnlyTranslation() || D2DHelpers::isTransformAxisAligned (imageTransform))
|
||||
{
|
||||
drawTiles (nativeBitmap, [&] (auto intersection)
|
||||
drawTiles ([&] (auto intersection)
|
||||
{
|
||||
return intersection.transformedBy (imageTransform);
|
||||
});
|
||||
|
|
@ -1536,7 +1542,7 @@ void Direct2DGraphicsContext::drawImage (const Image& imageIn, const AffineTrans
|
|||
|
||||
ScopedTransform scopedTransform { *getPimpl(), currentState, transform };
|
||||
|
||||
drawTiles (nativeBitmap, [] (auto intersection)
|
||||
drawTiles ([] (auto intersection)
|
||||
{
|
||||
return intersection;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -35,13 +35,6 @@
|
|||
namespace juce
|
||||
{
|
||||
|
||||
Rectangle<int> Direct2DPixelDataPage::getBounds() const
|
||||
{
|
||||
return bitmap != nullptr ? D2DUtilities::rectFromSize (bitmap->GetPixelSize()).withPosition (topLeft)
|
||||
: Rectangle<int>{};
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
static std::vector<Direct2DPixelDataPage> makePages (ComSmartPtr<ID2D1Device1> device,
|
||||
ImagePixelData::Ptr backingData,
|
||||
bool needsClear)
|
||||
|
|
@ -783,6 +776,29 @@ bool Direct2DPixelData::canBackup() const
|
|||
});
|
||||
}
|
||||
|
||||
auto Direct2DPixelData::getNativeExtensions() -> NativeExtensions
|
||||
{
|
||||
struct Wrapped
|
||||
{
|
||||
explicit Wrapped (Ptr s)
|
||||
: self (s) {}
|
||||
|
||||
Span<const Direct2DPixelDataPage> getPages (ComSmartPtr<ID2D1Device1> x) const
|
||||
{
|
||||
return self->getPagesForDevice (x);
|
||||
}
|
||||
|
||||
Point<int> getTopLeft() const
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
Ptr self;
|
||||
};
|
||||
|
||||
return NativeExtensions { Wrapped { this } };
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
ImagePixelData::Ptr NativeImageType::create (Image::PixelFormat format, int width, int height, bool clearImage) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -35,19 +35,6 @@
|
|||
namespace juce
|
||||
{
|
||||
|
||||
/* A single bitmap that represents a subsection of a virtual bitmap. */
|
||||
struct Direct2DPixelDataPage
|
||||
{
|
||||
/* The bounds of the stored bitmap inside the virtual bitmap. */
|
||||
Rectangle<int> getBounds() const;
|
||||
|
||||
/* The stored subsection bitmap. */
|
||||
ComSmartPtr<ID2D1Bitmap1> bitmap;
|
||||
|
||||
/* The top-left position of this virtual bitmap inside the virtual bitmap. */
|
||||
Point<int> topLeft;
|
||||
};
|
||||
|
||||
/* A set of pages that together represent a full virtual bitmap.
|
||||
All pages in the set always share the same resource context.
|
||||
Additionally, stores a reference to a software-backed bitmap, the content of which will
|
||||
|
|
@ -204,6 +191,8 @@ public:
|
|||
BackupExtensions* getBackupExtensions() override { return this; }
|
||||
const BackupExtensions* getBackupExtensions() const override { return this; }
|
||||
|
||||
ImagePixelDataNativeExtensions getNativeExtensions() override;
|
||||
|
||||
private:
|
||||
enum class State
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
{
|
||||
|
||||
/* A single bitmap that represents a subsection of a virtual bitmap. */
|
||||
struct Direct2DPixelDataPage
|
||||
{
|
||||
/* The bounds of the stored bitmap inside the virtual bitmap. */
|
||||
Rectangle<int> getBounds() const
|
||||
{
|
||||
if (bitmap == nullptr)
|
||||
return {};
|
||||
|
||||
const auto size = bitmap->GetPixelSize();
|
||||
return Rectangle { (int) size.width, (int) size.height }.withPosition (topLeft);
|
||||
}
|
||||
|
||||
/* The stored subsection bitmap. */
|
||||
ComSmartPtr<ID2D1Bitmap1> bitmap;
|
||||
|
||||
/* The top-left position of this virtual bitmap inside the virtual bitmap. */
|
||||
Point<int> topLeft;
|
||||
};
|
||||
|
||||
} // namespace juce
|
||||
|
|
@ -199,6 +199,7 @@
|
|||
#include <juce_graphics/native/juce_Direct2DGraphicsContext_windows.h>
|
||||
#include <juce_graphics/native/juce_Direct2DHwndContext_windows.h>
|
||||
#include <juce_graphics/native/juce_DirectX_windows.h>
|
||||
#include <juce_graphics/native/juce_Direct2DPixelDataPage_windows.h>
|
||||
#include <juce_graphics/native/juce_Direct2DImage_windows.h>
|
||||
#include <juce_graphics/native/juce_Direct2DImageContext_windows.h>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue