c9c3bcc9060daeb73c9f318c15ce2b3cee684b41
[reactos.git] / reactos / dll / win32 / gdiplus / imageattributes.c
1 /*
2 * Copyright (C) 2007 Google (Evan Stade)
3 *
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.
8 *
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.
13 *
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
17 */
18
19 #include "windef.h"
20 #include "wingdi.h"
21
22 #include "objbase.h"
23
24 #include "gdiplus.h"
25 #include "gdiplus_private.h"
26 #include "wine/debug.h"
27
28 WINE_DEFAULT_DEBUG_CHANNEL(gdiplus);
29
30 GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes *imageattr,
31 GpImageAttributes **cloneImageattr)
32 {
33 GpStatus stat;
34
35 TRACE("(%p, %p)\n", imageattr, cloneImageattr);
36
37 if(!imageattr || !cloneImageattr)
38 return InvalidParameter;
39
40 stat = GdipCreateImageAttributes(cloneImageattr);
41
42 if (stat == Ok)
43 **cloneImageattr = *imageattr;
44
45 return stat;
46 }
47
48 GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes **imageattr)
49 {
50 if(!imageattr)
51 return InvalidParameter;
52
53 *imageattr = GdipAlloc(sizeof(GpImageAttributes));
54 if(!*imageattr) return OutOfMemory;
55
56 TRACE("<-- %p\n", *imageattr);
57
58 return Ok;
59 }
60
61 GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes *imageattr)
62 {
63 TRACE("(%p)\n", imageattr);
64
65 if(!imageattr)
66 return InvalidParameter;
67
68 GdipFree(imageattr);
69
70 return Ok;
71 }
72
73 GpStatus WINGDIPAPI GdipSetImageAttributesColorKeys(GpImageAttributes *imageattr,
74 ColorAdjustType type, BOOL enableFlag, ARGB colorLow, ARGB colorHigh)
75 {
76 TRACE("(%p,%u,%i,%08x,%08x)\n", imageattr, type, enableFlag, colorLow, colorHigh);
77
78 if(!imageattr || type >= ColorAdjustTypeCount)
79 return InvalidParameter;
80
81 imageattr->colorkeys[type].enabled = enableFlag;
82 imageattr->colorkeys[type].low = colorLow;
83 imageattr->colorkeys[type].high = colorHigh;
84
85 return Ok;
86 }
87
88 GpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes *imageattr,
89 ColorAdjustType type, BOOL enableFlag, GDIPCONST ColorMatrix* colorMatrix,
90 GDIPCONST ColorMatrix* grayMatrix, ColorMatrixFlags flags)
91 {
92 TRACE("(%p,%u,%i,%p,%p,%u)\n", imageattr, type, enableFlag, colorMatrix,
93 grayMatrix, flags);
94
95 if(!imageattr || type >= ColorAdjustTypeCount || flags > ColorMatrixFlagsAltGray)
96 return InvalidParameter;
97
98 if (enableFlag)
99 {
100 if (!colorMatrix)
101 return InvalidParameter;
102
103 if (flags == ColorMatrixFlagsAltGray)
104 {
105 if (!grayMatrix)
106 return InvalidParameter;
107
108 imageattr->colormatrices[type].graymatrix = *grayMatrix;
109 }
110
111 imageattr->colormatrices[type].colormatrix = *colorMatrix;
112 imageattr->colormatrices[type].flags = flags;
113 }
114
115 imageattr->colormatrices[type].enabled = enableFlag;
116
117 return Ok;
118 }
119
120 GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes *imageAttr,
121 WrapMode wrap, ARGB argb, BOOL clamp)
122 {
123 static int calls;
124
125 TRACE("(%p,%u,%08x,%i)\n", imageAttr, wrap, argb, clamp);
126
127 if(!imageAttr)
128 return InvalidParameter;
129
130 if(!(calls++))
131 FIXME("not implemented\n");
132
133 return NotImplemented;
134 }
135
136 GpStatus WINGDIPAPI GdipSetImageAttributesCachedBackground(GpImageAttributes *imageAttr,
137 BOOL enableFlag)
138 {
139 static int calls;
140
141 TRACE("(%p,%i)\n", imageAttr, enableFlag);
142
143 if(!(calls++))
144 FIXME("not implemented\n");
145
146 return NotImplemented;
147 }
148
149 GpStatus WINGDIPAPI GdipSetImageAttributesGamma(GpImageAttributes *imageAttr,
150 ColorAdjustType type, BOOL enableFlag, REAL gamma)
151 {
152 TRACE("(%p,%u,%i,%0.2f)\n", imageAttr, type, enableFlag, gamma);
153
154 if (!imageAttr || (enableFlag && gamma <= 0.0) || type >= ColorAdjustTypeCount)
155 return InvalidParameter;
156
157 imageAttr->gamma_enabled[type] = enableFlag;
158 imageAttr->gamma[type] = gamma;
159
160 return Ok;
161 }
162
163 GpStatus WINGDIPAPI GdipSetImageAttributesNoOp(GpImageAttributes *imageAttr,
164 ColorAdjustType type, BOOL enableFlag)
165 {
166 static int calls;
167
168 TRACE("(%p,%u,%i)\n", imageAttr, type, enableFlag);
169
170 if(!(calls++))
171 FIXME("not implemented\n");
172
173 return NotImplemented;
174 }
175
176 GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannel(GpImageAttributes *imageAttr,
177 ColorAdjustType type, BOOL enableFlag, ColorChannelFlags channelFlags)
178 {
179 static int calls;
180
181 TRACE("(%p,%u,%i,%x)\n", imageAttr, type, enableFlag, channelFlags);
182
183 if(!(calls++))
184 FIXME("not implemented\n");
185
186 return NotImplemented;
187 }
188
189 GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannelColorProfile(GpImageAttributes *imageAttr,
190 ColorAdjustType type, BOOL enableFlag,
191 GDIPCONST WCHAR *colorProfileFilename)
192 {
193 static int calls;
194
195 TRACE("(%p,%u,%i,%s)\n", imageAttr, type, enableFlag, debugstr_w(colorProfileFilename));
196
197 if(!(calls++))
198 FIXME("not implemented\n");
199
200 return NotImplemented;
201 }
202
203 GpStatus WINGDIPAPI GdipSetImageAttributesRemapTable(GpImageAttributes *imageAttr,
204 ColorAdjustType type, BOOL enableFlag, UINT mapSize,
205 GDIPCONST ColorMap *map)
206 {
207 static int calls;
208
209 TRACE("(%p,%u,%i,%u,%p)\n", imageAttr, type, enableFlag, mapSize, map);
210
211 if(!(calls++))
212 FIXME("not implemented\n");
213
214 return NotImplemented;
215 }
216
217 GpStatus WINGDIPAPI GdipSetImageAttributesThreshold(GpImageAttributes *imageAttr,
218 ColorAdjustType type, BOOL enableFlag, REAL threshold)
219 {
220 static int calls;
221
222 TRACE("(%p,%u,%i,%0.2f)\n", imageAttr, type, enableFlag, threshold);
223
224 if(!(calls++))
225 FIXME("not implemented\n");
226
227 return NotImplemented;
228 }
229
230 GpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes *imageAttr,
231 ColorAdjustType type)
232 {
233 static int calls;
234
235 TRACE("(%p,%u)\n", imageAttr, type);
236
237 if(!(calls++))
238 FIXME("not implemented\n");
239
240 return NotImplemented;
241 }