FreeRDP
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
gdi/brush.c
1
22/* GDI Brush Functions: http://msdn.microsoft.com/en-us/library/dd183395/ */
23
24#include <freerdp/config.h>
25
26#include <stdio.h>
27#include <stdlib.h>
28
29#include <freerdp/freerdp.h>
30#include <freerdp/gdi/gdi.h>
31#include <freerdp/gdi/region.h>
32#include <freerdp/log.h>
33
34#include "brush.h"
35#include "clipping.h"
36
37const char* gdi_rop_to_string(UINT32 code)
38{
39 switch (code)
40 {
41 case GDI_BLACKNESS:
42 return "0";
43
44 case GDI_DPSoon:
45 return "DPSoon";
46
47 case GDI_DPSona:
48 return "DPSona";
49
50 case GDI_PSon:
51 return "PSon";
52
53 case GDI_SDPona:
54 return "SDPona";
55
56 case GDI_DPon:
57 return "DPon";
58
59 case GDI_PDSxnon:
60 return "PDSxnon";
61
62 case GDI_PDSaon:
63 return "PDSaon";
64
65 case GDI_SDPnaa:
66 return "SDPnaa";
67
68 case GDI_PDSxon:
69 return "PDSxon";
70
71 case GDI_DPna:
72 return "DPna";
73
74 case GDI_PSDnaon:
75 return "PSDnaon";
76
77 case GDI_SPna:
78 return "SPna";
79
80 case GDI_PDSnaon:
81 return "PDSnaon";
82
83 case GDI_PDSonon:
84 return "PDSonon";
85
86 case GDI_Pn:
87 return "Pn";
88
89 case GDI_PDSona:
90 return "PDSona";
91
92 case GDI_NOTSRCERASE:
93 return "DSon";
94
95 case GDI_SDPxnon:
96 return "SDPxnon";
97
98 case GDI_SDPaon:
99 return "SDPaon";
100
101 case GDI_DPSxnon:
102 return "DPSxnon";
103
104 case GDI_DPSaon:
105 return "DPSaon";
106
107 case GDI_PSDPSanaxx:
108 return "PSDPSanaxx";
109
110 case GDI_SSPxDSxaxn:
111 return "SSPxDSxaxn";
112
113 case GDI_SPxPDxa:
114 return "SPxPDxa";
115
116 case GDI_SDPSanaxn:
117 return "SDPSanaxn";
118
119 case GDI_PDSPaox:
120 return "PDSPaox";
121
122 case GDI_SDPSxaxn:
123 return "SDPSxaxn";
124
125 case GDI_PSDPaox:
126 return "PSDPaox";
127
128 case GDI_DSPDxaxn:
129 return "DSPDxaxn";
130
131 case GDI_PDSox:
132 return "PDSox";
133
134 case GDI_PDSoan:
135 return "PDSoan";
136
137 case GDI_DPSnaa:
138 return "DPSnaa";
139
140 case GDI_SDPxon:
141 return "SDPxon";
142
143 case GDI_DSna:
144 return "DSna";
145
146 case GDI_SPDnaon:
147 return "SPDnaon";
148
149 case GDI_SPxDSxa:
150 return "SPxDSxa";
151
152 case GDI_PDSPanaxn:
153 return "PDSPanaxn";
154
155 case GDI_SDPSaox:
156 return "SDPSaox";
157
158 case GDI_SDPSxnox:
159 return "SDPSxnox";
160
161 case GDI_DPSxa:
162 return "DPSxa";
163
164 case GDI_PSDPSaoxxn:
165 return "PSDPSaoxxn";
166
167 case GDI_DPSana:
168 return "DPSana";
169
170 case GDI_SSPxPDxaxn:
171 return "SSPxPDxaxn";
172
173 case GDI_SPDSoax:
174 return "SPDSoax";
175
176 case GDI_PSDnox:
177 return "PSDnox";
178
179 case GDI_PSDPxox:
180 return "PSDPxox";
181
182 case GDI_PSDnoan:
183 return "PSDnoan";
184
185 case GDI_PSna:
186 return "PSna";
187
188 case GDI_SDPnaon:
189 return "SDPnaon";
190
191 case GDI_SDPSoox:
192 return "SDPSoox";
193
194 case GDI_NOTSRCCOPY:
195 return "Sn";
196
197 case GDI_SPDSaox:
198 return "SPDSaox";
199
200 case GDI_SPDSxnox:
201 return "SPDSxnox";
202
203 case GDI_SDPox:
204 return "SDPox";
205
206 case GDI_SDPoan:
207 return "SDPoan";
208
209 case GDI_PSDPoax:
210 return "PSDPoax";
211
212 case GDI_SPDnox:
213 return "SPDnox";
214
215 case GDI_SPDSxox:
216 return "SPDSxox";
217
218 case GDI_SPDnoan:
219 return "SPDnoan";
220
221 case GDI_PSx:
222 return "PSx";
223
224 case GDI_SPDSonox:
225 return "SPDSonox";
226
227 case GDI_SPDSnaox:
228 return "SPDSnaox";
229
230 case GDI_PSan:
231 return "PSan";
232
233 case GDI_PSDnaa:
234 return "PSDnaa";
235
236 case GDI_DPSxon:
237 return "DPSxon";
238
239 case GDI_SDxPDxa:
240 return "SDxPDxa";
241
242 case GDI_SPDSanaxn:
243 return "SPDSanaxn";
244
245 case GDI_SRCERASE:
246 return "SDna";
247
248 case GDI_DPSnaon:
249 return "DPSnaon";
250
251 case GDI_DSPDaox:
252 return "DSPDaox";
253
254 case GDI_PSDPxaxn:
255 return "PSDPxaxn";
256
257 case GDI_SDPxa:
258 return "SDPxa";
259
260 case GDI_PDSPDaoxxn:
261 return "PDSPDaoxxn";
262
263 case GDI_DPSDoax:
264 return "DPSDoax";
265
266 case GDI_PDSnox:
267 return "PDSnox";
268
269 case GDI_SDPana:
270 return "SDPana";
271
272 case GDI_SSPxDSxoxn:
273 return "SSPxDSxoxn";
274
275 case GDI_PDSPxox:
276 return "PDSPxox";
277
278 case GDI_PDSnoan:
279 return "PDSnoan";
280
281 case GDI_PDna:
282 return "PDna";
283
284 case GDI_DSPnaon:
285 return "DSPnaon";
286
287 case GDI_DPSDaox:
288 return "DPSDaox";
289
290 case GDI_SPDSxaxn:
291 return "SPDSxaxn";
292
293 case GDI_DPSonon:
294 return "DPSonon";
295
296 case GDI_DSTINVERT:
297 return "Dn";
298
299 case GDI_DPSox:
300 return "DPSox";
301
302 case GDI_DPSoan:
303 return "DPSoan";
304
305 case GDI_PDSPoax:
306 return "PDSPoax";
307
308 case GDI_DPSnox:
309 return "DPSnox";
310
311 case GDI_PATINVERT:
312 return "DPx";
313
314 case GDI_DPSDonox:
315 return "DPSDonox";
316
317 case GDI_DPSDxox:
318 return "DPSDxox";
319
320 case GDI_DPSnoan:
321 return "DPSnoan";
322
323 case GDI_DPSDnaox:
324 return "DPSDnaox";
325
326 case GDI_DPan:
327 return "DPan";
328
329 case GDI_PDSxa:
330 return "PDSxa";
331
332 case GDI_DSPDSaoxxn:
333 return "DSPDSaoxxn";
334
335 case GDI_DSPDoax:
336 return "DSPDoax";
337
338 case GDI_SDPnox:
339 return "SDPnox";
340
341 case GDI_SDPSoax:
342 return "SDPSoax";
343
344 case GDI_DSPnox:
345 return "DSPnox";
346
347 case GDI_SRCINVERT:
348 return "DSx";
349
350 case GDI_SDPSonox:
351 return "SDPSonox";
352
353 case GDI_DSPDSonoxxn:
354 return "DSPDSonoxxn";
355
356 case GDI_PDSxxn:
357 return "PDSxxn";
358
359 case GDI_DPSax:
360 return "DPSax";
361
362 case GDI_PSDPSoaxxn:
363 return "PSDPSoaxxn";
364
365 case GDI_SDPax:
366 return "SDPax";
367
368 case GDI_PDSPDoaxxn:
369 return "PDSPDoaxxn";
370
371 case GDI_SDPSnoax:
372 return "SDPSnoax";
373
374 case GDI_PDSxnan:
375 return "PDSxnan";
376
377 case GDI_PDSana:
378 return "PDSana";
379
380 case GDI_SSDxPDxaxn:
381 return "SSDxPDxaxn";
382
383 case GDI_SDPSxox:
384 return "SDPSxox";
385
386 case GDI_SDPnoan:
387 return "SDPnoan";
388
389 case GDI_DSPDxox:
390 return "DSPDxox";
391
392 case GDI_DSPnoan:
393 return "DSPnoan";
394
395 case GDI_SDPSnaox:
396 return "SDPSnaox";
397
398 case GDI_DSan:
399 return "DSan";
400
401 case GDI_PDSax:
402 return "PDSax";
403
404 case GDI_DSPDSoaxxn:
405 return "DSPDSoaxxn";
406
407 case GDI_DPSDnoax:
408 return "DPSDnoax";
409
410 case GDI_SDPxnan:
411 return "SDPxnan";
412
413 case GDI_SPDSnoax:
414 return "SPDSnoax";
415
416 case GDI_DPSxnan:
417 return "DPSxnan";
418
419 case GDI_SPxDSxo:
420 return "SPxDSxo";
421
422 case GDI_DPSaan:
423 return "DPSaan";
424
425 case GDI_DPSaa:
426 return "DPSaa";
427
428 case GDI_SPxDSxon:
429 return "SPxDSxon";
430
431 case GDI_DPSxna:
432 return "DPSxna";
433
434 case GDI_SPDSnoaxn:
435 return "SPDSnoaxn";
436
437 case GDI_SDPxna:
438 return "SDPxna";
439
440 case GDI_PDSPnoaxn:
441 return "PDSPnoaxn";
442
443 case GDI_DSPDSoaxx:
444 return "DSPDSoaxx";
445
446 case GDI_PDSaxn:
447 return "PDSaxn";
448
449 case GDI_SRCAND:
450 return "DSa";
451
452 case GDI_SDPSnaoxn:
453 return "SDPSnaoxn";
454
455 case GDI_DSPnoa:
456 return "DSPnoa";
457
458 case GDI_DSPDxoxn:
459 return "DSPDxoxn";
460
461 case GDI_SDPnoa:
462 return "SDPnoa";
463
464 case GDI_SDPSxoxn:
465 return "SDPSxoxn";
466
467 case GDI_SSDxPDxax:
468 return "SSDxPDxax";
469
470 case GDI_PDSanan:
471 return "PDSanan";
472
473 case GDI_PDSxna:
474 return "PDSxna";
475
476 case GDI_SDPSnoaxn:
477 return "SDPSnoaxn";
478
479 case GDI_DPSDPoaxx:
480 return "DPSDPoaxx";
481
482 case GDI_SPDaxn:
483 return "SPDaxn";
484
485 case GDI_PSDPSoaxx:
486 return "PSDPSoaxx";
487
488 case GDI_DPSaxn:
489 return "DPSaxn";
490
491 case GDI_DPSxx:
492 return "DPSxx";
493
494 case GDI_PSDPSonoxx:
495 return "PSDPSonoxx";
496
497 case GDI_SDPSonoxn:
498 return "SDPSonoxn";
499
500 case GDI_DSxn:
501 return "DSxn";
502
503 case GDI_DPSnax:
504 return "DPSnax";
505
506 case GDI_SDPSoaxn:
507 return "SDPSoaxn";
508
509 case GDI_SPDnax:
510 return "SPDnax";
511
512 case GDI_DSPDoaxn:
513 return "DSPDoaxn";
514
515 case GDI_DSPDSaoxx:
516 return "DSPDSaoxx";
517
518 case GDI_PDSxan:
519 return "PDSxan";
520
521 case GDI_DPa:
522 return "DPa";
523
524 case GDI_PDSPnaoxn:
525 return "PDSPnaoxn";
526
527 case GDI_DPSnoa:
528 return "DPSnoa";
529
530 case GDI_DPSDxoxn:
531 return "DPSDxoxn";
532
533 case GDI_PDSPonoxn:
534 return "PDSPonoxn";
535
536 case GDI_PDxn:
537 return "PDxn";
538
539 case GDI_DSPnax:
540 return "DSPnax";
541
542 case GDI_PDSPoaxn:
543 return "PDSPoaxn";
544
545 case GDI_DPSoa:
546 return "DPSoa";
547
548 case GDI_DPSoxn:
549 return "DPSoxn";
550
551 case GDI_DSTCOPY:
552 return "D";
553
554 case GDI_DPSono:
555 return "DPSono";
556
557 case GDI_SPDSxax:
558 return "SPDSxax";
559
560 case GDI_DPSDaoxn:
561 return "DPSDaoxn";
562
563 case GDI_DSPnao:
564 return "DSPnao";
565
566 case GDI_DPno:
567 return "DPno";
568
569 case GDI_PDSnoa:
570 return "PDSnoa";
571
572 case GDI_PDSPxoxn:
573 return "PDSPxoxn";
574
575 case GDI_SSPxDSxox:
576 return "SSPxDSxox";
577
578 case GDI_SDPanan:
579 return "SDPanan";
580
581 case GDI_PSDnax:
582 return "PSDnax";
583
584 case GDI_DPSDoaxn:
585 return "DPSDoaxn";
586
587 case GDI_DPSDPaoxx:
588 return "DPSDPaoxx";
589
590 case GDI_SDPxan:
591 return "SDPxan";
592
593 case GDI_PSDPxax:
594 return "PSDPxax";
595
596 case GDI_DSPDaoxn:
597 return "DSPDaoxn";
598
599 case GDI_DPSnao:
600 return "DPSnao";
601
602 case GDI_MERGEPAINT:
603 return "DSno";
604
605 case GDI_SPDSanax:
606 return "SPDSanax";
607
608 case GDI_SDxPDxan:
609 return "SDxPDxan";
610
611 case GDI_DPSxo:
612 return "DPSxo";
613
614 case GDI_DPSano:
615 return "DPSano";
616
617 case GDI_MERGECOPY:
618 return "PSa";
619
620 case GDI_SPDSnaoxn:
621 return "SPDSnaoxn";
622
623 case GDI_SPDSonoxn:
624 return "SPDSonoxn";
625
626 case GDI_PSxn:
627 return "PSxn";
628
629 case GDI_SPDnoa:
630 return "SPDnoa";
631
632 case GDI_SPDSxoxn:
633 return "SPDSxoxn";
634
635 case GDI_SDPnax:
636 return "SDPnax";
637
638 case GDI_PSDPoaxn:
639 return "PSDPoaxn";
640
641 case GDI_SDPoa:
642 return "SDPoa";
643
644 case GDI_SPDoxn:
645 return "SPDoxn";
646
647 case GDI_DPSDxax:
648 return "DPSDxax";
649
650 case GDI_SPDSaoxn:
651 return "SPDSaoxn";
652
653 case GDI_SRCCOPY:
654 return "S";
655
656 case GDI_SDPono:
657 return "SDPono";
658
659 case GDI_SDPnao:
660 return "SDPnao";
661
662 case GDI_SPno:
663 return "SPno";
664
665 case GDI_PSDnoa:
666 return "PSDnoa";
667
668 case GDI_PSDPxoxn:
669 return "PSDPxoxn";
670
671 case GDI_PDSnax:
672 return "PDSnax";
673
674 case GDI_SPDSoaxn:
675 return "SPDSoaxn";
676
677 case GDI_SSPxPDxax:
678 return "SSPxPDxax";
679
680 case GDI_DPSanan:
681 return "DPSanan";
682
683 case GDI_PSDPSaoxx:
684 return "PSDPSaoxx";
685
686 case GDI_DPSxan:
687 return "DPSxan";
688
689 case GDI_PDSPxax:
690 return "PDSPxax";
691
692 case GDI_SDPSaoxn:
693 return "SDPSaoxn";
694
695 case GDI_DPSDanax:
696 return "DPSDanax";
697
698 case GDI_SPxDSxan:
699 return "SPxDSxan";
700
701 case GDI_SPDnao:
702 return "SPDnao";
703
704 case GDI_SDno:
705 return "SDno";
706
707 case GDI_SDPxo:
708 return "SDPxo";
709
710 case GDI_SDPano:
711 return "SDPano";
712
713 case GDI_PDSoa:
714 return "PDSoa";
715
716 case GDI_PDSoxn:
717 return "PDSoxn";
718
719 case GDI_DSPDxax:
720 return "DSPDxax";
721
722 case GDI_PSDPaoxn:
723 return "PSDPaoxn";
724
725 case GDI_SDPSxax:
726 return "SDPSxax";
727
728 case GDI_PDSPaoxn:
729 return "PDSPaoxn";
730
731 case GDI_SDPSanax:
732 return "SDPSanax";
733
734 case GDI_SPxPDxan:
735 return "SPxPDxan";
736
737 case GDI_SSPxDSxax:
738 return "SSPxDSxax";
739
740 case GDI_DSPDSanaxxn:
741 return "DSPDSanaxxn";
742
743 case GDI_DPSao:
744 return "DPSao";
745
746 case GDI_DPSxno:
747 return "DPSxno";
748
749 case GDI_SDPao:
750 return "SDPao";
751
752 case GDI_SDPxno:
753 return "SDPxno";
754
755 case GDI_SRCPAINT:
756 return "DSo";
757
758 case GDI_SDPnoo:
759 return "SDPnoo";
760
761 case GDI_PATCOPY:
762 return "P";
763
764 case GDI_PDSono:
765 return "PDSono";
766
767 case GDI_PDSnao:
768 return "PDSnao";
769
770 case GDI_PSno:
771 return "PSno";
772
773 case GDI_PSDnao:
774 return "PSDnao";
775
776 case GDI_PDno:
777 return "PDno";
778
779 case GDI_PDSxo:
780 return "PDSxo";
781
782 case GDI_PDSano:
783 return "PDSano";
784
785 case GDI_PDSao:
786 return "PDSao";
787
788 case GDI_PDSxno:
789 return "PDSxno";
790
791 case GDI_DPo:
792 return "DPo";
793
794 case GDI_PATPAINT:
795 return "DPSnoo";
796
797 case GDI_PSo:
798 return "PSo";
799
800 case GDI_PSDnoo:
801 return "PSDnoo";
802
803 case GDI_DPSoo:
804 return "DPSoo";
805
806 case GDI_WHITENESS:
807 return "1";
808
809 case GDI_GLYPH_ORDER:
810 return "SPaDSnao";
811
812 default:
813 return "";
814 }
815}
816
824HGDI_BRUSH gdi_CreateSolidBrush(UINT32 crColor)
825{
826 HGDI_BRUSH hBrush = (HGDI_BRUSH)calloc(1, sizeof(GDI_BRUSH));
827
828 if (!hBrush)
829 return NULL;
830
831 hBrush->objectType = GDIOBJECT_BRUSH;
832 hBrush->style = GDI_BS_SOLID;
833 hBrush->color = crColor;
834 return hBrush;
835}
843HGDI_BRUSH gdi_CreatePatternBrush(HGDI_BITMAP hbmp)
844{
845 HGDI_BRUSH hBrush = (HGDI_BRUSH)calloc(1, sizeof(GDI_BRUSH));
846
847 if (!hBrush)
848 return NULL;
849
850 hBrush->objectType = GDIOBJECT_BRUSH;
851 hBrush->style = GDI_BS_PATTERN;
852 hBrush->pattern = hbmp;
853 return hBrush;
854}
855
856HGDI_BRUSH gdi_CreateHatchBrush(HGDI_BITMAP hbmp)
857{
858 HGDI_BRUSH hBrush = (HGDI_BRUSH)calloc(1, sizeof(GDI_BRUSH));
859
860 if (!hBrush)
861 return NULL;
862
863 hBrush->objectType = GDIOBJECT_BRUSH;
864 hBrush->style = GDI_BS_HATCHED;
865 hBrush->pattern = hbmp;
866 return hBrush;
867}