Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGX11TTF.cxx
Go to the documentation of this file.
1// @(#)root/x11ttf:$Id: 80028b538e60290371c1c5d73728f78b1c32f09a $
2// Author: Valeriy Onuchin (Xft support) 02/10/07
3// Author: Olivier Couet 01/10/02
4// Author: Fons Rademakers 21/11/98
5
6/*************************************************************************
7 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
8 * All rights reserved. *
9 * *
10 * For the licensing terms see $ROOTSYS/LICENSE. *
11 * For the list of contributors see $ROOTSYS/README/CREDITS. *
12 *************************************************************************/
13
14/** \class TGX11TTF
15\ingroup x11
16
17Interface to low level X11 (Xlib). This class gives access to basic
18X11 graphics via the parent class TGX11. However, all text and font
19handling is done via the Freetype TrueType library. When the
20shared library containing this class is loaded the global gVirtualX
21is redirected to point to this class.
22*/
23
24#include <cstdlib>
25
26#include <ft2build.h>
27#include FT_FREETYPE_H
28#include FT_GLYPH_H
29#include "TGX11TTF.h"
30#include "TEnv.h"
31
32#include <X11/Xlib.h>
33#include <X11/Xutil.h>
34#include <X11/Xatom.h>
35#include <X11/cursorfont.h>
36#include <X11/keysym.h>
37#include <X11/xpm.h>
38
39struct RXColor:XColor{};
40struct RVisual:Visual{};
41struct RXImage:XImage{};
42
43#ifdef R__HAS_XFT
44
45#include "THashTable.h"
46#include "TRefCnt.h"
47#include <X11/Xft/Xft.h>
48
49///////////////////////// xft font data //////////////////////////////////////
50class TXftFontData : public TNamed, public TRefCnt {
51public:
52 GContext_t fGC; // graphics context
53 XftFont *fXftFont; // xft font
54
57 {
58 SetRefCount(1);
59 fGC = gc;
60 }
61
62 void MapGCFont(GContext_t gc, FontStruct_t font)
63 {
64 fGC = gc; fXftFont = (XftFont *)font;
65 }
66
67 ~TXftFontData() override
68 {
69 if (References() == 1) {
70 if (fXftFont) XftFontClose((Display*)gVirtualX->GetDisplay(), fXftFont);
71 }
72 }
73};
74
75/////////////////// hash table //////////////////////////////////////////////
76class TXftFontHash {
77public:
78 THashTable *fList; // hash table
79
80 TXftFontHash() { fList = new THashTable(50); }
81
82 TXftFontData *FindByName(const char *name)
83 {
84 return (TXftFontData*)fList->FindObject(name);
85 }
86
88 {
89 TIter next(fList);
90
91 while (auto d = (TXftFontData*) next()) {
92 if (d->fXftFont == (XftFont *)font)
93 return d;
94 }
95 return nullptr;
96 }
97
99 {
100 TIter next(fList);
101
102 while (auto d = (TXftFontData*) next()) {
103 if (d->fGC == gc)
104 return d;
105 }
106 return nullptr;
107 }
108
109 void AddFont(TXftFontData *data)
110 {
111 // Loop over all existing TXftFontData, if we already have one with the same
112 // font data, set the reference counter of this one beyond 1 so it does
113 // delete the font pointer
114 TIter next(fList);
115
116 while (auto d = (TXftFontData*) next()) {
117 if (d->fXftFont == data->fXftFont)
118 data->AddReference();
119 }
120
121 fList->Add(data);
122 }
123
124 void FreeFont(TXftFontData *data)
125 {
126 fList->Remove(data);
127 delete data;
128 }
129};
130
131Bool_t TGX11TTF::gXftInit = kFALSE;
132
133#endif // R__HAS_XFT
134
135/** \class TTFX11Init
136\ingroup GraphicsBackends
137
138Small utility class that takes care of switching the current
139gVirtualX to the new TGX11TTF class as soon as the shared library
140containing this class is loaded.
141*/
142
144public:
146};
148
149
150
151////////////////////////////////////////////////////////////////////////////////
152/// Create copy of TGX11 but now use TrueType fonts.
153
155{
156 SetName("X11TTF");
157 SetTitle("ROOT interface to X11 with TrueType fonts");
158
159 if (!TTF::fgInit) TTF::Init();
160
162 fHasXft = kFALSE;
163 fAlign.x = 0;
164 fAlign.y = 0;
165
166#ifdef R__HAS_XFT
167 fXftFontHash = nullptr;
168#endif
169}
170
171////////////////////////////////////////////////////////////////////////////////
172/// Static method setting TGX11TTF as the acting gVirtualX.
173
175{
176 if (gVirtualX && dynamic_cast<TGX11*>(gVirtualX)) {
177 TGX11 *oldg = (TGX11 *) gVirtualX;
178 gVirtualX = new TGX11TTF(*oldg);
179 delete oldg;
180 }
181}
182
183////////////////////////////////////////////////////////////////////////////////
184/// Initialize X11 system. Returns kFALSE in case of failure.
185
186Bool_t TGX11TTF::Init(void *display)
187{
188#ifdef R__HAS_XFT
189 fXftFontHash = nullptr;
190 XFontStruct *fs = nullptr;
191 if (display) fs = XLoadQueryFont((Display *)display, "-*-helvetica-*-r-*-*-14-*-*-*-*-*-*-*");
192 if (!fs) gEnv->SetValue("X11.UseXft", 1);
193 if (display && fs) XFreeFont((Display *)display, fs);
194 if (gEnv->GetValue("X11.UseXft", 0)) {
195 fHasXft = kTRUE;
197 }
198#endif
199 Bool_t r = TGX11::Init(display);
200
201 if (fDepth > 8) {
203 } else {
205 }
206
207 return r;
208}
209
210////////////////////////////////////////////////////////////////////////////////
211/// Compute alignment variables. The alignment is done on the horizontal string
212/// then the rotation is applied on the alignment variables.
213/// SetRotation and LayoutGlyphs should have been called before.
214
216{
217 EAlign align = (EAlign) fTextAlign;
218
219 // vertical alignment
220 if (align == kTLeft || align == kTCenter || align == kTRight) {
222 } else if (align == kMLeft || align == kMCenter || align == kMRight) {
223 fAlign.y = TTF::fgAscent/2;
224 } else {
225 fAlign.y = 0;
226 }
227
228 // horizontal alignment
229 if (align == kTRight || align == kMRight || align == kBRight) {
231 } else if (align == kTCenter || align == kMCenter || align == kBCenter) {
232 fAlign.x = TTF::fgWidth/2;
233 } else {
234 fAlign.x = 0;
235 }
236
238 fAlign.x = fAlign.x >> 6;
239 fAlign.y = fAlign.y >> 6;
240}
241
242////////////////////////////////////////////////////////////////////////////////
243/// Draw FT_Bitmap bitmap to xim image at position bx,by using specified
244/// foreground color.
245
248{
249 UChar_t d = 0, *s = source->buffer;
250
251 if (TTF::fgSmoothing) {
252
253 static RXColor col[5];
254 RXColor *bcol = nullptr;
255 XColor *bc;
256 Int_t x, y;
257
258 // background kClear, i.e. transparent, we take as background color
259 // the average of the rgb values of all pixels covered by this character
260 if (back == (ULong_t) -1 && (UInt_t)source->width) {
261 ULong_t r, g, b;
263 const Int_t maxdots = 50000;
264
265 dots = Int_t(source->width * source->rows);
266 dots = dots > maxdots ? maxdots : dots;
267 bcol = new RXColor[dots];
268 if (!bcol) return;
269 bc = bcol;
270 dotcnt = 0;
271 for (y = 0; y < (int) source->rows; y++) {
272 for (x = 0; x < (int) source->width; x++, bc++) {
273/// bc->pixel = XGetPixel(xim, bx + x, by - c->TTF::fgAscent + y);
274 bc->pixel = XGetPixel(xim, bx + x, by + y);
275 bc->flags = DoRed | DoGreen | DoBlue;
276 if (++dotcnt >= maxdots) break;
277 }
278 }
280 r = g = b = 0;
281 bc = bcol;
282 dotcnt = 0;
283 for (y = 0; y < (int) source->rows; y++) {
284 for (x = 0; x < (int) source->width; x++, bc++) {
285 r += bc->red;
286 g += bc->green;
287 b += bc->blue;
288 if (++dotcnt >= maxdots) break;
289 }
290 }
291 if (dots != 0) {
292 r /= dots;
293 g /= dots;
294 b /= dots;
295 }
296 bc = &col[0];
297 if (bc->red == r && bc->green == g && bc->blue == b)
298 bc->pixel = back;
299 else {
300 bc->pixel = ~back;
301 bc->red = (UShort_t) r;
302 bc->green = (UShort_t) g;
303 bc->blue = (UShort_t) b;
304 }
305 }
306 delete [] bcol;
307
308 // if fore or background have changed from previous character
309 // recalculate the 3 smoothing colors (interpolation between fore-
310 // and background colors)
311 if (fore != col[4].pixel || back != col[0].pixel) {
312 col[4].pixel = fore;
313 col[4].flags = DoRed|DoGreen|DoBlue;
314 if (back != (ULong_t) -1) {
315 col[3].pixel = back;
316 col[3].flags = DoRed | DoGreen | DoBlue;
317 QueryColors(fColormap, &col[3], 2);
318 col[0] = col[3];
319 } else {
320 QueryColors(fColormap, &col[4], 1);
321 }
322
323 // interpolate between fore and background colors
324 for (x = 3; x > 0; x--) {
325 col[x].red = (col[4].red *x + col[0].red *(4-x)) /4;
326 col[x].green = (col[4].green*x + col[0].green*(4-x)) /4;
327 col[x].blue = (col[4].blue *x + col[0].blue *(4-x)) /4;
328 if (!AllocColor(fColormap, &col[x])) {
329 Warning("DrawImage", "cannot allocate smoothing color");
330 col[x].pixel = col[x+1].pixel;
331 }
332 }
333 }
334
335 // put smoothed character, character pixmap values are an index
336 // into the 5 colors used for aliasing (4 = foreground, 0 = background)
337 for (y = 0; y < (int) source->rows; y++) {
338 for (x = 0; x < (int) source->width; x++) {
339 d = *s++ & 0xff;
340 d = ((d + 10) * 5) / 256;
341 if (d > 4) d = 4;
342 if (d && x < (int) source->width) {
343 ULong_t p = col[d].pixel;
344 XPutPixel(xim, bx + x, by + y, p);
345 }
346 }
347 }
348 } else {
349 // no smoothing, just put character using foreground color
350 UChar_t* row=s;
351 for (int y = 0; y < (int) source->rows; y++) {
352 int n = 0;
353 s = row;
354 for (int x = 0; x < (int) source->width; x++) {
355 if (n == 0) d = *s++;
356 if (TESTBIT(d,7-n))
357 XPutPixel(xim, bx + x, by + y, fore);
358 if (++n == (int) kBitsPerByte) n = 0;
359 }
360 row += source->pitch;
361 }
362 }
363}
364
365////////////////////////////////////////////////////////////////////////////////
366/// Draw text using TrueType fonts. If TrueType fonts are not available the
367/// text is drawn with TGX11::DrawText.
368
370 const char *text, ETextMode mode)
371{
372 if (!fHasTTFonts) {
374 } else {
375 if (!TTF::fgInit) TTF::Init();
379 Align();
380 RenderString(x, y, mode);
381 }
382}
383
384////////////////////////////////////////////////////////////////////////////////
385/// Draw text using TrueType fonts. If TrueType fonts are not available the
386/// text is drawn with TGX11::DrawText.
387
389 const wchar_t *text, ETextMode mode)
390{
391 if (!fHasTTFonts) {
393 } else {
394 if (!TTF::fgInit) TTF::Init();
398 Align();
399 RenderString(x, y, mode);
400 }
401}
402
403////////////////////////////////////////////////////////////////////////////////
404/// Get the background of the current window in an XImage.
405
407{
411 Int_t xy;
412 gVirtualX->GetWindowSize(cws, xy, xy, width, height);
413
414 if (x < 0) {
415 w += x;
416 x = 0;
417 }
418 if (y < 0) {
419 h += y;
420 y = 0;
421 }
422
423 if (x+w > width) w = width - x;
424 if (y+h > height) h = height - y;
425
426 return (RXImage*)XGetImage((Display*)fDisplay, cws, x, y, w, h, AllPlanes, ZPixmap);
427}
428
429////////////////////////////////////////////////////////////////////////////////
430/// Test if there is really something to render.
431
433{
437 Int_t xy;
438 gVirtualX->GetWindowSize(cws, xy, xy, width, height);
439
440 // If w or h is 0, very likely the string is only blank characters
441 if ((int)w == 0 || (int)h == 0) return kFALSE;
442
443 // If string falls outside window, there is probably no need to draw it.
444 if (x + (int)w <= 0 || x >= (int)width) return kFALSE;
445 if (y + (int)h <= 0 || y >= (int)height) return kFALSE;
446
447 // If w or h are much larger than the window size, there is probably no need
448 // to draw it. Moreover a to large text size may produce a Seg Fault in
449 // malloc in RenderString.
450 if (w > 10*width) return kFALSE;
451 if (h > 10*height) return kFALSE;
452
453 return kTRUE;
454}
455
456////////////////////////////////////////////////////////////////////////////////
457/// Perform the string rendering in the pad.
458/// LayoutGlyphs should have been called before.
459
461{
463
464 // compute the size and position of the XImage that will contain the text
465 Int_t Xoff = 0; if (TTF::GetBox().xMin < 0) Xoff = -TTF::GetBox().xMin;
466 Int_t Yoff = 0; if (TTF::GetBox().yMin < 0) Yoff = -TTF::GetBox().yMin;
467 Int_t w = TTF::GetBox().xMax + Xoff;
468 Int_t h = TTF::GetBox().yMax + Yoff;
469 Int_t x1 = x-Xoff-fAlign.x;
470 Int_t y1 = y+Yoff+fAlign.y-h;
471
472 if (!IsVisible(x1, y1, w, h)) return;
473
474 // create the XImage that will contain the text
476 XImage *xim = XCreateImage((Display*)fDisplay, fVisual,
477 depth, ZPixmap, 0, nullptr, w, h,
478 depth <= 8 ? 8 : (depth <= 16 ? 16 : 32), 0);
479 //bitmap_pad should be 8, 16 or 32 https://www.x.org/releases/X11R7.5/doc/man/man3/XPutPixel.3.html
480 if (!xim) return;
481
482 // use malloc since Xlib will use free() in XDestroyImage
483 xim->data = (char *) malloc(xim->bytes_per_line * h);
484 memset(xim->data, 0, xim->bytes_per_line * h);
485
486 ULong_t bg;
487 XGCValues values;
488 GC *gc = (GC*)GetGC(3);
489 if (!gc) {
490 Error("DrawText", "error getting Graphics Context");
491 return;
492 }
493 XGetGCValues((Display*)fDisplay, *gc, GCForeground | GCBackground, &values);
494
495 // get the background
496 if (mode == kClear) {
497 // if mode == kClear we need to get an image of the background
498 XImage *bim = GetBackground(x1, y1, w, h);
499 if (!bim) {
500 Error("DrawText", "error getting background image");
501 return;
502 }
503
504 // and copy it into the text image
505 Int_t xo = 0, yo = 0;
506 if (x1 < 0) xo = -x1;
507 if (y1 < 0) yo = -y1;
508
509 for (int yp = 0; yp < (int) bim->height; yp++) {
510 for (int xp = 0; xp < (int) bim->width; xp++) {
513 }
514 }
516 bg = (ULong_t) -1;
517 } else {
518 // if mode == kOpaque its simple, we just draw the background
519 XAddPixel(xim, values.background);
520 bg = values.background;
521 }
522
523 // paint the glyphs in the XImage
525 for (int n = 0; n < TTF::fgNumGlyphs; n++, glyph++) {
526 if (FT_Glyph_To_Bitmap(&glyph->fImage,
529 nullptr, 1 )) continue;
531 FT_Bitmap* source = &bitmap->bitmap;
532 Int_t bx, by;
533
534 bx = bitmap->left+Xoff;
535 by = h - bitmap->top-Yoff;
536 DrawImage(source, values.foreground, bg, (RXImage*)xim, bx, by);
537 }
538
539 // put the Ximage on the screen
541 gc = (GC*)GetGC(6);
542 if (gc) XPutImage((Display*)fDisplay, cws, *gc, xim, 0, 0, x1, y1, w, h);
544}
545
546////////////////////////////////////////////////////////////////////////////////
547/// Set specified font.
548
558
559////////////////////////////////////////////////////////////////////////////////
560/// Set text font to specified name.
561/// mode : loading flag
562/// mode=0 : search if the font exist (kCheck)
563/// mode=1 : search the font and load it if it exists (kLoad)
564/// font : font name
565///
566/// Set text font to specified name. This function returns 0 if
567/// the specified font is found, 1 if not.
568
570{
571 if (!fHasTTFonts) {
573 } else {
575 }
576}
577
578////////////////////////////////////////////////////////////////////////////////
579/// Set current text size.
580
590
591#ifdef R__HAS_XFT
592
593///////////////////////////// Xft font methods /////////////////////////////////
594////////////////////////////////////////////////////////////////////////////////
595/// Parses an XLFD name and opens a font.
596
597FontStruct_t TGX11TTF::LoadQueryFont(const char *font_name)
598{
599 if (!fXftFontHash) {
600 return TGX11::LoadQueryFont(font_name);
601 }
602
603 TXftFontData *data = fXftFontHash->FindByName(font_name);
604
605 // already loaded
606 if (data) {
607 return (FontStruct_t)data->fXftFont;
608 }
609
610 if (!gXftInit) {
611 XftInit(nullptr);
612 gXftInit = kTRUE;
613 }
614
615 XftFont *xftfont = XftFontOpenXlfd((Display*)fDisplay, fScreenNumber, font_name);
616
617 data = new TXftFontData(0, xftfont, font_name);
618 fXftFontHash->AddFont(data);
619
620 return (FontStruct_t)xftfont;
621}
622
623////////////////////////////////////////////////////////////////////////////////
624/// Explicitly delete font structure obtained with LoadQueryFont().
625
627{
628 if (!fXftFontHash) {
630 return;
631 }
632
633 TXftFontData *data = fXftFontHash->FindByFont(fs);
634
635 if (data)
636 fXftFontHash->FreeFont(data);
637}
638
639////////////////////////////////////////////////////////////////////////////////
640/// Explicitly delete a graphics context.
641
643{
644 if (!fXftFontHash) {
646 return;
647 }
648
649 TXftFontData *gcdata = fXftFontHash->FindByGC(gc);
650 if (gcdata) fXftFontHash->FreeFont(gcdata);
652}
653
654////////////////////////////////////////////////////////////////////////////////
655/// Return handle to font described by font structure.
656
658{
659 if (!fXftFontHash) {
660 return TGX11::GetFontHandle(fs);
661 }
662
663 return (FontH_t)fs;
664}
665
666////////////////////////////////////////////////////////////////////////////////
667/// Return the font associated with the graphics context gc
668
670{
671 if (!fXftFontHash) {
672 return 0;
673 }
674
675 TXftFontData *data = fXftFontHash->FindByGC(gc);
676
677 // no XftFont data
678 if (!data) return 0;
679
680 return (FontStruct_t)data->fXftFont;
681}
682
683////////////////////////////////////////////////////////////////////////////////
684/// Map the XftFont with the Graphics Context using it.
685
687{
688 if (!fXftFontHash)
689 return;
690
691 TXftFontData *gcdata = fXftFontHash->FindByGC(gc);
692 TXftFontData *fontdata = fXftFontHash->FindByFont(font);
693
694 if (gcdata) { // && (gcdata->fXftFont == 0)) {
695 gcdata->fXftFont = (XftFont *)font;
696 }
697 else if (fontdata) {
698 TXftFontData *data = new TXftFontData(gc, (XftFont *)font, fontdata->GetName());
699 fXftFontHash->AddFont(data);
700 }
701}
702
703////////////////////////////////////////////////////////////////////////////////
704/// Return length of string in pixels. Size depends on font
705
706Int_t TGX11TTF::TextWidth(FontStruct_t font, const char *s, Int_t len)
707{
708 if (!fXftFontHash) {
709 return TGX11::TextWidth(font, s, len);
710 }
711
712 TXftFontData *data = fXftFontHash->FindByFont(font);
713
714 if (!data) return 0;
715
716 XftFont *xftfont = data->fXftFont;
717
718 if (xftfont) {
721 return glyph_info.xOff;
722 }
723 return 0;
724}
725
726////////////////////////////////////////////////////////////////////////////////
727/// Return some font properties
728
730{
731 if (!fXftFontHash) {
733 return;
734 }
735
736 TXftFontData *data = fXftFontHash->FindByFont(font);
737
738 if (!data) {
740 return;
741 }
742
743 XftFont *xftfont = data->fXftFont;
744
745 if (!xftfont) {
747 return;
748 }
749
750 max_ascent = xftfont->ascent;
751 max_descent = xftfont->descent;
752}
753
754////////////////////////////////////////////////////////////////////////////////
755/// Draw text string
756
758 const char *text, Int_t len)
759{
764
765 if (!xwindow) {
766 return;
767 }
768
769 if (!gc) {
770 return;
771 }
772
773 if (!text || (len < 1) || !text[0]) {
774 return;
775 }
776
777 if (!fXftFontHash) {
779 return;
780 }
781
783 gval.fMask = kGCForeground | kGCBackground; // retrieve GC values
785
786 TXftFontData *data = fXftFontHash->FindByGC(gc);
787
788 // no XftFont data
789 if (!data) {
791 return;
792 }
793
794 xftfont = data->fXftFont;
795
796 // no Xft font
797 if (!xftfont) {
799 return;
800 }
801
802 // dummies
804 Int_t dx,dy;
806
807 // check if drawable is bitmap
808 XGetGeometry((Display*)fDisplay, (Drawable)xwindow, &droot, &dx, &dy,
809 &width, &height, &bwidth, &depth);
810
811 if (depth <= 1) {
813 return;
814 }
815
816 memset(&xcolor, 0, sizeof(xcolor));
817 xcolor.pixel = gval.fForeground;
818
819 XQueryColor((Display*)fDisplay, fColormap, &xcolor);
820
821 // create XftDraw
823
824 if (!xftdraw) {
825 //Warning("could not create an XftDraw");
827 return;
828 }
829
830 xftcolor.color.red = xcolor.red;
831 xftcolor.color.green = xcolor.green;
832 xftcolor.color.blue = xcolor.blue;
833 xftcolor.color.alpha = 0xffff;
834 xftcolor.pixel = gval.fForeground;
835
837
838 // cleanup
840}
841
842#endif // R__HAS_XFT
const Mask_t kGCBackground
Definition GuiTypes.h:289
const Mask_t kGCForeground
Definition GuiTypes.h:288
Handle_t FontH_t
Font handle (as opposed to Font_t which is an index)
Definition GuiTypes.h:35
Handle_t Window_t
Window handle.
Definition GuiTypes.h:29
Handle_t GContext_t
Graphics context handle.
Definition GuiTypes.h:38
Handle_t Drawable_t
Drawable handle.
Definition GuiTypes.h:31
Handle_t FontStruct_t
Pointer to font structure.
Definition GuiTypes.h:39
#define d(i)
Definition RSha256.hxx:102
#define b(i)
Definition RSha256.hxx:100
#define g(i)
Definition RSha256.hxx:105
#define h(i)
Definition RSha256.hxx:106
bool Bool_t
Boolean (0=false, 1=true) (bool)
Definition RtypesCore.h:77
unsigned short UShort_t
Unsigned Short integer 2 bytes (unsigned short)
Definition RtypesCore.h:54
int Int_t
Signed integer 4 bytes (int)
Definition RtypesCore.h:59
constexpr ULong_t kBitsPerByte
Definition RtypesCore.h:130
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
Definition RtypesCore.h:69
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
Definition RtypesCore.h:60
float Float_t
Float 4 bytes (float)
Definition RtypesCore.h:71
short Font_t
Font number (short)
Definition RtypesCore.h:95
constexpr Bool_t kFALSE
Definition RtypesCore.h:108
constexpr Bool_t kTRUE
Definition RtypesCore.h:107
#define TESTBIT(n, i)
Definition Rtypes.h:94
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
R__EXTERN TEnv * gEnv
Definition TEnv.h:170
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
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 GetGCValues
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void pixel
Option_t Option_t mgn
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 r
Option_t Option_t fontnumber
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 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 bitmap
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t textsize
Option_t Option_t TPoint TPoint angle
Option_t Option_t TPoint xy
Option_t Option_t TPoint TPoint const char mode
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 org
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 fontname
Option_t Option_t width
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize fs
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 char Point_t Rectangle_t height
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void gc
Option_t Option_t TPoint TPoint const char text
Option_t Option_t TPoint TPoint const char y1
static TTFX11Init gTTFX11Init
Definition TGX11TTF.cxx:147
char name[80]
Definition TGX11.cxx:110
XID Window
Definition TGX11.h:36
XID Drawable
Definition TGX11.h:33
#define gVirtualX
Definition TVirtualX.h:337
#define malloc
Definition civetweb.c:1575
Font_t fTextFont
Text font.
Definition TAttText.h:27
Float_t fTextSize
Text size.
Definition TAttText.h:24
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Definition TEnv.cxx:505
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=nullptr)
Set the value of a resource or create a new resource.
Definition TEnv.cxx:750
void RenderString(Int_t x, Int_t y, ETextMode mode)
Perform the string rendering in the pad.
Definition TGX11TTF.cxx:460
static void Activate()
Static method setting TGX11TTF as the acting gVirtualX.
Definition TGX11TTF.cxx:174
void Align(void)
Compute alignment variables.
Definition TGX11TTF.cxx:215
RXImage * GetBackground(Int_t x, Int_t y, UInt_t w, UInt_t h)
Get the background of the current window in an XImage.
Definition TGX11TTF.cxx:406
Bool_t Init(void *display) override
Initialize X11 system. Returns kFALSE in case of failure.
Definition TGX11TTF.cxx:186
void SetTextSize(Float_t textsize) override
Set current text size.
Definition TGX11TTF.cxx:581
void DrawImage(FT_Bitmap *source, ULong_t fore, ULong_t back, RXImage *xim, Int_t bx, Int_t by)
Draw FT_Bitmap bitmap to xim image at position bx,by using specified foreground color.
Definition TGX11TTF.cxx:246
FT_Vector fAlign
alignment vector
Definition TGX11TTF.h:33
void SetTextFont(Font_t fontnumber) override
Set specified font.
Definition TGX11TTF.cxx:549
TGX11TTF(const TGX11 &org)
Create copy of TGX11 but now use TrueType fonts.
Definition TGX11TTF.cxx:154
Bool_t IsVisible(Int_t x, Int_t y, UInt_t w, UInt_t h)
Test if there is really something to render.
Definition TGX11TTF.cxx:432
@ kTCenter
Definition TGX11TTF.h:30
@ kBRight
Definition TGX11TTF.h:31
@ kBCenter
Definition TGX11TTF.h:31
@ kMCenter
Definition TGX11TTF.h:30
@ kMRight
Definition TGX11TTF.h:30
@ kTRight
Definition TGX11TTF.h:30
void DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn, const char *text, ETextMode mode) override
Draw text using TrueType fonts.
Definition TGX11TTF.cxx:369
This class is the basic interface to the X11 (Xlib) graphics system.
Definition TGX11.h:80
void * fDisplay
Pointer to display.
Definition TGX11.h:125
Colormap fColormap
Default colormap, 0 if b/w.
Definition TGX11.h:129
FontStruct_t LoadQueryFont(const char *font_name) override
Load font and query font.
Definition GX11Gui.cxx:941
Int_t fScreenNumber
Screen number.
Definition TGX11.h:132
Bool_t AllocColor(Colormap cmap, RXColor *color)
Allocate color in colormap.
Definition TGX11.cxx:365
void DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn, const char *text, ETextMode mode) override
Draw a text string using current font.
Definition TGX11.cxx:752
void QueryColors(Colormap cmap, RXColor *colors, Int_t ncolors)
Returns the current RGB value for the pixel in the XColor structure.
Definition TGX11.cxx:382
void * GetGC(Int_t which) const
Return desired Graphics Context ("which" maps directly on gGCList[]).
Definition TGX11.cxx:932
Bool_t fHasXft
True when XftFonts are used.
Definition TGX11.h:147
Int_t SetTextFont(char *fontname, ETextSetMode mode) override
Set text font to specified name.
Definition TGX11.cxx:3155
Int_t fTextAlign
Text alignment (set in SetTextAlign)
Definition TGX11.h:135
Int_t fDepth
Number of color planes.
Definition TGX11.h:139
Bool_t Init(void *display) override
Initialize X11 system. Returns kFALSE in case of failure.
Definition TGX11.cxx:341
void DeleteGC(GContext_t gc) override
Explicitly delete a graphics context.
Definition GX11Gui.cxx:1032
void SetTextSize(Float_t textsize) override
Set current text size.
Definition TGX11.cxx:3204
void DeleteFont(FontStruct_t fs) override
Explicitly delete font structure obtained with LoadQueryFont().
Definition GX11Gui.cxx:962
Int_t TextWidth(FontStruct_t font, const char *s, Int_t len) override
Return length of string in pixels. Size depends on font.
Definition GX11Gui.cxx:2069
FontH_t GetFontHandle(FontStruct_t fs) override
Return handle to font described by font structure.
Definition GX11Gui.cxx:950
void DrawString(Drawable_t id, GContext_t gc, Int_t x, Int_t y, const char *s, Int_t len) override
Draw a string using a specific graphics context in position (x,y).
Definition GX11Gui.cxx:2058
RVisual * fVisual
Pointer to visual used by all windows.
Definition TGX11.h:126
Window_t GetCurrentWindow() const override
Return current window pointer. Protected method used by TGX11TTF.
Definition TGX11.cxx:923
void GetFontProperties(FontStruct_t font, Int_t &max_ascent, Int_t &max_descent) override
Return some font properties.
Definition GX11Gui.cxx:2077
Bool_t fHasTTFonts
True when TrueType fonts are used.
Definition TGX11.h:146
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.
The TNamed class is the base class for all named ROOT classes.
Definition TNamed.h:29
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
Definition TNamed.cxx:173
virtual void SetName(const char *name)
Set the name of the TNamed.
Definition TNamed.cxx:149
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
Definition TObject.cxx:1057
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition TObject.cxx:1071
Definitions for TRefCnt, base class for reference counted objects.
Definition TRefCnt.h:27
Small utility class that takes care of switching the current gVirtualX to the new TGX11TTF class as s...
Definition TGX11TTF.cxx:143
TTF helper class containing glyphs description.
Definition TTF.h:65
static void PrepareString(const char *string)
Put the characters in "string" in the "glyphs" array.
Definition TTF.cxx:271
static TTF::TTGlyph fgGlyphs[kMaxGlyphs]
glyphs
Definition TTF.h:83
static Bool_t fgSmoothing
use anti-aliasing (true when >8 planes, false otherwise)
Definition TTF.h:90
static void Init()
Initialise the TrueType fonts interface.
Definition TTF.cxx:64
static void LayoutGlyphs()
Compute the glyphs positions, fgAscent and fgWidth (needed for alignment).
Definition TTF.cxx:202
static void SetSmoothing(Bool_t state)
Set smoothing (anti-aliasing) flag.
Definition TTF.cxx:370
static void SetRotationMatrix(Float_t angle)
Set the rotation matrix used to rotate the font outlines.
Definition TTF.cxx:347
static void SetTextFont(Font_t fontnumber)
Set specified font.
Definition TTF.cxx:495
static Int_t fgAscent
string ascent, used to compute Y alignment
Definition TTF.h:75
static Int_t fgWidth
string width, used to compute X alignment
Definition TTF.h:92
static Bool_t fgInit
true if the Init has been called
Definition TTF.h:85
static const FT_BBox & GetBox()
Definition TTF.cxx:656
static Int_t fgNumGlyphs
number of glyphs in the string
Definition TTF.h:88
static FT_Matrix * fgRotMatrix
rotation matrix
Definition TTF.h:89
static void SetTextSize(Float_t textsize)
Set current text size.
Definition TTF.cxx:566
virtual void DeleteFont(FontStruct_t fs)
Explicitly deletes the font structure "fs" obtained via LoadQueryFont().
virtual FontStruct_t GetGCFont(GContext_t gc)
Return the font associated with the graphics context gc.
virtual FontStruct_t LoadQueryFont(const char *font_name)
Provides the most common way for accessing a font: opens (loads) the specified font and returns a poi...
virtual FontH_t GetFontHandle(FontStruct_t fs)
Returns the font handle of the specified font structure "fs".
virtual void GetFontProperties(FontStruct_t font, Int_t &max_ascent, Int_t &max_descent)
Returns the font properties.
virtual void DeleteGC(GContext_t gc)
Deletes the specified GC "gc".
virtual void DrawString(Drawable_t id, GContext_t gc, Int_t x, Int_t y, const char *s, Int_t len)
Each character image, as defined by the font in the GC, is treated as an additional mask for a fill o...
virtual void MapGCFont(GContext_t, FontStruct_t)
Map the XftFont with the Graphics Context using it.
virtual Int_t TextWidth(FontStruct_t font, const char *s, Int_t len)
Return length of the string "s" in pixels. Size depends on font.
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
const Int_t n
Definition legend1.C:16
Graphics context structure.
Definition GuiTypes.h:224