ReactOS  0.4.14-dev-50-g13bb5e2
pen.c
Go to the documentation of this file.
1 /*
2  * Unit test suite for pens (and init)
3  *
4  * Copyright (C) 2007 Google (Evan Stade)
5  *
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.
10  *
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.
15  *
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
19  */
20 
21 #include <math.h>
22 
23 #include "objbase.h"
24 #include "gdiplus.h"
25 #include "wine/test.h"
26 
27 #define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got)
28 #define expectf(expected, got) ok(fabs(got - expected) < 0.1, "Expected %.2f, got %.2f\n", expected, got)
29 
30 static void test_startup(void)
31 {
32  GpPen *pen = NULL;
33  Status status;
34  struct GdiplusStartupInput gdiplusStartupInput;
36  int gpversion;
37 
38  gdiplusStartupInput.DebugEventCallback = NULL;
39  gdiplusStartupInput.SuppressBackgroundThread = 0;
40  gdiplusStartupInput.SuppressExternalCodecs = 0;
41 
42  for (gpversion=1; gpversion<256; gpversion++)
43  {
44  gdiplusStartupInput.GdiplusVersion = gpversion;
45  status = GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
47  "GdiplusStartup returned %x\n", status);
49  if (status != Ok)
50  {
51  gpversion--;
52  break;
53  }
54  }
55 
56  ok(gpversion > 0 && gpversion <= 2, "unexpected gdiplus version %i\n", gpversion);
57  trace("gdiplus version is %i\n", gpversion);
58 
59  status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
60 
61  todo_wine
63 
64  GdipDeletePen(pen);
65 }
66 
67 static void test_constructor_destructor(void)
68 {
70  GpPen *pen = NULL;
71 
72  status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, NULL);
74  ok(pen == NULL, "Expected pen to be NULL\n");
75 
76  status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
77  expect(Ok, status);
78  ok(pen != NULL, "Expected pen to be initialized\n");
79 
82 
83  status = GdipDeletePen(pen);
84  expect(Ok, status);
85 }
86 
88 {
90  GpPen *pen = NULL;
91  GpBrush *brush = NULL;
92  GpPointF points[2];
93 
94  status = GdipCreatePen2(NULL, 10.0f, UnitPixel, &pen);
96  ok(pen == NULL, "Expected pen to be NULL\n");
97 
98  points[0].X = 7.0;
99  points[0].Y = 11.0;
100  points[1].X = 13.0;
101  points[1].Y = 17.0;
102 
103  status = GdipCreateLineBrush(&points[0], &points[1], (ARGB)0xffff00ff,
104  (ARGB)0xff0000ff, WrapModeTile, (GpLineGradient **)&brush);
105  expect(Ok, status);
106  ok(brush != NULL, "Expected brush to be initialized\n");
107 
108  status = GdipCreatePen2(brush, 10.0f, UnitPixel, &pen);
109  expect(Ok, status);
110  ok(pen != NULL, "Expected pen to be initialized\n");
111 
112  status = GdipDeletePen(pen);
113  expect(Ok, status);
114 
115  status = GdipDeleteBrush(brush);
116  expect(Ok, status);
117 }
118 
119 static void test_brushfill(void)
120 {
122  GpPen *pen;
123  GpBrush *brush, *brush2;
125  ARGB color = 0;
126 
127  /* default solid */
128  GdipCreatePen1(0xdeadbeef, 4.5, UnitWorld, &pen);
129  status = GdipGetPenBrushFill(pen, &brush);
130  expect(Ok, status);
131  GdipGetBrushType(brush, &type);
133  GdipGetPenColor(pen, &color);
134  expect(0xdeadbeef, color);
135  GdipDeleteBrush(brush);
136 
137  /* color controlled by brush */
138  GdipCreateSolidFill(0xabaddeed, (GpSolidFill**)&brush);
139  status = GdipSetPenBrushFill(pen, brush);
140  expect(Ok, status);
141  GdipGetPenColor(pen, &color);
142  expect(0xabaddeed, color);
143  GdipDeleteBrush(brush);
144  color = 0;
145 
146  /* get returns a clone, not a reference */
147  GdipGetPenBrushFill(pen, &brush);
148  GdipSetSolidFillColor((GpSolidFill*)brush, 0xbeadfeed);
149  GdipGetPenBrushFill(pen, &brush2);
150  ok(brush != brush2, "Expected to get a clone, not a copy of the reference\n");
152  expect(0xabaddeed, color);
153  GdipDeleteBrush(brush);
154  GdipDeleteBrush(brush2);
155 
156  /* brush cannot be NULL */
159 
160  GdipDeletePen(pen);
161 }
162 
163 static void test_dasharray(void)
164 {
165  GpPen *pen;
168  REAL dashes[12];
169 
170  GdipCreatePen1(0xdeadbeef, 10.0, UnitWorld, &pen);
171  dashes[0] = 10.0;
172  dashes[1] = 11.0;
173  dashes[2] = 12.0;
174  dashes[3] = 13.0;
175  dashes[4] = 14.0;
176  dashes[5] = -100.0;
177  dashes[6] = -100.0;
178  dashes[7] = dashes[8] = dashes[9] = dashes[10] = dashes[11] = 0.0;
179 
180  /* setting the array sets the type to custom */
181  GdipGetPenDashStyle(pen, &style);
183  status = GdipSetPenDashArray(pen, dashes, 2);
184  expect(Ok, status);
185  GdipGetPenDashStyle(pen, &style);
187 
188  /* Getting the array on a non-custom pen returns invalid parameter (unless
189  * you are getting 0 elements).*/
191  status = GdipGetPenDashArray(pen, &dashes[5], 2);
193  status = GdipGetPenDashArray(pen, &dashes[5], 0);
194  expect(Ok, status);
195 
196  /* What does setting DashStyleCustom do to the array length? */
197  GdipSetPenDashArray(pen, dashes, 2);
199  status = GdipGetPenDashArray(pen, &dashes[5], 2);
200  expect(Ok, status);
201  expectf(10.0, dashes[5]);
202  expectf(11.0, dashes[6]);
203 
204  /* Set the array, then get with different sized buffers. */
205  status = GdipSetPenDashArray(pen, dashes, 5);
206  expect(Ok, status);
207  dashes[5] = -100.0;
208  dashes[6] = -100.0;
209  status = GdipGetPenDashArray(pen, &dashes[5], 1);
210  expect(Ok, status); /* not InsufficientBuffer! */
211  expectf(10.0, dashes[5]);
212  expectf(-100.0, dashes[6]);
213  dashes[5] = -100.0;
214  status = GdipGetPenDashArray(pen, &dashes[5], 6);
215  expect(InvalidParameter, status); /* not Ok! */
216  expectf(-100.0, dashes[5]);
217  expectf(-100.0, dashes[6]);
218 
219  /* Some invalid array values. */
220  status = GdipSetPenDashArray(pen, &dashes[7], 5);
222  dashes[9] = -1.0;
223  status = GdipSetPenDashArray(pen, &dashes[7], 5);
225 
226  /* Try to set with count = 0. */
228  if (0) /* corrupts stack on 64-bit Vista */
229  {
230  status = GdipSetPenDashArray(pen, dashes, 0);
232  "Expected OutOfMemory or InvalidParameter, got %.8x\n", status);
233  }
234  status = GdipSetPenDashArray(pen, dashes, -1);
236  "Expected OutOfMemory or InvalidParameter, got %.8x\n", status);
237  GdipGetPenDashStyle(pen, &style);
239 
240  GdipDeletePen(pen);
241 }
242 
243 static void test_customcap(void)
244 {
245  GpPen *pen;
247  GpCustomLineCap *custom;
248 
249  status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
250  expect(Ok, status);
251 
252  /* NULL args */
259 
264  status = GdipGetPenCustomEndCap(NULL, &custom);
266 
267  /* native crashes on pen == NULL, custom != NULL */
272 
277 
278  /* get without setting previously */
279  custom = (GpCustomLineCap*)0xdeadbeef;
280  status = GdipGetPenCustomEndCap(pen, &custom);
281  expect(Ok, status);
282  ok(custom == NULL,"Expect CustomCap == NULL\n");
283 
284  custom = (GpCustomLineCap*)0xdeadbeef;
285  status = GdipGetPenCustomStartCap(pen, &custom);
286  expect(Ok, status);
287  ok(custom == NULL,"Expect CustomCap == NULL\n");
288 
289  GdipDeletePen(pen);
290 }
291 
292 static void test_penfilltype(void)
293 {
294  GpPen *pen;
295  GpSolidFill *solid;
297  GpPointF a, b;
299  GpPenType type;
300 
301  /* NULL */
304 
305  status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
306  expect(Ok, status);
309 
310  /* created with GdipCreatePen1() */
311  status = GdipGetPenFillType(pen, &type);
312  expect(Ok, status);
314  GdipDeletePen(pen);
315 
316  /* based on SolidBrush */
317  status = GdipCreateSolidFill((ARGB)0xffff00ff, &solid);
318  expect(Ok, status);
319  status = GdipCreatePen2((GpBrush*)solid, 10.0f, UnitPixel, &pen);
320  expect(Ok, status);
321  status = GdipGetPenFillType(pen, &type);
322  expect(Ok, status);
324  GdipDeletePen(pen);
325  GdipDeleteBrush((GpBrush*)solid);
326 
327  /* based on LinearGradientBrush */
328  a.X = a.Y = 0.0;
329  b.X = b.Y = 10.0;
330  status = GdipCreateLineBrush(&a, &b, (ARGB)0xffff00ff, (ARGB)0xffff0000,
331  WrapModeTile, &line);
332  expect(Ok, status);
333  status = GdipCreatePen2((GpBrush*)line, 10.0f, UnitPixel, &pen);
334  expect(Ok, status);
335  status = GdipGetPenFillType(pen, &type);
336  expect(Ok, status);
338  GdipDeletePen(pen);
340 }
341 
342 static void test_compoundarray(void)
343 {
345  GpPen *pen;
346  static const REAL testvalues[] = {0.2, 0.4, 0.6, 0.8};
347  INT count;
348 
349  status = GdipSetPenCompoundArray(NULL, testvalues, 4);
351 
352  status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
353  expect(Ok, status);
354 
357 
360 
361  count = 10;
363 todo_wine {
364  expect(Ok, status);
365  ok(count == 0, "Unexpected compound count %d\n", count);
366 }
371  status = GdipSetPenCompoundArray(pen, testvalues, 3);
373  status = GdipSetPenCompoundArray(pen, testvalues, 0);
375  status = GdipSetPenCompoundArray(pen, testvalues, -2);
377 
378  status = GdipSetPenCompoundArray(pen, testvalues, 4);
382 
383  count = 0;
385 todo_wine {
386  expect(Ok, status);
387  ok(count == 4, "Unexpected compound count %d\n", count);
388 }
389  GdipDeletePen(pen);
390 }
391 
392 static void get_pen_transform(GpPen *pen, REAL *values)
393 {
394  GpMatrix *matrix;
396 
398  expect(Ok, status);
399 
401  expect(Ok, status);
403  expect(Ok, status);
404 
406 }
407 
408 static void test_transform(void)
409 {
411  GpPen *pen;
412  GpMatrix *matrix, *matrix2;
413  REAL values[6];
414 
415  status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
416  expect(Ok, status);
417 
419  expect(Ok, status);
420 
422  expect(Ok, status);
423 
425  expect(Ok, status);
426 
427  expectf(1.0, values[0]);
428  expectf(0.0, values[1]);
429  expectf(0.0, values[2]);
430  expectf(1.0, values[3]);
431  expectf(0.0, values[4]);
432  expectf(0.0, values[5]);
433 
434  GdipCreateMatrix2(3.0, -2.0, 5.0, 2.0, 6.0, 3.0, &matrix2);
435  status = GdipSetPenTransform(pen, matrix2);
436  expect(Ok, status);
437  GdipDeleteMatrix(matrix2);
438 
440  expect(Ok, status);
442  expect(Ok, status);
443  expectf(3.0, values[0]);
444  expectf(-2.0, values[1]);
445  expectf(5.0, values[2]);
446  expectf(2.0, values[3]);
447  expectf(6.0, values[4]);
448  expectf(3.0, values[5]);
449 
450  /* Translate */
453 
455  expect(Ok, status);
456 
458  expect(Ok, status);
460  expect(Ok, status);
461  expectf(3.0, values[0]);
462  expectf(-2.0, values[1]);
463  expectf(5.0, values[2]);
464  expectf(2.0, values[3]);
465  expectf(7.0, values[4]);
466  expectf(1.0, values[5]);
467 
469  expect(Ok, status);
470 
472  expect(Ok, status);
474  expect(Ok, status);
475  expectf(3.0, values[0]);
476  expectf(-2.0, values[1]);
477  expectf(5.0, values[2]);
478  expectf(2.0, values[3]);
479  expectf(23.0, values[4]);
480  expectf(17.0, values[5]);
481 
483  expect(Ok, status);
484 
486  expect(Ok, status);
488  expect(Ok, status);
489 
490  expectf(1.0, values[0]);
491  expectf(0.0, values[1]);
492  expectf(0.0, values[2]);
493  expectf(1.0, values[3]);
494  expectf(0.0, values[4]);
495  expectf(0.0, values[5]);
496 
497  /* Scale */
500 
502  expect(Ok, status);
503 
505  expectf(1.0, values[0]);
506  expectf(0.0, values[1]);
507  expectf(0.0, values[2]);
508  expectf(1.0, values[3]);
509  expectf(0.0, values[4]);
510  expectf(0.0, values[5]);
511 
512  status = GdipScalePenTransform(pen, 2.0, -10.0, MatrixOrderPrepend);
513  expect(Ok, status);
514 
516  expectf(2.0, values[0]);
517  expectf(0.0, values[1]);
518  expectf(0.0, values[2]);
519  expectf(-10.0, values[3]);
520  expectf(0.0, values[4]);
521  expectf(0.0, values[5]);
522 
523  status = GdipScalePenTransform(pen, 2.0, -10.0, MatrixOrderAppend);
524  expect(Ok, status);
525 
527  expectf(4.0, values[0]);
528  expectf(0.0, values[1]);
529  expectf(0.0, values[2]);
530  expectf(100.0, values[3]);
531  expectf(0.0, values[4]);
532  expectf(0.0, values[5]);
533 
535  expect(Ok, status);
536 
538  expectf(4.0, values[0]);
539  expectf(0.0, values[1]);
540  expectf(0.0, values[2]);
541  expectf(100.0, values[3]);
542  expectf(1.0, values[4]);
543  expectf(-2.0, values[5]);
544 
545  status = GdipScalePenTransform(pen, 2.0, -10.0, MatrixOrderPrepend);
546  expect(Ok, status);
547 
549  expectf(8.0, values[0]);
550  expectf(0.0, values[1]);
551  expectf(0.0, values[2]);
552  expectf(-1000.0, values[3]);
553  expectf(1.0, values[4]);
554  expectf(-2.0, values[5]);
555 
556  /* Multiply */
558  expect(Ok, status);
559 
560  status = GdipSetMatrixElements(matrix, 2.0, 1.0, 1.0, 4.0, 1.0, 2.0);
561  expect(Ok, status);
562 
565 
567  expect(Ok, status);
568 
570  expectf(2.0, values[0]);
571  expectf(1.0, values[1]);
572  expectf(1.0, values[2]);
573  expectf(4.0, values[3]);
574  expectf(1.0, values[4]);
575  expectf(2.0, values[5]);
576 
577  status = GdipScalePenTransform(pen, 2.0, -10.0, MatrixOrderAppend);
578  expect(Ok, status);
579 
581  expect(Ok, status);
582 
584  expectf(-2.0, values[0]);
585  expectf(-36.0, values[1]);
586  expectf(-36.0, values[2]);
587  expectf(-158.0, values[3]);
588  expectf(-15.0, values[4]);
589  expectf(-76.0, values[5]);
590 
591  /* Rotate */
593  expect(Ok, status);
594 
595  status = GdipSetMatrixElements(matrix, 2.0, 1.0, 1.0, 4.0, 1.0, 2.0);
596  expect(Ok, status);
597 
599  expect(Ok, status);
600 
603 
605  expect(Ok, status);
606 
608  expectf(2.12, values[0]);
609  expectf(3.54, values[1]);
610  expectf(-0.71, values[2]);
611  expectf(2.12, values[3]);
612  expectf(1.0, values[4]);
613  expectf(2.0, values[5]);
614 
615  status = GdipScalePenTransform(pen, 2.0, -10.0, MatrixOrderAppend);
616  expect(Ok, status);
617 
619  expect(Ok, status);
620 
622  expectf(-4.24, values[0]);
623  expectf(35.36, values[1]);
624  expectf(1.41, values[2]);
625  expectf(21.21, values[3]);
626  expectf(-2.0, values[4]);
627  expectf(20.0, values[5]);
628 
629  GdipDeletePen(pen);
630 
632 }
633 
635 {
636  struct GdiplusStartupInput gdiplusStartupInput;
638  HMODULE hmsvcrt;
639  int (CDECL * _controlfp_s)(unsigned int *cur, unsigned int newval, unsigned int mask);
640 
641  /* Enable all FP exceptions except _EM_INEXACT, which gdi32 can trigger */
642  hmsvcrt = LoadLibraryA("msvcrt");
643  _controlfp_s = (void*)GetProcAddress(hmsvcrt, "_controlfp_s");
644  if (_controlfp_s) _controlfp_s(0, 0, 0x0008001e);
645 
646  test_startup();
647 
648  gdiplusStartupInput.GdiplusVersion = 1;
649  gdiplusStartupInput.DebugEventCallback = NULL;
650  gdiplusStartupInput.SuppressBackgroundThread = 0;
651  gdiplusStartupInput.SuppressExternalCodecs = 0;
652 
653  GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
654 
657  test_brushfill();
658  test_dasharray();
659  test_customcap();
662  test_transform();
663 
665 }
GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill *sf, ARGB *argb)
Definition: brush.c:1273
static void test_transform(void)
Definition: pen.c:408
GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix *matrix, REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy)
Definition: matrix.c:316
GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen *pen, GpCustomLineCap **customCap)
Definition: pen.c:230
GpStatus WINGDIPAPI GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy, GpMatrix **matrix)
Definition: matrix.c:61
GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen *pen, GpDashStyle *dash)
Definition: pen.c:312
GpStatus WINGDIPAPI GdipGetPenTransform(GpPen *pen, GpMatrix *matrix)
Definition: pen.c:449
GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen *pen, GpCustomLineCap *customCap)
Definition: pen.c:547
GLuint GLenum matrix
Definition: glext.h:9407
GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix *matrix, REAL *out)
Definition: matrix.c:172
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLboolean GLenum GLenum GLvoid * values
Definition: glext.h:5666
GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix **matrix)
Definition: matrix.c:140
static void get_pen_transform(GpPen *pen, REAL *values)
Definition: pen.c:392
#define expectf(expected, got)
Definition: pen.c:28
GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen *pen, GpBrush **brush)
Definition: pen.c:207
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen *pen, REAL *dash, INT count)
Definition: pen.c:260
GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill *sf, ARGB argb)
Definition: brush.c:1925
GpStatus WINGDIPAPI GdipGetPenColor(GpPen *pen, ARGB *argb)
Definition: pen.c:217
static void test_constructor_destructor2(void)
Definition: pen.c:87
static void test_penfilltype(void)
Definition: pen.c:292
START_TEST(pen)
Definition: pen.c:690
int32_t INT
Definition: typedefs.h:56
GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen *pen, INT *count)
Definition: pen.c:526
GpStatus WINGDIPAPI GdipMultiplyPenTransform(GpPen *pen, GDIPCONST GpMatrix *matrix, GpMatrixOrder order)
Definition: pen.c:491
uint32_t ULONG_PTR
Definition: typedefs.h:63
GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF *startpoint, GDIPCONST GpPointF *endpoint, ARGB startcolor, ARGB endcolor, GpWrapMode wrap, GpLineGradient **line)
Definition: brush.c:372
GLenum GLint GLuint mask
Definition: glext.h:6028
GLuint color
Definition: glext.h:6243
#define a
Definition: ke_i.h:78
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
GpStatus WINGDIPAPI GdipTranslatePenTransform(GpPen *pen, REAL dx, REAL dy, GpMatrixOrder order)
Definition: pen.c:461
smooth NULL
Definition: ftsmooth.c:416
GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen *pen, GpCustomLineCap **customCap)
Definition: pen.c:245
Definition: parser.c:48
#define b
Definition: ke_i.h:79
GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush)
Definition: brush.c:994
int CDECL _controlfp_s(unsigned int *cur, unsigned int newval, unsigned int mask)
Definition: cntrlfp.c:120
DebugEventProc DebugEventCallback
Definition: gdiplusinit.h:35
GLfloat f
Definition: glext.h:7540
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
BOOL SuppressBackgroundThread
Definition: gdiplusinit.h:36
#define trace
Definition: atltest.h:70
GpStatus WINGDIPAPI GdipSetPenTransform(GpPen *pen, GpMatrix *matrix)
Definition: pen.c:432
void WINAPI GdiplusShutdown(ULONG_PTR)
GpStatus WINGDIPAPI GdipRotatePenTransform(GpPen *pen, REAL angle, GpMatrixOrder order)
Definition: pen.c:481
Status WINAPI GdiplusStartup(ULONG_PTR *token, const struct GdiplusStartupInput *input, struct GdiplusStartupOutput *output)
Definition: gdiplus.c:81
GpStatus WINGDIPAPI GdipGetBrushType(GpBrush *brush, GpBrushType *type)
Definition: brush.c:950
static void test_customcap(void)
Definition: pen.c:243
static void test_startup(void)
Definition: pen.c:30
#define expect(expected, got)
Definition: pen.c:27
static ULONG_PTR gdiplusToken
Definition: CImage.cpp:79
GLsizei const GLfloat * points
Definition: glext.h:8112
GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix *matrix)
Definition: matrix.c:160
char line[200]
Definition: main.c:97
#define todo_wine
Definition: test.h:154
PenType
Definition: gdiplusenums.h:93
GpStatus WINGDIPAPI GdipResetPenTransform(GpPen *pen)
Definition: pen.c:420
Status
Definition: gdiplustypes.h:24
GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen *pen, GpBrush *brush)
Definition: pen.c:502
GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, GpPen **pen)
Definition: pen.c:150
DashStyle
Definition: gdiplusenums.h:175
#define CDECL
Definition: compat.h:21
GpStatus WINGDIPAPI GdipGetPenFillType(GpPen *pen, GpPenType *type)
Definition: pen.c:336
#define ok(value,...)
Definition: atltest.h:57
GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash, INT count)
Definition: pen.c:585
static void test_dasharray(void)
Definition: pen.c:163
static void test_constructor_destructor(void)
Definition: pen.c:67
#define GetProcAddress(x, y)
Definition: compat.h:410
static void test_brushfill(void)
Definition: pen.c:119
GpStatus WINGDIPAPI GdipDeletePen(GpPen *pen)
Definition: pen.c:192
GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen *pen, GDIPCONST REAL *dash, INT count)
Definition: pen.c:536
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
static void test_compoundarray(void)
Definition: pen.c:342
BrushType
Definition: gdiplusenums.h:36
GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB color, GpSolidFill **sf)
Definition: brush.c:757
float REAL
Definition: types.h:41
Arabic default style
Definition: afstyles.h:93
static SERVICE_STATUS status
Definition: service.c:31
GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen *pen, GpCustomLineCap *customCap)
Definition: pen.c:566
GpStatus WINGDIPAPI GdipCreatePen1(ARGB color, REAL width, GpUnit unit, GpPen **pen)
Definition: pen.c:136
GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen *pen, GpDashStyle dash)
Definition: pen.c:650
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
GpStatus WINGDIPAPI GdipScalePenTransform(GpPen *pen, REAL sx, REAL sy, GpMatrixOrder order)
Definition: pen.c:471
Definition: ps.c:97
DWORD ARGB