Commit 48b80725 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

gdiplus: Implement GdipGetTextureTransform with test.

parent 067a08ef
...@@ -485,6 +485,7 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image, ...@@ -485,6 +485,7 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image,
INT n_x, n_y, n_width, n_height, abs_height, stride, image_stride, i, bytespp; INT n_x, n_y, n_width, n_height, abs_height, stride, image_stride, i, bytespp;
BOOL bm_is_selected; BOOL bm_is_selected;
BYTE *dibits, *buff, *textbits; BYTE *dibits, *buff, *textbits;
GpStatus status;
TRACE("(%p, %p, %.2f, %.2f, %.2f, %.2f, %p)\n", image, imageattr, x, y, width, height, TRACE("(%p, %p, %.2f, %.2f, %.2f, %.2f, %p)\n", image, imageattr, x, y, width, height,
texture); texture);
...@@ -577,6 +578,13 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image, ...@@ -577,6 +578,13 @@ GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage *image,
*texture = GdipAlloc(sizeof(GpTexture)); *texture = GdipAlloc(sizeof(GpTexture));
if (!*texture) return OutOfMemory; if (!*texture) return OutOfMemory;
if((status = GdipCreateMatrix(&(*texture)->transform)) != Ok){
GdipFree(*texture);
GdipFree(dibits);
GdipFree(buff);
return status;
}
(*texture)->brush.lb.lbStyle = BS_DIBPATTERNPT; (*texture)->brush.lb.lbStyle = BS_DIBPATTERNPT;
(*texture)->brush.lb.lbColor = DIB_RGB_COLORS; (*texture)->brush.lb.lbColor = DIB_RGB_COLORS;
(*texture)->brush.lb.lbHatch = (ULONG_PTR)buff; (*texture)->brush.lb.lbHatch = (ULONG_PTR)buff;
...@@ -642,7 +650,10 @@ GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush) ...@@ -642,7 +650,10 @@ GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush)
break; break;
case BrushTypeSolidColor: case BrushTypeSolidColor:
case BrushTypeLinearGradient: case BrushTypeLinearGradient:
break;
case BrushTypeTextureFill: case BrushTypeTextureFill:
GdipDeleteMatrix(((GpTexture*)brush)->transform);
break;
default: default:
break; break;
} }
...@@ -872,6 +883,21 @@ GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill *sf, ARGB *argb) ...@@ -872,6 +883,21 @@ GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill *sf, ARGB *argb)
return Ok; return Ok;
} }
/******************************************************************************
* GdipGetTextureTransform [GDIPLUS.@]
*/
GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture *brush, GpMatrix *matrix)
{
TRACE("(%p, %p)\n", brush, matrix);
if(!brush || !matrix)
return InvalidParameter;
memcpy(matrix, brush->transform, sizeof(GpMatrix));
return Ok;
}
GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient *brush, GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient *brush,
GDIPCONST REAL *blend, GDIPCONST REAL* positions, INT count) GDIPCONST REAL *blend, GDIPCONST REAL* positions, INT count)
{ {
......
...@@ -398,7 +398,7 @@ ...@@ -398,7 +398,7 @@
@ stub GdipGetTextContrast @ stub GdipGetTextContrast
@ stdcall GdipGetTextRenderingHint(ptr ptr) @ stdcall GdipGetTextRenderingHint(ptr ptr)
@ stub GdipGetTextureImage @ stub GdipGetTextureImage
@ stub GdipGetTextureTransform @ stdcall GdipGetTextureTransform(ptr ptr)
@ stub GdipGetTextureWrapMode @ stub GdipGetTextureWrapMode
@ stub GdipGetVisibleClipBounds @ stub GdipGetVisibleClipBounds
@ stub GdipGetVisibleClipBoundsI @ stub GdipGetVisibleClipBoundsI
......
...@@ -138,6 +138,7 @@ struct GpLineGradient{ ...@@ -138,6 +138,7 @@ struct GpLineGradient{
struct GpTexture{ struct GpTexture{
GpBrush brush; GpBrush brush;
GpMatrix *transform;
}; };
struct GpPath{ struct GpPath{
......
...@@ -169,6 +169,52 @@ static void test_getgamma(void) ...@@ -169,6 +169,52 @@ static void test_getgamma(void)
GdipDeleteBrush((GpBrush*)line); GdipDeleteBrush((GpBrush*)line);
} }
static void test_transform(void)
{
GpStatus status;
GpTexture *texture;
GpGraphics *graphics = NULL;
GpBitmap *bitmap;
HDC hdc = GetDC(0);
GpMatrix *m;
BOOL res;
status = GdipCreateMatrix2(2.0, 0.0, 0.0, 0.0, 0.0, 0.0, &m);
expect(Ok, status);
status = GdipCreateFromHDC(hdc, &graphics);
expect(Ok, status);
status = GdipCreateBitmapFromGraphics(1, 1, graphics, &bitmap);
expect(Ok, status);
status = GdipCreateTexture((GpImage*)bitmap, WrapModeTile, &texture);
expect(Ok, status);
/* NULL */
status = GdipGetTextureTransform(NULL, NULL);
expect(InvalidParameter, status);
status = GdipGetTextureTransform(texture, NULL);
expect(InvalidParameter, status);
/* default value - identity matrix */
status = GdipGetTextureTransform(texture, m);
expect(Ok, status);
status = GdipIsMatrixIdentity(m, &res);
expect(Ok, status);
expect(TRUE, res);
status = GdipDeleteBrush((GpBrush*)texture);
expect(Ok, status);
status = GdipDeleteMatrix(m);
expect(Ok, status);
status = GdipDisposeImage((GpImage*)bitmap);
expect(Ok, status);
status = GdipDeleteGraphics(graphics);
expect(Ok, status);
ReleaseDC(0, hdc);
}
START_TEST(brush) START_TEST(brush)
{ {
struct GdiplusStartupInput gdiplusStartupInput; struct GdiplusStartupInput gdiplusStartupInput;
...@@ -187,6 +233,7 @@ START_TEST(brush) ...@@ -187,6 +233,7 @@ START_TEST(brush)
test_getblend(); test_getblend();
test_getbounds(); test_getbounds();
test_getgamma(); test_getgamma();
test_transform();
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