1 #ifdef WIN32
2 #ifndef __cplusplus
3 #error Please compile with a C++ compiler.
4 #endif
5 #endif
6
7 #if defined(USE_WINDOWS_GDIPLUS)
8 #include <Windows.h>
9 #include <GdiPlus.h>
10
11 #pragma comment(lib, "gdiplus.lib")
12 #else
13 #include <GdiPlusFlat.h>
14 #endif
15
16 #if defined(USE_WINDOWS_GDIPLUS)
17 using namespace Gdiplus;
18 using namespace DllExports;
19 #endif
20
21 #include <assert.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include "testhelpers.h"
25
test_clone()26 static void test_clone ()
27 {
28 GpStatus status;
29 GpSolidFill *brush;
30 GpBrushType brushType;
31 GpBrush *clone;
32 ARGB solidColor;
33
34 status = GdipCreateSolidFill (0x010203040, &brush);
35 assertEqualInt (status, Ok);
36
37 status = GdipCloneBrush ((GpBrush *) brush, &clone);
38 assertEqualInt (status, Ok);
39 assert (clone && brush != clone);
40
41 status = GdipGetBrushType (clone, &brushType);
42 assertEqualInt (status, Ok);
43 assertEqualInt (brushType, BrushTypeSolidColor);
44
45 status = GdipGetSolidFillColor ((GpSolidFill *) clone, &solidColor);
46 assertEqualInt (status, Ok);
47 assertEqualARGB (solidColor, 0x010203040);
48
49 GdipDeleteBrush ((GpBrush *) brush);
50 GdipDeleteBrush (clone);
51 }
52
test_delete()53 static void test_delete ()
54 {
55 GpStatus status;
56 GpSolidFill *brush;
57
58 status = GdipCreateSolidFill (0x010203040, &brush);
59 assertEqualInt (status, Ok);
60
61 status = GdipDeleteBrush ((GpBrush *) brush);
62 assertEqualInt (status, Ok);
63 }
64
test_createSolidFill()65 static void test_createSolidFill ()
66 {
67 GpStatus status;
68 GpSolidFill *brush;
69 GpBrushType brushType;
70 ARGB color;
71
72 status = GdipCreateSolidFill (0x010203040, &brush);
73 assertEqualInt (status, Ok);
74 assert (brush && "Expected the brush to be initialized.");
75
76 status = GdipGetBrushType ((GpBrush *) brush, &brushType);
77 assertEqualInt (status, Ok);
78 assertEqualInt (brushType, BrushTypeSolidColor);
79
80 status = GdipGetSolidFillColor (brush, &color);
81 assertEqualInt (status, Ok);
82 assertEqualARGB (color, 0x010203040);
83
84 GdipDeleteBrush ((GpBrush *) brush);
85
86 // Negative tests.
87 status = GdipCreateSolidFill (0x010203040, NULL);
88 assertEqualInt (status, InvalidParameter);
89 }
90
test_getSolidFillColor()91 static void test_getSolidFillColor ()
92 {
93 GpStatus status;
94 GpSolidFill *brush;
95 ARGB color;
96
97 status = GdipCreateSolidFill (0xFF000000, &brush);
98 assertEqualInt (status, Ok);
99
100 // Negative tests.
101 status = GdipGetSolidFillColor (NULL, &color);
102 assertEqualInt (status, InvalidParameter);
103
104 status = GdipGetSolidFillColor (brush, NULL);
105 assertEqualInt (status, InvalidParameter);
106
107 GdipDeleteBrush ((GpBrush *) brush);
108 }
109
test_setSolidFillColor()110 static void test_setSolidFillColor ()
111 {
112 GpStatus status;
113 GpSolidFill *brush;
114 ARGB color;
115
116 status = GdipCreateSolidFill (0xFF000000, &brush);
117 assertEqualInt (status, Ok);
118
119 // Set new.
120 status = GdipSetSolidFillColor (brush, 0x010203040);
121 assertEqualInt (status, Ok);
122
123 status = GdipGetSolidFillColor (brush, &color);
124 assertEqualInt (status, Ok);
125 assertEqualARGB (color, 0x010203040);
126
127 // Set same.
128 status = GdipSetSolidFillColor (brush, 0x010203040);
129 assertEqualInt (status, Ok);
130
131 status = GdipGetSolidFillColor (brush, &color);
132 assertEqualInt (status, Ok);
133 assertEqualARGB (color, 0x010203040);
134
135 // Negative tests.
136 status = GdipSetSolidFillColor (NULL, 0x010203040);
137 assertEqualInt (status, InvalidParameter);
138
139 GdipDeleteBrush ((GpBrush *) brush);
140 }
141
test_fill()142 static void test_fill ()
143 {
144 GpStatus status;
145 GpSolidFill *brush;
146 GpBitmap *bitmap;
147 GpGraphics *graphics;
148 ARGB color;
149
150 status = GdipCreateSolidFill (0xDDA03040, &brush);
151 assertEqualInt (status, Ok);
152
153 // PixelFormat32bppARGB.
154 status = GdipCreateBitmapFromScan0 (256, 256, 0, PixelFormat32bppARGB, NULL, &bitmap);
155 assertEqualInt (status, Ok);
156
157 status = GdipGetImageGraphicsContext ((GpImage *) bitmap, &graphics);
158 assertEqualInt (status, Ok);
159
160 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
161 assertEqualInt (status, Ok);
162
163 // Fill with brush - CompositingModeSourceOver.
164 status = GdipSetCompositingMode (graphics, CompositingModeSourceOver);
165 assertEqualInt (status, Ok);
166
167 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
168 assertEqualInt (status, Ok);
169
170 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
171 assertEqualInt (status, Ok);
172 #if defined(USE_WINDOWS_GDIPLUS)
173 assertEqualARGB (color, 0xDDA0303F);
174 #else
175 assertEqualARGB (color, 0xDDA02F3F);
176 #endif
177
178 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
179 assertEqualInt (status, Ok);
180
181 // Fill with brush - unchanged, CompositingModeSourceOver.
182 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
183 assertEqualInt (status, Ok);
184
185 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
186 assertEqualInt (status, Ok);
187 #if defined(USE_WINDOWS_GDIPLUS)
188 assertEqualARGB (color, 0xDDA0303F);
189 #else
190 assertEqualARGB (color, 0xDDA02F3F);
191 #endif
192
193 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
194 assertEqualInt (status, Ok);
195
196 // Fill with brush - changed, CompositingModeSourceOver.
197 status = GdipSetSolidFillColor (brush, 0xAABBCCDD);
198 assertEqualInt (status, Ok);
199
200 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
201 assertEqualInt (status, Ok);
202
203 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
204 assertEqualInt (status, Ok);
205 assertEqualARGB (color, 0xAABBCCDC);
206
207 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
208 assertEqualInt (status, Ok);
209
210 // Fill with brush - zero alpha, CompositingModeSourceOver.
211 status = GdipSetSolidFillColor (brush, 0x00BBCCDD);
212 assertEqualInt (status, Ok);
213
214 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
215 assertEqualInt (status, Ok);
216
217 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
218 assertEqualInt (status, Ok);
219 assertEqualARGB (color, 0x00000000);
220
221 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
222 assertEqualInt (status, Ok);
223
224 // Fill with brush - CompositingModeSourceCopy.
225 status = GdipSetSolidFillColor (brush, 0xDDA03040);
226 assertEqualInt (status, Ok);
227
228 status = GdipSetCompositingMode (graphics, CompositingModeSourceCopy);
229 assertEqualInt (status, Ok);
230
231 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
232 assertEqualInt (status, Ok);
233
234 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
235 assertEqualInt (status, Ok);
236 #if defined(USE_WINDOWS_GDIPLUS)
237 assertEqualARGB (color, 0xDDA0303F);
238 #else
239 assertEqualARGB (color, 0xDDA02F3F);
240 #endif
241
242 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
243 assertEqualInt (status, Ok);
244
245 // Fill with brush - unchanged, CompositingModeSourceCopy.
246 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
247 assertEqualInt (status, Ok);
248
249 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
250 assertEqualInt (status, Ok);
251 #if defined(USE_WINDOWS_GDIPLUS)
252 assertEqualARGB (color, 0xDDA0303F);
253 #else
254 assertEqualARGB (color, 0xDDA02F3F);
255 #endif
256
257 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
258 assertEqualInt (status, Ok);
259
260 // Fill with brush - changed, CompositingModeSourceCopy.
261 status = GdipSetSolidFillColor (brush, 0xAABBCCDD);
262 assertEqualInt (status, Ok);
263
264 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
265 assertEqualInt (status, Ok);
266
267 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
268 assertEqualInt (status, Ok);
269 assertEqualARGB (color, 0xAABBCCDC);
270
271 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
272 assertEqualInt (status, Ok);
273
274 // Fill with brush - zero alpha, CompositingModeSourceCopy.
275 status = GdipSetSolidFillColor (brush, 0x00BBCCDD);
276 assertEqualInt (status, Ok);
277
278 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
279 assertEqualInt (status, Ok);
280
281 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
282 assertEqualInt (status, Ok);
283 assertEqualARGB (color, 0x00000000);
284
285 GdipDeleteGraphics (graphics);
286 GdipDisposeImage ((GpImage *) bitmap);
287
288 // PixelFormat32bppPARGB.
289 status = GdipCreateBitmapFromScan0 (256, 256, 0, PixelFormat32bppPARGB, NULL, &bitmap);
290 assertEqualInt (status, Ok);
291
292 status = GdipGetImageGraphicsContext ((GpImage *) bitmap, &graphics);
293 assertEqualInt (status, Ok);
294
295 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
296 assertEqualInt (status, Ok);
297
298 status = GdipSetSolidFillColor (brush, 0xDDA03040);
299 assertEqualInt (status, Ok);
300
301 // Fill with brush - CompositingModeSourceOver.
302 status = GdipSetCompositingMode (graphics, CompositingModeSourceOver);
303 assertEqualInt (status, Ok);
304
305 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
306 assertEqualInt (status, Ok);
307
308 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
309 assertEqualInt (status, Ok);
310 #if defined(USE_WINDOWS_GDIPLUS)
311 assertEqualARGB (color, 0xDDA0303F);
312 #else
313 assertEqualARGB (color, 0xDDA02F3F);
314 #endif
315
316 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
317 assertEqualInt (status, Ok);
318
319 // Fill with brush - unchanged, CompositingModeSourceOver.
320 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
321 assertEqualInt (status, Ok);
322
323 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
324 assertEqualInt (status, Ok);
325 #if defined(USE_WINDOWS_GDIPLUS)
326 assertEqualARGB (color, 0xDDA0303F);
327 #else
328 assertEqualARGB (color, 0xDDA02F3F);
329 #endif
330
331 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
332 assertEqualInt (status, Ok);
333
334 // Fill with brush - changed, CompositingModeSourceOver.
335 status = GdipSetSolidFillColor (brush, 0xAABBCCDD);
336 assertEqualInt (status, Ok);
337
338 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
339 assertEqualInt (status, Ok);
340
341 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
342 assertEqualInt (status, Ok);
343 assertEqualARGB (color, 0xAABBCCDC);
344
345 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
346 assertEqualInt (status, Ok);
347
348 // Fill with brush - zero alpha, CompositingModeSourceOver.
349 status = GdipSetSolidFillColor (brush, 0x00BBCCDD);
350 assertEqualInt (status, Ok);
351
352 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
353 assertEqualInt (status, Ok);
354
355 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
356 assertEqualInt (status, Ok);
357 assertEqualARGB (color, 0x00000000);
358
359 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
360 assertEqualInt (status, Ok);
361
362 // Fill with brush - CompositingModeSourceCopy.
363 status = GdipSetSolidFillColor (brush, 0xDDA03040);
364 assertEqualInt (status, Ok);
365
366 status = GdipSetCompositingMode (graphics, CompositingModeSourceCopy);
367 assertEqualInt (status, Ok);
368
369 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
370 assertEqualInt (status, Ok);
371
372 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
373 assertEqualInt (status, Ok);
374 #if defined(USE_WINDOWS_GDIPLUS)
375 assertEqualARGB (color, 0xDDA0303F);
376 #else
377 assertEqualARGB (color, 0xDDA02F3F);
378 #endif
379
380 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
381 assertEqualInt (status, Ok);
382
383 // Fill with brush - unchanged, CompositingModeSourceCopy.
384 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
385 assertEqualInt (status, Ok);
386
387 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
388 assertEqualInt (status, Ok);
389 #if defined(USE_WINDOWS_GDIPLUS)
390 assertEqualARGB (color, 0xDDA0303F);
391 #else
392 assertEqualARGB (color, 0xDDA02F3F);
393 #endif
394
395 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
396 assertEqualInt (status, Ok);
397
398 // Fill with brush - changed, CompositingModeSourceCopy.
399 status = GdipSetSolidFillColor (brush, 0xAABBCCDD);
400 assertEqualInt (status, Ok);
401
402 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
403 assertEqualInt (status, Ok);
404
405 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
406 assertEqualInt (status, Ok);
407 assertEqualARGB (color, 0xAABBCCDC);
408
409 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
410 assertEqualInt (status, Ok);
411
412 // Fill with brush - zero alpha, CompositingModeSourceCopy.
413 status = GdipSetSolidFillColor (brush, 0x00BBCCDD);
414 assertEqualInt (status, Ok);
415
416 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
417 assertEqualInt (status, Ok);
418
419 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
420 assertEqualInt (status, Ok);
421 assertEqualARGB (color, 0x00000000);
422
423 GdipDeleteGraphics (graphics);
424 GdipDisposeImage ((GpImage *) bitmap);
425
426 // PixelFormat32bppRGB.
427 status = GdipCreateBitmapFromScan0 (256, 256, 0, PixelFormat32bppRGB, NULL, &bitmap);
428 assertEqualInt (status, Ok);
429
430 status = GdipGetImageGraphicsContext ((GpImage *) bitmap, &graphics);
431 assertEqualInt (status, Ok);
432
433 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
434 assertEqualInt (status, Ok);
435
436 status = GdipSetSolidFillColor (brush, 0xDDA03040);
437 assertEqualInt (status, Ok);
438
439 // Fill with brush - CompositingModeSourceOver.
440 status = GdipSetCompositingMode (graphics, CompositingModeSourceOver);
441 assertEqualInt (status, Ok);
442
443 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
444 assertEqualInt (status, Ok);
445
446 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
447 assertEqualInt (status, Ok);
448 #if defined(USE_WINDOWS_GDIPLUS)
449 assertEqualARGB (color, 0xFF8B2A37);
450 #else
451 assertEqualARGB (color, 0xFF8B2937);
452 #endif
453
454 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
455 assertEqualInt (status, Ok);
456
457 // Fill with brush - unchanged, CompositingModeSourceOver.
458 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
459 assertEqualInt (status, Ok);
460
461 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
462 assertEqualInt (status, Ok);
463 #if defined(USE_WINDOWS_GDIPLUS)
464 assertEqualARGB (color, 0xFF8B2A37);
465 #else
466 assertEqualARGB (color, 0xFF8B2937);
467 #endif
468
469 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
470 assertEqualInt (status, Ok);
471
472 // Fill with brush - changed, CompositingModeSourceOver.
473 status = GdipSetSolidFillColor (brush, 0xAABBCCDD);
474 assertEqualInt (status, Ok);
475
476 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
477 assertEqualInt (status, Ok);
478
479 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
480 assertEqualInt (status, Ok);
481 #if defined(USE_WINDOWS_GDIPLUS)
482 assertEqualARGB (color, 0xFF7D8893);
483 #else
484 assertEqualARGB (color, 0xFF7D8893);
485 #endif
486
487 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
488 assertEqualInt (status, Ok);
489
490 // Fill with brush - zero alpha, CompositingModeSourceOver.
491 status = GdipSetSolidFillColor (brush, 0x00BBCCDD);
492 assertEqualInt (status, Ok);
493
494 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
495 assertEqualInt (status, Ok);
496
497 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
498 assertEqualInt (status, Ok);
499 assertEqualARGB (color, 0xFF000000);
500
501 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
502 assertEqualInt (status, Ok);
503
504 // Fill with brush - CompositingModeSourceCopy.
505 status = GdipSetSolidFillColor (brush, 0xDDA03040);
506 assertEqualInt (status, Ok);
507
508 status = GdipSetCompositingMode (graphics, CompositingModeSourceCopy);
509 assertEqualInt (status, Ok);
510
511 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
512 assertEqualInt (status, Ok);
513
514 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
515 assertEqualInt (status, Ok);
516 #if defined(USE_WINDOWS_GDIPLUS)
517 assertEqualARGB (color, 0xFF8B2A37);
518 #else
519 assertEqualARGB (color, 0xFF8B2937);
520 #endif
521
522 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
523 assertEqualInt (status, Ok);
524
525 // Fill with brush - unchanged, CompositingModeSourceCopy.
526 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
527 assertEqualInt (status, Ok);
528
529 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
530 assertEqualInt (status, Ok);
531 #if defined(USE_WINDOWS_GDIPLUS)
532 assertEqualARGB (color, 0xFF8B2A37);
533 #else
534 assertEqualARGB (color, 0xFF8B2937);
535 #endif
536
537 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
538 assertEqualInt (status, Ok);
539
540 // Fill with brush - changed, CompositingModeSourceCopy.
541 status = GdipSetSolidFillColor (brush, 0xAABBCCDD);
542 assertEqualInt (status, Ok);
543
544 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
545 assertEqualInt (status, Ok);
546
547 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
548 assertEqualInt (status, Ok);
549 assertEqualARGB (color, 0xFF7D8893);
550
551 status = GdipBitmapSetPixel (bitmap, 0, 0, 0x00000000);
552 assertEqualInt (status, Ok);
553
554 // Fill with brush - zero alpha, CompositingModeSourceCopy.
555 status = GdipSetSolidFillColor (brush, 0x00BBCCDD);
556 assertEqualInt (status, Ok);
557
558 status = GdipFillRectangle (graphics, brush, 0, 0, 1, 1);
559 assertEqualInt (status, Ok);
560
561 status = GdipBitmapGetPixel (bitmap, 0, 0, &color);
562 assertEqualInt (status, Ok);
563 assertEqualARGB (color, 0xFF000000);
564
565 GdipDeleteGraphics (graphics);
566 GdipDisposeImage ((GpImage *) bitmap);
567
568 // Negative tests.
569 status = GdipSetSolidFillColor (NULL, 0x010203040);
570 assertEqualInt (status, InvalidParameter);
571
572 GdipDeleteBrush ((GpBrush *) brush);
573 }
574
575 int
main(int argc,char ** argv)576 main (int argc, char**argv)
577 {
578 STARTUP;
579
580 test_clone ();
581 test_delete ();
582 test_createSolidFill ();
583 test_getSolidFillColor ();
584 test_setSolidFillColor ();
585 test_fill ();
586
587 SHUTDOWN;
588 return 0;
589 }
590