Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGGC.cxx
Go to the documentation of this file.
1// @(#)root/gui:$Id$
2// Author: Fons Rademakers 20/9/2000
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12
13/** \class TGGC
14 \ingroup guiwidgets
15
16Encapsulate a graphics context used in the low level graphics.
17TGGCPool provides a pool of graphics contexts.
18
19*/
20
21
22#include "TGClient.h"
23#include "TGGC.h"
24#include "TVirtualX.h"
25#include "THashTable.h"
26#include "TColor.h"
27#include "TROOT.h"
28
29#include <iostream>
30#include <cstring>
31
32
33
34////////////////////////////////////////////////////////////////////////////////
35/// Create a graphics context (only called via TGGCPool::GetGC()).
36
38{
39 fContext = 0;
40 if (values) {
41 fValues = *values;
42 fContext = gVirtualX->CreateGC(gVirtualX->GetDefaultRootWindow(), values);
43 if (values->fMask & kGCDashList) {
44 if (values->fDashLen > (Int_t)sizeof(fValues.fDashes))
45 Warning("TGGC", "dash list can have only up to %ld elements",
46 (Long_t)sizeof(fValues.fDashes));
47 fValues.fDashLen = std::min(values->fDashLen, (Int_t)sizeof(fValues.fDashes));
50 }
51 } else {
52 fValues = {};
53 }
54 SetRefCount(1);
55}
56
57////////////////////////////////////////////////////////////////////////////////
58/// Create a graphics context, registers GC in GCPool.
59
61{
62 fContext = 0;
63 SetRefCount(1);
64 // case of default ctor at program startup before gClient exists
65 if (!values)
66 fValues = {};
67 else if (gClient)
68 gClient->GetGC(values, kTRUE);
69 else
70 Error("TGGC", "TGClient not yet initialized, should never happen");
71}
72
73////////////////////////////////////////////////////////////////////////////////
74/// Copy a graphics context.
75
77{
78 fValues = g.fValues;
79 if (g.fContext) {
80 fContext = gVirtualX->CreateGC(gVirtualX->GetDefaultRootWindow(), &fValues);
84 } else
85 fContext = 0;
86 SetRefCount(1);
87
88 if (gClient)
89 gClient->GetGCPool()->fList->Add(this);
90}
91
92////////////////////////////////////////////////////////////////////////////////
93/// Delete graphics context.
94
96{
97 if (gClient)
98 gClient->GetGCPool()->ForceFreeGC(this);
99
100 if (fContext)
101 gVirtualX->DeleteGC(fContext);
102}
103
104////////////////////////////////////////////////////////////////////////////////
105/// Graphics context assignment operator.
106
108{
109 if (this != &rhs) {
110 if (!fContext && gClient) {
111 TGGC *gc = gClient->GetGCPool()->FindGC(this);
112 if (!gc)
113 gClient->GetGCPool()->fList->Add(this);
114 }
115 if (fContext)
116 gVirtualX->DeleteGC(fContext);
118 fValues = rhs.fValues;
119 fContext = gVirtualX->CreateGC(gVirtualX->GetDefaultRootWindow(), &fValues);
123 }
124 return *this;
125}
126
127////////////////////////////////////////////////////////////////////////////////
128/// Not inline due to a bug in g++ 2.96 20000731 (Red Hat Linux 7.0).
129
131{
132 return fContext;
133}
134
135////////////////////////////////////////////////////////////////////////////////
136/// Update values + mask.
137
139{
140 fValues.fMask |= values->fMask;
141
142 for (Mask_t bit = 1; bit <= fValues.fMask; bit <<= 1) {
143 switch (bit & values->fMask) {
144 default:
145 case 0:
146 continue;
147 case kGCFunction:
148 fValues.fFunction = values->fFunction;
149 break;
150 case kGCPlaneMask:
151 fValues.fPlaneMask = values->fPlaneMask;
152 break;
153 case kGCForeground:
155 break;
156 case kGCBackground:
158 break;
159 case kGCLineWidth:
160 fValues.fLineWidth = values->fLineWidth;
161 break;
162 case kGCLineStyle:
163 fValues.fLineStyle = values->fLineStyle;
164 break;
165 case kGCCapStyle:
166 fValues.fCapStyle = values->fCapStyle;
167 break;
168 case kGCJoinStyle:
169 fValues.fJoinStyle = values->fJoinStyle;
170 break;
171 case kGCFillStyle:
172 fValues.fFillStyle = values->fFillStyle;
173 break;
174 case kGCFillRule:
175 fValues.fFillRule = values->fFillRule;
176 break;
177 case kGCTile:
178 fValues.fTile = values->fTile;
179 break;
180 case kGCStipple:
181 fValues.fStipple = values->fStipple;
182 break;
184 fValues.fTsXOrigin = values->fTsXOrigin;
185 break;
187 fValues.fTsYOrigin = values->fTsYOrigin;
188 break;
189 case kGCFont:
190 fValues.fFont = values->fFont;
191 break;
192 case kGCSubwindowMode:
194 break;
197 break;
198 case kGCClipXOrigin:
200 break;
201 case kGCClipYOrigin:
203 break;
204 case kGCClipMask:
205 fValues.fClipMask = values->fClipMask;
206 break;
207 case kGCDashOffset:
209 break;
210 case kGCDashList:
211 if (values->fDashLen > (Int_t)sizeof(fValues.fDashes))
212 Warning("UpdateValues", "dash list can have only up to %ld elements",
213 (Long_t)sizeof(fValues.fDashes));
214 fValues.fDashLen = std::min(values->fDashLen, (Int_t)sizeof(fValues.fDashes));
216 break;
217 case kGCArcMode:
218 fValues.fArcMode = values->fArcMode;
219 break;
220 }
221 }
222}
223
224////////////////////////////////////////////////////////////////////////////////
225/// Set attributes as specified in the values structure.
226
228{
229 if (!fContext && gClient) {
230 TGGC *gc = gClient->GetGCPool()->FindGC(this);
231 if (!gc)
232 gClient->GetGCPool()->fList->Add(this);
233 }
234
235 if (fContext)
236 gVirtualX->ChangeGC(fContext, values);
237 else
238 fContext = gVirtualX->CreateGC(gVirtualX->GetDefaultRootWindow(), values);
239 UpdateValues(values);
240 if (values->fMask & kGCDashList)
243}
244
245////////////////////////////////////////////////////////////////////////////////
246/// Set graphics context drawing function.
247
249{
250 GCValues_t values;
251 values.fFunction = v;
252 values.fMask = kGCFunction;
253 SetAttributes(&values);
254}
255
256////////////////////////////////////////////////////////////////////////////////
257/// Set plane mask.
258
260{
261 GCValues_t values;
262 values.fPlaneMask = v;
263 values.fMask = kGCPlaneMask;
264 SetAttributes(&values);
265}
266
267////////////////////////////////////////////////////////////////////////////////
268/// Set foreground color.
269
271{
272 GCValues_t values;
273 values.fForeground = v;
274 values.fMask = kGCForeground;
275 SetAttributes(&values);
276}
277
278////////////////////////////////////////////////////////////////////////////////
279/// Set background color.
280
282{
283 GCValues_t values;
284 values.fBackground = v;
285 values.fMask = kGCBackground;
286 SetAttributes(&values);
287}
288
289////////////////////////////////////////////////////////////////////////////////
290/// Set line width.
291
293{
294 GCValues_t values;
295 values.fLineWidth = v;
296 values.fMask = kGCLineWidth;
297 SetAttributes(&values);
298}
299
300////////////////////////////////////////////////////////////////////////////////
301/// Set line style (kLineSolid, kLineOnOffDash, kLineDoubleDash).
302
304{
305 GCValues_t values;
306 values.fLineStyle = v;
307 values.fMask = kGCLineStyle;
308 SetAttributes(&values);
309}
310
311////////////////////////////////////////////////////////////////////////////////
312/// Set cap style (kCapNotLast, kCapButt, kCapRound, kCapProjecting).
313
315{
316 GCValues_t values;
317 values.fCapStyle = v;
318 values.fMask = kGCCapStyle;
319 SetAttributes(&values);
320}
321
322////////////////////////////////////////////////////////////////////////////////
323/// Set line join style (kJoinMiter, kJoinRound, kJoinBevel).
324
326{
327 GCValues_t values;
328 values.fJoinStyle = v;
329 values.fMask = kGCJoinStyle;
330 SetAttributes(&values);
331}
332
333////////////////////////////////////////////////////////////////////////////////
334/// Set fill style (kFillSolid, kFillTiled, kFillStippled,
335/// kFillOpaeueStippled).
336
338{
339 GCValues_t values;
340 values.fFillStyle = v;
341 values.fMask = kGCFillStyle;
342 SetAttributes(&values);
343}
344
345////////////////////////////////////////////////////////////////////////////////
346/// Set fill rule (kEvenOddRule, kWindingRule).
347
349{
350 GCValues_t values;
351 values.fFillRule = v;
352 values.fMask = kGCFillRule;
353 SetAttributes(&values);
354}
355
356////////////////////////////////////////////////////////////////////////////////
357/// Set tile pixmap for tiling operations.
358
360{
361 GCValues_t values;
362 values.fTile = v;
363 values.fMask = kGCTile;
364 SetAttributes(&values);
365}
366
367////////////////////////////////////////////////////////////////////////////////
368/// Set 1 plane pixmap for stippling.
369
371{
372 GCValues_t values;
373 values.fStipple = v;
374 values.fMask = kGCStipple;
375 SetAttributes(&values);
376}
377
378////////////////////////////////////////////////////////////////////////////////
379/// X offset for tile or stipple operations.
380
382{
383 GCValues_t values;
384 values.fTsXOrigin = v;
385 values.fMask = kGCTileStipXOrigin;
386 SetAttributes(&values);
387}
388
389////////////////////////////////////////////////////////////////////////////////
390/// Y offset for tile or stipple operations.
391
393{
394 GCValues_t values;
395 values.fTsYOrigin = v;
396 values.fMask = kGCTileStipYOrigin;
397 SetAttributes(&values);
398}
399
400////////////////////////////////////////////////////////////////////////////////
401/// Set font.
402
404{
405 GCValues_t values;
406 values.fFont = v;
407 values.fMask = kGCFont;
408 SetAttributes(&values);
409}
410
411////////////////////////////////////////////////////////////////////////////////
412/// Set sub window mode (kClipByChildren, kIncludeInferiors).
413
415{
416 GCValues_t values;
417 values.fSubwindowMode = v;
418 values.fMask = kGCSubwindowMode;
419 SetAttributes(&values);
420}
421
422////////////////////////////////////////////////////////////////////////////////
423/// True if graphics exposure should be generated.
424
426{
427 GCValues_t values;
428 values.fGraphicsExposures = v;
430 SetAttributes(&values);
431}
432
433////////////////////////////////////////////////////////////////////////////////
434/// X origin for clipping.
435
437{
438 GCValues_t values;
439 values.fClipXOrigin = v;
440 values.fMask = kGCClipXOrigin;
441 SetAttributes(&values);
442}
443
444////////////////////////////////////////////////////////////////////////////////
445/// Y origin for clipping.
446
448{
449 GCValues_t values;
450 values.fClipYOrigin = v;
451 values.fMask = kGCClipYOrigin;
452 SetAttributes(&values);
453}
454
455////////////////////////////////////////////////////////////////////////////////
456/// Bitmap for clipping.
457
459{
460 GCValues_t values;
461 values.fClipMask = v;
462 values.fMask = kGCClipMask;
463 SetAttributes(&values);
464}
465
466////////////////////////////////////////////////////////////////////////////////
467/// Patterned/dashed line offset.
468
470{
471 GCValues_t values;
472 values.fDashOffset = v;
473 values.fMask = kGCDashOffset;
474 SetAttributes(&values);
475}
476
477////////////////////////////////////////////////////////////////////////////////
478/// Set dash pattern. First use SetDashOffset() if not 0.
479
480void TGGC::SetDashList(const char v[], Int_t len)
481{
482 GCValues_t values;
483 if (len > (Int_t)sizeof(values.fDashes))
484 Warning("SetDashList", "dash list can have only up to %ld elements",
485 (Long_t)sizeof(values.fDashes));
486 values.fDashLen = std::min(len, (Int_t)sizeof(values.fDashes));
487 memcpy(values.fDashes, v, values.fDashLen);
488 values.fMask = kGCDashList;
489 SetAttributes(&values);
490}
491
492////////////////////////////////////////////////////////////////////////////////
493/// Set arc mode (kArcChord, kArcPieSlice).
494
496{
497 GCValues_t values;
498 values.fArcMode = v;
499 values.fMask = kGCArcMode;
500 SetAttributes(&values);
501}
502
503////////////////////////////////////////////////////////////////////////////////
504/// Print graphics contexts info.
505
507{
508 Printf("TGGC: mask = %x, handle = %lx, ref cnt = %u", fValues.fMask,
510}
511
512////////////////////////////////////////////////////////////////////////////////
513/// Returns GC mask as a string - used in SavePrimitive().
514
516{
518
519 Mask_t fmask = GetMask();
520
521 if (fmask & kGCFunction) {
522 if (mask.Length() == 0) mask = "kGCFunction";
523 else mask += " | kGCFunction";
524 }
525 if (fmask & kGCPlaneMask) {
526 if (mask.Length() == 0) mask = "kGCPlaneMask";
527 else mask += " | kGCPlaneMask";
528 }
529 if (fmask & kGCForeground) {
530 if (mask.Length() == 0) mask = "kGCForeground";
531 else mask += " | kGCForeground";
532 }
533 if (fmask & kGCBackground) {
534 if (mask.Length() == 0) mask = "kGCBackground";
535 else mask += " | kGCBackground";
536 }
537 if (fmask & kGCLineWidth) {
538 if (mask.Length() == 0) mask = "kGCLineWidth";
539 else mask += " | kGCLineWidth";
540 }
541 if (fmask & kGCLineStyle) {
542 if (mask.Length() == 0) mask = "kGCLineStyle";
543 else mask += " | kGCLineStyle";
544 }
545 if (fmask & kGCCapStyle) {
546 if (mask.Length() == 0) mask = "kGCCapStyle";
547 else mask += " | kGCCapStyle";
548 }
549 if (fmask & kGCJoinStyle) {
550 if (mask.Length() == 0) mask = "kGCJoinStyle";
551 else mask += " | kGCJoinStyle";
552 }
553 if (fmask & kGCFillStyle) {
554 if (mask.Length() == 0) mask = "kGCFillStyle";
555 else mask += " | kGCFillStyle";
556 }
557 if (fmask & kGCFillRule) {
558 if (mask.Length() == 0) mask = "kGCFillRule";
559 else mask += " | kGCFillRule";
560 }
561 if (fmask & kGCTile) {
562 if (mask.Length() == 0) mask = "kGCTile";
563 else mask += " | kGCTile";
564 }
565 if (fmask & kGCStipple) {
566 if (mask.Length() == 0) mask = "kGCStipple";
567 else mask += " | kGCStipple";
568 }
570 if (mask.Length() == 0) mask = "kGCTileStipXOrigin";
571 else mask += " | kGCTileStipXOrigin";
572 }
574 if (mask.Length() == 0) mask = "kGCTileStipYOrigin";
575 else mask += " | kGCTileStipYOrigin";
576 }
577 if (fmask & kGCFont) {
578 if (mask.Length() == 0) mask = "kGCFont";
579 else mask += " | kGCFont";
580 }
581 if (fmask & kGCSubwindowMode) {
582 if (mask.Length() == 0) mask = "kGCSubwindowMode";
583 else mask += " | kGCSubwindowMode";
584 }
586 if (mask.Length() == 0) mask = "kGCGraphicsExposures";
587 else mask += " | kGCGraphicsExposures";
588 }
589 if (fmask & kGCClipXOrigin) {
590 if (mask.Length() == 0) mask = "kGCClipXOrigin";
591 else mask += " | kGCClipXOrigin";
592 }
593 if (fmask & kGCClipYOrigin) {
594 if (mask.Length() == 0) mask = "kGCClipYOrigin";
595 else mask += " | kGCClipYOrigin";
596 }
597 if (fmask & kGCClipMask) {
598 if (mask.Length() == 0) mask = "kGCClipMask";
599 else mask += " | kGCClipMask";
600 }
601 if (fmask & kGCDashOffset) {
602 if (mask.Length() == 0) mask = "kGCDashOffset";
603 else mask += " | kGCDashOffset";
604 }
605 if (fmask & kGCDashList) {
606 if (mask.Length() == 0) mask = "kGCDashList";
607 else mask += " | kGCDashList";
608 }
609 if (fmask & kGCArcMode) {
610 if (mask.Length() == 0) mask = "kGCArcMode";
611 else mask += " | kGCArcMode";
612 }
613 return mask;
614}
615
616////////////////////////////////////////////////////////////////////////////////
617/// Save graphics context info as a C++ statement(s) on output stream out
618
619void TGGC::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
620{
621 out << " \n";
622 // declare graphics context object to reflect required user changes
623 if (!gROOT->ClassSaved(TGGC::Class()))
624 out << " TGGC *uGC; // will reflect user GC changes\n";
625
626 Mask_t fmask = GetMask();
627
629 const char *colorname;
630 ULong_t color;
631
632 out << " // graphics context changes\n";
633 out << " GCValues_t " << valname << ";\n";
634 out << " " << valname << ".fMask = " << GetMaskString() << ";\n";
635
636 for (Mask_t bit = 1; bit <= fmask; bit <<= 1) {
637 switch (bit & fmask) {
638 default:
639 case 0:
640 continue;
641 case kGCFunction:
642 out << " " << valname << ".fFunction = ";
643 switch (GetFunction()) {
644 case kGXclear:
645 out << "kGXclear";
646 break;
647 case kGXand:
648 out << "kGXand";
649 break;
650 case kGXandReverse:
651 out << "kGXandReverse";
652 break;
653 case kGXcopy:
654 out << "kGXcopy";
655 break;
656 case kGXandInverted:
657 out << "kGXandInverted";
658 break;
659 case kGXnoop:
660 out << "kGXnoop";
661 break;
662 case kGXxor:
663 out << "kGXxor";
664 break;
665 case kGXor:
666 out << "kGXor";
667 break;
668 case kGXnor:
669 out << "kGXnor";
670 break;
671 case kGXequiv:
672 out << "kGXequiv";
673 break;
674 case kGXinvert:
675 out << "kGXinvert";
676 break;
677 case kGXorReverse:
678 out << "kGXorReverse";
679 break;
680 case kGXcopyInverted:
681 out << "kGXcopyInverted";
682 break;
683 case kGXorInverted:
684 out << "kGXorInverted";
685 break;
686 case kGXnand:
687 out << "kGXnand";
688 break;
689 case kGXset:
690 out << "kGXset";
691 break;
692 }
693 out << ";\n";
694 break;
695 case kGCPlaneMask:
696 out << " " << valname << ".fPlaneMask = " << GetPlaneMask() << ";\n";
697 break;
698 case kGCForeground:
699 color = GetForeground();
701 out << " gClient->GetColorByName(\"" << colorname << "\", " << valname << ".fForeground);\n";
702 break;
703 case kGCBackground:
704 color = GetBackground();
706 out << " gClient->GetColorByName(\"" << colorname << "\", " << valname << ".fBackground);\n";
707 break;
708 case kGCLineWidth:
709 out << " " << valname << ".fLineWidth = " << GetLineWidth() << ";\n";
710 break;
711 case kGCLineStyle:
712 out << " " << valname << ".fLineStyle = ";
713 switch (GetLineStyle()) {
714 case kLineSolid:
715 out << "kLineSolid";
716 break;
717 case kLineOnOffDash:
718 out << "kLineOnOffDash";
719 break;
720 case kLineDoubleDash:
721 out << "kLineDoubleDash";
722 break;
723 }
724 out << ";\n";
725 break;
726 case kGCCapStyle:
727 out << " " << valname << ".fCapStyle = ";
728 switch (GetCapStyle()) {
729 case kCapNotLast:
730 out << "kCapNotLast";
731 break;
732 case kCapButt:
733 out << "kCapButt";
734 break;
735 case kCapRound:
736 out << "kCapRound";
737 break;
738 case kCapProjecting:
739 out << "kCapProjecting";
740 break;
741 }
742 out << ";\n";
743 break;
744 case kGCJoinStyle:
745 out << " " << valname << ".fJoinStyle = ";
746 switch (GetJoinStyle()) {
747 case kJoinMiter:
748 out << "kJoinMiter";
749 break;
750 case kJoinRound:
751 out << "kJoinRound";
752 break;
753 case kJoinBevel:
754 out << "kJoinBevel";
755 break;
756 }
757 out << ";\n";
758 break;
759 case kGCFillStyle:
760 out << " " << valname << ".fFillStyle = ";
761 switch (GetFillStyle()) {
762 case kFillSolid:
763 out << "kFillSolid";
764 break;
765 case kFillTiled:
766 out << "kFillTiled";
767 break;
768 case kFillStippled:
769 out << "kFillStippled";
770 break;
772 out << "kFillOpaqueStippled";
773 break;
774 }
775 out << ";\n";
776 break;
777 case kGCFillRule:
778 out << " " << valname << ".fFillRule = ";
779 switch (GetFillRule()) {
780 case kEvenOddRule:
781 out << "kEvenOddRule";
782 break;
783 case kWindingRule:
784 out << "kWindingRule";
785 break;
786 }
787 out << ";\n";
788 break;
789 case kGCTile:
790 out << " " << valname << ".fTile = " << GetTile() << ";\n";
791 break;
792 case kGCStipple:
793 out << " " << valname << ".fStipple = " << GetStipple() << ";\n";
794 break;
796 out << " " << valname << ".fTsXOrigin = " << GetTileStipXOrigin() << ";\n";
797 break;
799 out << " " << valname << ".fTsYOrigin = " << GetTileStipYOrigin() << ";\n";
800 break;
801 case kGCFont:
802 out << " " << valname << ".fFont = ufont->GetFontHandle();\n";
803 break;
804 case kGCSubwindowMode:
805 out << " " << valname << ".fSubwindowMode = ";
806 switch (GetSubwindowMode()) {
807 case kClipByChildren:
808 out << "kClipByChildren";
809 break;
811 out << "kIncludeInferiors";
812 break;
813 }
814 out << ";\n";
815 break;
817 out << " " << valname << ".fGraphicsExposures = ";
819 out << "kTRUE";
820 else
821 out << "kFALSE";
822 out << ";\n";
823 break;
824 case kGCClipXOrigin:
825 out << " " << valname << ".fClipXOrigin = " << GetClipXOrigin() << ";\n";
826 break;
827 case kGCClipYOrigin:
828 out << " " << valname << ".fClipYOrigin = " << GetClipYOrigin() << ";\n";
829 break;
830 case kGCClipMask:
831 out << " " << valname << ".fClipMask = " << GetClipMask() << ";\n";
832 break;
833 case kGCDashOffset:
834 out << " " << valname << ".fDashOffset = " << GetDashOffset() << ";\n";
835 break;
836 case kGCDashList:
837 if (GetDashLen() > (Int_t)sizeof(GetDashes()))
838 Warning("SavePrimitive", "dash list can have only up to %ld elements",
839 (Long_t)sizeof(GetDashes()));
840 out << " " << valname << ".fDashLen = "
841 << std::min(GetDashLen(),(Int_t)sizeof(GetDashes())) << ";\n";
842 out << " memcpy(GetDashes()," << valname << ".fDashes,"
843 << valname << ".fDashLen);\n";
844 break;
845 case kGCArcMode:
846 out << " " << valname << ".fArcMode = ";
847 switch (GetArcMode()) {
848 case kArcChord:
849 out << "kArcChord";
850 break;
851 case kArcPieSlice:
852 out << "kArcPieSlice";
853 break;
854 }
855 out << ";\n";
856 break;
857 }
858 }
859 out << " uGC = gClient->GetGC(&" << valname << ", kTRUE);\n";
860}
861
862
863
864////////////////////////////////////////////////////////////////////////////////
865/// Create graphics context pool.
866
868{
869 fClient = client;
870 fList = new THashTable;
871 fList->SetOwner();
872}
873
874////////////////////////////////////////////////////////////////////////////////
875/// Delete graphics context pool.
876
878{
879 delete fList;
880}
881
882////////////////////////////////////////////////////////////////////////////////
883/// Force remove graphics context from list. Is only called via ~TGGC().
884
886{
887 TGGC *gc = (TGGC *) fList->FindObject(gct);
888
889 if (gc) {
890 if (gc->References() > 1)
891 Error("ForceFreeGC", "removed a shared graphics context\n"
892 "best to use graphics contexts via the TGGCPool()");
893 fList->Remove(gc);
894 }
895}
896
897////////////////////////////////////////////////////////////////////////////////
898/// Delete graphics context if it is not used anymore.
899
901{
902 TGGC *gc = (TGGC *) fList->FindObject(gct);
903
904 if (gc) {
905 if (gc->RemoveReference() == 0) {
906 fList->Remove(gc);
907 delete gc;
908 }
909 }
910}
911
912////////////////////////////////////////////////////////////////////////////////
913/// Delete graphics context if it is not used anymore.
914
916{
917 TIter next(fList);
918
919 while (TGGC *gc = (TGGC *) next()) {
920 if (gc->fContext == gct) {
921 if (gc->RemoveReference() == 0) {
922 fList->Remove(gc);
923 delete gc;
924 return;
925 }
926 }
927 }
928}
929
930////////////////////////////////////////////////////////////////////////////////
931/// Find graphics context. Returns 0 in case gc is not found.
932
934{
935 return (TGGC*) fList->FindObject(gct);
936}
937
938////////////////////////////////////////////////////////////////////////////////
939/// Find graphics context based on its GContext_t handle. Returns 0
940/// in case gc is not found.
941
943{
944 TIter next(fList);
945
946 while (TGGC *gc = (TGGC *) next()) {
947 if (gc->fContext == gct)
948 return gc;
949 }
950 return 0;
951}
952
953////////////////////////////////////////////////////////////////////////////////
954/// returns graphics context based on its GContext_t handle.
955
957{
959 gVirtualX->GetGCValues(gct, gval);
960 return GetGC(&gval, kTRUE);
961}
962
963////////////////////////////////////////////////////////////////////////////////
964/// Get the best matching graphics context depending on values.
965/// If rw is false only a readonly, not modifiable graphics context
966/// is returned. If rw is true a new modifiable graphics context is
967/// returned.
968
970{
971 TGGC *gc, *best_match = 0;
974
975 if (!values)
976 rw = kTRUE;
977
978 if (!rw) {
979
980 // First, try to find an exact matching GC.
981 // If no one found, then use the closest one.
982
983 TIter next(fList);
984
985 while ((gc = (TGGC *) next())) {
986 matching_bits = MatchGC(gc, values);
989 best_match = gc;
990 if ((gc->fValues.fMask & values->fMask) == values->fMask) {
991 exact = kTRUE;
992 break;
993 }
994 }
995 }
996
997 if (best_match) {
998 if (gDebug > 0)
999 Printf("<TGGCPool::GetGC>: %smatching GC found\n", exact ? "exact " : "");
1000 best_match->AddReference();
1001 if (!exact) {
1002 // add missing values to the best_match'ing GC...
1003 UpdateGC(best_match, values);
1004 }
1005 return best_match;
1006 }
1007 }
1008
1009 gc = new TGGC(values, kTRUE);
1010
1011 fList->Add(gc);
1012
1013 return gc;
1014}
1015
1016////////////////////////////////////////////////////////////////////////////////
1017/// Try to find matching graphics context. On success returns the amount
1018/// of matching bits (which may be zero if masks have no common bits),
1019/// -1 on failure (when there are common bits but not a single match).
1020
1022{
1024 Int_t matching_bits = -1;
1025 Bool_t match = kFALSE;
1026 const GCValues_t *gcv = &gc->fValues;
1027
1028 common_bits = values->fMask & gcv->fMask;
1029
1030 if (common_bits == 0) return 0; // no common bits, a possible
1031 // candidate anyway.
1032
1033 // Careful, check first the tile and stipple mask bits, as these
1034 // influence nearly all other GC functions... (do the same for
1035 // some other such bits as GCFunction, etc...). Perhaps we should
1036 // allow only exact GC matches.
1037
1038 if (gcv->fMask & kGCTile)
1039 if ((gcv->fTile != kNone) && !(values->fMask & kGCTile)) return -1;
1040 if (values->fMask & kGCTile)
1041 if ((values->fTile != kNone) && !(gcv->fMask & kGCTile)) return -1;
1042 if (gcv->fMask & kGCStipple)
1043 if ((gcv->fStipple != kNone) && !(values->fMask & kGCStipple)) return -1;
1044 if (values->fMask & kGCStipple)
1045 if ((values->fStipple != kNone) && !(gcv->fMask & kGCStipple)) return -1;
1046
1047 for (bit = 1; bit <= common_bits; bit <<= 1) {
1048 switch (bit & common_bits) {
1049 default:
1050 case 0:
1051 continue;
1052 case kGCFunction:
1053 match = (values->fFunction == gcv->fFunction);
1054 break;
1055 case kGCPlaneMask:
1056 match = (values->fPlaneMask == gcv->fPlaneMask);
1057 break;
1058 case kGCForeground:
1059 match = (values->fForeground == gcv->fForeground);
1060 break;
1061 case kGCBackground:
1062 match = (values->fBackground == gcv->fBackground);
1063 break;
1064 case kGCLineWidth:
1065 match = (values->fLineWidth == gcv->fLineWidth);
1066 break;
1067 case kGCLineStyle:
1068 match = (values->fLineStyle == gcv->fLineStyle);
1069 break;
1070 case kGCCapStyle:
1071 match = (values->fCapStyle == gcv->fCapStyle);
1072 break;
1073 case kGCJoinStyle:
1074 match = (values->fJoinStyle == gcv->fJoinStyle);
1075 break;
1076 case kGCFillStyle:
1077 match = (values->fFillStyle == gcv->fFillStyle);
1078 break;
1079 case kGCFillRule:
1080 match = (values->fFillRule == gcv->fFillRule);
1081 break;
1082 case kGCTile:
1083 match = (values->fTile == gcv->fTile);
1084 break;
1085 case kGCStipple:
1086 match = (values->fStipple == gcv->fStipple);
1087 break;
1088 case kGCTileStipXOrigin:
1089 match = (values->fTsXOrigin == gcv->fTsXOrigin);
1090 break;
1091 case kGCTileStipYOrigin:
1092 match = (values->fTsYOrigin == gcv->fTsYOrigin);
1093 break;
1094 case kGCFont:
1095 match = (values->fFont == gcv->fFont);
1096 break;
1097 case kGCSubwindowMode:
1098 match = (values->fSubwindowMode == gcv->fSubwindowMode);
1099 break;
1101 match = (values->fGraphicsExposures == gcv->fGraphicsExposures);
1102 break;
1103 case kGCClipXOrigin:
1104 match = (values->fClipXOrigin == gcv->fClipXOrigin);
1105 break;
1106 case kGCClipYOrigin:
1107 match = (values->fClipYOrigin == gcv->fClipYOrigin);
1108 break;
1109 case kGCClipMask:
1110 match = (values->fClipMask == gcv->fClipMask);
1111 break;
1112 case kGCDashOffset:
1113 match = (values->fDashOffset == gcv->fDashOffset);
1114 break;
1115 case kGCDashList:
1116 if (values->fDashLen == gcv->fDashLen)
1117 match = (strncmp(values->fDashes, gcv->fDashes, gcv->fDashLen) == 0);
1118 break;
1119 case kGCArcMode:
1120 match = (values->fArcMode == gcv->fArcMode);
1121 break;
1122 }
1123 if (!match)
1124 return -1;
1125 matching_bits++;
1126 match = kFALSE;
1127 }
1128
1129 return matching_bits;
1130}
1131
1132////////////////////////////////////////////////////////////////////////////////
1133/// Update graphics context with the values spcified in values->fMask.
1134
1136{
1137 gc->SetAttributes(values);
1138}
1139
1140////////////////////////////////////////////////////////////////////////////////
1141/// List all graphics contexts in the pool.
1142
1144{
1145 fList->Print();
1146}
const Mask_t kGCCapStyle
Definition GuiTypes.h:293
const Mask_t kGCArcMode
Definition GuiTypes.h:309
const Mask_t kGCDashOffset
Definition GuiTypes.h:307
const Mask_t kGCBackground
Definition GuiTypes.h:290
const Mask_t kGCForeground
Definition GuiTypes.h:289
const Mask_t kGCLineStyle
Definition GuiTypes.h:292
const Mask_t kGCSubwindowMode
Definition GuiTypes.h:302
const Mask_t kGCLineWidth
Definition GuiTypes.h:291
Handle_t Pixmap_t
Pixmap handle.
Definition GuiTypes.h:31
const Mask_t kGCTile
Definition GuiTypes.h:297
const Mask_t kGCClipXOrigin
Definition GuiTypes.h:304
Handle_t FontH_t
Font handle (as opposed to Font_t which is an index)
Definition GuiTypes.h:36
const Mask_t kGCDashList
Definition GuiTypes.h:308
const Mask_t kGCFillStyle
Definition GuiTypes.h:295
const Mask_t kGCJoinStyle
Definition GuiTypes.h:294
const Mask_t kGCFunction
Definition GuiTypes.h:287
EGraphicsFunction
Definition GuiTypes.h:68
@ kGXorReverse
src OR NOT dst
Definition GuiTypes.h:80
@ kGXnand
NOT src OR NOT dst.
Definition GuiTypes.h:83
@ kGXandReverse
src AND NOT dst
Definition GuiTypes.h:71
@ kGXor
src OR dst
Definition GuiTypes.h:76
@ kGXcopy
src
Definition GuiTypes.h:72
@ kGXorInverted
NOT src OR dst.
Definition GuiTypes.h:82
@ kGXandInverted
NOT src AND dst.
Definition GuiTypes.h:73
@ kGXequiv
NOT src XOR dst.
Definition GuiTypes.h:78
@ kGXset
1
Definition GuiTypes.h:84
@ kGXnor
NOT src AND NOT dst.
Definition GuiTypes.h:77
@ kGXnoop
dst
Definition GuiTypes.h:74
@ kGXinvert
NOT dst.
Definition GuiTypes.h:79
@ kGXxor
src XOR dst
Definition GuiTypes.h:75
@ kGXand
src AND dst
Definition GuiTypes.h:70
@ kGXclear
0
Definition GuiTypes.h:69
@ kGXcopyInverted
NOT src.
Definition GuiTypes.h:81
Handle_t GContext_t
Graphics context handle.
Definition GuiTypes.h:39
const Mask_t kGCTileStipXOrigin
Definition GuiTypes.h:299
const Mask_t kGCFont
Definition GuiTypes.h:301
const Handle_t kNone
Definition GuiTypes.h:89
@ kEvenOddRule
Definition GuiTypes.h:53
@ kArcPieSlice
Definition GuiTypes.h:55
@ kCapNotLast
Definition GuiTypes.h:50
@ kCapProjecting
Definition GuiTypes.h:50
@ kWindingRule
Definition GuiTypes.h:53
@ kFillOpaqueStippled
Definition GuiTypes.h:52
@ kClipByChildren
Definition GuiTypes.h:54
@ kLineDoubleDash
Definition GuiTypes.h:49
@ kCapButt
Definition GuiTypes.h:50
@ kCapRound
Definition GuiTypes.h:50
@ kJoinBevel
Definition GuiTypes.h:51
@ kIncludeInferiors
Definition GuiTypes.h:54
@ kFillStippled
Definition GuiTypes.h:52
@ kFillSolid
Definition GuiTypes.h:52
@ kLineSolid
Definition GuiTypes.h:49
@ kJoinRound
Definition GuiTypes.h:51
@ kJoinMiter
Definition GuiTypes.h:51
@ kLineOnOffDash
Definition GuiTypes.h:49
@ kArcChord
Definition GuiTypes.h:55
@ kFillTiled
Definition GuiTypes.h:52
const Mask_t kGCFillRule
Definition GuiTypes.h:296
const Mask_t kGCPlaneMask
Definition GuiTypes.h:288
const Mask_t kGCStipple
Definition GuiTypes.h:298
const Mask_t kGCGraphicsExposures
Definition GuiTypes.h:303
const Mask_t kGCClipYOrigin
Definition GuiTypes.h:305
const Mask_t kGCClipMask
Definition GuiTypes.h:306
const Mask_t kGCTileStipYOrigin
Definition GuiTypes.h:300
#define g(i)
Definition RSha256.hxx:105
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
Definition RtypesCore.h:69
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
Definition RtypesCore.h:68
constexpr Bool_t kFALSE
Definition RtypesCore.h:108
constexpr Bool_t kTRUE
Definition RtypesCore.h:107
const char Option_t
Option string (const char)
Definition RtypesCore.h:80
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define gClient
Definition TGClient.h:157
Option_t Option_t option
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t mask
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t gval
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void gc
Int_t gDebug
Global variable setting the debug level. Set to 0 to disable, increase it in steps of 1 to increase t...
Definition TROOT.cxx:783
#define gROOT
Definition TROOT.h:426
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
Definition TString.cxx:2509
#define gVirtualX
Definition TVirtualX.h:367
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
static const char * PixelAsHexString(ULong_t pixel)
Convert machine dependent pixel value (obtained via RGB2Pixel or via Number2Pixel() or via TColor::Ge...
Definition TColor.cxx:2542
Window client.
Definition TGClient.h:37
THashTable * fList
Definition TGGC.h:108
void Print(Option_t *option="") const override
List all graphics contexts in the pool.
Definition TGGC.cxx:1143
Int_t MatchGC(const TGGC *gc, GCValues_t *values)
Try to find matching graphics context.
Definition TGGC.cxx:1021
~TGGCPool() override
Delete graphics context pool.
Definition TGGC.cxx:877
TGGC * GetGC(GCValues_t *values, Bool_t rw=kFALSE)
Get the best matching graphics context depending on values.
Definition TGGC.cxx:969
void FreeGC(const TGGC *gc)
Delete graphics context if it is not used anymore.
Definition TGGC.cxx:900
friend class TGGC
Definition TGGC.h:105
TGGC * FindGC(const TGGC *gc)
Find graphics context. Returns 0 in case gc is not found.
Definition TGGC.cxx:933
void ForceFreeGC(const TGGC *gc)
Force remove graphics context from list. Is only called via ~TGGC().
Definition TGGC.cxx:885
TGGCPool(const TGGCPool &gp)
Definition TGGC.h:115
void UpdateGC(TGGC *gc, GCValues_t *values)
Update graphics context with the values spcified in values->fMask.
Definition TGGC.cxx:1135
Encapsulate a graphics context used in the low level graphics.
Definition TGGC.h:22
Pixmap_t GetTile() const
Definition TGGC.h:77
void SetArcMode(Int_t v)
Set arc mode (kArcChord, kArcPieSlice).
Definition TGGC.cxx:495
Int_t GetTileStipYOrigin() const
Definition TGGC.h:80
TGGC(GCValues_t *values, Bool_t calledByGCPool)
Create a graphics context (only called via TGGCPool::GetGC()).
Definition TGGC.cxx:37
Int_t GetJoinStyle() const
Definition TGGC.h:88
Bool_t GetGraphicsExposures() const
Definition TGGC.h:83
Int_t GetSubwindowMode() const
Definition TGGC.h:81
Int_t GetFillStyle() const
Definition TGGC.h:89
void SetLineWidth(Int_t v)
Set line width.
Definition TGGC.cxx:292
ULong_t GetPlaneMask() const
Definition TGGC.h:72
Int_t GetDashLen() const
Definition TGGC.h:92
void SetFont(FontH_t v)
Set font.
Definition TGGC.cxx:403
void SetPlaneMask(ULong_t v)
Set plane mask.
Definition TGGC.cxx:259
TGGC & operator=(const TGGC &rhs)
Graphics context assignment operator.
Definition TGGC.cxx:107
GContext_t fContext
graphics context handle
Definition TGGC.h:28
void SetTileStipYOrigin(Int_t v)
Y offset for tile or stipple operations.
Definition TGGC.cxx:392
Pixmap_t GetClipMask() const
Definition TGGC.h:86
Int_t GetClipXOrigin() const
Definition TGGC.h:84
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save graphics context info as a C++ statement(s) on output stream out.
Definition TGGC.cxx:619
void SetFillStyle(Int_t v)
Set fill style (kFillSolid, kFillTiled, kFillStippled, kFillOpaeueStippled).
Definition TGGC.cxx:337
Pixel_t GetForeground() const
Definition TGGC.h:73
Int_t GetFillRule() const
Definition TGGC.h:90
GCValues_t fValues
graphics context values + mask
Definition TGGC.h:27
void SetCapStyle(Int_t v)
Set cap style (kCapNotLast, kCapButt, kCapRound, kCapProjecting).
Definition TGGC.cxx:314
~TGGC() override
Delete graphics context.
Definition TGGC.cxx:95
const char * GetDashes() const
Definition TGGC.h:93
Int_t GetTileStipXOrigin() const
Definition TGGC.h:79
void SetForeground(Pixel_t v)
Set foreground color.
Definition TGGC.cxx:270
Int_t GetLineStyle() const
Definition TGGC.h:76
void SetClipMask(Pixmap_t v)
Bitmap for clipping.
Definition TGGC.cxx:458
void SetFillRule(Int_t v)
Set fill rule (kEvenOddRule, kWindingRule).
Definition TGGC.cxx:348
GContext_t operator()() const
Not inline due to a bug in g++ 2.96 20000731 (Red Hat Linux 7.0).
Definition TGGC.cxx:130
void SetDashOffset(Int_t v)
Patterned/dashed line offset.
Definition TGGC.cxx:469
void SetTileStipXOrigin(Int_t v)
X offset for tile or stipple operations.
Definition TGGC.cxx:381
void SetAttributes(GCValues_t *values)
Set attributes as specified in the values structure.
Definition TGGC.cxx:227
void SetDashList(const char v[], Int_t len)
Set dash pattern. First use SetDashOffset() if not 0.
Definition TGGC.cxx:480
EGraphicsFunction GetFunction() const
Definition TGGC.h:71
static TClass * Class()
void SetJoinStyle(Int_t v)
Set line join style (kJoinMiter, kJoinRound, kJoinBevel).
Definition TGGC.cxx:325
void SetClipXOrigin(Int_t v)
X origin for clipping.
Definition TGGC.cxx:436
Int_t GetClipYOrigin() const
Definition TGGC.h:85
Pixel_t GetBackground() const
Definition TGGC.h:74
void SetTile(Pixmap_t v)
Set tile pixmap for tiling operations.
Definition TGGC.cxx:359
void SetClipYOrigin(Int_t v)
Y origin for clipping.
Definition TGGC.cxx:447
void Print(Option_t *option="") const override
Print graphics contexts info.
Definition TGGC.cxx:506
void UpdateValues(GCValues_t *v)
Update values + mask.
Definition TGGC.cxx:138
void SetBackground(Pixel_t v)
Set background color.
Definition TGGC.cxx:281
void SetFunction(EGraphicsFunction v)
Set graphics context drawing function.
Definition TGGC.cxx:248
void SetStipple(Pixmap_t v)
Set 1 plane pixmap for stippling.
Definition TGGC.cxx:370
Mask_t GetMask() const
Definition TGGC.h:70
Pixmap_t GetStipple() const
Definition TGGC.h:78
Int_t GetLineWidth() const
Definition TGGC.h:75
void SetGraphicsExposures(Bool_t v)
True if graphics exposure should be generated.
Definition TGGC.cxx:425
void SetLineStyle(Int_t v)
Set line style (kLineSolid, kLineOnOffDash, kLineDoubleDash).
Definition TGGC.cxx:303
Int_t GetDashOffset() const
Definition TGGC.h:91
Int_t GetCapStyle() const
Definition TGGC.h:87
Int_t GetArcMode() const
Definition TGGC.h:94
TString GetMaskString() const
Returns GC mask as a string - used in SavePrimitive().
Definition TGGC.cxx:515
void SetSubwindowMode(Int_t v)
Set sub window mode (kClipByChildren, kIncludeInferiors).
Definition TGGC.cxx:414
TGClient * fClient
Connection to display server.
Definition TGObject.h:25
THashTable implements a hash table to store TObject's.
Definition THashTable.h:35
void Add(TObject *obj) override
Add object to the hash table.
TObject * Remove(TObject *obj) override
Remove object from the hashtable.
TObject * FindObject(const char *name) const override
Find object using its name.
void Print(Option_t *option, Int_t recurse) const override
Print the collection header and its elements.
Mother of all ROOT objects.
Definition TObject.h:42
TObject & operator=(const TObject &rhs) noexcept
TObject assignment operator.
Definition TObject.h:305
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
Definition TObject.cxx:1081
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition TObject.cxx:1095
Definitions for TRefCnt, base class for reference counted objects.
Definition TRefCnt.h:27
void SetRefCount(UInt_t r)
Definition TRefCnt.h:39
UInt_t References() const
Definition TRefCnt.h:38
Basic string class.
Definition TString.h:138
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition TString.cxx:2384
Graphics context structure.
Definition GuiTypes.h:225
ULong_t fBackground
background pixel
Definition GuiTypes.h:229
Int_t fFillRule
kEvenOddRule, kWindingRule
Definition GuiTypes.h:237
Pixmap_t fClipMask
bitmap clipping; other calls for rects
Definition GuiTypes.h:248
Int_t fDashOffset
patterned/dashed line information
Definition GuiTypes.h:249
Int_t fClipYOrigin
Definition GuiTypes.h:247
Int_t fClipXOrigin
origin for clipping
Definition GuiTypes.h:246
Int_t fLineWidth
line width
Definition GuiTypes.h:230
Pixmap_t fStipple
stipple 1 plane pixmap for stippling
Definition GuiTypes.h:240
Mask_t fMask
bit mask specifying which fields are valid
Definition GuiTypes.h:252
Int_t fLineStyle
kLineSolid, kLineOnOffDash, kLineDoubleDash
Definition GuiTypes.h:231
Pixmap_t fTile
tile pixmap for tiling operations
Definition GuiTypes.h:239
Bool_t fGraphicsExposures
boolean, should exposures be generated
Definition GuiTypes.h:245
Int_t fJoinStyle
kJoinMiter, kJoinRound, kJoinBevel
Definition GuiTypes.h:234
Char_t fDashes[8]
dash pattern list (dash length per byte)
Definition GuiTypes.h:250
ULong_t fForeground
foreground pixel
Definition GuiTypes.h:228
ULong_t fPlaneMask
plane mask
Definition GuiTypes.h:227
Int_t fFillStyle
kFillSolid, kFillTiled, kFillStippled, kFillOpaeueStippled
Definition GuiTypes.h:235
FontH_t fFont
default text font for text operations
Definition GuiTypes.h:243
Int_t fTsXOrigin
offset for tile or stipple operations
Definition GuiTypes.h:241
EGraphicsFunction fFunction
logical operation
Definition GuiTypes.h:226
Int_t fDashLen
number of dashes in fDashes
Definition GuiTypes.h:251
Int_t fCapStyle
kCapNotLast, kCapButt, kCapRound, kCapProjecting
Definition GuiTypes.h:232
Int_t fArcMode
kArcChord, kArcPieSlice
Definition GuiTypes.h:238
Int_t fTsYOrigin
Definition GuiTypes.h:242
Int_t fSubwindowMode
kClipByChildren, kIncludeInferiors
Definition GuiTypes.h:244