Module: wine Branch: master Commit: f18cdef727d34d4428d2cef01b151e555f5be25a URL: http://source.winehq.org/git/wine.git/?a=commit;h=f18cdef727d34d4428d2cef01b...
Author: Evan Stade estade@gmail.com Date: Wed Aug 1 17:56:02 2007 -0700
gdiplus: Added solid-color path gradient brush implementation.
---
dlls/gdiplus/brush.c | 26 ++++++++++++++++++++++++++ dlls/gdiplus/gdiplus.spec | 2 +- dlls/gdiplus/gdiplus_private.h | 5 +++++ include/gdiplusflat.h | 2 ++ include/gdiplusgpstubs.h | 4 +++- 5 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/dlls/gdiplus/brush.c b/dlls/gdiplus/brush.c index ce01ccb..da432fd 100644 --- a/dlls/gdiplus/brush.c +++ b/dlls/gdiplus/brush.c @@ -23,6 +23,9 @@
#include "gdiplus.h" #include "gdiplus_private.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(gdiplus);
GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone) { @@ -45,6 +48,29 @@ GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone) return Ok; }
+/* FIXME: path gradient brushes not truly supported (drawn as solid brushes) */ +GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath* path, + GpPathGradient **grad) +{ + COLORREF col = ARGB2COLORREF(0xffffffff); + + if(!path || !grad) + return InvalidParameter; + + *grad = GdipAlloc(sizeof(GpPathGradient)); + if (!*grad) return OutOfMemory; + + (*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)->centercolor = 0xffffffff; + + return Ok; +} + GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB color, GpSolidFill **sf) { COLORREF col = ARGB2COLORREF(color); diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 871a9c4..8dcc155 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -117,7 +117,7 @@ @ stub GdipCreatePath2I @ stdcall GdipCreatePath(long ptr) @ stub GdipCreatePathGradient -@ stub GdipCreatePathGradientFromPath +@ stdcall GdipCreatePathGradientFromPath(ptr ptr) @ stub GdipCreatePathGradientI @ stdcall GdipCreatePathIter(ptr ptr) @ stdcall GdipCreatePen1(long long long ptr) diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h index 168f6ff..1a868cf 100644 --- a/dlls/gdiplus/gdiplus_private.h +++ b/dlls/gdiplus/gdiplus_private.h @@ -92,6 +92,11 @@ struct GpSolidFill{ ARGB color; };
+struct GpPathGradient{ + GpBrush brush; + ARGB centercolor; +}; + struct GpPath{ GpFillMode fill; GpPathData pathdata; diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index 25b9b1b..c04fef6 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 GdipCreatePathGradientFromPath(GDIPCONST GpPath*, + GpPathGradient**); GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**); GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*); GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*); diff --git a/include/gdiplusgpstubs.h b/include/gdiplusgpstubs.h index fec691a..6ca0073 100644 --- a/include/gdiplusgpstubs.h +++ b/include/gdiplusgpstubs.h @@ -24,7 +24,7 @@ class GpGraphics {}; class GpGraphics {}; class GpBrush {}; -class GpSolidFill {}; +class GpSolidFill : public GpBrush {}; class GpPath {}; class GpMatrix {}; class GpPathIterator {}; @@ -33,6 +33,7 @@ class GpImage {}; class GpMetafile : public GpImage {}; class GpImageAttributes {}; class GpBitmap : public GpImage {}; +class GpPathGradient : public GpBrush {};
#else /* end of c++ declarations */
@@ -48,6 +49,7 @@ typedef struct GpImage GpImage; typedef struct GpMetafile GpMetafile; typedef struct GpImageAttributes GpImageAttributes; typedef struct GpBitmap GpBitmap; +typedef struct GpPathGradient GpPathGradient;
#endif /* end of c declarations */