From 4960518e46a909c3cbd091ef160f7aa5e13e2c22 Mon Sep 17 00:00:00 2001 From: MarkhusGenferei Date: Mon, 2 Jan 2023 11:32:44 +0100 Subject: [PATCH] fix issue #98 by replacing ID2D1PathGeometry by D2DGeometryContext where appropriate in Geometry.cpp --- src/D2DLib.sln | 22 +++++++--- src/D2DLibExport/D2DGraphics.cs | 2 +- src/D2DLibExport/D2DLib.cs | 2 +- src/D2DLibExport/D2DLibExport.csproj | 4 ++ src/d2dlib/Geometry.cpp | 60 ++++++++++++++-------------- src/d2dlib/Geometry.h | 18 ++++----- 6 files changed, 62 insertions(+), 46 deletions(-) diff --git a/src/D2DLib.sln b/src/D2DLib.sln index 63ad7e31c..4e43c41ec 100644 --- a/src/D2DLib.sln +++ b/src/D2DLib.sln @@ -1,16 +1,16 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29020.237 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33205.214 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "d2dlib", "d2dlib\d2dlib.vcxproj", "{E0A71FCE-69DD-40A6-87FB-2D63AB5D25C9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D2DLibExport", "D2DLibExport\D2DLibExport.csproj", "{81DD53D8-FCF0-4384-A931-9370FA8E8E67}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "D2DLibExport", "D2DLibExport\D2DLibExport.csproj", "{81DD53D8-FCF0-4384-A931-9370FA8E8E67}" ProjectSection(ProjectDependencies) = postProject {E0A71FCE-69DD-40A6-87FB-2D63AB5D25C9} = {E0A71FCE-69DD-40A6-87FB-2D63AB5D25C9} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Examples", "Examples\Examples.csproj", "{D653531B-D30C-4A20-8AE5-D46A6F03E274}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples", "Examples\Examples.csproj", "{D653531B-D30C-4A20-8AE5-D46A6F03E274}" ProjectSection(ProjectDependencies) = postProject {E0A71FCE-69DD-40A6-87FB-2D63AB5D25C9} = {E0A71FCE-69DD-40A6-87FB-2D63AB5D25C9} EndProjectSection @@ -37,11 +37,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "snapshots", "snapshots", "{ ..\snapshots\whiteboard.png = ..\snapshots\whiteboard.png EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D2DWinForm", "D2DWinForm\D2DWinForm.csproj", "{40ED2809-ABA2-4655-82DD-E38AD12138BB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "D2DWinForm", "D2DWinForm\D2DWinForm.csproj", "{40ED2809-ABA2-4655-82DD-E38AD12138BB}" ProjectSection(ProjectDependencies) = postProject {E0A71FCE-69DD-40A6-87FB-2D63AB5D25C9} = {E0A71FCE-69DD-40A6-87FB-2D63AB5D25C9} EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Éléments de solution", "Éléments de solution", "{6E37D4A0-DB61-48D6-ADC3-F08557227322}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MTest1", "MTest1\MTest1\MTest1.csproj", "{C179F80B-1BC7-407E-8F8C-E1EE66F45709}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -82,6 +86,14 @@ Global {40ED2809-ABA2-4655-82DD-E38AD12138BB}.Release|x64.Build.0 = Release|x64 {40ED2809-ABA2-4655-82DD-E38AD12138BB}.Release|x86.ActiveCfg = Release|x86 {40ED2809-ABA2-4655-82DD-E38AD12138BB}.Release|x86.Build.0 = Release|x86 + {C179F80B-1BC7-407E-8F8C-E1EE66F45709}.Debug|x64.ActiveCfg = Debug|x64 + {C179F80B-1BC7-407E-8F8C-E1EE66F45709}.Debug|x64.Build.0 = Debug|x64 + {C179F80B-1BC7-407E-8F8C-E1EE66F45709}.Debug|x86.ActiveCfg = Debug|x86 + {C179F80B-1BC7-407E-8F8C-E1EE66F45709}.Debug|x86.Build.0 = Debug|x86 + {C179F80B-1BC7-407E-8F8C-E1EE66F45709}.Release|x64.ActiveCfg = Release|x64 + {C179F80B-1BC7-407E-8F8C-E1EE66F45709}.Release|x64.Build.0 = Release|x64 + {C179F80B-1BC7-407E-8F8C-E1EE66F45709}.Release|x86.ActiveCfg = Release|x86 + {C179F80B-1BC7-407E-8F8C-E1EE66F45709}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/D2DLibExport/D2DGraphics.cs b/src/D2DLibExport/D2DGraphics.cs index b4dfa99f4..8309f3a7f 100644 --- a/src/D2DLibExport/D2DGraphics.cs +++ b/src/D2DLibExport/D2DGraphics.cs @@ -489,7 +489,7 @@ public void FillPath(D2DGeometry path, D2DColor fillColor) { D2D.FillPathD(path.Handle, fillColor); } - + public void Clear(D2DColor color) { D2D.Clear(Handle, color); diff --git a/src/D2DLibExport/D2DLib.cs b/src/D2DLibExport/D2DLib.cs index d4bda2847..28451423a 100644 --- a/src/D2DLibExport/D2DLib.cs +++ b/src/D2DLibExport/D2DLib.cs @@ -285,7 +285,7 @@ public static extern void DrawPath(HANDLE path, D2DColor strokeColor, FLOAT stro [DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)] public static extern void FillPathD(HANDLE path, D2DColor fillColor); - + [DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)] public static extern void FillGeometryWithBrush(HANDLE path, HANDLE brush); diff --git a/src/D2DLibExport/D2DLibExport.csproj b/src/D2DLibExport/D2DLibExport.csproj index da6c4faa0..21f38811f 100644 --- a/src/D2DLibExport/D2DLibExport.csproj +++ b/src/D2DLibExport/D2DLibExport.csproj @@ -13,4 +13,8 @@ + + + + \ No newline at end of file diff --git a/src/d2dlib/Geometry.cpp b/src/d2dlib/Geometry.cpp index b9ab40277..85035ead5 100644 --- a/src/d2dlib/Geometry.cpp +++ b/src/d2dlib/Geometry.cpp @@ -181,10 +181,10 @@ void AddPathArc(HANDLE ctx, D2D1_POINT_2F endPoint, D2D1_SIZE_F size, FLOAT swee pathContext->sink->AddArc(&seg); } -void DrawPath(HANDLE pathCtx, D2D1_COLOR_F strokeColor, FLOAT strokeWidth, D2D1_DASH_STYLE dashStyle) +void DrawPath(HANDLE geoCtx, D2D1_COLOR_F strokeColor, FLOAT strokeWidth, D2D1_DASH_STYLE dashStyle) { - D2DPathContext* pathContext = reinterpret_cast(pathCtx); - D2DContext* context = pathContext->d2context; + D2DGeometryContext* geometryContext = reinterpret_cast(geoCtx); + D2DContext* context = geometryContext->d2context; ID2D1Factory* factory = context->factory; ID2D1RenderTarget* renderTarget = context->renderTarget; @@ -206,27 +206,27 @@ void DrawPath(HANDLE pathCtx, D2D1_COLOR_F strokeColor, FLOAT strokeWidth, D2D1_ 0.0f), NULL, 0, &strokeStyle); } - renderTarget->DrawGeometry(pathContext->path, strokeBrush, strokeWidth, strokeStyle); + renderTarget->DrawGeometry(geometryContext->geometry, strokeBrush, strokeWidth, strokeStyle); SafeRelease(&strokeBrush); SafeRelease(&strokeStyle); } -void DrawPathWithPen(HANDLE pathCtx, HANDLE strokePen, FLOAT strokeWidth) +void DrawPathWithPen(HANDLE geoCtx, HANDLE strokePen, FLOAT strokeWidth) { D2DPen* pen = reinterpret_cast(strokePen); - D2DPathContext* pathContext = reinterpret_cast(pathCtx); - ID2D1RenderTarget* renderTarget = pathContext->d2context->renderTarget; + D2DGeometryContext* geometryContext = reinterpret_cast(geoCtx); + ID2D1RenderTarget* renderTarget = geometryContext->d2context->renderTarget; if (pen->brush != NULL) { - renderTarget->DrawGeometry(pathContext->path, pen->brush, strokeWidth, pen->strokeStyle); + renderTarget->DrawGeometry(geometryContext->geometry, pen->brush, strokeWidth, pen->strokeStyle); } } -void FillPathD(HANDLE pathCtx, D2D1_COLOR_F fillColor) +void FillPathD(HANDLE geoCtx, D2D1_COLOR_F fillColor) { - D2DPathContext* pathContext = reinterpret_cast(pathCtx); - ID2D1RenderTarget* renderTarget = pathContext->d2context->renderTarget; + D2DGeometryContext* geometryContext = reinterpret_cast(geoCtx); + ID2D1RenderTarget* renderTarget = geometryContext->d2context->renderTarget; if (fillColor.a > 0) { @@ -234,7 +234,7 @@ void FillPathD(HANDLE pathCtx, D2D1_COLOR_F fillColor) renderTarget->CreateSolidColorBrush(fillColor, &fillBrush); if (fillBrush != NULL) { - renderTarget->FillGeometry(pathContext->path, fillBrush); + renderTarget->FillGeometry(geometryContext->geometry, fillBrush); } SafeRelease(&fillBrush); @@ -376,13 +376,13 @@ void DrawPolygonWithBrush(HANDLE ctx, D2D1_POINT_2F* points, UINT count, } -void FillPathWithBrush(HANDLE ctx, HANDLE brushHandle) +void FillPathWithBrush(HANDLE geoCtx, HANDLE brushHandle) { - D2DPathContext* pathContext = reinterpret_cast(ctx); + D2DGeometryContext* geoContext = reinterpret_cast(geoCtx); D2DBrushContext* brushContext = reinterpret_cast(brushHandle); - D2DContext* context = pathContext->d2context; + D2DContext* context = geoContext->d2context; - context->renderTarget->FillGeometry(pathContext->path, brushContext->brush); + context->renderTarget->FillGeometry(geoContext->geometry, brushContext->brush); } void FillGeometryWithBrush(HANDLE ctx, HANDLE geoHandle, _In_ HANDLE brushHandle, _In_opt_ HANDLE opacityBrushHandle) @@ -397,21 +397,21 @@ void FillGeometryWithBrush(HANDLE ctx, HANDLE geoHandle, _In_ HANDLE brushHandle opacityBrushContext == NULL ? NULL : opacityBrushContext->brush); } -bool PathFillContainsPoint(HANDLE pathCtx, D2D1_POINT_2F point) +bool PathFillContainsPoint(HANDLE geoCtx, D2D1_POINT_2F point) { - D2DPathContext* pathContext = reinterpret_cast(pathCtx); + D2DGeometryContext* geoContext = reinterpret_cast(geoCtx); BOOL contain = FALSE; - pathContext->path->FillContainsPoint(point, NULL, &contain); + geoContext->geometry->FillContainsPoint(point, NULL, &contain); return contain == TRUE; } -bool PathStrokeContainsPoint(HANDLE pathCtx, D2D1_POINT_2F point, FLOAT strokeWidth, D2D1_DASH_STYLE dashStyle) +bool PathStrokeContainsPoint(HANDLE geoCtx, D2D1_POINT_2F point, FLOAT strokeWidth, D2D1_DASH_STYLE dashStyle) { - D2DPathContext* pathContext = reinterpret_cast(pathCtx); - - ID2D1Factory* factory = pathContext->d2context->factory; + D2DGeometryContext* geoContext = reinterpret_cast(geoCtx); + + ID2D1Factory* factory = geoContext->d2context->factory; ID2D1StrokeStyle *strokeStyle = NULL; if (dashStyle != D2D1_DASH_STYLE_SOLID) @@ -427,7 +427,7 @@ bool PathStrokeContainsPoint(HANDLE pathCtx, D2D1_POINT_2F point, FLOAT strokeWi } BOOL contain = FALSE; - pathContext->path->StrokeContainsPoint(point, strokeWidth, strokeStyle, NULL, &contain); + geoContext->geometry->StrokeContainsPoint(point, strokeWidth, strokeStyle, NULL, &contain); SafeRelease(&strokeStyle); @@ -435,14 +435,14 @@ bool PathStrokeContainsPoint(HANDLE pathCtx, D2D1_POINT_2F point, FLOAT strokeWi } -void GetGeometryBounds(HANDLE pathCtx, __out D2D1_RECT_F* rect) +void GetGeometryBounds(HANDLE geoCtx, __out D2D1_RECT_F* rect) { - D2DPathContext* pathContext = reinterpret_cast(pathCtx); - pathContext->path->GetBounds(NULL, rect); + D2DGeometryContext* geoContext = reinterpret_cast(geoCtx); + geoContext->geometry->GetBounds(NULL, rect); } -void GetGeometryTransformedBounds(HANDLE pathCtx, __in D2D1_MATRIX_3X2_F* mat3x2, __out D2D1_RECT_F* rect) +void GetGeometryTransformedBounds(HANDLE geoCtx, __in D2D1_MATRIX_3X2_F* mat3x2, __out D2D1_RECT_F* rect) { - D2DPathContext* pathContext = reinterpret_cast(pathCtx); - pathContext->path->GetBounds(mat3x2, rect); + D2DGeometryContext* geoContext = reinterpret_cast(geoCtx); + geoContext->geometry->GetBounds(mat3x2, rect); } diff --git a/src/d2dlib/Geometry.h b/src/d2dlib/Geometry.h index 8341d984f..9d516635f 100644 --- a/src/d2dlib/Geometry.h +++ b/src/d2dlib/Geometry.h @@ -1,4 +1,4 @@ -/* +/* * MIT License * * Copyright (c) 2009-2021 Jingwood, unvell.com. All right reserved. @@ -54,22 +54,22 @@ extern "C" D2D1_COLOR_F strokeColor, FLOAT strokeWidth = 1, D2D1_DASH_STYLE dashStyle = D2D1_DASH_STYLE::D2D1_DASH_STYLE_SOLID); - D2DLIB_API void DrawPath(HANDLE pathCtx, D2D1_COLOR_F strokeColor, FLOAT strokeWidth, D2D1_DASH_STYLE dashStyle); - D2DLIB_API void DrawPathWithPen(HANDLE pathCtx, HANDLE strokePen, FLOAT strokeWidth); - D2DLIB_API void FillPathD(HANDLE pathCtx, D2D1_COLOR_F fillColor); + D2DLIB_API void DrawPath(HANDLE geoCtx, D2D1_COLOR_F strokeColor, FLOAT strokeWidth, D2D1_DASH_STYLE dashStyle); + D2DLIB_API void DrawPathWithPen(HANDLE geoCtx, HANDLE strokePen, FLOAT strokeWidth); + D2DLIB_API void FillPathD(HANDLE geoCtx, D2D1_COLOR_F fillColor); D2DLIB_API void FillGeometryWithBrush(HANDLE ctx, HANDLE geoHandle, __in HANDLE brushHandle, __in_opt HANDLE opacityBrushHandle = NULL); - D2DLIB_API bool PathFillContainsPoint(HANDLE pathCtx, D2D1_POINT_2F point); - D2DLIB_API bool PathStrokeContainsPoint(HANDLE pathCtx, D2D1_POINT_2F point, FLOAT strokeWidth = 1, + D2DLIB_API bool PathFillContainsPoint(HANDLE geoCtx, D2D1_POINT_2F point); + D2DLIB_API bool PathStrokeContainsPoint(HANDLE geoCtx, D2D1_POINT_2F point, FLOAT strokeWidth = 1, D2D1_DASH_STYLE dashStyle = D2D1_DASH_STYLE::D2D1_DASH_STYLE_SOLID); - D2DLIB_API void GetGeometryBounds(HANDLE pathCtx, __out D2D1_RECT_F* rect); - D2DLIB_API void GetGeometryTransformedBounds(HANDLE pathCtx, __in D2D1_MATRIX_3X2_F* mat3x2, __out D2D1_RECT_F* rect); + D2DLIB_API void GetGeometryBounds(HANDLE geoCtx, __out D2D1_RECT_F* rect); + D2DLIB_API void GetGeometryTransformedBounds(HANDLE geoCtx, __in D2D1_MATRIX_3X2_F* mat3x2, __out D2D1_RECT_F* rect); D2DLIB_API void DrawPolygon(HANDLE ctx, D2D1_POINT_2F* points, UINT count, D2D1_COLOR_F strokeColor, FLOAT strokeWidth, D2D1_DASH_STYLE dashStyle, D2D1_COLOR_F fillColor); D2DLIB_API void DrawPolygonWithBrush(HANDLE ctx, D2D1_POINT_2F* points, UINT count, D2D1_COLOR_F strokeColor, FLOAT strokeWidth, D2D1_DASH_STYLE dashStyle, HANDLE brushHandle); -} \ No newline at end of file +}