[7/10] gdiplus: implemented GdipSetPenColor
Evan Stade
estade at gmail.com
Mon Jul 23 22:24:29 CDT 2007
Hi,
dlls/gdiplus/gdiplus.spec | 2 +-
dlls/gdiplus/gdiplus_private.h | 1 -
dlls/gdiplus/graphics.c | 16 ++++++++--------
dlls/gdiplus/pen.c | 17 +++++++++++++++--
dlls/gdiplus/tests/pen.c | 6 ++----
include/gdiplusflat.h | 1 +
6 files changed, 27 insertions(+), 16 deletions(-)
--
Evan Stade
-------------- next part --------------
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 82e2b76..c2880e8 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -542,7 +542,7 @@
@ stub GdipSetPathGradientWrapMode
@ stub GdipSetPathMarker
@ stdcall GdipSetPenBrushFill(ptr ptr)
-@ stub GdipSetPenColor
+@ stdcall GdipSetPenColor(ptr long)
@ stub GdipSetPenCompoundArray
@ stdcall GdipSetPenCustomEndCap(ptr ptr)
@ stdcall GdipSetPenCustomStartCap(ptr ptr)
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 0338042..aac3278 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -44,7 +44,6 @@ static inline REAL deg2rad(REAL degrees)
struct GpPen{
UINT style;
- COLORREF color;
GpUnit unit;
REAL width;
HPEN gdipen;
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 0594c57..93b2079 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -394,9 +394,9 @@ static GpStatus draw_polyline(HDC hdc, G
&ptcopy[0].X, &ptcopy[0].Y,
pen->customend->inset * pen->width);
- draw_cap(hdc, pen->color, pen->endcap, pen->width, pen->customend,
+ draw_cap(hdc, pen->brush->lb.lbColor, pen->endcap, pen->width, pen->customend,
pt[count - 2].X, pt[count - 2].Y, pt[count - 1].X, pt[count - 1].Y);
- draw_cap(hdc, pen->color, pen->startcap, pen->width, pen->customstart,
+ draw_cap(hdc, pen->brush->lb.lbColor, pen->startcap, pen->width, pen->customstart,
pt[1].X, pt[1].Y, pt[0].X, pt[0].Y);
}
@@ -512,12 +512,12 @@ static GpStatus draw_polybezier(HDC hdc,
/* the direction of the line cap is parallel to the direction at the
* end of the bezier (which, if it has been shortened, is not the same
* as the direction from pt[count-2] to pt[count-1]) */
- draw_cap(hdc, pen->color, pen->endcap, pen->width, pen->customend,
+ draw_cap(hdc, pen->brush->lb.lbColor, pen->endcap, pen->width, pen->customend,
pt[count - 1].X - (ptcopy[count - 1].X - ptcopy[count - 2].X),
pt[count - 1].Y - (ptcopy[count - 1].Y - ptcopy[count - 2].Y),
pt[count - 1].X, pt[count - 1].Y);
- draw_cap(hdc, pen->color, pen->startcap, pen->width, pen->customstart,
+ draw_cap(hdc, pen->brush->lb.lbColor, pen->startcap, pen->width, pen->customstart,
pt[0].X - (ptcopy[0].X - ptcopy[1].X),
pt[0].Y - (ptcopy[0].Y - ptcopy[1].Y), pt[0].X, pt[0].Y);
}
@@ -588,7 +588,7 @@ static GpStatus draw_poly(HDC hdc, GpPen
MoveToEx(hdc, curpos.x, curpos.y, NULL);
}
- draw_cap(hdc, pen->color, pen->endcap, pen->width, pen->customend,
+ draw_cap(hdc, pen->brush->lb.lbColor, pen->endcap, pen->width, pen->customend,
pt[count - 1].X - (ptcopy[count - 1].X - ptcopy[count - 2].X),
pt[count - 1].Y - (ptcopy[count - 1].Y - ptcopy[count - 2].Y),
pt[count - 1].X, pt[count - 1].Y);
@@ -604,7 +604,7 @@ static GpStatus draw_poly(HDC hdc, GpPen
&ptcopy[count - 1].X, &ptcopy[count - 1].Y,
pen->customend->inset * pen->width);
- draw_cap(hdc, pen->color, pen->endcap, pen->width, pen->customend,
+ draw_cap(hdc, pen->brush->lb.lbColor, pen->endcap, pen->width, pen->customend,
pt[count - 2].X, pt[count - 2].Y, pt[count - 1].X,
pt[count - 1].Y);
@@ -632,7 +632,7 @@ static GpStatus draw_poly(HDC hdc, GpPen
MoveToEx(hdc, curpos.x, curpos.y, NULL);
}
- draw_cap(hdc, pen->color, pen->startcap, pen->width, pen->customstart,
+ draw_cap(hdc, pen->brush->lb.lbColor, pen->startcap, pen->width, pen->customstart,
pt[j - 1].X - (ptcopy[j - 1].X - ptcopy[j].X),
pt[j - 1].Y - (ptcopy[j - 1].Y - ptcopy[j].Y),
pt[j - 1].X, pt[j - 1].Y);
@@ -648,7 +648,7 @@ static GpStatus draw_poly(HDC hdc, GpPen
&ptcopy[j - 1].X, &ptcopy[j - 1].Y,
pen->customstart->inset * pen->width);
- draw_cap(hdc, pen->color, pen->endcap, pen->width, pen->customstart,
+ draw_cap(hdc, pen->brush->lb.lbColor, pen->endcap, pen->width, pen->customstart,
pt[j].X, pt[j].Y, pt[j - 1].X,
pt[j - 1].Y);
diff --git a/dlls/gdiplus/pen.c b/dlls/gdiplus/pen.c
index d68df33..0f58b25 100644
--- a/dlls/gdiplus/pen.c
+++ b/dlls/gdiplus/pen.c
@@ -98,7 +98,6 @@ GpStatus WINGDIPAPI GdipCreatePen1(ARGB
if(!gp_pen) return OutOfMemory;
gp_pen->style = GP_DEFAULT_PENSTYLE;
- gp_pen->color = ARGB2COLORREF(color);
gp_pen->width = width;
gp_pen->unit = unit;
gp_pen->endcap = LineCapFlat;
@@ -147,7 +146,10 @@ GpStatus WINGDIPAPI GdipGetPenColor(GpPe
if(!pen || !argb)
return InvalidParameter;
- return NotImplemented;
+ if(pen->brush->bt != BrushTypeSolidColor)
+ return NotImplemented;
+
+ return GdipGetSolidFillColor(((GpSolidFill*)pen->brush), argb);
}
GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen *pen, GpDashStyle *dash)
@@ -179,6 +181,17 @@ GpStatus WINGDIPAPI GdipSetPenBrushFill(
return Ok;
}
+GpStatus WINGDIPAPI GdipSetPenColor(GpPen *pen, ARGB argb)
+{
+ if(!pen)
+ return InvalidParameter;
+
+ if(pen->brush->bt != BrushTypeSolidColor)
+ return NotImplemented;
+
+ return GdipSetSolidFillColor(((GpSolidFill*)pen->brush), argb);
+}
+
GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen *pen, GpCustomLineCap* customCap)
{
GpCustomLineCap * cap;
diff --git a/dlls/gdiplus/tests/pen.c b/dlls/gdiplus/tests/pen.c
index 16a9356..0238aac 100644
--- a/dlls/gdiplus/tests/pen.c
+++ b/dlls/gdiplus/tests/pen.c
@@ -87,8 +87,7 @@ static void test_brushfill(void)
GdipGetBrushType(brush, &type);
expect(BrushTypeSolidColor, type);
GdipGetPenColor(pen, &color);
- todo_wine
- expect(0xdeadbeef, color);
+ expect(0xdeadbeef, color);
GdipDeleteBrush(brush);
/* color controlled by brush */
@@ -96,8 +95,7 @@ static void test_brushfill(void)
status = GdipSetPenBrushFill(pen, brush);
expect(Ok, status);
GdipGetPenColor(pen, &color);
- todo_wine
- expect(0xabaddeed, color);
+ expect(0xabaddeed, color);
GdipDeleteBrush(brush);
color = 0;
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index bfd1211..446cb98 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -34,6 +34,7 @@ GpStatus WINGDIPAPI GdipGetPenBrushFill(
GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*);
GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*);
GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*);
+GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB);
GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*);
GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*);
GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle);
--
1.4.1
More information about the wine-patches
mailing list