break;
}
case BrushTypeTextureFill:
- *clone = GdipAlloc(sizeof(GpTexture));
- if(!*clone) return OutOfMemory;
+ {
+ GpStatus stat;
+ GpTexture *texture = (GpTexture*)brush;
+ GpTexture *new_texture;
- memcpy(*clone, brush, sizeof(GpTexture));
+ stat = GdipCreateTexture(texture->image, texture->wrap, &new_texture);
- (*clone)->gdibrush = CreateBrushIndirect(&(*clone)->lb);
- break;
+ if (stat == Ok)
+ {
+ memcpy(new_texture->transform, texture->transform, sizeof(GpMatrix));
+ *clone = (GpBrush*)new_texture;
+ }
+ else
+ *clone = NULL;
+
+ return stat;
+ }
default:
ERR("not implemented for brush type %d\n", brush->bt);
return NotImplemented;
(*texture)->brush.gdibrush = CreateBrushIndirect(&(*texture)->brush.lb);
(*texture)->brush.bt = BrushTypeTextureFill;
(*texture)->wrap = imageattr->wrap;
+ (*texture)->image = new_image;
exit:
- GdipDisposeImage(new_image);
-
if (status == Ok)
{
TRACE("<-- %p\n", *texture);
GdipFree(*texture);
*texture = NULL;
}
+ GdipDisposeImage(new_image);
TRACE("<-- error %u\n", status);
}
break;
case BrushTypeTextureFill:
GdipDeleteMatrix(((GpTexture*)brush)->transform);
+ GdipDisposeImage(((GpTexture*)brush)->image);
break;
default:
break;