[1/11] gdiplus: added GdipGetPathGradientPointCount
Evan Stade
estade at gmail.com
Thu Aug 2 19:51:49 CDT 2007
Hi,
changelog:
*keep track of path passed to GdipCreatePathGradientFromPath
*initialize brush type as BrushTypePathGradient not BrushTypeSolidColor
*add GdipGetPathGradientPointCount
dlls/gdiplus/brush.c | 28 +++++++++++++++++++++++++++-
dlls/gdiplus/gdiplus.spec | 2 +-
dlls/gdiplus/gdiplus_private.h | 1 +
include/gdiplusflat.h | 1 +
4 files changed, 30 insertions(+), 2 deletions(-)
--
Evan Stade
-------------- next part --------------
diff --git a/dlls/gdiplus/brush.c b/dlls/gdiplus/brush.c
index dbe221c..265aba0 100644
--- a/dlls/gdiplus/brush.c
+++ b/dlls/gdiplus/brush.c
@@ -60,12 +60,27 @@ GpStatus WINGDIPAPI GdipCreatePathGradie
*grad = GdipAlloc(sizeof(GpPathGradient));
if (!*grad) return OutOfMemory;
+ (*grad)->pathdata.Count = path->pathdata.Count;
+ (*grad)->pathdata.Points = GdipAlloc(path->pathdata.Count * sizeof(PointF));
+ (*grad)->pathdata.Types = GdipAlloc(path->pathdata.Count);
+
+ if(!(*grad)->pathdata.Points || !(*grad)->pathdata.Types){
+ GdipFree((*grad)->pathdata.Points);
+ GdipFree((*grad)->pathdata.Types);
+ GdipFree(*grad);
+ return OutOfMemory;
+ }
+
+ memcpy((*grad)->pathdata.Points, path->pathdata.Points,
+ path->pathdata.Count * sizeof(PointF));
+ memcpy((*grad)->pathdata.Types, path->pathdata.Types, path->pathdata.Count);
+
(*grad)->brush.lb.lbStyle = BS_SOLID;
(*grad)->brush.lb.lbColor = col;
(*grad)->brush.lb.lbHatch = 0;
(*grad)->brush.gdibrush = CreateSolidBrush(col);
- (*grad)->brush.bt = BrushTypeSolidColor;
+ (*grad)->brush.bt = BrushTypePathGradient;
(*grad)->centercolor = 0xffffffff;
(*grad)->wrap = WrapModeClamp;
@@ -111,6 +126,17 @@ GpStatus WINGDIPAPI GdipDeleteBrush(GpBr
return Ok;
}
+GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient *grad,
+ INT *count)
+{
+ if(!grad || !count)
+ return InvalidParameter;
+
+ *count = grad->pathdata.Count;
+
+ return Ok;
+}
+
GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill *sf, ARGB *argb)
{
if(!sf || !argb)
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 6b79a71..87981c2 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -333,7 +333,7 @@
@ stub GdipGetPathGradientFocusScales
@ stub GdipGetPathGradientGammaCorrection
@ stub GdipGetPathGradientPath
-@ stub GdipGetPathGradientPointCount
+@ stdcall GdipGetPathGradientPointCount(ptr ptr)
@ stub GdipGetPathGradientPresetBlend
@ stub GdipGetPathGradientPresetBlendCount
@ stub GdipGetPathGradientRect
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 3ce92a1..f843cc8 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -94,6 +94,7 @@ struct GpSolidFill{
struct GpPathGradient{
GpBrush brush;
+ PathData pathdata;
ARGB centercolor;
GpWrapMode wrap;
};
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 83aea93..4a90d32 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -92,6 +92,7 @@ GpStatus WINGDIPAPI GdipCreatePathGradie
GpPathGradient**);
GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**);
GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*);
+GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*);
GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*);
GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill*,ARGB*);
GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient*,ARGB);
--
1.4.1
More information about the wine-patches
mailing list