2 * Unit test suite for graphics objects
4 * Copyright (C) 2007 Google (Evan Stade)
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 #include "wine/test.h"
27 #define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got)
28 #define expectf(expected, got) ok(fabs(expected - got) < 0.0001, "Expected %.2f, got %.2f\n", expected, got)
29 #define TABLE_LEN (23)
31 static void test_constructor_destructor(void)
34 GpGraphics *graphics = NULL;
37 stat = GdipCreateFromHDC(NULL, &graphics);
38 expect(OutOfMemory, stat);
39 stat = GdipDeleteGraphics(graphics);
40 expect(InvalidParameter, stat);
42 stat = GdipCreateFromHDC(hdc, &graphics);
44 stat = GdipDeleteGraphics(graphics);
47 stat = GdipCreateFromHWND(NULL, &graphics);
49 stat = GdipDeleteGraphics(graphics);
52 stat = GdipCreateFromHWNDICM(NULL, &graphics);
54 stat = GdipDeleteGraphics(graphics);
57 stat = GdipDeleteGraphics(NULL);
58 expect(InvalidParameter, stat);
67 /* Linked list prepend function. */
68 static void log_state(GraphicsState data, node ** log)
70 node * new_entry = HeapAlloc(GetProcessHeap(), 0, sizeof(node));
72 new_entry->data = data;
73 new_entry->next = *log;
77 /* Checks if there are duplicates in the list, and frees it. */
78 static void check_no_duplicates(node * log)
90 while((temp = temp->next)){
91 if(log->data == temp->data){
98 }while((log = log->next));
103 HeapFree(GetProcessHeap(), 0, temp);
111 static void test_save_restore(void)
114 GraphicsState state_a, state_b, state_c;
115 InterpolationMode mode;
116 GpGraphics *graphics1, *graphics2;
117 node * state_log = NULL;
119 state_a = state_b = state_c = 0xdeadbeef;
121 /* Invalid saving. */
122 GdipCreateFromHDC(hdc, &graphics1);
123 stat = GdipSaveGraphics(graphics1, NULL);
124 expect(InvalidParameter, stat);
125 stat = GdipSaveGraphics(NULL, &state_a);
126 expect(InvalidParameter, stat);
127 GdipDeleteGraphics(graphics1);
129 log_state(state_a, &state_log);
131 /* Basic save/restore. */
132 GdipCreateFromHDC(hdc, &graphics1);
133 GdipSetInterpolationMode(graphics1, InterpolationModeBilinear);
134 stat = GdipSaveGraphics(graphics1, &state_a);
136 GdipSetInterpolationMode(graphics1, InterpolationModeBicubic);
137 stat = GdipRestoreGraphics(graphics1, state_a);
139 GdipGetInterpolationMode(graphics1, &mode);
141 expect(InterpolationModeBilinear, mode);
142 GdipDeleteGraphics(graphics1);
144 log_state(state_a, &state_log);
146 /* Restoring garbage doesn't affect saves. */
147 GdipCreateFromHDC(hdc, &graphics1);
148 GdipSetInterpolationMode(graphics1, InterpolationModeBilinear);
149 GdipSaveGraphics(graphics1, &state_a);
150 GdipSetInterpolationMode(graphics1, InterpolationModeBicubic);
151 GdipSaveGraphics(graphics1, &state_b);
152 GdipSetInterpolationMode(graphics1, InterpolationModeNearestNeighbor);
153 stat = GdipRestoreGraphics(graphics1, 0xdeadbeef);
155 GdipRestoreGraphics(graphics1, state_b);
156 GdipGetInterpolationMode(graphics1, &mode);
158 expect(InterpolationModeBicubic, mode);
159 GdipRestoreGraphics(graphics1, state_a);
160 GdipGetInterpolationMode(graphics1, &mode);
162 expect(InterpolationModeBilinear, mode);
163 GdipDeleteGraphics(graphics1);
165 log_state(state_a, &state_log);
166 log_state(state_b, &state_log);
168 /* Restoring older state invalidates newer saves (but not older saves). */
169 GdipCreateFromHDC(hdc, &graphics1);
170 GdipSetInterpolationMode(graphics1, InterpolationModeBilinear);
171 GdipSaveGraphics(graphics1, &state_a);
172 GdipSetInterpolationMode(graphics1, InterpolationModeBicubic);
173 GdipSaveGraphics(graphics1, &state_b);
174 GdipSetInterpolationMode(graphics1, InterpolationModeNearestNeighbor);
175 GdipSaveGraphics(graphics1, &state_c);
176 GdipSetInterpolationMode(graphics1, InterpolationModeHighQualityBilinear);
177 GdipRestoreGraphics(graphics1, state_b);
178 GdipGetInterpolationMode(graphics1, &mode);
180 expect(InterpolationModeBicubic, mode);
181 GdipRestoreGraphics(graphics1, state_c);
182 GdipGetInterpolationMode(graphics1, &mode);
184 expect(InterpolationModeBicubic, mode);
185 GdipRestoreGraphics(graphics1, state_a);
186 GdipGetInterpolationMode(graphics1, &mode);
188 expect(InterpolationModeBilinear, mode);
189 GdipDeleteGraphics(graphics1);
191 log_state(state_a, &state_log);
192 log_state(state_b, &state_log);
193 log_state(state_c, &state_log);
195 /* Restoring older save from one graphics object does not invalidate
196 * newer save from other graphics object. */
197 GdipCreateFromHDC(hdc, &graphics1);
198 GdipCreateFromHDC(hdc, &graphics2);
199 GdipSetInterpolationMode(graphics1, InterpolationModeBilinear);
200 GdipSaveGraphics(graphics1, &state_a);
201 GdipSetInterpolationMode(graphics2, InterpolationModeBicubic);
202 GdipSaveGraphics(graphics2, &state_b);
203 GdipSetInterpolationMode(graphics1, InterpolationModeNearestNeighbor);
204 GdipSetInterpolationMode(graphics2, InterpolationModeNearestNeighbor);
205 GdipRestoreGraphics(graphics1, state_a);
206 GdipGetInterpolationMode(graphics1, &mode);
208 expect(InterpolationModeBilinear, mode);
209 GdipRestoreGraphics(graphics2, state_b);
210 GdipGetInterpolationMode(graphics2, &mode);
212 expect(InterpolationModeBicubic, mode);
213 GdipDeleteGraphics(graphics1);
214 GdipDeleteGraphics(graphics2);
216 /* You can't restore a state to a graphics object that didn't save it. */
217 GdipCreateFromHDC(hdc, &graphics1);
218 GdipCreateFromHDC(hdc, &graphics2);
219 GdipSetInterpolationMode(graphics1, InterpolationModeBilinear);
220 GdipSaveGraphics(graphics1, &state_a);
221 GdipSetInterpolationMode(graphics1, InterpolationModeNearestNeighbor);
222 GdipSetInterpolationMode(graphics2, InterpolationModeNearestNeighbor);
223 GdipRestoreGraphics(graphics2, state_a);
224 GdipGetInterpolationMode(graphics2, &mode);
225 expect(InterpolationModeNearestNeighbor, mode);
226 GdipDeleteGraphics(graphics1);
227 GdipDeleteGraphics(graphics2);
229 log_state(state_a, &state_log);
231 /* The same state value should never be returned twice. */
233 check_no_duplicates(state_log);
238 static void test_GdipDrawArc(void)
241 GpGraphics *graphics = NULL;
245 /* make a graphics object and pen object */
246 ok(hdc != NULL, "Expected HDC to be initialized\n");
248 status = GdipCreateFromHDC(hdc, &graphics);
250 ok(graphics != NULL, "Expected graphics to be initialized\n");
252 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
254 ok(pen != NULL, "Expected pen to be initialized\n");
256 /* InvalidParameter cases: null graphics, null pen, non-positive width, non-positive height */
257 status = GdipDrawArc(NULL, NULL, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
258 expect(InvalidParameter, status);
260 status = GdipDrawArc(graphics, NULL, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0);
261 expect(InvalidParameter, status);
263 status = GdipDrawArc(NULL, pen, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0);
264 expect(InvalidParameter, status);
266 status = GdipDrawArc(graphics, pen, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0);
267 expect(InvalidParameter, status);
269 status = GdipDrawArc(graphics, pen, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0);
270 expect(InvalidParameter, status);
272 /* successful case */
273 status = GdipDrawArc(graphics, pen, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0);
277 GdipDeleteGraphics(graphics);
282 static void test_GdipDrawArcI(void)
285 GpGraphics *graphics = NULL;
289 /* make a graphics object and pen object */
290 ok(hdc != NULL, "Expected HDC to be initialized\n");
292 status = GdipCreateFromHDC(hdc, &graphics);
294 ok(graphics != NULL, "Expected graphics to be initialized\n");
296 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
298 ok(pen != NULL, "Expected pen to be initialized\n");
300 /* InvalidParameter cases: null graphics, null pen, non-positive width, non-positive height */
301 status = GdipDrawArcI(NULL, NULL, 0, 0, 0, 0, 0, 0);
302 expect(InvalidParameter, status);
304 status = GdipDrawArcI(graphics, NULL, 0, 0, 1, 1, 0, 0);
305 expect(InvalidParameter, status);
307 status = GdipDrawArcI(NULL, pen, 0, 0, 1, 1, 0, 0);
308 expect(InvalidParameter, status);
310 status = GdipDrawArcI(graphics, pen, 0, 0, 1, 0, 0, 0);
311 expect(InvalidParameter, status);
313 status = GdipDrawArcI(graphics, pen, 0, 0, 0, 1, 0, 0);
314 expect(InvalidParameter, status);
316 /* successful case */
317 status = GdipDrawArcI(graphics, pen, 0, 0, 1, 1, 0, 0);
321 GdipDeleteGraphics(graphics);
326 static void test_GdipDrawBezierI(void)
329 GpGraphics *graphics = NULL;
333 /* make a graphics object and pen object */
334 ok(hdc != NULL, "Expected HDC to be initialized\n");
336 status = GdipCreateFromHDC(hdc, &graphics);
338 ok(graphics != NULL, "Expected graphics to be initialized\n");
340 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
342 ok(pen != NULL, "Expected pen to be initialized\n");
344 /* InvalidParameter cases: null graphics, null pen */
345 status = GdipDrawBezierI(NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0);
346 expect(InvalidParameter, status);
348 status = GdipDrawBezierI(graphics, NULL, 0, 0, 0, 0, 0, 0, 0, 0);
349 expect(InvalidParameter, status);
351 status = GdipDrawBezierI(NULL, pen, 0, 0, 0, 0, 0, 0, 0, 0);
352 expect(InvalidParameter, status);
354 /* successful case */
355 status = GdipDrawBezierI(graphics, pen, 0, 0, 0, 0, 0, 0, 0, 0);
359 GdipDeleteGraphics(graphics);
364 static void test_GdipDrawCurve3(void)
367 GpGraphics *graphics = NULL;
381 /* make a graphics object and pen object */
382 ok(hdc != NULL, "Expected HDC to be initialized\n");
384 status = GdipCreateFromHDC(hdc, &graphics);
386 ok(graphics != NULL, "Expected graphics to be initialized\n");
388 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
390 ok(pen != NULL, "Expected pen to be initialized\n");
392 /* InvalidParameter cases: null graphics, null pen */
393 status = GdipDrawCurve3(NULL, NULL, points, 3, 0, 2, 1);
394 expect(InvalidParameter, status);
396 status = GdipDrawCurve3(graphics, NULL, points, 3, 0, 2, 1);
397 expect(InvalidParameter, status);
399 status = GdipDrawCurve3(NULL, pen, points, 3, 0, 2, 1);
400 expect(InvalidParameter, status);
402 /* InvalidParameter cases: invalid count */
403 status = GdipDrawCurve3(graphics, pen, points, -1, 0, 2, 1);
404 expect(InvalidParameter, status);
406 status = GdipDrawCurve3(graphics, pen, points, 0, 0, 2, 1);
407 expect(InvalidParameter, status);
409 status = GdipDrawCurve3(graphics, pen, points, 1, 0, 0, 1);
410 expect(InvalidParameter, status);
412 status = GdipDrawCurve3(graphics, pen, points, 3, 4, 2, 1);
413 expect(InvalidParameter, status);
415 /* InvalidParameter cases: invalid number of segments */
416 status = GdipDrawCurve3(graphics, pen, points, 3, 0, -1, 1);
417 expect(InvalidParameter, status);
419 status = GdipDrawCurve3(graphics, pen, points, 3, 1, 2, 1);
420 expect(InvalidParameter, status);
422 status = GdipDrawCurve3(graphics, pen, points, 2, 0, 2, 1);
423 expect(InvalidParameter, status);
425 /* Valid test cases */
426 status = GdipDrawCurve3(graphics, pen, points, 2, 0, 1, 1);
429 status = GdipDrawCurve3(graphics, pen, points, 3, 0, 2, 2);
432 status = GdipDrawCurve3(graphics, pen, points, 2, 0, 1, -2);
435 status = GdipDrawCurve3(graphics, pen, points, 3, 1, 1, 0);
439 GdipDeleteGraphics(graphics);
444 static void test_GdipDrawCurve3I(void)
447 GpGraphics *graphics = NULL;
461 /* make a graphics object and pen object */
462 ok(hdc != NULL, "Expected HDC to be initialized\n");
464 status = GdipCreateFromHDC(hdc, &graphics);
466 ok(graphics != NULL, "Expected graphics to be initialized\n");
468 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
470 ok(pen != NULL, "Expected pen to be initialized\n");
472 /* InvalidParameter cases: null graphics, null pen */
473 status = GdipDrawCurve3I(NULL, NULL, points, 3, 0, 2, 1);
474 expect(InvalidParameter, status);
476 status = GdipDrawCurve3I(graphics, NULL, points, 3, 0, 2, 1);
477 expect(InvalidParameter, status);
479 status = GdipDrawCurve3I(NULL, pen, points, 3, 0, 2, 1);
480 expect(InvalidParameter, status);
482 /* InvalidParameter cases: invalid count */
483 status = GdipDrawCurve3I(graphics, pen, points, -1, -1, -1, 1);
484 expect(OutOfMemory, status);
486 status = GdipDrawCurve3I(graphics, pen, points, 0, 0, 2, 1);
487 expect(InvalidParameter, status);
489 status = GdipDrawCurve3I(graphics, pen, points, 1, 0, 0, 1);
490 expect(InvalidParameter, status);
492 status = GdipDrawCurve3I(graphics, pen, points, 3, 4, 2, 1);
493 expect(InvalidParameter, status);
495 /* InvalidParameter cases: invalid number of segments */
496 status = GdipDrawCurve3I(graphics, pen, points, 3, 0, -1, 1);
497 expect(InvalidParameter, status);
499 status = GdipDrawCurve3I(graphics, pen, points, 3, 1, 2, 1);
500 expect(InvalidParameter, status);
502 status = GdipDrawCurve3I(graphics, pen, points, 2, 0, 2, 1);
503 expect(InvalidParameter, status);
505 /* Valid test cases */
506 status = GdipDrawCurve3I(graphics, pen, points, 2, 0, 1, 1);
509 status = GdipDrawCurve3I(graphics, pen, points, 3, 0, 2, 2);
512 status = GdipDrawCurve3I(graphics, pen, points, 2, 0, 1, -2);
515 status = GdipDrawCurve3I(graphics, pen, points, 3, 1, 1, 0);
519 GdipDeleteGraphics(graphics);
524 static void test_GdipDrawCurve2(void)
527 GpGraphics *graphics = NULL;
541 /* make a graphics object and pen object */
542 ok(hdc != NULL, "Expected HDC to be initialized\n");
544 status = GdipCreateFromHDC(hdc, &graphics);
546 ok(graphics != NULL, "Expected graphics to be initialized\n");
548 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
550 ok(pen != NULL, "Expected pen to be initialized\n");
552 /* InvalidParameter cases: null graphics, null pen */
553 status = GdipDrawCurve2(NULL, NULL, points, 3, 1);
554 expect(InvalidParameter, status);
556 status = GdipDrawCurve2(graphics, NULL, points, 3, 1);
557 expect(InvalidParameter, status);
559 status = GdipDrawCurve2(NULL, pen, points, 3, 1);
560 expect(InvalidParameter, status);
562 /* InvalidParameter cases: invalid count */
563 status = GdipDrawCurve2(graphics, pen, points, -1, 1);
564 expect(InvalidParameter, status);
566 status = GdipDrawCurve2(graphics, pen, points, 0, 1);
567 expect(InvalidParameter, status);
569 status = GdipDrawCurve2(graphics, pen, points, 1, 1);
570 expect(InvalidParameter, status);
572 /* Valid test cases */
573 status = GdipDrawCurve2(graphics, pen, points, 2, 1);
576 status = GdipDrawCurve2(graphics, pen, points, 3, 2);
579 status = GdipDrawCurve2(graphics, pen, points, 3, -2);
582 status = GdipDrawCurve2(graphics, pen, points, 3, 0);
586 GdipDeleteGraphics(graphics);
591 static void test_GdipDrawCurve2I(void)
594 GpGraphics *graphics = NULL;
608 /* make a graphics object and pen object */
609 ok(hdc != NULL, "Expected HDC to be initialized\n");
611 status = GdipCreateFromHDC(hdc, &graphics);
613 ok(graphics != NULL, "Expected graphics to be initialized\n");
615 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
617 ok(pen != NULL, "Expected pen to be initialized\n");
619 /* InvalidParameter cases: null graphics, null pen */
620 status = GdipDrawCurve2I(NULL, NULL, points, 3, 1);
621 expect(InvalidParameter, status);
623 status = GdipDrawCurve2I(graphics, NULL, points, 3, 1);
624 expect(InvalidParameter, status);
626 status = GdipDrawCurve2I(NULL, pen, points, 3, 1);
627 expect(InvalidParameter, status);
629 /* InvalidParameter cases: invalid count */
630 status = GdipDrawCurve2I(graphics, pen, points, -1, 1);
631 expect(OutOfMemory, status);
633 status = GdipDrawCurve2I(graphics, pen, points, 0, 1);
634 expect(InvalidParameter, status);
636 status = GdipDrawCurve2I(graphics, pen, points, 1, 1);
637 expect(InvalidParameter, status);
639 /* Valid test cases */
640 status = GdipDrawCurve2I(graphics, pen, points, 2, 1);
643 status = GdipDrawCurve2I(graphics, pen, points, 3, 2);
646 status = GdipDrawCurve2I(graphics, pen, points, 3, -2);
649 status = GdipDrawCurve2I(graphics, pen, points, 3, 0);
653 GdipDeleteGraphics(graphics);
658 static void test_GdipDrawCurve(void)
661 GpGraphics *graphics = NULL;
675 /* make a graphics object and pen object */
676 ok(hdc != NULL, "Expected HDC to be initialized\n");
678 status = GdipCreateFromHDC(hdc, &graphics);
680 ok(graphics != NULL, "Expected graphics to be initialized\n");
682 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
684 ok(pen != NULL, "Expected pen to be initialized\n");
686 /* InvalidParameter cases: null graphics, null pen */
687 status = GdipDrawCurve(NULL, NULL, points, 3);
688 expect(InvalidParameter, status);
690 status = GdipDrawCurve(graphics, NULL, points, 3);
691 expect(InvalidParameter, status);
693 status = GdipDrawCurve(NULL, pen, points, 3);
694 expect(InvalidParameter, status);
696 /* InvalidParameter cases: invalid count */
697 status = GdipDrawCurve(graphics, pen, points, -1);
698 expect(InvalidParameter, status);
700 status = GdipDrawCurve(graphics, pen, points, 0);
701 expect(InvalidParameter, status);
703 status = GdipDrawCurve(graphics, pen, points, 1);
704 expect(InvalidParameter, status);
706 /* Valid test cases */
707 status = GdipDrawCurve(graphics, pen, points, 2);
710 status = GdipDrawCurve(graphics, pen, points, 3);
714 GdipDeleteGraphics(graphics);
719 static void test_GdipDrawCurveI(void)
722 GpGraphics *graphics = NULL;
736 /* make a graphics object and pen object */
737 ok(hdc != NULL, "Expected HDC to be initialized\n");
739 status = GdipCreateFromHDC(hdc, &graphics);
741 ok(graphics != NULL, "Expected graphics to be initialized\n");
743 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
745 ok(pen != NULL, "Expected pen to be initialized\n");
747 /* InvalidParameter cases: null graphics, null pen */
748 status = GdipDrawCurveI(NULL, NULL, points, 3);
749 expect(InvalidParameter, status);
751 status = GdipDrawCurveI(graphics, NULL, points, 3);
752 expect(InvalidParameter, status);
754 status = GdipDrawCurveI(NULL, pen, points, 3);
755 expect(InvalidParameter, status);
757 /* InvalidParameter cases: invalid count */
758 status = GdipDrawCurveI(graphics, pen, points, -1);
759 expect(OutOfMemory, status);
761 status = GdipDrawCurveI(graphics, pen, points, 0);
762 expect(InvalidParameter, status);
764 status = GdipDrawCurveI(graphics, pen, points, 1);
765 expect(InvalidParameter, status);
767 /* Valid test cases */
768 status = GdipDrawCurveI(graphics, pen, points, 2);
771 status = GdipDrawCurveI(graphics, pen, points, 3);
775 GdipDeleteGraphics(graphics);
780 static void test_GdipDrawLineI(void)
783 GpGraphics *graphics = NULL;
787 /* make a graphics object and pen object */
788 ok(hdc != NULL, "Expected HDC to be initialized\n");
790 status = GdipCreateFromHDC(hdc, &graphics);
792 ok(graphics != NULL, "Expected graphics to be initialized\n");
794 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
796 ok(pen != NULL, "Expected pen to be initialized\n");
798 /* InvalidParameter cases: null graphics, null pen */
799 status = GdipDrawLineI(NULL, NULL, 0, 0, 0, 0);
800 expect(InvalidParameter, status);
802 status = GdipDrawLineI(graphics, NULL, 0, 0, 0, 0);
803 expect(InvalidParameter, status);
805 status = GdipDrawLineI(NULL, pen, 0, 0, 0, 0);
806 expect(InvalidParameter, status);
808 /* successful case */
809 status = GdipDrawLineI(graphics, pen, 0, 0, 0, 0);
813 GdipDeleteGraphics(graphics);
818 static void test_GdipDrawLinesI(void)
821 GpGraphics *graphics = NULL;
826 /* make a graphics object and pen object */
827 ok(hdc != NULL, "Expected HDC to be initialized\n");
829 status = GdipCreateFromHDC(hdc, &graphics);
831 ok(graphics != NULL, "Expected graphics to be initialized\n");
833 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
835 ok(pen != NULL, "Expected pen to be initialized\n");
837 /* make some arbitrary valid points*/
838 ptf = GdipAlloc(2 * sizeof(GpPointF));
846 /* InvalidParameter cases: null graphics, null pen, null points, count < 2*/
847 status = GdipDrawLinesI(NULL, NULL, NULL, 0);
848 expect(InvalidParameter, status);
850 status = GdipDrawLinesI(graphics, pen, ptf, 0);
851 expect(InvalidParameter, status);
853 status = GdipDrawLinesI(graphics, NULL, ptf, 2);
854 expect(InvalidParameter, status);
856 status = GdipDrawLinesI(NULL, pen, ptf, 2);
857 expect(InvalidParameter, status);
859 /* successful case */
860 status = GdipDrawLinesI(graphics, pen, ptf, 2);
865 GdipDeleteGraphics(graphics);
870 static void test_Get_Release_DC(void)
873 GpGraphics *graphics = NULL;
880 CompositingQuality quality;
881 CompositingMode compmode;
882 InterpolationMode intmode;
886 PixelOffsetMode offsetmode;
887 SmoothingMode smoothmode;
888 TextRenderingHint texthint;
896 ARGB color = 0x00000000;
897 HRGN hrgn = CreateRectRgn(0, 0, 10, 10);
910 for(i = 0; i < 5;i++){
911 ptf[i].X = (REAL)pt[i].X;
912 ptf[i].Y = (REAL)pt[i].Y;
924 for(i = 0; i < 2;i++){
925 rectf[i].X = (REAL)rect[i].X;
926 rectf[i].Y = (REAL)rect[i].Y;
927 rectf[i].Height = (REAL)rect[i].Height;
928 rectf[i].Width = (REAL)rect[i].Width;
931 GdipCreateMatrix(&m);
932 GdipCreateRegion(®ion);
933 GdipCreateSolidFill((ARGB)0xdeadbeef, &brush);
934 GdipCreatePath(FillModeAlternate, &path);
935 GdipCreateRegion(&clip);
937 status = GdipCreateFromHDC(hdc, &graphics);
939 ok(graphics != NULL, "Expected graphics to be initialized\n");
940 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
944 status = GdipGetDC(NULL, NULL);
945 expect(InvalidParameter, status);
946 status = GdipGetDC(graphics, NULL);
947 expect(InvalidParameter, status);
948 status = GdipGetDC(NULL, &retdc);
949 expect(InvalidParameter, status);
951 status = GdipReleaseDC(NULL, NULL);
952 expect(InvalidParameter, status);
953 status = GdipReleaseDC(graphics, NULL);
954 expect(InvalidParameter, status);
955 status = GdipReleaseDC(NULL, (HDC)0xdeadbeef);
956 expect(InvalidParameter, status);
958 /* Release without Get */
959 status = GdipReleaseDC(graphics, hdc);
960 expect(InvalidParameter, status);
963 status = GdipGetDC(graphics, &retdc);
965 ok(retdc == hdc, "Invalid HDC returned\n");
966 /* call it once more */
967 status = GdipGetDC(graphics, &retdc);
968 expect(ObjectBusy, status);
970 /* try all Graphics calls here */
972 status = GdipDrawArc(graphics, pen, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0);
973 expect(ObjectBusy, status); status = Ok;
974 status = GdipDrawArcI(graphics, pen, 0, 0, 1, 1, 0.0, 0.0);
975 expect(ObjectBusy, status); status = Ok;
976 status = GdipDrawBezier(graphics, pen, 0.0, 10.0, 20.0, 15.0, 35.0, -10.0, 10.0, 10.0);
977 expect(ObjectBusy, status); status = Ok;
978 status = GdipDrawBezierI(graphics, pen, 0, 0, 0, 0, 0, 0, 0, 0);
979 expect(ObjectBusy, status); status = Ok;
980 status = GdipDrawBeziers(graphics, pen, ptf, 5);
981 expect(ObjectBusy, status); status = Ok;
982 status = GdipDrawBeziersI(graphics, pen, pt, 5);
983 expect(ObjectBusy, status); status = Ok;
984 status = GdipDrawClosedCurve(graphics, pen, ptf, 5);
985 expect(ObjectBusy, status); status = Ok;
986 status = GdipDrawClosedCurveI(graphics, pen, pt, 5);
987 expect(ObjectBusy, status); status = Ok;
988 status = GdipDrawClosedCurve2(graphics, pen, ptf, 5, 1.0);
989 expect(ObjectBusy, status); status = Ok;
990 status = GdipDrawClosedCurve2I(graphics, pen, pt, 5, 1.0);
991 expect(ObjectBusy, status); status = Ok;
992 status = GdipDrawCurve(graphics, pen, ptf, 5);
993 expect(ObjectBusy, status); status = Ok;
994 status = GdipDrawCurveI(graphics, pen, pt, 5);
995 expect(ObjectBusy, status); status = Ok;
996 status = GdipDrawCurve2(graphics, pen, ptf, 5, 1.0);
997 expect(ObjectBusy, status); status = Ok;
998 status = GdipDrawCurve2I(graphics, pen, pt, 5, 1.0);
999 expect(ObjectBusy, status); status = Ok;
1000 status = GdipDrawEllipse(graphics, pen, 0.0, 0.0, 100.0, 50.0);
1001 expect(ObjectBusy, status); status = Ok;
1002 status = GdipDrawEllipseI(graphics, pen, 0, 0, 100, 50);
1003 expect(ObjectBusy, status); status = Ok;
1004 /* GdipDrawImage/GdipDrawImageI */
1005 /* GdipDrawImagePointsRect/GdipDrawImagePointsRectI */
1006 /* GdipDrawImageRectRect/GdipDrawImageRectRectI */
1007 /* GdipDrawImageRect/GdipDrawImageRectI */
1008 status = GdipDrawLine(graphics, pen, 0.0, 0.0, 100.0, 200.0);
1009 expect(ObjectBusy, status); status = Ok;
1010 status = GdipDrawLineI(graphics, pen, 0, 0, 100, 200);
1011 expect(ObjectBusy, status); status = Ok;
1012 status = GdipDrawLines(graphics, pen, ptf, 5);
1013 expect(ObjectBusy, status); status = Ok;
1014 status = GdipDrawLinesI(graphics, pen, pt, 5);
1015 expect(ObjectBusy, status); status = Ok;
1016 status = GdipDrawPath(graphics, pen, path);
1017 expect(ObjectBusy, status); status = Ok;
1018 status = GdipDrawPie(graphics, pen, 0.0, 0.0, 100.0, 100.0, 0.0, 90.0);
1019 expect(ObjectBusy, status); status = Ok;
1020 status = GdipDrawPieI(graphics, pen, 0, 0, 100, 100, 0.0, 90.0);
1021 expect(ObjectBusy, status); status = Ok;
1022 status = GdipDrawRectangle(graphics, pen, 0.0, 0.0, 100.0, 300.0);
1023 expect(ObjectBusy, status); status = Ok;
1024 status = GdipDrawRectangleI(graphics, pen, 0, 0, 100, 300);
1025 expect(ObjectBusy, status); status = Ok;
1026 status = GdipDrawRectangles(graphics, pen, rectf, 2);
1027 expect(ObjectBusy, status); status = Ok;
1028 status = GdipDrawRectanglesI(graphics, pen, rect, 2);
1029 expect(ObjectBusy, status); status = Ok;
1030 /* GdipDrawString */
1031 status = GdipFillClosedCurve2(graphics, (GpBrush*)brush, ptf, 5, 1.0, FillModeAlternate);
1032 expect(ObjectBusy, status); status = Ok;
1033 status = GdipFillClosedCurve2I(graphics, (GpBrush*)brush, pt, 5, 1.0, FillModeAlternate);
1034 expect(ObjectBusy, status); status = Ok;
1035 status = GdipFillEllipse(graphics, (GpBrush*)brush, 0.0, 0.0, 100.0, 100.0);
1036 expect(ObjectBusy, status); status = Ok;
1037 status = GdipFillEllipseI(graphics, (GpBrush*)brush, 0, 0, 100, 100);
1038 expect(ObjectBusy, status); status = Ok;
1039 status = GdipFillPath(graphics, (GpBrush*)brush, path);
1040 expect(ObjectBusy, status); status = Ok;
1041 status = GdipFillPie(graphics, (GpBrush*)brush, 0.0, 0.0, 100.0, 100.0, 0.0, 15.0);
1042 expect(ObjectBusy, status); status = Ok;
1043 status = GdipFillPieI(graphics, (GpBrush*)brush, 0, 0, 100, 100, 0.0, 15.0);
1044 expect(ObjectBusy, status); status = Ok;
1045 status = GdipFillPolygon(graphics, (GpBrush*)brush, ptf, 5, FillModeAlternate);
1046 expect(ObjectBusy, status); status = Ok;
1047 status = GdipFillPolygonI(graphics, (GpBrush*)brush, pt, 5, FillModeAlternate);
1048 expect(ObjectBusy, status); status = Ok;
1049 status = GdipFillPolygon2(graphics, (GpBrush*)brush, ptf, 5);
1050 expect(ObjectBusy, status); status = Ok;
1051 status = GdipFillPolygon2I(graphics, (GpBrush*)brush, pt, 5);
1052 expect(ObjectBusy, status); status = Ok;
1053 status = GdipFillRectangle(graphics, (GpBrush*)brush, 0.0, 0.0, 100.0, 100.0);
1054 expect(ObjectBusy, status); status = Ok;
1055 status = GdipFillRectangleI(graphics, (GpBrush*)brush, 0, 0, 100, 100);
1056 expect(ObjectBusy, status); status = Ok;
1057 status = GdipFillRectangles(graphics, (GpBrush*)brush, rectf, 2);
1058 expect(ObjectBusy, status); status = Ok;
1059 status = GdipFillRectanglesI(graphics, (GpBrush*)brush, rect, 2);
1060 expect(ObjectBusy, status); status = Ok;
1061 status = GdipFillRegion(graphics, (GpBrush*)brush, region);
1062 expect(ObjectBusy, status); status = Ok;
1063 status = GdipFlush(graphics, FlushIntentionFlush);
1064 expect(ObjectBusy, status); status = Ok;
1065 status = GdipGetClipBounds(graphics, rectf);
1066 expect(ObjectBusy, status); status = Ok;
1067 status = GdipGetClipBoundsI(graphics, rect);
1068 expect(ObjectBusy, status); status = Ok;
1069 status = GdipGetCompositingMode(graphics, &compmode);
1070 expect(ObjectBusy, status); status = Ok;
1071 status = GdipGetCompositingQuality(graphics, &quality);
1072 expect(ObjectBusy, status); status = Ok;
1073 status = GdipGetInterpolationMode(graphics, &intmode);
1074 expect(ObjectBusy, status); status = Ok;
1075 status = GdipGetNearestColor(graphics, &color);
1076 expect(ObjectBusy, status); status = Ok;
1077 status = GdipGetPageScale(graphics, &r);
1078 expect(ObjectBusy, status); status = Ok;
1079 status = GdipGetPageUnit(graphics, &unit);
1080 expect(ObjectBusy, status); status = Ok;
1081 status = GdipGetPixelOffsetMode(graphics, &offsetmode);
1082 expect(ObjectBusy, status); status = Ok;
1083 status = GdipGetSmoothingMode(graphics, &smoothmode);
1084 expect(ObjectBusy, status); status = Ok;
1085 status = GdipGetTextRenderingHint(graphics, &texthint);
1086 expect(ObjectBusy, status); status = Ok;
1087 status = GdipGetWorldTransform(graphics, m);
1088 expect(ObjectBusy, status); status = Ok;
1089 status = GdipGraphicsClear(graphics, 0xdeadbeef);
1090 expect(ObjectBusy, status); status = Ok;
1091 status = GdipIsVisiblePoint(graphics, 0.0, 0.0, &res);
1092 expect(ObjectBusy, status); status = Ok;
1093 status = GdipIsVisiblePointI(graphics, 0, 0, &res);
1094 expect(ObjectBusy, status); status = Ok;
1095 /* GdipMeasureCharacterRanges */
1096 /* GdipMeasureString */
1097 status = GdipResetClip(graphics);
1098 expect(ObjectBusy, status); status = Ok;
1099 status = GdipResetWorldTransform(graphics);
1100 expect(ObjectBusy, status); status = Ok;
1101 /* GdipRestoreGraphics */
1102 status = GdipRotateWorldTransform(graphics, 15.0, MatrixOrderPrepend);
1103 expect(ObjectBusy, status); status = Ok;
1104 /* GdipSaveGraphics */
1105 status = GdipScaleWorldTransform(graphics, 1.0, 1.0, MatrixOrderPrepend);
1106 expect(ObjectBusy, status); status = Ok;
1107 status = GdipSetCompositingMode(graphics, CompositingModeSourceOver);
1108 expect(ObjectBusy, status); status = Ok;
1109 status = GdipSetCompositingQuality(graphics, CompositingQualityDefault);
1110 expect(ObjectBusy, status); status = Ok;
1111 status = GdipSetInterpolationMode(graphics, InterpolationModeDefault);
1112 expect(ObjectBusy, status); status = Ok;
1113 status = GdipSetPageScale(graphics, 1.0);
1114 expect(ObjectBusy, status); status = Ok;
1115 status = GdipSetPageUnit(graphics, UnitWorld);
1116 expect(ObjectBusy, status); status = Ok;
1117 status = GdipSetPixelOffsetMode(graphics, PixelOffsetModeDefault);
1118 expect(ObjectBusy, status); status = Ok;
1119 status = GdipSetSmoothingMode(graphics, SmoothingModeDefault);
1120 expect(ObjectBusy, status); status = Ok;
1121 status = GdipSetTextRenderingHint(graphics, TextRenderingHintSystemDefault);
1122 expect(ObjectBusy, status); status = Ok;
1123 status = GdipSetWorldTransform(graphics, m);
1124 expect(ObjectBusy, status); status = Ok;
1125 status = GdipTranslateWorldTransform(graphics, 0.0, 0.0, MatrixOrderPrepend);
1126 expect(ObjectBusy, status); status = Ok;
1127 status = GdipSetClipHrgn(graphics, hrgn, CombineModeReplace);
1128 expect(ObjectBusy, status); status = Ok;
1129 status = GdipSetClipPath(graphics, path, CombineModeReplace);
1130 expect(ObjectBusy, status); status = Ok;
1131 status = GdipSetClipRect(graphics, 0.0, 0.0, 10.0, 10.0, CombineModeReplace);
1132 expect(ObjectBusy, status); status = Ok;
1133 status = GdipSetClipRectI(graphics, 0, 0, 10, 10, CombineModeReplace);
1134 expect(ObjectBusy, status); status = Ok;
1135 status = GdipSetClipRegion(graphics, clip, CombineModeReplace);
1136 expect(ObjectBusy, status); status = Ok;
1137 status = GdipTranslateClip(graphics, 0.0, 0.0);
1138 expect(ObjectBusy, status); status = Ok;
1139 status = GdipTranslateClipI(graphics, 0, 0);
1140 expect(ObjectBusy, status); status = Ok;
1141 status = GdipDrawPolygon(graphics, pen, ptf, 5);
1142 expect(ObjectBusy, status); status = Ok;
1143 status = GdipDrawPolygonI(graphics, pen, pt, 5);
1144 expect(ObjectBusy, status); status = Ok;
1145 status = GdipGetDpiX(graphics, &r);
1146 expect(ObjectBusy, status); status = Ok;
1147 status = GdipGetDpiY(graphics, &r);
1148 expect(ObjectBusy, status); status = Ok;
1149 status = GdipMultiplyWorldTransform(graphics, m, MatrixOrderPrepend);
1150 status = GdipGetClip(graphics, region);
1151 expect(ObjectBusy, status); status = Ok;
1152 status = GdipTransformPoints(graphics, CoordinateSpacePage, CoordinateSpaceWorld, ptf, 5);
1153 expect(ObjectBusy, status); status = Ok;
1154 /* try to delete before release */
1155 status = GdipDeleteGraphics(graphics);
1156 expect(ObjectBusy, status);
1158 status = GdipReleaseDC(graphics, retdc);
1162 GdipDeleteGraphics(graphics);
1164 GdipDeletePath(path);
1165 GdipDeleteBrush((GpBrush*)brush);
1166 GdipDeleteRegion(region);
1167 GdipDeleteMatrix(m);
1173 static void test_transformpoints(void)
1176 GpGraphics *graphics = NULL;
1181 status = GdipCreateFromHDC(hdc, &graphics);
1184 /* NULL arguments */
1185 status = GdipTransformPoints(NULL, CoordinateSpacePage, CoordinateSpaceWorld, NULL, 0);
1186 expect(InvalidParameter, status);
1187 status = GdipTransformPoints(graphics, CoordinateSpacePage, CoordinateSpaceWorld, NULL, 0);
1188 expect(InvalidParameter, status);
1189 status = GdipTransformPoints(graphics, CoordinateSpacePage, CoordinateSpaceWorld, ptf, 0);
1190 expect(InvalidParameter, status);
1191 status = GdipTransformPoints(graphics, CoordinateSpacePage, CoordinateSpaceWorld, ptf, -1);
1192 expect(InvalidParameter, status);
1198 status = GdipTransformPoints(graphics, CoordinateSpaceDevice, CoordinateSpaceWorld, ptf, 2);
1200 expectf(1.0, ptf[0].X);
1201 expectf(0.0, ptf[0].Y);
1202 expectf(0.0, ptf[1].X);
1203 expectf(1.0, ptf[1].Y);
1205 status = GdipTranslateWorldTransform(graphics, 5.0, 5.0, MatrixOrderAppend);
1207 status = GdipSetPageUnit(graphics, UnitPixel);
1209 status = GdipSetPageScale(graphics, 3.0);
1216 status = GdipTransformPoints(graphics, CoordinateSpaceDevice, CoordinateSpaceWorld, ptf, 2);
1218 expectf(18.0, ptf[0].X);
1219 expectf(15.0, ptf[0].Y);
1220 expectf(15.0, ptf[1].X);
1221 expectf(18.0, ptf[1].Y);
1227 status = GdipTransformPoints(graphics, CoordinateSpacePage, CoordinateSpaceWorld, ptf, 2);
1229 expectf(6.0, ptf[0].X);
1230 expectf(5.0, ptf[0].Y);
1231 expectf(5.0, ptf[1].X);
1232 expectf(6.0, ptf[1].Y);
1238 status = GdipTransformPoints(graphics, CoordinateSpaceDevice, CoordinateSpacePage, ptf, 2);
1240 expectf(3.0, ptf[0].X);
1241 expectf(0.0, ptf[0].Y);
1242 expectf(0.0, ptf[1].X);
1243 expectf(3.0, ptf[1].Y);
1249 status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2);
1251 expectf(1.0, ptf[0].X);
1252 expectf(0.0, ptf[0].Y);
1253 expectf(0.0, ptf[1].X);
1254 expectf(1.0, ptf[1].Y);
1260 status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpacePage, ptf, 2);
1262 expectf(1.0, ptf[0].X);
1263 expectf(0.0, ptf[0].Y);
1264 expectf(0.0, ptf[1].X);
1265 expectf(1.0, ptf[1].Y);
1271 status = GdipTransformPoints(graphics, CoordinateSpacePage, CoordinateSpaceDevice, ptf, 2);
1273 expectf(1.0, ptf[0].X);
1274 expectf(0.0, ptf[0].Y);
1275 expectf(0.0, ptf[1].X);
1276 expectf(1.0, ptf[1].Y);
1282 status = GdipTransformPointsI(graphics, CoordinateSpaceDevice, CoordinateSpaceWorld, pt, 2);
1284 expect(18, pt[0].X);
1285 expect(15, pt[0].Y);
1286 expect(15, pt[1].X);
1287 expect(18, pt[1].Y);
1289 GdipDeleteGraphics(graphics);
1293 static void test_get_set_clip(void)
1296 GpGraphics *graphics = NULL;
1302 status = GdipCreateFromHDC(hdc, &graphics);
1305 rect.X = rect.Y = 0.0;
1306 rect.Height = rect.Width = 100.0;
1308 status = GdipCreateRegionRect(&rect, &clip);
1310 /* NULL arguments */
1311 status = GdipGetClip(NULL, NULL);
1312 expect(InvalidParameter, status);
1313 status = GdipGetClip(graphics, NULL);
1314 expect(InvalidParameter, status);
1315 status = GdipGetClip(NULL, clip);
1316 expect(InvalidParameter, status);
1318 status = GdipSetClipRegion(NULL, NULL, CombineModeReplace);
1319 expect(InvalidParameter, status);
1320 status = GdipSetClipRegion(graphics, NULL, CombineModeReplace);
1321 expect(InvalidParameter, status);
1323 status = GdipSetClipPath(NULL, NULL, CombineModeReplace);
1324 expect(InvalidParameter, status);
1325 status = GdipSetClipPath(graphics, NULL, CombineModeReplace);
1326 expect(InvalidParameter, status);
1329 status = GdipGetClip(graphics, clip);
1331 status = GdipIsInfiniteRegion(clip, graphics, &res);
1335 /* remains infinite after reset */
1337 status = GdipResetClip(graphics);
1339 status = GdipGetClip(graphics, clip);
1341 status = GdipIsInfiniteRegion(clip, graphics, &res);
1345 /* set to empty and then reset to infinite */
1346 status = GdipSetEmpty(clip);
1348 status = GdipSetClipRegion(graphics, clip, CombineModeReplace);
1351 status = GdipGetClip(graphics, clip);
1354 status = GdipIsEmptyRegion(clip, graphics, &res);
1357 status = GdipResetClip(graphics);
1359 status = GdipGetClip(graphics, clip);
1362 status = GdipIsInfiniteRegion(clip, graphics, &res);
1366 GdipDeleteRegion(clip);
1368 GdipDeleteGraphics(graphics);
1372 static void test_isempty(void)
1375 GpGraphics *graphics = NULL;
1380 status = GdipCreateFromHDC(hdc, &graphics);
1383 status = GdipCreateRegion(&clip);
1387 status = GdipIsClipEmpty(NULL, NULL);
1388 expect(InvalidParameter, status);
1389 status = GdipIsClipEmpty(graphics, NULL);
1390 expect(InvalidParameter, status);
1391 status = GdipIsClipEmpty(NULL, &res);
1392 expect(InvalidParameter, status);
1394 /* default is infinite */
1396 status = GdipIsClipEmpty(graphics, &res);
1400 GdipDeleteRegion(clip);
1402 GdipDeleteGraphics(graphics);
1406 static void test_clear(void)
1410 status = GdipGraphicsClear(NULL, 0xdeadbeef);
1411 expect(InvalidParameter, status);
1414 static void test_textcontrast(void)
1418 GpGraphics *graphics;
1421 status = GdipGetTextContrast(NULL, NULL);
1422 expect(InvalidParameter, status);
1424 status = GdipCreateFromHDC(hdc, &graphics);
1427 status = GdipGetTextContrast(graphics, NULL);
1428 expect(InvalidParameter, status);
1429 status = GdipGetTextContrast(graphics, &contrast);
1430 expect(4, contrast);
1432 GdipDeleteGraphics(graphics);
1436 static void test_GdipDrawString(void)
1439 GpGraphics *graphics = NULL;
1442 GpStringFormat *format;
1446 static const WCHAR string[] = {'T','e','s','t',0};
1448 memset(&logfont,0,sizeof(logfont));
1449 strcpy(logfont.lfFaceName,"Arial");
1450 logfont.lfHeight = 12;
1451 logfont.lfCharSet = DEFAULT_CHARSET;
1453 status = GdipCreateFromHDC(hdc, &graphics);
1456 status = GdipCreateFontFromLogfontA(hdc, &logfont, &fnt);
1457 if (status == FileNotFound)
1459 skip("Arial not installed.\n");
1464 status = GdipCreateSolidFill((ARGB)0xdeadbeef, (GpSolidFill**)&brush);
1467 status = GdipCreateStringFormat(0,0,&format);
1475 status = GdipDrawString(graphics, string, 4, fnt, &rect, format, brush);
1478 GdipDeleteGraphics(graphics);
1479 GdipDeleteBrush(brush);
1480 GdipDeleteFont(fnt);
1481 GdipDeleteStringFormat(format);
1487 START_TEST(graphics)
1489 struct GdiplusStartupInput gdiplusStartupInput;
1490 ULONG_PTR gdiplusToken;
1492 gdiplusStartupInput.GdiplusVersion = 1;
1493 gdiplusStartupInput.DebugEventCallback = NULL;
1494 gdiplusStartupInput.SuppressBackgroundThread = 0;
1495 gdiplusStartupInput.SuppressExternalCodecs = 0;
1497 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
1499 test_constructor_destructor();
1500 test_save_restore();
1501 test_GdipDrawBezierI();
1503 test_GdipDrawArcI();
1504 test_GdipDrawCurve();
1505 test_GdipDrawCurveI();
1506 test_GdipDrawCurve2();
1507 test_GdipDrawCurve2I();
1508 test_GdipDrawCurve3();
1509 test_GdipDrawCurve3I();
1510 test_GdipDrawLineI();
1511 test_GdipDrawLinesI();
1512 test_GdipDrawString();
1513 test_Get_Release_DC();
1514 test_transformpoints();
1515 test_get_set_clip();
1518 test_textcontrast();
1520 GdiplusShutdown(gdiplusToken);