2 * Copyright (C) 2007 Google (Evan Stade)
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
25 #include "gdiplus_private.h"
26 #include "wine/debug.h"
28 WINE_DEFAULT_DEBUG_CHANNEL(gdiplus
);
30 GpStatus WINGDIPAPI
GdipCloneImageAttributes(GDIPCONST GpImageAttributes
*imageattr
,
31 GpImageAttributes
**cloneImageattr
)
35 TRACE("(%p, %p)\n", imageattr
, cloneImageattr
);
37 if(!imageattr
|| !cloneImageattr
)
38 return InvalidParameter
;
40 stat
= GdipCreateImageAttributes(cloneImageattr
);
43 **cloneImageattr
= *imageattr
;
48 GpStatus WINGDIPAPI
GdipCreateImageAttributes(GpImageAttributes
**imageattr
)
51 return InvalidParameter
;
53 *imageattr
= GdipAlloc(sizeof(GpImageAttributes
));
54 if(!*imageattr
) return OutOfMemory
;
56 (*imageattr
)->wrap
= WrapModeClamp
;
58 TRACE("<-- %p\n", *imageattr
);
63 GpStatus WINGDIPAPI
GdipDisposeImageAttributes(GpImageAttributes
*imageattr
)
67 TRACE("(%p)\n", imageattr
);
70 return InvalidParameter
;
72 for (i
=0; i
<ColorAdjustTypeCount
; i
++)
73 GdipFree(imageattr
->colorremaptables
[i
].colormap
);
80 GpStatus WINGDIPAPI
GdipSetImageAttributesColorKeys(GpImageAttributes
*imageattr
,
81 ColorAdjustType type
, BOOL enableFlag
, ARGB colorLow
, ARGB colorHigh
)
83 TRACE("(%p,%u,%i,%08x,%08x)\n", imageattr
, type
, enableFlag
, colorLow
, colorHigh
);
85 if(!imageattr
|| type
>= ColorAdjustTypeCount
)
86 return InvalidParameter
;
88 imageattr
->colorkeys
[type
].enabled
= enableFlag
;
89 imageattr
->colorkeys
[type
].low
= colorLow
;
90 imageattr
->colorkeys
[type
].high
= colorHigh
;
95 GpStatus WINGDIPAPI
GdipSetImageAttributesColorMatrix(GpImageAttributes
*imageattr
,
96 ColorAdjustType type
, BOOL enableFlag
, GDIPCONST ColorMatrix
* colorMatrix
,
97 GDIPCONST ColorMatrix
* grayMatrix
, ColorMatrixFlags flags
)
99 TRACE("(%p,%u,%i,%p,%p,%u)\n", imageattr
, type
, enableFlag
, colorMatrix
,
102 if(!imageattr
|| type
>= ColorAdjustTypeCount
|| flags
> ColorMatrixFlagsAltGray
)
103 return InvalidParameter
;
108 return InvalidParameter
;
110 if (flags
== ColorMatrixFlagsAltGray
)
113 return InvalidParameter
;
115 imageattr
->colormatrices
[type
].graymatrix
= *grayMatrix
;
118 imageattr
->colormatrices
[type
].colormatrix
= *colorMatrix
;
119 imageattr
->colormatrices
[type
].flags
= flags
;
122 imageattr
->colormatrices
[type
].enabled
= enableFlag
;
127 GpStatus WINGDIPAPI
GdipSetImageAttributesWrapMode(GpImageAttributes
*imageAttr
,
128 WrapMode wrap
, ARGB argb
, BOOL clamp
)
130 TRACE("(%p,%u,%08x,%i)\n", imageAttr
, wrap
, argb
, clamp
);
132 if(!imageAttr
|| wrap
> WrapModeClamp
)
133 return InvalidParameter
;
135 imageAttr
->wrap
= wrap
;
136 imageAttr
->outside_color
= argb
;
137 imageAttr
->clamp
= clamp
;
142 GpStatus WINGDIPAPI
GdipSetImageAttributesCachedBackground(GpImageAttributes
*imageAttr
,
147 TRACE("(%p,%i)\n", imageAttr
, enableFlag
);
150 FIXME("not implemented\n");
152 return NotImplemented
;
155 GpStatus WINGDIPAPI
GdipSetImageAttributesGamma(GpImageAttributes
*imageAttr
,
156 ColorAdjustType type
, BOOL enableFlag
, REAL gamma
)
158 TRACE("(%p,%u,%i,%0.2f)\n", imageAttr
, type
, enableFlag
, gamma
);
160 if (!imageAttr
|| (enableFlag
&& gamma
<= 0.0) || type
>= ColorAdjustTypeCount
)
161 return InvalidParameter
;
163 imageAttr
->gamma_enabled
[type
] = enableFlag
;
164 imageAttr
->gamma
[type
] = gamma
;
169 GpStatus WINGDIPAPI
GdipSetImageAttributesNoOp(GpImageAttributes
*imageAttr
,
170 ColorAdjustType type
, BOOL enableFlag
)
174 TRACE("(%p,%u,%i)\n", imageAttr
, type
, enableFlag
);
177 FIXME("not implemented\n");
179 return NotImplemented
;
182 GpStatus WINGDIPAPI
GdipSetImageAttributesOutputChannel(GpImageAttributes
*imageAttr
,
183 ColorAdjustType type
, BOOL enableFlag
, ColorChannelFlags channelFlags
)
187 TRACE("(%p,%u,%i,%x)\n", imageAttr
, type
, enableFlag
, channelFlags
);
190 FIXME("not implemented\n");
192 return NotImplemented
;
195 GpStatus WINGDIPAPI
GdipSetImageAttributesOutputChannelColorProfile(GpImageAttributes
*imageAttr
,
196 ColorAdjustType type
, BOOL enableFlag
,
197 GDIPCONST WCHAR
*colorProfileFilename
)
201 TRACE("(%p,%u,%i,%s)\n", imageAttr
, type
, enableFlag
, debugstr_w(colorProfileFilename
));
204 FIXME("not implemented\n");
206 return NotImplemented
;
209 GpStatus WINGDIPAPI
GdipSetImageAttributesRemapTable(GpImageAttributes
*imageAttr
,
210 ColorAdjustType type
, BOOL enableFlag
, UINT mapSize
,
211 GDIPCONST ColorMap
*map
)
215 TRACE("(%p,%u,%i,%u,%p)\n", imageAttr
, type
, enableFlag
, mapSize
, map
);
217 if(!imageAttr
|| type
>= ColorAdjustTypeCount
)
218 return InvalidParameter
;
223 return InvalidParameter
;
225 new_map
= GdipAlloc(sizeof(*map
) * mapSize
);
230 memcpy(new_map
, map
, sizeof(*map
) * mapSize
);
232 GdipFree(imageAttr
->colorremaptables
[type
].colormap
);
234 imageAttr
->colorremaptables
[type
].mapsize
= mapSize
;
235 imageAttr
->colorremaptables
[type
].colormap
= new_map
;
239 GdipFree(imageAttr
->colorremaptables
[type
].colormap
);
240 imageAttr
->colorremaptables
[type
].colormap
= NULL
;
243 imageAttr
->colorremaptables
[type
].enabled
= enableFlag
;
248 GpStatus WINGDIPAPI
GdipSetImageAttributesThreshold(GpImageAttributes
*imageAttr
,
249 ColorAdjustType type
, BOOL enableFlag
, REAL threshold
)
253 TRACE("(%p,%u,%i,%0.2f)\n", imageAttr
, type
, enableFlag
, threshold
);
256 FIXME("not implemented\n");
258 return NotImplemented
;
261 GpStatus WINGDIPAPI
GdipSetImageAttributesToIdentity(GpImageAttributes
*imageAttr
,
262 ColorAdjustType type
)
266 TRACE("(%p,%u)\n", imageAttr
, type
);
269 FIXME("not implemented\n");
271 return NotImplemented
;
274 GpStatus WINGDIPAPI
GdipResetImageAttributes(GpImageAttributes
*imageAttr
,
275 ColorAdjustType type
)
277 TRACE("(%p,%u)\n", imageAttr
, type
);
279 if(!imageAttr
|| type
>= ColorAdjustTypeCount
)
280 return InvalidParameter
;
282 memset(&imageAttr
->colormatrices
[type
], 0, sizeof(imageAttr
->colormatrices
[type
]));
283 GdipSetImageAttributesColorKeys(imageAttr
, type
, FALSE
, 0, 0);
284 GdipSetImageAttributesRemapTable(imageAttr
, type
, FALSE
, 0, NULL
);
285 GdipSetImageAttributesGamma(imageAttr
, type
, FALSE
, 0.0);