ReactOS 0.4.17-dev-243-g1369312
pen.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2007 Google (Evan Stade)
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#include <stdarg.h>
20
21#include "windef.h"
22#include "winbase.h"
23#include "wingdi.h"
24
25#include "objbase.h"
26
27#include "gdiplus.h"
28#include "gdiplus_private.h"
29#include "wine/debug.h"
30
32
34{
35 switch(dash){
36 case DashStyleSolid:
37 return PS_SOLID;
38 case DashStyleDash:
39 return PS_DASH;
40 case DashStyleDot:
41 return PS_DOT;
43 return PS_DASHDOT;
45 return PS_DASHDOTDOT;
46 case DashStyleCustom:
47 return PS_USERSTYLE;
48 default:
49 ERR("Not a member of GpDashStyle enumeration\n");
50 return 0;
51 }
52}
53
55{
56 switch(join){
57 case LineJoinRound:
58 return PS_JOIN_ROUND;
59 case LineJoinBevel:
60 return PS_JOIN_BEVEL;
61 case LineJoinMiter:
63 return PS_JOIN_MITER;
64 default:
65 ERR("Not a member of GpLineJoin enumeration\n");
66 return 0;
67 }
68}
69
71{
72 switch(bt){
74 return PenTypeSolidColor;
76 return PenTypeHatchFill;
78 return PenTypeTextureFill;
83 default:
84 return PenTypeUnknown;
85 }
86}
87
89{
91
92 TRACE("(%p, %p)\n", pen, clonepen);
93
94 if(!pen || !clonepen)
95 return InvalidParameter;
96
97 *clonepen = malloc(sizeof(GpPen));
98 if(!*clonepen) return OutOfMemory;
99
100 **clonepen = *pen;
101
102 (*clonepen)->customstart = NULL;
103 (*clonepen)->customend = NULL;
104 (*clonepen)->brush = NULL;
105 (*clonepen)->dashes = NULL;
106 (*clonepen)->compound_array = NULL;
107
108 stat = GdipCloneBrush(pen->brush, &(*clonepen)->brush);
109
110 if (stat == Ok && pen->customstart)
111 stat = GdipCloneCustomLineCap(pen->customstart, &(*clonepen)->customstart);
112
113 if (stat == Ok && pen->customend)
114 stat = GdipCloneCustomLineCap(pen->customend, &(*clonepen)->customend);
115
116 if (stat == Ok && pen->dashes)
117 {
118 (*clonepen)->dashes = malloc(pen->numdashes * sizeof(REAL));
119 if ((*clonepen)->dashes)
120 memcpy((*clonepen)->dashes, pen->dashes, pen->numdashes * sizeof(REAL));
121 else
123 }
124
125 if (stat == Ok && pen->compound_array)
126 {
127 (*clonepen)->compound_array = malloc(pen->compound_array_size * sizeof(REAL));
128 if ((*clonepen)->compound_array)
129 memcpy((*clonepen)->compound_array, pen->compound_array, pen->compound_array_size * sizeof(REAL));
130 else
132 }
133
134 if (stat != Ok)
135 {
136 GdipDeletePen(*clonepen);
137 *clonepen = NULL;
138 return stat;
139 }
140
141 TRACE("<-- %p\n", *clonepen);
142
143 return Ok;
144}
145
147 GpPen **pen)
148{
149 GpBrush *brush;
151
152 TRACE("(%lx, %.2f, %d, %p)\n", color, width, unit, pen);
153
155 status = GdipCreatePen2(brush, width, unit, pen);
156 GdipDeleteBrush(brush);
157 return status;
158}
159
161 GpPen **pen)
162{
163 GpPen *gp_pen;
164 GpBrush *clone_brush;
165
166 TRACE("(%p, %.2f, %d, %p)\n", brush, width, unit, pen);
167
168 if(!pen || !brush)
169 return InvalidParameter;
170
171 gp_pen = calloc(1, sizeof(GpPen));
172 if(!gp_pen) return OutOfMemory;
173
174 gp_pen->style = GP_DEFAULT_PENSTYLE;
175 gp_pen->width = width;
176 gp_pen->unit = unit;
177 gp_pen->endcap = LineCapFlat;
178 gp_pen->join = LineJoinMiter;
179 gp_pen->miterlimit = 10.0;
180 gp_pen->dash = DashStyleSolid;
181 gp_pen->offset = 0.0;
182 gp_pen->customstart = NULL;
183 gp_pen->customend = NULL;
184 gp_pen->compound_array = NULL;
185 gp_pen->compound_array_size = 0;
186 GdipSetMatrixElements(&gp_pen->transform, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
187
188 if(!((gp_pen->unit == UnitWorld) || (gp_pen->unit == UnitPixel))) {
189 FIXME("UnitWorld, UnitPixel only supported units\n");
190 free(gp_pen);
191 return NotImplemented;
192 }
193
194 GdipCloneBrush(brush, &clone_brush);
195 gp_pen->brush = clone_brush;
196
197 *pen = gp_pen;
198
199 TRACE("<-- %p\n", *pen);
200
201 return Ok;
202}
203
205{
206 TRACE("(%p)\n", pen);
207
208 if(!pen) return InvalidParameter;
209
213 free(pen->compound_array);
214 free(pen->dashes);
215 free(pen);
216
217 return Ok;
218}
219
221{
222 TRACE("(%p, %p)\n", pen, brush);
223
224 if(!pen || !brush)
225 return InvalidParameter;
226
227 return GdipCloneBrush(pen->brush, brush);
228}
229
231{
232 TRACE("(%p, %p)\n", pen, argb);
233
234 if(!pen || !argb)
235 return InvalidParameter;
236
237 if(pen->brush->bt != BrushTypeSolidColor)
238 return NotImplemented;
239
240 return GdipGetSolidFillColor(((GpSolidFill*)pen->brush), argb);
241}
242
244{
245 TRACE("(%p, %p)\n", pen, customCap);
246
247 if(!pen || !customCap)
248 return InvalidParameter;
249
250 if(!pen->customend){
251 *customCap = NULL;
252 return Ok;
253 }
254
255 return GdipCloneCustomLineCap(pen->customend, customCap);
256}
257
259{
260 TRACE("(%p, %p)\n", pen, customCap);
261
262 if(!pen || !customCap)
263 return InvalidParameter;
264
265 if(!pen->customstart){
266 *customCap = NULL;
267 return Ok;
268 }
269
270 return GdipCloneCustomLineCap(pen->customstart, customCap);
271}
272
274{
275 TRACE("(%p, %p, %d)\n", pen, dash, count);
276
277 if(!pen || !dash || count > pen->numdashes)
278 return InvalidParameter;
279
280 /* note: if you pass a negative value for count, it crashes native gdiplus. */
281 if(count < 0)
282 return GenericError;
283
284 memcpy(dash, pen->dashes, count * sizeof(REAL));
285
286 return Ok;
287}
288
290{
291 TRACE("(%p, %p)\n", pen, dashCap);
292
293 if(!pen || !dashCap)
294 return InvalidParameter;
295
296 *dashCap = pen->dashcap;
297
298 return Ok;
299}
300
302{
303 TRACE("(%p, %p)\n", pen, count);
304
305 if(!pen || !count)
306 return InvalidParameter;
307
308 *count = pen->numdashes;
309
310 return Ok;
311}
312
314{
315 TRACE("(%p, %p)\n", pen, offset);
316
317 if(!pen || !offset)
318 return InvalidParameter;
319
320 *offset = pen->offset;
321
322 return Ok;
323}
324
326{
327 TRACE("(%p, %p)\n", pen, dash);
328
329 if(!pen || !dash)
330 return InvalidParameter;
331
332 *dash = pen->dash;
333
334 return Ok;
335}
336
338{
339 TRACE("(%p, %p)\n", pen, endCap);
340
341 if(!pen || !endCap)
342 return InvalidParameter;
343
344 *endCap = pen->endcap;
345
346 return Ok;
347}
348
350{
351 TRACE("(%p, %p)\n", pen, type);
352
353 if(!pen || !type)
354 return InvalidParameter;
355
356 *type = bt_to_pt(pen->brush->bt);
357
358 return Ok;
359}
360
362{
363 TRACE("(%p, %p)\n", pen, lineJoin);
364
365 if(!pen || !lineJoin)
366 return InvalidParameter;
367
368 *lineJoin = pen->join;
369
370 return Ok;
371}
372
374{
375 TRACE("(%p, %p)\n", pen, mode);
376
377 if(!pen || !mode)
378 return InvalidParameter;
379
380 *mode = pen->align;
381
382 return Ok;
383}
384
386{
387 TRACE("(%p, %p)\n", pen, miterLimit);
388
389 if(!pen || !miterLimit)
390 return InvalidParameter;
391
392 *miterLimit = pen->miterlimit;
393
394 return Ok;
395}
396
398{
399 TRACE("(%p, %p)\n", pen, startCap);
400
401 if(!pen || !startCap)
402 return InvalidParameter;
403
404 *startCap = pen->startcap;
405
406 return Ok;
407}
408
410{
411 TRACE("(%p, %p)\n", pen, unit);
412
413 if(!pen || !unit)
414 return InvalidParameter;
415
416 *unit = pen->unit;
417
418 return Ok;
419}
420
422{
423 TRACE("(%p, %p)\n", pen, width);
424
425 if(!pen || !width)
426 return InvalidParameter;
427
428 *width = pen->width;
429
430 return Ok;
431}
432
434{
435 TRACE("(%p)\n", pen);
436
437 if(!pen)
438 return InvalidParameter;
439
440 GdipSetMatrixElements(&pen->transform, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
441
442 return Ok;
443}
444
446{
447 static int calls;
448 BOOL result;
449
450 TRACE("(%p, %s)\n", pen, debugstr_matrix(matrix));
451
452 if(!pen || !matrix)
453 return InvalidParameter;
454
455 if(!(calls++))
456 FIXME("(%p,%p) Semi-stub\n", pen, matrix);
457
459 if (!result)
460 return InvalidParameter;
461 pen->transform = *matrix;
462
463 return Ok;
464}
465
467{
468 TRACE("(%p,%s)\n", pen, debugstr_matrix(matrix));
469
470 if(!pen || !matrix)
471 return InvalidParameter;
472
473 *matrix = pen->transform;
474
475 return Ok;
476}
477
479{
480 TRACE("(%p,%0.2f,%0.2f,%u)\n", pen, dx, dy, order);
481
482 if(!pen)
483 return InvalidParameter;
484
485 return GdipTranslateMatrix(&pen->transform, dx, dy, order);
486}
487
489{
490 TRACE("(%p,%0.2f,%0.2f,%u)\n", pen, sx, sy, order);
491
492 if(!pen)
493 return InvalidParameter;
494
495 return GdipScaleMatrix(&pen->transform, sx, sy, order);
496}
497
499{
500 TRACE("(%p,%0.2f,%u)\n", pen, angle, order);
501
502 if(!pen)
503 return InvalidParameter;
504
505 return GdipRotateMatrix(&pen->transform, angle, order);
506}
507
510{
511 TRACE("(%p,%s,%u)\n", pen, debugstr_matrix(matrix), order);
512
513 if(!pen)
514 return InvalidParameter;
515
517}
518
520{
521 TRACE("(%p, %p)\n", pen, brush);
522
523 if(!pen || !brush)
524 return InvalidParameter;
525
527 return GdipCloneBrush(brush, &pen->brush);
528}
529
531{
532 TRACE("(%p, %lx)\n", pen, argb);
533
534 if(!pen)
535 return InvalidParameter;
536
537 if(pen->brush->bt != BrushTypeSolidColor)
538 return NotImplemented;
539
540 return GdipSetSolidFillColor(((GpSolidFill*)pen->brush), argb);
541}
542
544{
545 TRACE("(%p, %p, %i)\n", pen, compoundarray, count);
546
547 if (!pen || !compoundarray || count > pen->compound_array_size)
548 return InvalidParameter;
549 if (pen->compound_array && count > 0)
550 memcpy(compoundarray, pen->compound_array, count * sizeof(REAL));
551 return Ok;
552}
553
555{
556 TRACE("(%p, %p)\n", pen, count);
557
558 if (!pen || !count)
559 return InvalidParameter;
561 return Ok;
562}
563
565 INT count)
566{
567 INT i;
568 REAL *tmp;
569 TRACE("(%p, %p, %i)\n", pen, compoundarray, count);
570
571 if(!pen || !compoundarray || count < 2 || count%2 == 1 || *compoundarray < 0.0 || *compoundarray > 1.0)
572 return InvalidParameter;
573
574 for(i = 1; i<count; i++)
575 {
576 if((compoundarray[i] < compoundarray[i - 1]) || (compoundarray[i] > 1.0))
577 return InvalidParameter;
578 }
579
580 tmp = malloc(count * sizeof(REAL));
581 if(!tmp)
582 return OutOfMemory;
583 free(pen->compound_array);
584 pen->compound_array = tmp;
585 memcpy(pen->compound_array, compoundarray, count * sizeof(REAL));
587 return Ok;
588}
589
591{
594
595 TRACE("(%p, %p)\n", pen, customCap);
596
597 /* native crashes on pen == NULL, customCap != NULL */
598 if(!customCap) return InvalidParameter;
599
600 if((ret = GdipCloneCustomLineCap(customCap, &cap)) == Ok){
602 pen->endcap = LineCapCustom;
603 pen->customend = cap;
604 }
605
606 return ret;
607}
608
610{
613
614 TRACE("(%p, %p)\n", pen, customCap);
615
616 /* native crashes on pen == NULL, customCap != NULL */
617 if(!customCap) return InvalidParameter;
618
619 if((ret = GdipCloneCustomLineCap(customCap, &cap)) == Ok){
621 pen->startcap = LineCapCustom;
622 pen->customstart = cap;
623 }
624
625 return ret;
626}
627
629 INT count)
630{
631 INT i;
632
633 TRACE("(%p, %p, %d)\n", pen, dash, count);
634
635 if(!pen || !dash)
636 return InvalidParameter;
637
638 if(count <= 0)
639 return OutOfMemory;
640
641 for(i = 0; i < count; i++){
642 if(dash[i] <= 0.0)
643 return InvalidParameter;
644 }
645
646 free(pen->dashes);
647 pen->dashes = NULL;
648
649 if(count > 0)
650 pen->dashes = malloc(count * sizeof(REAL));
651 if(!pen->dashes){
652 pen->numdashes = 0;
653 return OutOfMemory;
654 }
655
657 memcpy(pen->dashes, dash, count * sizeof(REAL));
658 pen->numdashes = count;
659
660 return Ok;
661}
662
664{
665 TRACE("(%p, %d)\n", pen, dashCap);
666
667 if(!pen)
668 return InvalidParameter;
669
670 pen->dashcap = dashCap;
671
672 return Ok;
673}
674
675/* FIXME: dash offset not used */
677{
678 TRACE("(%p, %.2f)\n", pen, offset);
679
680 if(!pen)
681 return InvalidParameter;
682
683 pen->offset = offset;
684
685 return Ok;
686}
687
689{
690 TRACE("(%p, %d)\n", pen, dash);
691
692 if(!pen)
693 return InvalidParameter;
694
695 if(dash != DashStyleCustom){
696 free(pen->dashes);
697 pen->dashes = NULL;
698 pen->numdashes = 0;
699 }
700
701 pen->dash = dash;
704 pen->style |= gdip_to_gdi_dash(dash);
705
706 return Ok;
707}
708
710{
711 TRACE("(%p, %d)\n", pen, cap);
712
713 if(!pen) return InvalidParameter;
714
715 /* The old custom cap gets deleted even if the new style is LineCapCustom. */
717 pen->customend = NULL;
718 pen->endcap = cap;
719
720 return Ok;
721}
722
723/* FIXME: startcap, dashcap not used. */
725 GpLineCap end, GpDashCap dash)
726{
727 TRACE("%p, %d, %d, %d)\n", pen, start, end, dash);
728
729 if(!pen)
730 return InvalidParameter;
731
734 pen->customend = NULL;
735 pen->customstart = NULL;
736
737 pen->startcap = start;
738 pen->endcap = end;
739 pen->dashcap = dash;
740
741 return Ok;
742}
743
744/* FIXME: Miter line joins behave a bit differently than they do in windows.
745 * Both kinds of miter joins clip if the angle is less than 11 degrees. */
747{
748 TRACE("(%p, %d)\n", pen, join);
749
750 if(!pen) return InvalidParameter;
751
752 pen->join = join;
754 pen->style |= gdip_to_gdi_join(join);
755
756 return Ok;
757}
758
760{
761 TRACE("(%p, %.2f)\n", pen, limit);
762
763 if(!pen)
764 return InvalidParameter;
765
766 pen->miterlimit = limit;
767
768 return Ok;
769}
770
772{
773 TRACE("(%p, %d)\n", pen, cap);
774
775 if(!pen) return InvalidParameter;
776
778 pen->customstart = NULL;
779 pen->startcap = cap;
780
781 return Ok;
782}
783
785{
786 TRACE("(%p, %.2f)\n", pen, width);
787
788 if(!pen) return InvalidParameter;
789
790 pen->width = width;
791
792 return Ok;
793}
794
796{
797 TRACE("(%p, %d)\n", pen, mode);
798
799 if(!pen) return InvalidParameter;
800
801 pen->align = mode;
802
803 return Ok;
804}
#define stat
Definition: acwin.h:100
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
float REAL
Definition: types.h:41
GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush)
Definition: brush.c:1020
GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill *sf, ARGB argb)
Definition: brush.c:1951
GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone)
Definition: brush.c:70
GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB color, GpSolidFill **sf)
Definition: brush.c:783
GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill *sf, ARGB *argb)
Definition: brush.c:1299
GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap *customCap)
GpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap *from, GpCustomLineCap **to)
Definition: customlinecap.c:34
GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix *matrix, REAL scaleX, REAL scaleY, GpMatrixOrder order)
Definition: matrix.c:288
GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix *matrix, GDIPCONST GpMatrix *matrix2, GpMatrixOrder order)
Definition: matrix.c:239
GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix *matrix, REAL offsetX, REAL offsetY, GpMatrixOrder order)
Definition: matrix.c:420
GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix *matrix, REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy)
Definition: matrix.c:318
GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix *matrix, REAL angle, GpMatrixOrder order)
Definition: matrix.c:257
GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix *matrix, BOOL *result)
Definition: matrix.c:224
GpStatus WINGDIPAPI GdipCreatePen1(ARGB color, REAL width, GpUnit unit, GpPen **pen)
Definition: pen.c:146
static DWORD gdip_to_gdi_dash(GpDashStyle dash)
Definition: pen.c:33
GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen *pen, GpLineJoin join)
Definition: pen.c:746
GpStatus WINGDIPAPI GdipGetPenColor(GpPen *pen, ARGB *argb)
Definition: pen.c:230
GpStatus WINGDIPAPI GdipGetPenMode(GpPen *pen, GpPenAlignment *mode)
Definition: pen.c:373
GpStatus WINGDIPAPI GdipScalePenTransform(GpPen *pen, REAL sx, REAL sy, GpMatrixOrder order)
Definition: pen.c:488
GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen *pen, GpBrush *brush)
Definition: pen.c:519
GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen *pen, GpLineJoin *lineJoin)
Definition: pen.c:361
GpStatus WINGDIPAPI GdipDeletePen(GpPen *pen)
Definition: pen.c:204
GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, GpPen **pen)
Definition: pen.c:160
GpStatus WINGDIPAPI GdipGetPenWidth(GpPen *pen, REAL *width)
Definition: pen.c:421
static GpPenType bt_to_pt(GpBrushType bt)
Definition: pen.c:70
GpStatus WINGDIPAPI GdipMultiplyPenTransform(GpPen *pen, GDIPCONST GpMatrix *matrix, GpMatrixOrder order)
Definition: pen.c:508
GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen *pen, REAL limit)
Definition: pen.c:759
GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash, INT count)
Definition: pen.c:628
GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen *pen, INT *count)
Definition: pen.c:301
GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen *pen, GpLineCap start, GpLineCap end, GpDashCap dash)
Definition: pen.c:724
GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen *pen, GpCustomLineCap **customCap)
Definition: pen.c:243
GpStatus WINGDIPAPI GdipResetPenTransform(GpPen *pen)
Definition: pen.c:433
GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen *pen, GDIPCONST REAL *compoundarray, INT count)
Definition: pen.c:564
GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen *pen, GpDashStyle dash)
Definition: pen.c:688
GpStatus WINGDIPAPI GdipTranslatePenTransform(GpPen *pen, REAL dx, REAL dy, GpMatrixOrder order)
Definition: pen.c:478
GpStatus WINGDIPAPI GdipSetPenWidth(GpPen *pen, REAL width)
Definition: pen.c:784
GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen *pen, REAL *miterLimit)
Definition: pen.c:385
GpStatus WINGDIPAPI GdipGetPenCompoundArray(GpPen *pen, REAL *compoundarray, INT count)
Definition: pen.c:543
GpStatus WINGDIPAPI GdipGetPenUnit(GpPen *pen, GpUnit *unit)
Definition: pen.c:409
GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen *pen, GpDashCap *dashCap)
Definition: pen.c:289
GpStatus WINGDIPAPI GdipSetPenMode(GpPen *pen, GpPenAlignment mode)
Definition: pen.c:795
GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen *pen, REAL *dash, INT count)
Definition: pen.c:273
GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen *pen, GpBrush **brush)
Definition: pen.c:220
GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen *pen, GpLineCap *startCap)
Definition: pen.c:397
GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen *pen, GpCustomLineCap **customCap)
Definition: pen.c:258
GpStatus WINGDIPAPI GdipSetPenColor(GpPen *pen, ARGB argb)
Definition: pen.c:530
GpStatus WINGDIPAPI GdipClonePen(GpPen *pen, GpPen **clonepen)
Definition: pen.c:88
static DWORD gdip_to_gdi_join(GpLineJoin join)
Definition: pen.c:54
GpStatus WINGDIPAPI GdipSetPenTransform(GpPen *pen, GpMatrix *matrix)
Definition: pen.c:445
GpStatus WINGDIPAPI GdipRotatePenTransform(GpPen *pen, REAL angle, GpMatrixOrder order)
Definition: pen.c:498
GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen *pen, GpCustomLineCap *customCap)
Definition: pen.c:590
GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen *pen, INT *count)
Definition: pen.c:554
GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen *pen, GpDashCap dashCap)
Definition: pen.c:663
GpStatus WINGDIPAPI GdipGetPenTransform(GpPen *pen, GpMatrix *matrix)
Definition: pen.c:466
GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen *pen, GpLineCap cap)
Definition: pen.c:709
GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen *pen, REAL *offset)
Definition: pen.c:313
GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen *pen, GpLineCap cap)
Definition: pen.c:771
GpStatus WINGDIPAPI GdipGetPenFillType(GpPen *pen, GpPenType *type)
Definition: pen.c:349
GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen *pen, GpLineCap *endCap)
Definition: pen.c:337
GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen *pen, GpDashStyle *dash)
Definition: pen.c:325
GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen *pen, GpCustomLineCap *customCap)
Definition: pen.c:609
GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen *pen, REAL offset)
Definition: pen.c:676
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const char * debugstr_matrix(const GpMatrix *matrix)
Definition: gdiplus.c:498
#define GP_DEFAULT_PENSTYLE
PenType
Definition: gdiplusenums.h:94
@ PenTypeSolidColor
Definition: gdiplusenums.h:95
@ PenTypePathGradient
Definition: gdiplusenums.h:98
@ PenTypeLinearGradient
Definition: gdiplusenums.h:99
@ PenTypeUnknown
Definition: gdiplusenums.h:100
@ PenTypeTextureFill
Definition: gdiplusenums.h:97
@ PenTypeHatchFill
Definition: gdiplusenums.h:96
DashCap
Definition: gdiplusenums.h:169
LineJoin
Definition: gdiplusenums.h:104
@ LineJoinMiter
Definition: gdiplusenums.h:105
@ LineJoinMiterClipped
Definition: gdiplusenums.h:108
@ LineJoinBevel
Definition: gdiplusenums.h:106
@ LineJoinRound
Definition: gdiplusenums.h:107
LineCap
Definition: gdiplusenums.h:60
@ LineCapCustom
Definition: gdiplusenums.h:72
@ LineCapFlat
Definition: gdiplusenums.h:61
DashStyle
Definition: gdiplusenums.h:176
@ DashStyleSolid
Definition: gdiplusenums.h:177
@ DashStyleDot
Definition: gdiplusenums.h:179
@ DashStyleDashDot
Definition: gdiplusenums.h:180
@ DashStyleCustom
Definition: gdiplusenums.h:182
@ DashStyleDash
Definition: gdiplusenums.h:178
@ DashStyleDashDotDot
Definition: gdiplusenums.h:181
MatrixOrder
Definition: gdiplusenums.h:186
PenAlignment
Definition: gdiplusenums.h:153
Unit
Definition: gdiplusenums.h:26
@ UnitWorld
Definition: gdiplusenums.h:27
@ UnitPixel
Definition: gdiplusenums.h:29
BrushType
Definition: gdiplusenums.h:37
@ BrushTypeHatchFill
Definition: gdiplusenums.h:39
@ BrushTypeLinearGradient
Definition: gdiplusenums.h:42
@ BrushTypeTextureFill
Definition: gdiplusenums.h:40
@ BrushTypeSolidColor
Definition: gdiplusenums.h:38
@ BrushTypePathGradient
Definition: gdiplusenums.h:41
#define GDIPCONST
Definition: gdiplusflat.h:24
#define WINGDIPAPI
Definition: gdiplusflat.h:22
DWORD ARGB
Status
Definition: gdiplustypes.h:24
@ Ok
Definition: gdiplustypes.h:25
@ InvalidParameter
Definition: gdiplustypes.h:27
@ OutOfMemory
Definition: gdiplustypes.h:28
@ NotImplemented
Definition: gdiplustypes.h:31
@ GenericError
Definition: gdiplustypes.h:26
GLuint start
Definition: gl.h:1545
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
GLint GLint GLsizei width
Definition: gl.h:1546
GLintptr offset
Definition: glext.h:5920
GLuint color
Definition: glext.h:6243
GLint limit
Definition: glext.h:10326
GLuint GLenum matrix
Definition: glext.h:9407
GLenum mode
Definition: glext.h:6217
GLfloat angle
Definition: glext.h:10853
GLuint64EXT * result
Definition: glext.h:11304
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
GLenum cap
Definition: glext.h:9639
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
LOCAL int join(int *aux, int a, int b)
Definition: match.c:560
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define cap
Definition: glfuncs.h:226
png_const_structrp png_const_inforp int * unit
Definition: png.h:2392
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
GpBrushType bt
GpDashStyle dash
GpLineCap startcap
INT numdashes
REAL * dashes
GpCustomLineCap * customend
REAL * compound_array
GpMatrix transform
REAL offset
REAL miterlimit
GpLineCap endcap
UINT style
GpLineJoin join
GpDashCap dashcap
GpBrush * brush
GpPenAlignment align
INT compound_array_size
GpUnit unit
REAL width
GpCustomLineCap * customstart
Definition: stat.h:66
Definition: ps.c:97
int32_t INT
Definition: typedefs.h:58
#define PS_NULL
Definition: wingdi.h:591
#define PS_DASH
Definition: wingdi.h:587
#define PS_ALTERNATE
Definition: wingdi.h:585
#define PS_JOIN_BEVEL
Definition: wingdi.h:597
#define PS_DOT
Definition: wingdi.h:588
#define PS_JOIN_ROUND
Definition: wingdi.h:599
#define PS_USERSTYLE
Definition: wingdi.h:592
#define PS_JOIN_MITER
Definition: wingdi.h:598
#define PS_INSIDEFRAME
Definition: wingdi.h:593
#define PS_SOLID
Definition: wingdi.h:586
#define PS_DASHDOT
Definition: wingdi.h:589
#define PS_DASHDOTDOT
Definition: wingdi.h:590