FreeRDP
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 
37 const 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 
824 HGDI_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 }
843 HGDI_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 
856 HGDI_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 }