Commit fc313037 authored by Royal Chan's avatar Royal Chan Committed by Alexandre Julliard

diplus: Implemented GdipDrawArcI based on GdipDrawArc.

parent da161a50
...@@ -153,7 +153,7 @@ ...@@ -153,7 +153,7 @@
@ stdcall GdipDisposeImage(ptr) @ stdcall GdipDisposeImage(ptr)
@ stdcall GdipDisposeImageAttributes(ptr) @ stdcall GdipDisposeImageAttributes(ptr)
@ stdcall GdipDrawArc(ptr ptr long long long long long long) @ stdcall GdipDrawArc(ptr ptr long long long long long long)
@ stub GdipDrawArcI @ stdcall GdipDrawArcI(ptr ptr long long long long long long)
@ stdcall GdipDrawBezier(ptr ptr long long long long long long long long) @ stdcall GdipDrawBezier(ptr ptr long long long long long long long long)
@ stdcall GdipDrawBezierI(ptr ptr long long long long long long long long) @ stdcall GdipDrawBezierI(ptr ptr long long long long long long long long)
@ stub GdipDrawBeziers @ stub GdipDrawBeziers
......
...@@ -929,6 +929,27 @@ GpStatus WINGDIPAPI GdipDrawArc(GpGraphics *graphics, GpPen *pen, REAL x, ...@@ -929,6 +929,27 @@ GpStatus WINGDIPAPI GdipDrawArc(GpGraphics *graphics, GpPen *pen, REAL x,
return retval; return retval;
} }
GpStatus WINGDIPAPI GdipDrawArcI(GpGraphics *graphics, GpPen *pen, INT x,
INT y, INT width, INT height, REAL startAngle, REAL sweepAngle)
{
INT save_state, num_pts;
GpPointF points[MAX_ARC_PTS];
GpStatus retval;
if(!graphics || !pen || width <= 0 || height <= 0)
return InvalidParameter;
num_pts = arc2polybezier(points, x, y, width, height, startAngle, sweepAngle);
save_state = prepare_dc(graphics, pen);
retval = draw_polybezier(graphics, pen, points, num_pts, TRUE);
restore_dc(graphics, save_state);
return retval;
}
GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics *graphics, GpPen *pen, REAL x1, GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics *graphics, GpPen *pen, REAL x1,
REAL y1, REAL x2, REAL y2, REAL x3, REAL y3, REAL x4, REAL y4) REAL y1, REAL x2, REAL y2, REAL x3, REAL y3, REAL x4, REAL y4)
{ {
......
...@@ -220,6 +220,50 @@ static void test_save_restore(void) ...@@ -220,6 +220,50 @@ static void test_save_restore(void)
ReleaseDC(0, hdc); ReleaseDC(0, hdc);
} }
static void test_GdipDrawArcI(void)
{
GpStatus status;
GpGraphics *graphics = NULL;
GpPen *pen = NULL;
HDC hdc = GetDC(0);
/* make a graphics object and pen object */
status = GdipCreateFromHDC(hdc, &graphics);
expect(Ok, status);
ok(hdc != NULL, "Expected HDC to be initialized\n");
status = GdipCreateFromHDC(hdc, &graphics);
expect(Ok, status);
ok(graphics != NULL, "Expected graphics to be initialized\n");
status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
expect(Ok, status);
ok(pen != NULL, "Expected pen to be initialized\n");
/* InvalidParameter cases: null graphics, null pen, non-positive width, non-positive height */
status = GdipDrawArcI(NULL, NULL, 0, 0, 0, 0, 0, 0);
expect(InvalidParameter, status);
status = GdipDrawArcI(graphics, NULL, 0, 0, 1, 1, 0, 0);
expect(InvalidParameter, status);
status = GdipDrawArcI(NULL, pen, 0, 0, 1, 1, 0, 0);
expect(InvalidParameter, status);
status = GdipDrawArcI(graphics, pen, 0, 0, 1, 0, 0, 0);
expect(InvalidParameter, status);
status = GdipDrawArcI(graphics, pen, 0, 0, 0, 1, 0, 0);
expect(InvalidParameter, status);
/* successful case */
status = GdipDrawArcI(graphics, pen, 0, 0, 1, 1, 0, 0);
expect(Ok, status);
GdipDeletePen(pen);
ReleaseDC(0, hdc);
}
static void test_GdipDrawBezierI(void) static void test_GdipDrawBezierI(void)
{ {
GpStatus status; GpStatus status;
...@@ -273,6 +317,7 @@ START_TEST(graphics) ...@@ -273,6 +317,7 @@ START_TEST(graphics)
test_constructor_destructor(); test_constructor_destructor();
test_save_restore(); test_save_restore();
test_GdipDrawBezierI(); test_GdipDrawBezierI();
test_GdipDrawArcI();
GdiplusShutdown(gdiplusToken); GdiplusShutdown(gdiplusToken);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment