Vincent Povirk : gdiplus: Copy remap tables when cloning an ImageAttributes.
Alexandre Julliard
julliard at winehq.org
Mon Aug 29 11:07:22 CDT 2016
Module: wine
Branch: master
Commit: d26c0ca214cdb20b103f7c1875c6ea4f2bb1f2a6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d26c0ca214cdb20b103f7c1875c6ea4f2bb1f2a6
Author: Vincent Povirk <vincent at codeweavers.com>
Date: Fri Aug 26 15:14:10 2016 -0500
gdiplus: Copy remap tables when cloning an ImageAttributes.
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/gdiplus/imageattributes.c | 38 ++++++++++++++++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/dlls/gdiplus/imageattributes.c b/dlls/gdiplus/imageattributes.c
index a76fe3b..2050706 100644
--- a/dlls/gdiplus/imageattributes.c
+++ b/dlls/gdiplus/imageattributes.c
@@ -30,18 +30,52 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus);
GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes *imageattr,
GpImageAttributes **cloneImageattr)
{
- GpStatus stat;
+ GpStatus stat = Ok;
+ struct color_remap_table remap_tables[ColorAdjustTypeCount] = {{0}};
+ int i;
TRACE("(%p, %p)\n", imageattr, cloneImageattr);
if(!imageattr || !cloneImageattr)
return InvalidParameter;
- stat = GdipCreateImageAttributes(cloneImageattr);
+ for (i=0; i<ColorAdjustTypeCount; i++)
+ {
+ if (imageattr->colorremaptables[i].enabled)
+ {
+ remap_tables[i].enabled = TRUE;
+ remap_tables[i].mapsize = imageattr->colorremaptables[i].mapsize;
+ remap_tables[i].colormap = heap_alloc(sizeof(ColorMap) * remap_tables[i].mapsize);
+
+ if (remap_tables[i].colormap)
+ {
+ memcpy(remap_tables[i].colormap, imageattr->colorremaptables[i].colormap,
+ sizeof(ColorMap) * remap_tables[i].mapsize);
+ }
+ else
+ {
+ stat = OutOfMemory;
+ break;
+ }
+ }
+ }
+
+ if (stat == Ok)
+ stat = GdipCreateImageAttributes(cloneImageattr);
if (stat == Ok)
+ {
**cloneImageattr = *imageattr;
+ memcpy((*cloneImageattr)->colorremaptables, remap_tables, sizeof(remap_tables));
+ }
+
+ if (stat != Ok)
+ {
+ for (i=0; i<ColorAdjustTypeCount; i++)
+ heap_free(remap_tables[i].colormap);
+ }
+
return stat;
}
More information about the wine-cvs
mailing list