/* coverity[+alloc : arg-*6] */ GpStatus WINGDIPAPI GdipCreateTexture2I (GpImage *image, GpWrapMode wrapMode, int x, int y, int width, int height, GpTexture **texture) { int bmpWidth; int bmpHeight; GpStatus status; GpImage *resized_image = NULL; if (!image || !texture) return InvalidParameter; if (image->type != ImageTypeBitmap) return NotImplemented; bmpWidth = image->active_bitmap->width; bmpHeight = image->active_bitmap->height; /* MS behaves this way */ if ((x < 0) || (y < 0) || (width <= 0) || (height <= 0) || (bmpWidth < (x + width)) || (bmpHeight < (y + height))) return OutOfMemory; status = GdipCloneBitmapAreaI (x, y, width, height, image->active_bitmap->pixel_format, image, &resized_image); if (status != Ok) return status; status = GdipCreateTexture (resized_image, wrapMode, texture); GdipDisposeImage (resized_image); return status; }
static void test_texturewrap(void) { GpStatus status; GpTexture *texture; GpGraphics *graphics = NULL; GpBitmap *bitmap; HDC hdc = GetDC(0); GpWrapMode wrap; 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 = GdipGetTextureWrapMode(NULL, NULL); expect(InvalidParameter, status); status = GdipGetTextureWrapMode(texture, NULL); expect(InvalidParameter, status); status = GdipGetTextureWrapMode(NULL, &wrap); expect(InvalidParameter, status); /* get */ wrap = WrapModeClamp; status = GdipGetTextureWrapMode(texture, &wrap); expect(Ok, status); expect(WrapModeTile, wrap); /* set, then get */ wrap = WrapModeClamp; status = GdipSetTextureWrapMode(texture, wrap); expect(Ok, status); wrap = WrapModeTile; status = GdipGetTextureWrapMode(texture, &wrap); expect(Ok, status); expect(WrapModeClamp, wrap); status = GdipDeleteBrush((GpBrush*)texture); expect(Ok, status); status = GdipDisposeImage((GpImage*)bitmap); expect(Ok, status); status = GdipDeleteGraphics(graphics); expect(Ok, status); ReleaseDC(0, hdc); }
static void test_transform(void) { GpStatus status; GpTexture *texture; GpGraphics *graphics = NULL; GpBitmap *bitmap; HDC hdc = GetDC(0); GpMatrix *m, *m1; 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); /* get default value - identity matrix */ status = GdipGetTextureTransform(texture, m); expect(Ok, status); status = GdipIsMatrixIdentity(m, &res); expect(Ok, status); expect(TRUE, res); /* set and get then */ status = GdipCreateMatrix2(2.0, 0.0, 0.0, 2.0, 0.0, 0.0, &m1); expect(Ok, status); status = GdipSetTextureTransform(texture, m1); expect(Ok, status); status = GdipGetTextureTransform(texture, m); expect(Ok, status); status = GdipIsMatrixEqual(m, m1, &res); expect(Ok, status); expect(TRUE, res); /* reset */ status = GdipResetTextureTransform(texture); expect(Ok, status); 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(m1); 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); }