Nikolay Sivov : gdiplus: Added GdipGetPenFillType.
Alexandre Julliard
julliard at winehq.org
Thu Dec 4 09:02:11 CST 2008
Module: wine
Branch: master
Commit: 9f25eb35b75129beeffc85dcd588a34cad66fb6c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9f25eb35b75129beeffc85dcd588a34cad66fb6c
Author: Nikolay Sivov <bunglehead at gmail.com>
Date: Wed Dec 3 18:22:55 2008 +0300
gdiplus: Added GdipGetPenFillType.
---
dlls/gdiplus/gdiplus.spec | 2 +-
dlls/gdiplus/pen.c | 30 ++++++++++++++++++++++++++
dlls/gdiplus/tests/pen.c | 51 +++++++++++++++++++++++++++++++++++++++++++++
include/gdiplusenums.h | 11 +++++++++
include/gdiplusflat.h | 1 +
include/gdiplusgpstubs.h | 1 +
6 files changed, 95 insertions(+), 1 deletions(-)
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 1dce580..b5a5aab 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -360,7 +360,7 @@
@ stdcall GdipGetPenDashOffset(ptr ptr)
@ stdcall GdipGetPenDashStyle(ptr ptr)
@ stdcall GdipGetPenEndCap(ptr ptr)
-@ stub GdipGetPenFillType
+@ stdcall GdipGetPenFillType(ptr ptr)
@ stdcall GdipGetPenLineJoin(ptr ptr)
@ stdcall GdipGetPenMiterLimit(ptr ptr)
@ stdcall GdipGetPenMode(ptr ptr)
diff --git a/dlls/gdiplus/pen.c b/dlls/gdiplus/pen.c
index 61f1898..2804b14 100644
--- a/dlls/gdiplus/pen.c
+++ b/dlls/gdiplus/pen.c
@@ -67,6 +67,24 @@ static DWORD gdip_to_gdi_join(GpLineJoin join)
}
}
+static GpPenType bt_to_pt(GpBrushType bt)
+{
+ switch(bt){
+ case BrushTypeSolidColor:
+ return PenTypeSolidColor;
+ case BrushTypeHatchFill:
+ return PenTypeHatchFill;
+ case BrushTypeTextureFill:
+ return PenTypeTextureFill;
+ case BrushTypePathGradient:
+ return PenTypePathGradient;
+ case BrushTypeLinearGradient:
+ return PenTypeLinearGradient;
+ default:
+ return PenTypeUnknown;
+ }
+}
+
GpStatus WINGDIPAPI GdipClonePen(GpPen *pen, GpPen **clonepen)
{
TRACE("(%p, %p)\n", pen, clonepen);
@@ -283,6 +301,18 @@ GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen *pen, GpLineCap *endCap)
return Ok;
}
+GpStatus WINGDIPAPI GdipGetPenFillType(GpPen *pen, GpPenType* type)
+{
+ TRACE("(%p, %p)\n", pen, type);
+
+ if(!pen || !type)
+ return InvalidParameter;
+
+ *type = bt_to_pt(pen->brush->bt);
+
+ return Ok;
+}
+
GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen *pen, GpLineJoin *lineJoin)
{
TRACE("(%p, %p)\n", pen, lineJoin);
diff --git a/dlls/gdiplus/tests/pen.c b/dlls/gdiplus/tests/pen.c
index d75e510..263d0a7 100644
--- a/dlls/gdiplus/tests/pen.c
+++ b/dlls/gdiplus/tests/pen.c
@@ -275,6 +275,56 @@ static void test_customcap(void)
GdipDeletePen(pen);
}
+static void test_penfilltype(void)
+{
+ GpPen *pen;
+ GpSolidFill *solid;
+ GpLineGradient *line;
+ GpPointF a, b;
+ GpStatus status;
+ GpPenType type;
+
+ /* NULL */
+ status = GdipGetPenFillType(NULL, NULL);
+ expect(InvalidParameter, status);
+
+ status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
+ expect(Ok, status);
+ status = GdipGetPenFillType(pen, NULL);
+ expect(InvalidParameter, status);
+
+ /* created with GdipCreatePen1() */
+ status = GdipGetPenFillType(pen, &type);
+ expect(Ok, status);
+ expect(PenTypeSolidColor, type);
+ GdipDeletePen(pen);
+
+ /* based on SolidBrush */
+ status = GdipCreateSolidFill((ARGB)0xffff00ff, &solid);
+ expect(Ok, status);
+ status = GdipCreatePen2((GpBrush*)solid, 10.0f, UnitPixel, &pen);
+ expect(Ok, status);
+ status = GdipGetPenFillType(pen, &type);
+ expect(Ok, status);
+ expect(PenTypeSolidColor, type);
+ GdipDeletePen(pen);
+ GdipDeleteBrush((GpBrush*)solid);
+
+ /* based on LinearGradientBrush */
+ a.X = a.Y = 0.0;
+ b.X = b.Y = 10.0;
+ status = GdipCreateLineBrush(&a, &b, (ARGB)0xffff00ff, (ARGB)0xffff0000,
+ WrapModeTile, &line);
+ expect(Ok, status);
+ status = GdipCreatePen2((GpBrush*)line, 10.0f, UnitPixel, &pen);
+ expect(Ok, status);
+ status = GdipGetPenFillType(pen, &type);
+ expect(Ok, status);
+ expect(PenTypeLinearGradient, type);
+ GdipDeletePen(pen);
+ GdipDeleteBrush((GpBrush*)line);
+}
+
START_TEST(pen)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -294,6 +344,7 @@ START_TEST(pen)
test_brushfill();
test_dasharray();
test_customcap();
+ test_penfilltype();
GdiplusShutdown(gdiplusToken);
}
diff --git a/include/gdiplusenums.h b/include/gdiplusenums.h
index 3138b8c..8f7470d 100644
--- a/include/gdiplusenums.h
+++ b/include/gdiplusenums.h
@@ -76,6 +76,16 @@ enum PathPointType{
PathPointTypeBezier3 = 3
};
+enum PenType
+{
+ PenTypeSolidColor = BrushTypeSolidColor,
+ PenTypeHatchFill = BrushTypeHatchFill,
+ PenTypeTextureFill = BrushTypeTextureFill,
+ PenTypePathGradient = BrushTypePathGradient,
+ PenTypeLinearGradient = BrushTypeLinearGradient,
+ PenTypeUnknown = -1
+};
+
enum LineJoin
{
LineJoinMiter = 0,
@@ -384,6 +394,7 @@ typedef enum FlushIntention FlushIntention;
typedef enum CoordinateSpace CoordinateSpace;
typedef enum GpTestControlEnum GpTestControlEnum;
typedef enum MetafileFrameUnit MetafileFrameUnit;
+typedef enum PenType PenType;
#endif /* end of c typedefs */
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index ea4bec5..ef6ba7d 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -487,6 +487,7 @@ GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap);
GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL);
GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle);
GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap);
+GpStatus WINGDIPAPI GdipGetPenFillType(GpPen*,GpPenType*);
GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap);
GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin);
GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment);
diff --git a/include/gdiplusgpstubs.h b/include/gdiplusgpstubs.h
index e1d1706..a768638 100644
--- a/include/gdiplusgpstubs.h
+++ b/include/gdiplusgpstubs.h
@@ -90,5 +90,6 @@ typedef WrapMode GpWrapMode;
typedef Color GpColor;
typedef FlushIntention GpFlushIntention;
typedef CoordinateSpace GpCoordinateSpace;
+typedef PenType GpPenType;
#endif
More information about the wine-cvs
mailing list