ReactOS 0.4.16-dev-340-g0540c21
pen.c File Reference
#include <math.h>
#include "objbase.h"
#include "gdiplus.h"
#include "wine/test.h"
Include dependency graph for pen.c:

Go to the source code of this file.

Macros

#define expect(expected, got)   ok(got == expected, "Expected %.8x, got %.8x\n", expected, got)
 
#define expectf(expected, got)   ok(fabs(got - expected) < 0.1, "Expected %.2f, got %.2f\n", expected, got)
 

Functions

static void test_startup (void)
 
static void test_constructor_destructor (void)
 
static void test_constructor_destructor2 (void)
 
static void test_brushfill (void)
 
static void test_dasharray (void)
 
static void test_customcap (void)
 
static void test_penfilltype (void)
 
static void test_compoundarray (void)
 
static void get_pen_transform (GpPen *pen, REAL *values)
 
static void test_transform (void)
 
 START_TEST (pen)
 

Macro Definition Documentation

◆ expect

#define expect (   expected,
  got 
)    ok(got == expected, "Expected %.8x, got %.8x\n", expected, got)

Definition at line 27 of file pen.c.

◆ expectf

#define expectf (   expected,
  got 
)    ok(fabs(got - expected) < 0.1, "Expected %.2f, got %.2f\n", expected, got)

Definition at line 28 of file pen.c.

Function Documentation

◆ get_pen_transform()

static void get_pen_transform ( GpPen pen,
REAL values 
)
static

Definition at line 392 of file pen.c.

393{
396
398 expect(Ok, status);
399
401 expect(Ok, status);
403 expect(Ok, status);
404
406}
GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix *matrix, REAL *out)
Definition: matrix.c:172
GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix *matrix)
Definition: matrix.c:160
GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix **matrix)
Definition: matrix.c:140
GpStatus WINGDIPAPI GdipGetPenTransform(GpPen *pen, GpMatrix *matrix)
Definition: pen.c:449
Status
Definition: gdiplustypes.h:25
@ Ok
Definition: gdiplustypes.h:26
GLuint GLenum matrix
Definition: glext.h:9407
GLboolean GLenum GLenum GLvoid * values
Definition: glext.h:5666
#define expect(expected, got)
Definition: pen.c:30
Definition: ps.c:97

Referenced by test_transform().

◆ START_TEST()

START_TEST ( pen  )

Definition at line 634 of file pen.c.

635{
636 struct GdiplusStartupInput gdiplusStartupInput;
637 ULONG_PTR gdiplusToken;
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
663
664 GdiplusShutdown(gdiplusToken);
665}
int CDECL _controlfp_s(unsigned int *cur, unsigned int newval, unsigned int mask)
Definition: _controlfp_s.c:19
#define NULL
Definition: types.h:112
#define CDECL
Definition: compat.h:29
#define GetProcAddress(x, y)
Definition: compat.h:753
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
FxCollectionEntry * cur
Status WINAPI GdiplusStartup(ULONG_PTR *token, const struct GdiplusStartupInput *input, struct GdiplusStartupOutput *output)
Definition: gdiplus.c:81
void WINAPI GdiplusShutdown(ULONG_PTR)
GLenum GLint GLuint mask
Definition: glext.h:6028
static void test_startup(void)
Definition: pen.c:30
static void test_brushfill(void)
Definition: pen.c:119
static void test_customcap(void)
Definition: pen.c:243
static void test_compoundarray(void)
Definition: pen.c:342
static void test_penfilltype(void)
Definition: pen.c:292
static void test_constructor_destructor2(void)
Definition: pen.c:87
static void test_dasharray(void)
Definition: pen.c:163
static void test_constructor_destructor(void)
Definition: pen.c:67
static void test_transform(void)
Definition: pen.c:408
uint32_t ULONG_PTR
Definition: typedefs.h:65

◆ test_brushfill()

static void test_brushfill ( void  )
static

Definition at line 119 of file pen.c.

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}
#define ok(value,...)
Definition: atltest.h:57
GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush)
Definition: brush.c:994
GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill *sf, ARGB argb)
Definition: brush.c:1925
GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB color, GpSolidFill **sf)
Definition: brush.c:757
GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill *sf, ARGB *argb)
Definition: brush.c:1273
GpStatus WINGDIPAPI GdipGetBrushType(GpBrush *brush, GpBrushType *type)
Definition: brush.c:950
GpStatus WINGDIPAPI GdipCreatePen1(ARGB color, REAL width, GpUnit unit, GpPen **pen)
Definition: pen.c:136
GpStatus WINGDIPAPI GdipGetPenColor(GpPen *pen, ARGB *argb)
Definition: pen.c:217
GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen *pen, GpBrush *brush)
Definition: pen.c:502
GpStatus WINGDIPAPI GdipDeletePen(GpPen *pen)
Definition: pen.c:192
GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen *pen, GpBrush **brush)
Definition: pen.c:207
@ UnitWorld
Definition: gdiplusenums.h:27
BrushType
Definition: gdiplusenums.h:37
@ BrushTypeSolidColor
Definition: gdiplusenums.h:38
DWORD ARGB
@ InvalidParameter
Definition: gdiplustypes.h:28
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint color
Definition: glext.h:6243

Referenced by START_TEST().

◆ test_compoundarray()

static void test_compoundarray ( void  )
static

Definition at line 342 of file pen.c.

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;
363todo_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;
385todo_wine {
386 expect(Ok, status);
387 ok(count == 4, "Unexpected compound count %d\n", count);
388}
389 GdipDeletePen(pen);
390}
float REAL
Definition: types.h:41
GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen *pen, INT *count)
Definition: pen.c:526
GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen *pen, GDIPCONST REAL *dash, INT count)
Definition: pen.c:536
@ UnitPixel
Definition: gdiplusenums.h:29
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define todo_wine
Definition: custom.c:89
int32_t INT
Definition: typedefs.h:58

Referenced by START_TEST().

◆ test_constructor_destructor()

static void test_constructor_destructor ( void  )
static

Definition at line 67 of file pen.c.

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);
78 ok(pen != NULL, "Expected pen to be initialized\n");
79
82
83 status = GdipDeletePen(pen);
85}

Referenced by START_TEST().

◆ test_constructor_destructor2()

static void test_constructor_destructor2 ( void  )
static

Definition at line 87 of file pen.c.

88{
90 GpPen *pen = NULL;
91 GpBrush *brush = NULL;
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}
GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF *startpoint, GDIPCONST GpPointF *endpoint, ARGB startcolor, ARGB endcolor, GpWrapMode wrap, GpLineGradient **line)
Definition: brush.c:372
GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, GpPen **pen)
Definition: pen.c:150
@ WrapModeTile
Definition: gdiplusenums.h:207
GLsizei const GLfloat * points
Definition: glext.h:8112

Referenced by START_TEST().

◆ test_customcap()

static void test_customcap ( void  )
static

Definition at line 243 of file pen.c.

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
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}
GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen *pen, GpCustomLineCap **customCap)
Definition: pen.c:230
GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen *pen, GpCustomLineCap **customCap)
Definition: pen.c:245
GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen *pen, GpCustomLineCap *customCap)
Definition: pen.c:547
GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen *pen, GpCustomLineCap *customCap)
Definition: pen.c:566

Referenced by START_TEST().

◆ test_dasharray()

static void test_dasharray ( void  )
static

Definition at line 163 of file pen.c.

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 */
183 status = GdipSetPenDashArray(pen, dashes, 2);
184 expect(Ok, status);
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);
239
240 GdipDeletePen(pen);
241}
Arabic default style
Definition: afstyles.h:94
GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash, INT count)
Definition: pen.c:585
GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen *pen, GpDashStyle dash)
Definition: pen.c:650
GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen *pen, REAL *dash, INT count)
Definition: pen.c:260
GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen *pen, GpDashStyle *dash)
Definition: pen.c:312
DashStyle
Definition: gdiplusenums.h:177
@ DashStyleSolid
Definition: gdiplusenums.h:178
@ DashStyleDot
Definition: gdiplusenums.h:180
@ DashStyleCustom
Definition: gdiplusenums.h:183
@ OutOfMemory
Definition: gdiplustypes.h:29
#define expectf(expected, got)
Definition: pen.c:28

Referenced by START_TEST().

◆ test_penfilltype()

static void test_penfilltype ( void  )
static

Definition at line 292 of file pen.c.

293{
294 GpPen *pen;
295 GpSolidFill *solid;
297 GpPointF a, b;
300
301 /* NULL */
304
305 status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
306 expect(Ok, status);
309
310 /* created with GdipCreatePen1() */
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);
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,
332 expect(Ok, status);
333 status = GdipCreatePen2((GpBrush*)line, 10.0f, UnitPixel, &pen);
334 expect(Ok, status);
336 expect(Ok, status);
338 GdipDeletePen(pen);
340}
GpStatus WINGDIPAPI GdipGetPenFillType(GpPen *pen, GpPenType *type)
Definition: pen.c:336
PenType
Definition: gdiplusenums.h:95
@ PenTypeSolidColor
Definition: gdiplusenums.h:96
@ PenTypeLinearGradient
Definition: gdiplusenums.h:100
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
#define a
Definition: ke_i.h:78
#define b
Definition: ke_i.h:79
Definition: parser.c:49

Referenced by START_TEST().

◆ test_startup()

static void test_startup ( void  )
static

Definition at line 30 of file pen.c.

31{
32 GpPen *pen = NULL;
34 struct GdiplusStartupInput gdiplusStartupInput;
35 ULONG_PTR gdiplusToken;
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);
48 GdiplusShutdown(gdiplusToken);
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
63
64 GdipDeletePen(pen);
65}
#define trace
Definition: atltest.h:70
@ GdiplusNotInitialized
Definition: gdiplustypes.h:44
@ UnsupportedGdiplusVersion
Definition: gdiplustypes.h:43
DebugEventProc DebugEventCallback
Definition: gdiplusinit.h:35

Referenced by START_TEST().

◆ test_transform()

static void test_transform ( void  )
static

Definition at line 408 of file pen.c.

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
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
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
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
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
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}
GpStatus WINGDIPAPI GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy, GpMatrix **matrix)
Definition: matrix.c:61
GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix *matrix, REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy)
Definition: matrix.c:316
GpStatus WINGDIPAPI GdipScalePenTransform(GpPen *pen, REAL sx, REAL sy, GpMatrixOrder order)
Definition: pen.c:471
GpStatus WINGDIPAPI GdipMultiplyPenTransform(GpPen *pen, GDIPCONST GpMatrix *matrix, GpMatrixOrder order)
Definition: pen.c:491
GpStatus WINGDIPAPI GdipResetPenTransform(GpPen *pen)
Definition: pen.c:420
GpStatus WINGDIPAPI GdipTranslatePenTransform(GpPen *pen, REAL dx, REAL dy, GpMatrixOrder order)
Definition: pen.c:461
GpStatus WINGDIPAPI GdipSetPenTransform(GpPen *pen, GpMatrix *matrix)
Definition: pen.c:432
GpStatus WINGDIPAPI GdipRotatePenTransform(GpPen *pen, REAL angle, GpMatrixOrder order)
Definition: pen.c:481
@ MatrixOrderAppend
Definition: gdiplusenums.h:189
@ MatrixOrderPrepend
Definition: gdiplusenums.h:188
static void get_pen_transform(GpPen *pen, REAL *values)
Definition: pen.c:392

Referenced by START_TEST().