ReactOS 0.4.15-dev-7842-g558ab78
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 = heap_alloc_zero(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
107 stat = GdipCloneBrush(pen->brush, &(*clonepen)->brush);
108
109 if (stat == Ok && pen->customstart)
110 stat = GdipCloneCustomLineCap(pen->customstart, &(*clonepen)->customstart);
111
112 if (stat == Ok && pen->customend)
113 stat = GdipCloneCustomLineCap(pen->customend, &(*clonepen)->customend);
114
115 if (stat == Ok && pen->dashes)
116 {
117 (*clonepen)->dashes = heap_alloc_zero(pen->numdashes * sizeof(REAL));
118 if ((*clonepen)->dashes)
119 memcpy((*clonepen)->dashes, pen->dashes, pen->numdashes * sizeof(REAL));
120 else
122 }
123
124 if (stat != Ok)
125 {
126 GdipDeletePen(*clonepen);
127 *clonepen = NULL;
128 return stat;
129 }
130
131 TRACE("<-- %p\n", *clonepen);
132
133 return Ok;
134}
135
137 GpPen **pen)
138{
139 GpBrush *brush;
141
142 TRACE("(%x, %.2f, %d, %p)\n", color, width, unit, pen);
143
145 status = GdipCreatePen2(brush, width, unit, pen);
146 GdipDeleteBrush(brush);
147 return status;
148}
149
151 GpPen **pen)
152{
153 GpPen *gp_pen;
154 GpBrush *clone_brush;
155
156 TRACE("(%p, %.2f, %d, %p)\n", brush, width, unit, pen);
157
158 if(!pen || !brush)
159 return InvalidParameter;
160
161 gp_pen = heap_alloc_zero(sizeof(GpPen));
162 if(!gp_pen) return OutOfMemory;
163
164 gp_pen->style = GP_DEFAULT_PENSTYLE;
165 gp_pen->width = width;
166 gp_pen->unit = unit;
167 gp_pen->endcap = LineCapFlat;
168 gp_pen->join = LineJoinMiter;
169 gp_pen->miterlimit = 10.0;
170 gp_pen->dash = DashStyleSolid;
171 gp_pen->offset = 0.0;
172 gp_pen->customstart = NULL;
173 gp_pen->customend = NULL;
174 GdipSetMatrixElements(&gp_pen->transform, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
175
176 if(!((gp_pen->unit == UnitWorld) || (gp_pen->unit == UnitPixel))) {
177 FIXME("UnitWorld, UnitPixel only supported units\n");
178 heap_free(gp_pen);
179 return NotImplemented;
180 }
181
182 GdipCloneBrush(brush, &clone_brush);
183 gp_pen->brush = clone_brush;
184
185 *pen = gp_pen;
186
187 TRACE("<-- %p\n", *pen);
188
189 return Ok;
190}
191
193{
194 TRACE("(%p)\n", pen);
195
196 if(!pen) return InvalidParameter;
197
201 heap_free(pen->dashes);
202 heap_free(pen);
203
204 return Ok;
205}
206
208{
209 TRACE("(%p, %p)\n", pen, brush);
210
211 if(!pen || !brush)
212 return InvalidParameter;
213
214 return GdipCloneBrush(pen->brush, brush);
215}
216
218{
219 TRACE("(%p, %p)\n", pen, argb);
220
221 if(!pen || !argb)
222 return InvalidParameter;
223
224 if(pen->brush->bt != BrushTypeSolidColor)
225 return NotImplemented;
226
227 return GdipGetSolidFillColor(((GpSolidFill*)pen->brush), argb);
228}
229
231{
232 TRACE("(%p, %p)\n", pen, customCap);
233
234 if(!pen || !customCap)
235 return InvalidParameter;
236
237 if(!pen->customend){
238 *customCap = NULL;
239 return Ok;
240 }
241
242 return GdipCloneCustomLineCap(pen->customend, customCap);
243}
244
246{
247 TRACE("(%p, %p)\n", pen, customCap);
248
249 if(!pen || !customCap)
250 return InvalidParameter;
251
252 if(!pen->customstart){
253 *customCap = NULL;
254 return Ok;
255 }
256
257 return GdipCloneCustomLineCap(pen->customstart, customCap);
258}
259
261{
262 TRACE("(%p, %p, %d)\n", pen, dash, count);
263
264 if(!pen || !dash || count > pen->numdashes)
265 return InvalidParameter;
266
267 /* note: if you pass a negative value for count, it crashes native gdiplus. */
268 if(count < 0)
269 return GenericError;
270
271 memcpy(dash, pen->dashes, count * sizeof(REAL));
272
273 return Ok;
274}
275
277{
278 TRACE("(%p, %p)\n", pen, dashCap);
279
280 if(!pen || !dashCap)
281 return InvalidParameter;
282
283 *dashCap = pen->dashcap;
284
285 return Ok;
286}
287
289{
290 TRACE("(%p, %p)\n", pen, count);
291
292 if(!pen || !count)
293 return InvalidParameter;
294
295 *count = pen->numdashes;
296
297 return Ok;
298}
299
301{
302 TRACE("(%p, %p)\n", pen, offset);
303
304 if(!pen || !offset)
305 return InvalidParameter;
306
307 *offset = pen->offset;
308
309 return Ok;
310}
311
313{
314 TRACE("(%p, %p)\n", pen, dash);
315
316 if(!pen || !dash)
317 return InvalidParameter;
318
319 *dash = pen->dash;
320
321 return Ok;
322}
323
325{
326 TRACE("(%p, %p)\n", pen, endCap);
327
328 if(!pen || !endCap)
329 return InvalidParameter;
330
331 *endCap = pen->endcap;
332
333 return Ok;
334}
335
337{
338 TRACE("(%p, %p)\n", pen, type);
339
340 if(!pen || !type)
341 return InvalidParameter;
342
343 *type = bt_to_pt(pen->brush->bt);
344
345 return Ok;
346}
347
349{
350 TRACE("(%p, %p)\n", pen, lineJoin);
351
352 if(!pen || !lineJoin)
353 return InvalidParameter;
354
355 *lineJoin = pen->join;
356
357 return Ok;
358}
359
361{
362 TRACE("(%p, %p)\n", pen, mode);
363
364 if(!pen || !mode)
365 return InvalidParameter;
366
367 *mode = pen->align;
368
369 return Ok;
370}
371
373{
374 TRACE("(%p, %p)\n", pen, miterLimit);
375
376 if(!pen || !miterLimit)
377 return InvalidParameter;
378
379 *miterLimit = pen->miterlimit;
380
381 return Ok;
382}
383
385{
386 TRACE("(%p, %p)\n", pen, startCap);
387
388 if(!pen || !startCap)
389 return InvalidParameter;
390
391 *startCap = pen->startcap;
392
393 return Ok;
394}
395
397{
398 TRACE("(%p, %p)\n", pen, unit);
399
400 if(!pen || !unit)
401 return InvalidParameter;
402
403 *unit = pen->unit;
404
405 return Ok;
406}
407
409{
410 TRACE("(%p, %p)\n", pen, width);
411
412 if(!pen || !width)
413 return InvalidParameter;
414
415 *width = pen->width;
416
417 return Ok;
418}
419
421{
422 TRACE("(%p)\n", pen);
423
424 if(!pen)
425 return InvalidParameter;
426
427 GdipSetMatrixElements(&pen->transform, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
428
429 return Ok;
430}
431
433{
434 static int calls;
435
436 TRACE("(%p,%p)\n", pen, matrix);
437
438 if(!pen || !matrix)
439 return InvalidParameter;
440
441 if(!(calls++))
442 FIXME("(%p,%p) Semi-stub\n", pen, matrix);
443
444 pen->transform = *matrix;
445
446 return Ok;
447}
448
450{
451 TRACE("(%p,%p)\n", pen, matrix);
452
453 if(!pen || !matrix)
454 return InvalidParameter;
455
456 *matrix = pen->transform;
457
458 return Ok;
459}
460
462{
463 TRACE("(%p,%0.2f,%0.2f,%u)\n", pen, dx, dy, order);
464
465 if(!pen)
466 return InvalidParameter;
467
468 return GdipTranslateMatrix(&pen->transform, dx, dy, order);
469}
470
472{
473 TRACE("(%p,%0.2f,%0.2f,%u)\n", pen, sx, sy, order);
474
475 if(!pen)
476 return InvalidParameter;
477
478 return GdipScaleMatrix(&pen->transform, sx, sy, order);
479}
480
482{
483 TRACE("(%p,%0.2f,%u)\n", pen, angle, order);
484
485 if(!pen)
486 return InvalidParameter;
487
488 return GdipRotateMatrix(&pen->transform, angle, order);
489}
490
493{
494 TRACE("(%p,%p,%u)\n", pen, matrix, order);
495
496 if(!pen)
497 return InvalidParameter;
498
500}
501
503{
504 TRACE("(%p, %p)\n", pen, brush);
505
506 if(!pen || !brush)
507 return InvalidParameter;
508
510 return GdipCloneBrush(brush, &pen->brush);
511}
512
514{
515 TRACE("(%p, %x)\n", pen, argb);
516
517 if(!pen)
518 return InvalidParameter;
519
520 if(pen->brush->bt != BrushTypeSolidColor)
521 return NotImplemented;
522
523 return GdipSetSolidFillColor(((GpSolidFill*)pen->brush), argb);
524}
525
527{
528 FIXME("(%p, %p): stub\n", pen, count);
529
530 if (!pen || !count)
531 return InvalidParameter;
532
533 return NotImplemented;
534}
535
537 INT count)
538{
539 FIXME("(%p, %p, %i): stub\n", pen, dash, count);
540
541 if (!pen || !dash || count < 2 || count%2 == 1)
542 return InvalidParameter;
543
544 return NotImplemented;
545}
546
548{
551
552 TRACE("(%p, %p)\n", pen, customCap);
553
554 /* native crashes on pen == NULL, customCap != NULL */
555 if(!customCap) return InvalidParameter;
556
557 if((ret = GdipCloneCustomLineCap(customCap, &cap)) == Ok){
559 pen->endcap = LineCapCustom;
560 pen->customend = cap;
561 }
562
563 return ret;
564}
565
567{
570
571 TRACE("(%p, %p)\n", pen, customCap);
572
573 /* native crashes on pen == NULL, customCap != NULL */
574 if(!customCap) return InvalidParameter;
575
576 if((ret = GdipCloneCustomLineCap(customCap, &cap)) == Ok){
578 pen->startcap = LineCapCustom;
579 pen->customstart = cap;
580 }
581
582 return ret;
583}
584
586 INT count)
587{
588 INT i;
589 REAL sum = 0;
590
591 TRACE("(%p, %p, %d)\n", pen, dash, count);
592
593 if(!pen || !dash)
594 return InvalidParameter;
595
596 if(count <= 0)
597 return OutOfMemory;
598
599 for(i = 0; i < count; i++){
600 sum += dash[i];
601 if(dash[i] < 0.0)
602 return InvalidParameter;
603 }
604
605 if(sum == 0.0 && count)
606 return InvalidParameter;
607
608 heap_free(pen->dashes);
609 pen->dashes = NULL;
610
611 if(count > 0)
612 pen->dashes = heap_alloc_zero(count * sizeof(REAL));
613 if(!pen->dashes){
614 pen->numdashes = 0;
615 return OutOfMemory;
616 }
617
619 memcpy(pen->dashes, dash, count * sizeof(REAL));
620 pen->numdashes = count;
621
622 return Ok;
623}
624
626{
627 TRACE("(%p, %d)\n", pen, dashCap);
628
629 if(!pen)
630 return InvalidParameter;
631
632 pen->dashcap = dashCap;
633
634 return Ok;
635}
636
637/* FIXME: dash offset not used */
639{
640 TRACE("(%p, %.2f)\n", pen, offset);
641
642 if(!pen)
643 return InvalidParameter;
644
645 pen->offset = offset;
646
647 return Ok;
648}
649
651{
652 TRACE("(%p, %d)\n", pen, dash);
653
654 if(!pen)
655 return InvalidParameter;
656
657 if(dash != DashStyleCustom){
658 heap_free(pen->dashes);
659 pen->dashes = NULL;
660 pen->numdashes = 0;
661 }
662
663 pen->dash = dash;
666 pen->style |= gdip_to_gdi_dash(dash);
667
668 return Ok;
669}
670
672{
673 TRACE("(%p, %d)\n", pen, cap);
674
675 if(!pen) return InvalidParameter;
676
677 /* The old custom cap gets deleted even if the new style is LineCapCustom. */
679 pen->customend = NULL;
680 pen->endcap = cap;
681
682 return Ok;
683}
684
685/* FIXME: startcap, dashcap not used. */
687 GpLineCap end, GpDashCap dash)
688{
689 TRACE("%p, %d, %d, %d)\n", pen, start, end, dash);
690
691 if(!pen)
692 return InvalidParameter;
693
696 pen->customend = NULL;
697 pen->customstart = NULL;
698
699 pen->startcap = start;
700 pen->endcap = end;
701 pen->dashcap = dash;
702
703 return Ok;
704}
705
706/* FIXME: Miter line joins behave a bit differently than they do in windows.
707 * Both kinds of miter joins clip if the angle is less than 11 degrees. */
709{
710 TRACE("(%p, %d)\n", pen, join);
711
712 if(!pen) return InvalidParameter;
713
714 pen->join = join;
716 pen->style |= gdip_to_gdi_join(join);
717
718 return Ok;
719}
720
722{
723 TRACE("(%p, %.2f)\n", pen, limit);
724
725 if(!pen)
726 return InvalidParameter;
727
728 pen->miterlimit = limit;
729
730 return Ok;
731}
732
734{
735 TRACE("(%p, %d)\n", pen, cap);
736
737 if(!pen) return InvalidParameter;
738
740 pen->customstart = NULL;
741 pen->startcap = cap;
742
743 return Ok;
744}
745
747{
748 TRACE("(%p, %.2f)\n", pen, width);
749
750 if(!pen) return InvalidParameter;
751
752 pen->width = width;
753
754 return Ok;
755}
756
758{
759 TRACE("(%p, %d)\n", pen, mode);
760
761 if(!pen) return InvalidParameter;
762
763 pen->align = mode;
764
765 return Ok;
766}
#define stat
Definition: acwin.h:99
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: debug.h:111
#define ERR(fmt,...)
Definition: debug.h:110
#define NULL
Definition: types.h:112
float REAL
Definition: types.h:41
GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush)
Definition: brush.c:994
GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill *sf, ARGB argb)
Definition: brush.c:1925
GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone)
Definition: brush.c:70
GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB color, GpSolidFill **sf)
Definition: brush.c:757
GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill *sf, ARGB *argb)
Definition: brush.c:1273
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:289
GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix *matrix, GDIPCONST GpMatrix *matrix2, GpMatrixOrder order)
Definition: matrix.c:240
GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix *matrix, REAL offsetX, REAL offsetY, GpMatrixOrder order)
Definition: matrix.c:418
GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix *matrix, REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy)
Definition: matrix.c:316
GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix *matrix, REAL angle, GpMatrixOrder order)
Definition: matrix.c:258
GpStatus WINGDIPAPI GdipCreatePen1(ARGB color, REAL width, GpUnit unit, GpPen **pen)
Definition: pen.c:136
static DWORD gdip_to_gdi_dash(GpDashStyle dash)
Definition: pen.c:33
GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen *pen, GpLineJoin join)
Definition: pen.c:708
GpStatus WINGDIPAPI GdipGetPenColor(GpPen *pen, ARGB *argb)
Definition: pen.c:217
GpStatus WINGDIPAPI GdipGetPenMode(GpPen *pen, GpPenAlignment *mode)
Definition: pen.c:360
GpStatus WINGDIPAPI GdipScalePenTransform(GpPen *pen, REAL sx, REAL sy, GpMatrixOrder order)
Definition: pen.c:471
GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen *pen, GpBrush *brush)
Definition: pen.c:502
GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen *pen, GpLineJoin *lineJoin)
Definition: pen.c:348
GpStatus WINGDIPAPI GdipDeletePen(GpPen *pen)
Definition: pen.c:192
GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, GpPen **pen)
Definition: pen.c:150
GpStatus WINGDIPAPI GdipGetPenWidth(GpPen *pen, REAL *width)
Definition: pen.c:408
static GpPenType bt_to_pt(GpBrushType bt)
Definition: pen.c:70
GpStatus WINGDIPAPI GdipMultiplyPenTransform(GpPen *pen, GDIPCONST GpMatrix *matrix, GpMatrixOrder order)
Definition: pen.c:491
GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen *pen, REAL limit)
Definition: pen.c:721
GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash, INT count)
Definition: pen.c:585
GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen *pen, INT *count)
Definition: pen.c:288
GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen *pen, GpLineCap start, GpLineCap end, GpDashCap dash)
Definition: pen.c:686
GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen *pen, GpCustomLineCap **customCap)
Definition: pen.c:230
GpStatus WINGDIPAPI GdipResetPenTransform(GpPen *pen)
Definition: pen.c:420
GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen *pen, GpDashStyle dash)
Definition: pen.c:650
GpStatus WINGDIPAPI GdipTranslatePenTransform(GpPen *pen, REAL dx, REAL dy, GpMatrixOrder order)
Definition: pen.c:461
GpStatus WINGDIPAPI GdipSetPenWidth(GpPen *pen, REAL width)
Definition: pen.c:746
GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen *pen, REAL *miterLimit)
Definition: pen.c:372
GpStatus WINGDIPAPI GdipGetPenUnit(GpPen *pen, GpUnit *unit)
Definition: pen.c:396
GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen *pen, GpDashCap *dashCap)
Definition: pen.c:276
GpStatus WINGDIPAPI GdipSetPenMode(GpPen *pen, GpPenAlignment mode)
Definition: pen.c:757
GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen *pen, REAL *dash, INT count)
Definition: pen.c:260
GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen *pen, GpBrush **brush)
Definition: pen.c:207
GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen *pen, GpLineCap *startCap)
Definition: pen.c:384
GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen *pen, GpCustomLineCap **customCap)
Definition: pen.c:245
GpStatus WINGDIPAPI GdipSetPenColor(GpPen *pen, ARGB argb)
Definition: pen.c:513
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:432
GpStatus WINGDIPAPI GdipRotatePenTransform(GpPen *pen, REAL angle, GpMatrixOrder order)
Definition: pen.c:481
GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen *pen, GpCustomLineCap *customCap)
Definition: pen.c:547
GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen *pen, INT *count)
Definition: pen.c:526
GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen *pen, GpDashCap dashCap)
Definition: pen.c:625
GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen *pen, GDIPCONST REAL *dash, INT count)
Definition: pen.c:536
GpStatus WINGDIPAPI GdipGetPenTransform(GpPen *pen, GpMatrix *matrix)
Definition: pen.c:449
GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen *pen, GpLineCap cap)
Definition: pen.c:671
GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen *pen, REAL *offset)
Definition: pen.c:300
GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen *pen, GpLineCap cap)
Definition: pen.c:733
GpStatus WINGDIPAPI GdipGetPenFillType(GpPen *pen, GpPenType *type)
Definition: pen.c:336
GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen *pen, GpLineCap *endCap)
Definition: pen.c:324
GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen *pen, GpDashStyle *dash)
Definition: pen.c:312
GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen *pen, GpCustomLineCap *customCap)
Definition: pen.c:566
GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen *pen, REAL offset)
Definition: pen.c:638
unsigned long DWORD
Definition: ntddk_ex.h:95
#define GP_DEFAULT_PENSTYLE
PenType
Definition: gdiplusenums.h:95
@ PenTypeSolidColor
Definition: gdiplusenums.h:96
@ PenTypePathGradient
Definition: gdiplusenums.h:99
@ PenTypeLinearGradient
Definition: gdiplusenums.h:100
@ PenTypeUnknown
Definition: gdiplusenums.h:101
@ PenTypeTextureFill
Definition: gdiplusenums.h:98
@ PenTypeHatchFill
Definition: gdiplusenums.h:97
DashCap
Definition: gdiplusenums.h:170
LineJoin
Definition: gdiplusenums.h:105
@ LineJoinMiter
Definition: gdiplusenums.h:106
@ LineJoinMiterClipped
Definition: gdiplusenums.h:109
@ LineJoinBevel
Definition: gdiplusenums.h:107
@ LineJoinRound
Definition: gdiplusenums.h:108
LineCap
Definition: gdiplusenums.h:60
@ LineCapCustom
Definition: gdiplusenums.h:72
@ LineCapFlat
Definition: gdiplusenums.h:61
DashStyle
Definition: gdiplusenums.h:177
@ DashStyleSolid
Definition: gdiplusenums.h:178
@ DashStyleDot
Definition: gdiplusenums.h:180
@ DashStyleDashDot
Definition: gdiplusenums.h:181
@ DashStyleCustom
Definition: gdiplusenums.h:183
@ DashStyleDash
Definition: gdiplusenums.h:179
@ DashStyleDashDotDot
Definition: gdiplusenums.h:182
MatrixOrder
Definition: gdiplusenums.h:187
PenAlignment
Definition: gdiplusenums.h:154
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:25
@ Ok
Definition: gdiplustypes.h:26
@ InvalidParameter
Definition: gdiplustypes.h:28
@ OutOfMemory
Definition: gdiplustypes.h:29
@ NotImplemented
Definition: gdiplustypes.h:32
@ GenericError
Definition: gdiplustypes.h:27
GLuint start
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLint GLsizei width
Definition: gl.h:1546
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
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
GLenum cap
Definition: glext.h:9639
GLintptr offset
Definition: glext.h:5920
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:2159
static int sum(int x_, int y_)
Definition: ptr2_test.cpp:35
#define TRACE(s)
Definition: solgame.cpp:4
GpBrushType bt
GpDashStyle dash
GpLineCap startcap
INT numdashes
REAL * dashes
GpCustomLineCap * customend
GpMatrix transform
REAL offset
REAL miterlimit
GpLineCap endcap
UINT style
GpLineJoin join
GpDashCap dashcap
GpBrush * brush
GpPenAlignment align
GpUnit unit
REAL width
GpCustomLineCap * customstart
Definition: stat.h:55
Definition: ps.c:97
int32_t INT
Definition: typedefs.h:58
int ret
#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