static void test_transform(void) { GpStatus status; GpPen *pen; GpMatrix *matrix, *matrix2; REAL values[6]; status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen); expect(Ok, status); status = GdipCreateMatrix(&matrix); expect(Ok, status); status = GdipGetPenTransform(pen, matrix); todo_wine expect(Ok, status); status = GdipGetMatrixElements(matrix, values); expect(Ok, status); expectf(1.0, values[0]); expectf(0.0, values[1]); expectf(0.0, values[2]); expectf(1.0, values[3]); expectf(0.0, values[4]); expectf(0.0, values[5]); GdipCreateMatrix2(3.0, -2.0, 5.0, 2.0, 6.0, 3.0, &matrix2); status = GdipSetPenTransform(pen, matrix2); todo_wine expect(Ok, status); GdipDeleteMatrix(matrix2); status = GdipGetPenTransform(pen, matrix); todo_wine expect(Ok, status); status = GdipGetMatrixElements(matrix, values); expect(Ok, status); todo_wine { expectf(3.0, values[0]); expectf(-2.0, values[1]); expectf(5.0, values[2]); expectf(2.0, values[3]); expectf(6.0, values[4]); expectf(3.0, values[5]); } status = GdipResetPenTransform(pen); todo_wine expect(Ok, status); status = GdipGetPenTransform(pen, matrix); todo_wine expect(Ok, status); status = GdipGetMatrixElements(matrix, values); expect(Ok, status); expectf(1.0, values[0]); expectf(0.0, values[1]); expectf(0.0, values[2]); expectf(1.0, values[3]); expectf(0.0, values[4]); expectf(0.0, values[5]); GdipDeletePen(pen); GdipDeleteMatrix(matrix); }
static void test_gradientgetrect(void) { GpLineGradient *brush; GpMatrix *transform; REAL elements[6]; GpRectF rectf; GpStatus status; GpPointF pt1, pt2; status = GdipCreateMatrix(&transform); expect(Ok, status); pt1.X = pt1.Y = 1.0; pt2.X = pt2.Y = 100.0; status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush); expect(Ok, status); memset(&rectf, 0, sizeof(GpRectF)); status = GdipGetLineRect(brush, &rectf); expect(Ok, status); expectf(1.0, rectf.X); expectf(1.0, rectf.Y); expectf(99.0, rectf.Width); expectf(99.0, rectf.Height); status = GdipGetLineTransform(brush, transform); todo_wine expect(Ok, status); if (status == Ok) { status = GdipGetMatrixElements(transform, elements); expect(Ok, status); expectf(1.0, elements[0]); expectf(1.0, elements[1]); expectf(-1.0, elements[2]); expectf(1.0, elements[3]); expectf(50.50, elements[4]); expectf(-50.50, elements[5]); } status = GdipDeleteBrush((GpBrush*)brush); expect(Ok, status); /* vertical gradient */ pt1.X = pt1.Y = pt2.X = 0.0; pt2.Y = 10.0; status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush); expect(Ok, status); memset(&rectf, 0, sizeof(GpRectF)); status = GdipGetLineRect(brush, &rectf); expect(Ok, status); expectf(-5.0, rectf.X); expectf(0.0, rectf.Y); expectf(10.0, rectf.Width); expectf(10.0, rectf.Height); status = GdipGetLineTransform(brush, transform); todo_wine expect(Ok, status); if (status == Ok) { status = GdipGetMatrixElements(transform, elements); expect(Ok, status); expectf(0.0, elements[0]); expectf(1.0, elements[1]); expectf(-1.0, elements[2]); expectf(0.0, elements[3]); expectf(5.0, elements[4]); expectf(5.0, elements[5]); } status = GdipDeleteBrush((GpBrush*)brush); expect(Ok, status); /* horizontal gradient */ pt1.X = pt1.Y = pt2.Y = 0.0; pt2.X = 10.0; status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush); expect(Ok, status); memset(&rectf, 0, sizeof(GpRectF)); status = GdipGetLineRect(brush, &rectf); expect(Ok, status); expectf(0.0, rectf.X); expectf(-5.0, rectf.Y); expectf(10.0, rectf.Width); expectf(10.0, rectf.Height); status = GdipGetLineTransform(brush, transform); todo_wine expect(Ok, status); if (status == Ok) { status = GdipGetMatrixElements(transform, elements); expect(Ok, status); expectf(1.0, elements[0]); expectf(0.0, elements[1]); expectf(0.0, elements[2]); expectf(1.0, elements[3]); expectf(0.0, elements[4]); expectf(0.0, elements[5]); } status = GdipDeleteBrush((GpBrush*)brush); expect(Ok, status); /* slope = -1 */ pt1.X = pt1.Y = 0.0; pt2.X = 20.0; pt2.Y = -20.0; status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush); expect(Ok, status); memset(&rectf, 0, sizeof(GpRectF)); status = GdipGetLineRect(brush, &rectf); expect(Ok, status); expectf(0.0, rectf.X); expectf(-20.0, rectf.Y); expectf(20.0, rectf.Width); expectf(20.0, rectf.Height); status = GdipGetLineTransform(brush, transform); todo_wine expect(Ok, status); if (status == Ok) { status = GdipGetMatrixElements(transform, elements); expect(Ok, status); expectf(1.0, elements[0]); expectf(-1.0, elements[1]); expectf(1.0, elements[2]); expectf(1.0, elements[3]); expectf(10.0, elements[4]); expectf(10.0, elements[5]); } status = GdipDeleteBrush((GpBrush*)brush); expect(Ok, status); /* slope = 1/100 */ pt1.X = pt1.Y = 0.0; pt2.X = 100.0; pt2.Y = 1.0; status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush); expect(Ok, status); memset(&rectf, 0, sizeof(GpRectF)); status = GdipGetLineRect(brush, &rectf); expect(Ok, status); expectf(0.0, rectf.X); expectf(0.0, rectf.Y); expectf(100.0, rectf.Width); expectf(1.0, rectf.Height); status = GdipGetLineTransform(brush, transform); todo_wine expect(Ok, status); if (status == Ok) { status = GdipGetMatrixElements(transform, elements); expect(Ok,status); expectf(1.0, elements[0]); expectf(0.01, elements[1]); expectf(-0.02, elements[2]); /* expectf(2.0, elements[3]); */ expectf(0.01, elements[4]); /* expectf(-1.0, elements[5]); */ } status = GdipDeleteBrush((GpBrush*)brush); expect(Ok,status); /* zero height rect */ rectf.X = rectf.Y = 10.0; rectf.Width = 100.0; rectf.Height = 0.0; status = GdipCreateLineBrushFromRect(&rectf, 0, 0, LinearGradientModeVertical, WrapModeTile, &brush); expect(OutOfMemory, status); /* zero width rect */ rectf.X = rectf.Y = 10.0; rectf.Width = 0.0; rectf.Height = 100.0; status = GdipCreateLineBrushFromRect(&rectf, 0, 0, LinearGradientModeHorizontal, WrapModeTile, &brush); expect(OutOfMemory, status); /* from rect with LinearGradientModeHorizontal */ rectf.X = rectf.Y = 10.0; rectf.Width = rectf.Height = 100.0; status = GdipCreateLineBrushFromRect(&rectf, 0, 0, LinearGradientModeHorizontal, WrapModeTile, &brush); expect(Ok, status); memset(&rectf, 0, sizeof(GpRectF)); status = GdipGetLineRect(brush, &rectf); expect(Ok, status); expectf(10.0, rectf.X); expectf(10.0, rectf.Y); expectf(100.0, rectf.Width); expectf(100.0, rectf.Height); status = GdipGetLineTransform(brush, transform); todo_wine expect(Ok, status); if (status == Ok) { status = GdipGetMatrixElements(transform, elements); expect(Ok,status); expectf(1.0, elements[0]); expectf(0.0, elements[1]); expectf(0.0, elements[2]); expectf(1.0, elements[3]); expectf(0.0, elements[4]); expectf(0.0, elements[5]); } status = GdipDeleteBrush((GpBrush*)brush); expect(Ok,status); /* passing negative Width/Height to LinearGradientModeHorizontal */ rectf.X = rectf.Y = 10.0; rectf.Width = rectf.Height = -100.0; status = GdipCreateLineBrushFromRect(&rectf, 0, 0, LinearGradientModeHorizontal, WrapModeTile, &brush); expect(Ok, status); memset(&rectf, 0, sizeof(GpRectF)); status = GdipGetLineRect(brush, &rectf); expect(Ok, status); expectf(10.0, rectf.X); expectf(10.0, rectf.Y); expectf(-100.0, rectf.Width); expectf(-100.0, rectf.Height); status = GdipGetLineTransform(brush, transform); todo_wine expect(Ok, status); if (status == Ok) { status = GdipGetMatrixElements(transform, elements); expect(Ok,status); expectf(1.0, elements[0]); expectf(0.0, elements[1]); expectf(0.0, elements[2]); expectf(1.0, elements[3]); expectf(0.0, elements[4]); expectf(0.0, elements[5]); } status = GdipDeleteBrush((GpBrush*)brush); expect(Ok,status); GdipDeleteMatrix(transform); }