GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect* rect, ARGB startcolor, ARGB endcolor, LinearGradientMode mode, GpWrapMode wrap, GpLineGradient **line) { GpRectF rectF; rectF.X = (REAL) rect->X; rectF.Y = (REAL) rect->Y; rectF.Width = (REAL) rect->Width; rectF.Height = (REAL) rect->Height; return GdipCreateLineBrushFromRect(&rectF, startcolor, endcolor, mode, wrap, line); }
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); }
static void test_gradientgetrect(void) { GpLineGradient *brush; GpRectF rectf; GpStatus status; GpPointF pt1, pt2; 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 = GdipDeleteBrush((GpBrush*)brush); /* 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 = GdipDeleteBrush((GpBrush*)brush); /* 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 = GdipDeleteBrush((GpBrush*)brush); /* 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 = GdipDeleteBrush((GpBrush*)brush); /* 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 = GdipDeleteBrush((GpBrush*)brush); /* 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 = GdipDeleteBrush((GpBrush*)brush); /* 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 = GdipDeleteBrush((GpBrush*)brush); }