gdiplus: Add GdipGetPenCompoundArray implementation.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52196
This commit is contained in:
Bartosz Kosiorek 2022-10-29 14:39:31 +02:00 committed by Alexandre Julliard
parent e2e8487b99
commit 2f26b02fd2
4 changed files with 35 additions and 3 deletions

View file

@ -334,7 +334,7 @@
334 stdcall GdipGetPathWorldBoundsI(ptr ptr ptr ptr)
335 stdcall GdipGetPenBrushFill(ptr ptr)
336 stdcall GdipGetPenColor(ptr ptr)
337 stub GdipGetPenCompoundArray
337 stdcall GdipGetPenCompoundArray(ptr ptr long)
338 stdcall GdipGetPenCompoundCount(ptr ptr)
339 stdcall GdipGetPenCustomEndCap(ptr ptr)
340 stdcall GdipGetPenCustomStartCap(ptr ptr)

View file

@ -526,6 +526,17 @@ GpStatus WINGDIPAPI GdipSetPenColor(GpPen *pen, ARGB argb)
return GdipSetSolidFillColor(((GpSolidFill*)pen->brush), argb);
}
GpStatus WINGDIPAPI GdipGetPenCompoundArray(GpPen *pen, REAL *compoundarray, INT count)
{
TRACE("(%p, %p, %i)\n", pen, compoundarray, count);
if (!pen || !compoundarray || count > pen->compound_array_size)
return InvalidParameter;
if (pen->compound_array && count > 0)
memcpy(compoundarray, pen->compound_array, count * sizeof(REAL));
return Ok;
}
GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen *pen, INT *count)
{
TRACE("(%p, %p)\n", pen, count);

View file

@ -350,6 +350,7 @@ static void test_compoundarray(void)
{
GpStatus status;
GpPen *pen;
REAL *returnvalues;
static const REAL testvalues[] = {0.2, 0.4, 0.6, 0.8};
static const REAL notSortedValues[] = {0.2, 0.6, 0.4, 0.8};
static const REAL negativeValues[] = {-1.2, 0.4, 0.6, 0.8};
@ -398,10 +399,29 @@ static void test_compoundarray(void)
count = 0;
status = GdipGetPenCompoundCount(pen, &count);
todo_wine {
expect(Ok, status);
ok(count == 4, "Unexpected compound count %d\n", count);
}
returnvalues = calloc(5, sizeof(REAL));
/* When count larger than stored array return error */
status = GdipGetPenCompoundArray(pen, returnvalues, 40);
expect(InvalidParameter, status);
status = GdipGetPenCompoundArray(NULL, returnvalues, 4);
expect(InvalidParameter, status);
/* When count is zero, it should do nothing */
status = GdipGetPenCompoundArray(pen, returnvalues, 0);
expect(Ok, status);
ok(returnvalues[0] == 0.0, "Unexpected compound array %f\n", returnvalues[0]);
status = GdipGetPenCompoundArray(pen, returnvalues, 4);
expect(Ok, status);
ok(memcmp(returnvalues, testvalues, 4 * sizeof(REAL)) == 0, "Unexpected compound array\n");
status = GdipGetPenCompoundArray(pen, returnvalues, -10);
expect(Ok, status);
ok(memcmp(returnvalues, testvalues, 4 * sizeof(REAL)) == 0, "Unexpected compound array\n");
free(returnvalues);
GdipDeletePen(pen);
}

View file

@ -629,6 +629,7 @@ GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**);
GpStatus WINGDIPAPI GdipDeletePen(GpPen*);
GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**);
GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*);
GpStatus WINGDIPAPI GdipGetPenCompoundArray(GpPen*,REAL*,INT);
GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen*,INT*);
GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**);
GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**);