Evan Stade : gdiplus: Added GdipCreatePathGradient.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Aug 3 08:04:47 CDT 2007


Module: wine
Branch: master
Commit: b26d7ce82d959026143e128e0c28c110cf43d3b0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b26d7ce82d959026143e128e0c28c110cf43d3b0

Author: Evan Stade <estade at gmail.com>
Date:   Thu Aug  2 17:54:24 2007 -0700

gdiplus: Added GdipCreatePathGradient.

---

 dlls/gdiplus/brush.c      |   40 ++++++++++++++++++++++++++++++++++++++++
 dlls/gdiplus/gdiplus.spec |    2 +-
 include/gdiplusflat.h     |    2 ++
 3 files changed, 43 insertions(+), 1 deletions(-)

diff --git a/dlls/gdiplus/brush.c b/dlls/gdiplus/brush.c
index 265aba0..2bdeb89 100644
--- a/dlls/gdiplus/brush.c
+++ b/dlls/gdiplus/brush.c
@@ -48,6 +48,46 @@ GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone)
     return Ok;
 }
 
+GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF* points,
+    INT count, GpWrapMode wrap, GpPathGradient **grad)
+{
+    COLORREF col = ARGB2COLORREF(0xffffffff);
+
+    if(!points || !grad)
+        return InvalidParameter;
+
+    if(count <= 0)
+        return OutOfMemory;
+
+    *grad = GdipAlloc(sizeof(GpPathGradient));
+    if (!*grad) return OutOfMemory;
+
+    (*grad)->pathdata.Count = count;
+    (*grad)->pathdata.Points = GdipAlloc(count * sizeof(PointF));
+    (*grad)->pathdata.Types = GdipAlloc(count);
+
+    if(!(*grad)->pathdata.Points || !(*grad)->pathdata.Types){
+        GdipFree((*grad)->pathdata.Points);
+        GdipFree((*grad)->pathdata.Types);
+        GdipFree(*grad);
+        return OutOfMemory;
+    }
+
+    memcpy((*grad)->pathdata.Points, points, count * sizeof(PointF));
+    memset((*grad)->pathdata.Types, PathPointTypeLine, 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 = BrushTypePathGradient;
+    (*grad)->centercolor = 0xffffffff;
+    (*grad)->wrap = wrap;
+
+    return Ok;
+}
+
 /* FIXME: path gradient brushes not truly supported (drawn as solid brushes) */
 GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath* path,
     GpPathGradient **grad)
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index dba0b24..a502b14 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -116,7 +116,7 @@
 @ stub GdipCreatePath2
 @ stub GdipCreatePath2I
 @ stdcall GdipCreatePath(long ptr)
-@ stub GdipCreatePathGradient
+@ stdcall GdipCreatePathGradient(ptr long long ptr)
 @ stdcall GdipCreatePathGradientFromPath(ptr ptr)
 @ stub GdipCreatePathGradientI
 @ stdcall GdipCreatePathIter(ptr ptr)
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 4a90d32..fab9e0e 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -88,6 +88,8 @@ GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode);
 GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics*,GpMatrix*);
 
 GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**);
+GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,
+    GpPathGradient**);
 GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath*,
     GpPathGradient**);
 GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**);




More information about the wine-cvs mailing list