gdiplus: Add tests for preset blend accessors.
This commit is contained in:
parent
5254a76a0c
commit
aed62dbff1
|
@ -993,6 +993,146 @@ static void test_pathgradientcenterpoint(void)
|
|||
expect(Ok, status);
|
||||
}
|
||||
|
||||
void test_pathgradientpresetblend(void)
|
||||
{
|
||||
static const GpPointF path_points[] = {{0,0}, {3,0}, {0,4}};
|
||||
GpStatus status;
|
||||
GpPathGradient *grad;
|
||||
INT count;
|
||||
int i;
|
||||
const REAL positions[5] = {0.0f, 0.2f, 0.5f, 0.8f, 1.0f};
|
||||
const REAL two_positions[2] = {0.0f, 1.0f};
|
||||
const ARGB colors[5] = {0xff0000ff, 0xff00ff00, 0xff00ffff, 0xffff0000, 0xffffffff};
|
||||
REAL res_positions[6] = {0.3f, 0.0f, 0.0f, 0.0f, 0.0f};
|
||||
ARGB res_colors[6] = {0xdeadbeef, 0, 0, 0, 0};
|
||||
|
||||
status = GdipCreatePathGradient(path_points+1, 2, WrapModeClamp, &grad);
|
||||
expect(Ok, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlendCount(NULL, &count);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlendCount(grad, NULL);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlendCount(grad, &count);
|
||||
expect(Ok, status);
|
||||
expect(0, count);
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(NULL, res_colors, res_positions, 1);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, NULL, res_positions, 1);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, NULL, 1);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, res_positions, 0);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, res_positions, -1);
|
||||
expect(OutOfMemory, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, res_positions, 1);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, res_positions, 2);
|
||||
expect(GenericError, status);
|
||||
|
||||
status = GdipSetPathGradientPresetBlend(NULL, colors, positions, 5);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipSetPathGradientPresetBlend(grad, NULL, positions, 5);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
if (0)
|
||||
{
|
||||
/* crashes on windows xp */
|
||||
status = GdipSetPathGradientPresetBlend(grad, colors, NULL, 5);
|
||||
expect(InvalidParameter, status);
|
||||
}
|
||||
|
||||
status = GdipSetPathGradientPresetBlend(grad, colors, positions, 0);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipSetPathGradientPresetBlend(grad, colors, positions, -1);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipSetPathGradientPresetBlend(grad, colors, positions, 1);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
/* leave off the 0.0 position */
|
||||
status = GdipSetPathGradientPresetBlend(grad, &colors[1], &positions[1], 4);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
/* leave off the 1.0 position */
|
||||
status = GdipSetPathGradientPresetBlend(grad, colors, positions, 4);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipSetPathGradientPresetBlend(grad, colors, positions, 5);
|
||||
expect(Ok, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlendCount(grad, &count);
|
||||
expect(Ok, status);
|
||||
expect(5, count);
|
||||
|
||||
if (0)
|
||||
{
|
||||
/* Native GdipGetPathGradientPresetBlend seems to copy starting from
|
||||
* the end of each array and do no bounds checking. This is so braindead
|
||||
* I'm not going to copy it. */
|
||||
|
||||
res_colors[0] = 0xdeadbeef;
|
||||
res_positions[0] = 0.3;
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, &res_colors[1], &res_positions[1], 4);
|
||||
expect(Ok, status);
|
||||
|
||||
expect(0xdeadbeef, res_colors[0]);
|
||||
expectf(0.3, res_positions[0]);
|
||||
|
||||
for (i=1; i<5; i++)
|
||||
{
|
||||
expect(colors[i], res_colors[i]);
|
||||
expectf(positions[i], res_positions[i]);
|
||||
}
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, res_positions, 6);
|
||||
expect(Ok, status);
|
||||
|
||||
for (i=0; i<5; i++)
|
||||
{
|
||||
expect(colors[i], res_colors[i+1]);
|
||||
expectf(positions[i], res_positions[i+1]);
|
||||
}
|
||||
}
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, res_positions, 5);
|
||||
expect(Ok, status);
|
||||
|
||||
for (i=0; i<5; i++)
|
||||
{
|
||||
expect(colors[i], res_colors[i]);
|
||||
expectf(positions[i], res_positions[i]);
|
||||
}
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, res_positions, 0);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, res_positions, -1);
|
||||
expect(OutOfMemory, status);
|
||||
|
||||
status = GdipGetPathGradientPresetBlend(grad, res_colors, res_positions, 1);
|
||||
expect(InvalidParameter, status);
|
||||
|
||||
status = GdipSetPathGradientPresetBlend(grad, colors, two_positions, 2);
|
||||
expect(Ok, status);
|
||||
|
||||
status = GdipDeleteBrush((GpBrush*)grad);
|
||||
expect(Ok, status);
|
||||
}
|
||||
|
||||
START_TEST(brush)
|
||||
{
|
||||
struct GdiplusStartupInput gdiplusStartupInput;
|
||||
|
@ -1019,6 +1159,7 @@ START_TEST(brush)
|
|||
test_gradientsurroundcolorcount();
|
||||
test_pathgradientpath();
|
||||
test_pathgradientcenterpoint();
|
||||
test_pathgradientpresetblend();
|
||||
|
||||
GdiplusShutdown(gdiplusToken);
|
||||
}
|
||||
|
|
|
@ -555,6 +555,8 @@ GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*);
|
|||
GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientPath(GpPathGradient*,GpPath*);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientPresetBlend(GpPathGradient*,ARGB*,REAL*,INT);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientPresetBlendCount(GpPathGradient*,INT*);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*);
|
||||
GpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient*,
|
||||
GDIPCONST ARGB*,GDIPCONST REAL*,INT);
|
||||
|
|
Loading…
Reference in New Issue