gdiplus: Copy remap tables when cloning an ImageAttributes.
Signed-off-by: Vincent Povirk <vincent@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
25dbca10dc
commit
d26c0ca214
@ -30,18 +30,52 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus);
|
|||||||
GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes *imageattr,
|
GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes *imageattr,
|
||||||
GpImageAttributes **cloneImageattr)
|
GpImageAttributes **cloneImageattr)
|
||||||
{
|
{
|
||||||
GpStatus stat;
|
GpStatus stat = Ok;
|
||||||
|
struct color_remap_table remap_tables[ColorAdjustTypeCount] = {{0}};
|
||||||
|
int i;
|
||||||
|
|
||||||
TRACE("(%p, %p)\n", imageattr, cloneImageattr);
|
TRACE("(%p, %p)\n", imageattr, cloneImageattr);
|
||||||
|
|
||||||
if(!imageattr || !cloneImageattr)
|
if(!imageattr || !cloneImageattr)
|
||||||
return InvalidParameter;
|
return InvalidParameter;
|
||||||
|
|
||||||
|
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);
|
stat = GdipCreateImageAttributes(cloneImageattr);
|
||||||
|
|
||||||
if (stat == Ok)
|
if (stat == Ok)
|
||||||
|
{
|
||||||
**cloneImageattr = *imageattr;
|
**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;
|
return stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user