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#endif // R__HAS_XFT
131
132/** \class TTFX11Init
133\ingroup GraphicsBackends
134
135Small utility class that takes care of switching the current
136gVirtualX to the new TGX11TTF class as soon as the shared library
137containing this class is loaded.
138*/
139
141public:
143};
145
146
147
148////////////////////////////////////////////////////////////////////////////////
149/// Create copy of TGX11 but now use TrueType fonts.
150
152{
153 SetName("X11TTF");
154 SetTitle("ROOT interface to X11 with TrueType fonts");
155
156 if (!TTF::fgInit) TTF::Init();
157
159 fHasXft = kFALSE;
160 fAlign.x = 0;
161 fAlign.y = 0;
162
163#ifdef R__HAS_XFT
164 fXftFontHash = nullptr;
165#endif
166}
167
168////////////////////////////////////////////////////////////////////////////////
169/// Static method setting TGX11TTF as the acting gVirtualX.
170
172{
173 if (auto oldg = dynamic_cast<TGX11*>(gVirtualX)) {
174 gVirtualX = new TGX11TTF(std::move(*oldg));
175 delete oldg;
176 }
177}
178
179////////////////////////////////////////////////////////////////////////////////
180/// Initialize X11 system. Returns kFALSE in case of failure.
181
182Bool_t TGX11TTF::Init(void *display)
183{
184#ifdef R__HAS_XFT
185 fXftFontHash = nullptr;
186 XFontStruct *fs = nullptr;
187 if (display) fs = XLoadQueryFont((Display *)display, "-*-helvetica-*-r-*-*-14-*-*-*-*-*-*-*");
188 if (!fs) gEnv->SetValue("X11.UseXft", 1);
189 if (display && fs) XFreeFont((Display *)display, fs);
190 if (gEnv->GetValue("X11.UseXft", 0)) {
191 fHasXft = kTRUE;
193 }
194#endif
195 Bool_t r = TGX11::Init(display);
196
197 if (fDepth > 8) {
199 } else {
201 }
202
203 return r;
204}
205
206////////////////////////////////////////////////////////////////////////////////
207/// Compute alignment variables. The alignment is done on the horizontal string
208/// then the rotation is applied on the alignment variables.
209/// SetRotation and LayoutGlyphs should have been called before.
210
212{
213 EAlign align = (EAlign) value;
214
215 // vertical alignment
216 if (align == kTLeft || align == kTCenter || align == kTRight) {
218 } else if (align == kMLeft || align == kMCenter || align == kMRight) {
219 fAlign.y = TTF::fgAscent/2;
220 } else {
221 fAlign.y = 0;
222 }
223
224 // horizontal alignment
225 if (align == kTRight || align == kMRight || align == kBRight) {
227 } else if (align == kTCenter || align == kMCenter || align == kBCenter) {
228 fAlign.x = TTF::fgWidth/2;
229 } else {
230 fAlign.x = 0;
231 }
232
234 fAlign.x = fAlign.x >> 6;
235 fAlign.y = fAlign.y >> 6;
236}
237
238////////////////////////////////////////////////////////////////////////////////
239/// Draw FT_Bitmap bitmap to xim image at position bx,by using specified
240/// foreground color.
241
244{
245 UChar_t d = 0, *s = source->buffer;
246
247 if (TTF::fgSmoothing) {
248
249 static RXColor col[5];
250 RXColor *bcol = nullptr;
251 XColor *bc;
252 Int_t x, y;
253
254 // background kClear, i.e. transparent, we take as background color
255 // the average of the rgb values of all pixels covered by this character
256 if (back == (ULong_t) -1 && (UInt_t)source->width) {
257 ULong_t r, g, b;
259 const Int_t maxdots = 50000;
260
261 dots = Int_t(source->width * source->rows);
262 dots = dots > maxdots ? maxdots : dots;
263 bcol = new RXColor[dots];
264 if (!bcol) return;
265 bc = bcol;
266 dotcnt = 0;
267 for (y = 0; y < (int) source->rows; y++) {
268 for (x = 0; x < (int) source->width; x++, bc++) {
269/// bc->pixel = XGetPixel(xim, bx + x, by - c->TTF::fgAscent + y);
270 bc->pixel = XGetPixel(xim, bx + x, by + y);
271 bc->flags = DoRed | DoGreen | DoBlue;
272 if (++dotcnt >= maxdots) break;
273 }
274 }
276 r = g = b = 0;
277 bc = bcol;
278 dotcnt = 0;
279 for (y = 0; y < (int) source->rows; y++) {
280 for (x = 0; x < (int) source->width; x++, bc++) {
281 r += bc->red;
282 g += bc->green;
283 b += bc->blue;
284 if (++dotcnt >= maxdots) break;
285 }
286 }
287 if (dots != 0) {
288 r /= dots;
289 g /= dots;
290 b /= dots;
291 }
292 bc = &col[0];
293 if (bc->red == r && bc->green == g && bc->blue == b)
294 bc->pixel = back;
295 else {
296 bc->pixel = ~back;
297 bc->red = (UShort_t) r;
298 bc->green = (UShort_t) g;
299 bc->blue = (UShort_t) b;
300 }
301 }
302 delete [] bcol;
303
304 // if fore or background have changed from previous character
305 // recalculate the 3 smoothing colors (interpolation between fore-
306 // and background colors)
307 if (fore != col[4].pixel || back != col[0].pixel) {
308 col[4].pixel = fore;
309 col[4].flags = DoRed|DoGreen|DoBlue;
310 if (back != (ULong_t) -1) {
311 col[3].pixel = back;
312 col[3].flags = DoRed | DoGreen | DoBlue;
313 QueryColors(fColormap, &col[3], 2);
314 col[0] = col[3];
315 } else {
316 QueryColors(fColormap, &col[4], 1);
317 }
318
319 // interpolate between fore and background colors
320 for (x = 3; x > 0; x--) {
321 col[x].red = (col[4].red *x + col[0].red *(4-x)) /4;
322 col[x].green = (col[4].green*x + col[0].green*(4-x)) /4;
323 col[x].blue = (col[4].blue *x + col[0].blue *(4-x)) /4;
324 if (!AllocColor(fColormap, &col[x])) {
325 Warning("DrawImage", "cannot allocate smoothing color");
326 col[x].pixel = col[x+1].pixel;
327 }
328 }
329 }
330
331 // put smoothed character, character pixmap values are an index
332 // into the 5 colors used for aliasing (4 = foreground, 0 = background)
333 for (y = 0; y < (int) source->rows; y++) {
334 for (x = 0; x < (int) source->width; x++) {
335 d = *s++ & 0xff;
336 d = ((d + 10) * 5) / 256;
337 if (d > 4) d = 4;
338 if (d && x < (int) source->width) {
339 ULong_t p = col[d].pixel;
340 XPutPixel(xim, bx + x, by + y, p);
341 }
342 }
343 }
344 } else {
345 // no smoothing, just put character using foreground color
346 UChar_t* row=s;
347 for (int y = 0; y < (int) source->rows; y++) {
348 int n = 0;
349 s = row;
350 for (int x = 0; x < (int) source->width; x++) {
351 if (n == 0) d = *s++;
352 if (TESTBIT(d,7-n))
353 XPutPixel(xim, bx + x, by + y, fore);
354 if (++n == (int) kBitsPerByte) n = 0;
355 }
356 row += source->pitch;
357 }
358 }
359}
360
361////////////////////////////////////////////////////////////////////////////////
362/// Draw text using TrueType fonts. If TrueType fonts are not available the
363/// text is drawn with TGX11::DrawTextW.
364
379
380////////////////////////////////////////////////////////////////////////////////
381/// Draw text using TrueType fonts. If TrueType fonts are not available the
382/// text is drawn with TGX11::DrawTextW.
383
398
399////////////////////////////////////////////////////////////////////////////////
400/// Get the background of the current window in an XImage.
401
403{
407 Int_t xy;
409
410 if (x < 0) {
411 w += x;
412 x = 0;
413 }
414 if (y < 0) {
415 h += y;
416 y = 0;
417 }
418
419 if (x+w > width) w = width - x;
420 if (y+h > height) h = height - y;
421
422 return (RXImage *)XGetImage((Display*)fDisplay, cws, x, y, w, h, AllPlanes, ZPixmap);
423}
424
425////////////////////////////////////////////////////////////////////////////////
426/// Test if there is really something to render.
427
429{
433 Int_t xy;
435
436 // If w or h is 0, very likely the string is only blank characters
437 if ((int)w == 0 || (int)h == 0)
438 return kFALSE;
439
440 // If string falls outside window, there is probably no need to draw it.
441 if (x + (int)w <= 0 || x >= (int)width)
442 return kFALSE;
443 if (y + (int)h <= 0 || y >= (int)height)
444 return kFALSE;
445
446 // If w or h are much larger than the window size, there is probably no need
447 // to draw it. Moreover a to large text size may produce a Seg Fault in
448 // malloc in RenderString.
449 if (w > 10*width)
450 return kFALSE;
451 if (h > 10*height)
452 return kFALSE;
453
454 return kTRUE;
455}
456
457////////////////////////////////////////////////////////////////////////////////
458/// Perform the string rendering in the pad.
459/// LayoutGlyphs should have been called before.
460
462{
464
465 // compute the size and position of the XImage that will contain the text
466 Int_t Xoff = 0; if (TTF::GetBox().xMin < 0) Xoff = -TTF::GetBox().xMin;
467 Int_t Yoff = 0; if (TTF::GetBox().yMin < 0) Yoff = -TTF::GetBox().yMin;
468 Int_t w = TTF::GetBox().xMax + Xoff;
469 Int_t h = TTF::GetBox().yMax + Yoff;
470 Int_t x1 = x-Xoff-fAlign.x;
471 Int_t y1 = y+Yoff+fAlign.y-h;
472
473 if (!IsVisible(wctxt, x1, y1, w, h))
474 return;
475
476 // create the XImage that will contain the text
478 XImage *xim = XCreateImage((Display*)fDisplay, fVisual,
479 depth, ZPixmap, 0, nullptr, w, h,
480 depth <= 8 ? 8 : (depth <= 16 ? 16 : 32), 0);
481 //bitmap_pad should be 8, 16 or 32 https://www.x.org/releases/X11R7.5/doc/man/man3/XPutPixel.3.html
482 if (!xim) return;
483
484 // use malloc since Xlib will use free() in XDestroyImage
485 xim->data = (char *) malloc(xim->bytes_per_line * h);
486 memset(xim->data, 0, xim->bytes_per_line * h);
487
488 ULong_t bg;
489 XGCValues values;
490 auto gc = (GC *) GetGCW(wctxt, 3);
491 if (!gc) {
492 Error("RenderString", "error getting Graphics Context");
493 return;
494 }
495 XGetGCValues((Display*)fDisplay, *gc, GCForeground | GCBackground, &values);
496
497 // get the background
498 if (mode == kClear) {
499 // if mode == kClear we need to get an image of the background
501 if (!bim) {
502 Error("DrawText", "error getting background image");
503 return;
504 }
505
506 // and copy it into the text image
507 Int_t xo = 0, yo = 0;
508 if (x1 < 0) xo = -x1;
509 if (y1 < 0) yo = -y1;
510
511 for (int yp = 0; yp < (int) bim->height; yp++) {
512 for (int xp = 0; xp < (int) bim->width; xp++) {
515 }
516 }
518 bg = (ULong_t) -1;
519 } else {
520 // if mode == kOpaque its simple, we just draw the background
521 XAddPixel(xim, values.background);
522 bg = values.background;
523 }
524
525 // paint the glyphs in the XImage
527 for (int n = 0; n < TTF::fgNumGlyphs; n++, glyph++) {
528 if (FT_Glyph_To_Bitmap(&glyph->fImage,
531 nullptr, 1 )) continue;
533 FT_Bitmap* source = &bitmap->bitmap;
534 Int_t bx, by;
535
536 bx = bitmap->left+Xoff;
537 by = h - bitmap->top-Yoff;
538 DrawImage(source, values.foreground, bg, (RXImage*)xim, bx, by);
539 }
540
541 // put the Ximage on the screen
543 gc = (GC *) GetGCW(wctxt, 6);
544 if (gc)
545 XPutImage((Display*)fDisplay, cws, *gc, xim, 0, 0, x1, y1, w, h);
547}
548
549////////////////////////////////////////////////////////////////////////////////
550/// Set specified font.
551
552
554{
555 // TODO: add to window context custom part for TTF,
556 // it can be allocated and provided via private interface
558
559 if (fHasTTFonts) {
560 TTF::SetTextFont(att.GetTextFont());
561 TTF::SetTextSize(att.GetTextSize());
562 }
563}
564
565////////////////////////////////////////////////////////////////////////////////
566/// Set text font to specified name.
567/// mode : loading flag
568/// mode=0 : search if the font exist (kCheck)
569/// mode=1 : search the font and load it if it exists (kLoad)
570/// font : font name
571///
572/// Set text font to specified name. This function returns 0 if
573/// the specified font is found, 1 if not.
574
576{
577 if (!fHasTTFonts) {
579 } else {
581 }
582}
583
584#ifdef R__HAS_XFT
585
586///////////////////////////// Xft font methods /////////////////////////////////
587////////////////////////////////////////////////////////////////////////////////
588/// Parses an XLFD name and opens a font.
589
590FontStruct_t TGX11TTF::LoadQueryFont(const char *font_name)
591{
592 if (!fXftFontHash) {
593 return TGX11::LoadQueryFont(font_name);
594 }
595
596 TXftFontData *data = fXftFontHash->FindByName(font_name);
597
598 // already loaded
599 if (data) {
600 return (FontStruct_t)data->fXftFont;
601 }
602
603 XftFont *xftfont = XftFontOpenXlfd((Display*)fDisplay, fScreenNumber, font_name);
604
605 data = new TXftFontData(0, xftfont, font_name);
606 fXftFontHash->AddFont(data);
607
608 return (FontStruct_t)xftfont;
609}
610
611////////////////////////////////////////////////////////////////////////////////
612/// Explicitly delete font structure obtained with LoadQueryFont().
613
615{
616 if (!fXftFontHash) {
618 return;
619 }
620
621 TXftFontData *data = fXftFontHash->FindByFont(fs);
622
623 if (data)
624 fXftFontHash->FreeFont(data);
625}
626
627////////////////////////////////////////////////////////////////////////////////
628/// Explicitly delete a graphics context.
629
631{
632 if (!fXftFontHash) {
634 return;
635 }
636
637 TXftFontData *gcdata = fXftFontHash->FindByGC(gc);
638 if (gcdata) fXftFontHash->FreeFont(gcdata);
640}
641
642////////////////////////////////////////////////////////////////////////////////
643/// Return handle to font described by font structure.
644
646{
647 if (!fXftFontHash) {
648 return TGX11::GetFontHandle(fs);
649 }
650
651 return (FontH_t)fs;
652}
653
654////////////////////////////////////////////////////////////////////////////////
655/// Return the font associated with the graphics context gc
656
658{
659 if (!fXftFontHash) {
660 return 0;
661 }
662
663 TXftFontData *data = fXftFontHash->FindByGC(gc);
664
665 // no XftFont data
666 if (!data) return 0;
667
668 return (FontStruct_t)data->fXftFont;
669}
670
671////////////////////////////////////////////////////////////////////////////////
672/// Map the XftFont with the Graphics Context using it.
673
675{
676 if (!fXftFontHash)
677 return;
678
679 TXftFontData *gcdata = fXftFontHash->FindByGC(gc);
680 TXftFontData *fontdata = fXftFontHash->FindByFont(font);
681
682 if (gcdata) { // && (gcdata->fXftFont == 0)) {
683 gcdata->fXftFont = (XftFont *)font;
684 }
685 else if (fontdata) {
686 TXftFontData *data = new TXftFontData(gc, (XftFont *)font, fontdata->GetName());
687 fXftFontHash->AddFont(data);
688 }
689}
690
691////////////////////////////////////////////////////////////////////////////////
692/// Return length of string in pixels. Size depends on font
693
694Int_t TGX11TTF::TextWidth(FontStruct_t font, const char *s, Int_t len)
695{
696 if (!fXftFontHash) {
697 return TGX11::TextWidth(font, s, len);
698 }
699
700 TXftFontData *data = fXftFontHash->FindByFont(font);
701
702 if (!data) return 0;
703
704 XftFont *xftfont = data->fXftFont;
705
706 if (xftfont) {
709 return glyph_info.xOff;
710 }
711 return 0;
712}
713
714////////////////////////////////////////////////////////////////////////////////
715/// Return some font properties
716
718{
719 if (!fXftFontHash) {
721 return;
722 }
723
724 TXftFontData *data = fXftFontHash->FindByFont(font);
725
726 if (!data) {
728 return;
729 }
730
731 XftFont *xftfont = data->fXftFont;
732
733 if (!xftfont) {
735 return;
736 }
737
738 max_ascent = xftfont->ascent;
739 max_descent = xftfont->descent;
740}
741
742////////////////////////////////////////////////////////////////////////////////
743/// Draw text string
744
746 const char *text, Int_t len)
747{
752
753 if (!xwindow) {
754 return;
755 }
756
757 if (!gc) {
758 return;
759 }
760
761 if (!text || (len < 1) || !text[0]) {
762 return;
763 }
764
765 if (!fXftFontHash) {
767 return;
768 }
769
771 gval.fMask = kGCForeground | kGCBackground; // retrieve GC values
773
774 TXftFontData *data = fXftFontHash->FindByGC(gc);
775
776 // no XftFont data
777 if (!data) {
779 return;
780 }
781
782 xftfont = data->fXftFont;
783
784 // no Xft font
785 if (!xftfont) {
787 return;
788 }
789
790 // dummies
792 Int_t dx,dy;
794
795 // check if drawable is bitmap
796 XGetGeometry((Display*)fDisplay, (Drawable)xwindow, &droot, &dx, &dy,
797 &width, &height, &bwidth, &depth);
798
799 if (depth <= 1) {
801 return;
802 }
803
804 memset(&xcolor, 0, sizeof(xcolor));
805 xcolor.pixel = gval.fForeground;
806
807 XQueryColor((Display*)fDisplay, fColormap, &xcolor);
808
809 // create XftDraw
811
812 if (!xftdraw) {
813 //Warning("could not create an XftDraw");
815 return;
816 }
817
818 xftcolor.color.red = xcolor.red;
819 xftcolor.color.green = xcolor.green;
820 xftcolor.color.blue = xcolor.blue;
821 xftcolor.color.alpha = 0xffff;
822 xftcolor.pixel = gval.fForeground;
823
825
826 // cleanup
828}
829
830#endif // R__HAS_XFT
Handle_t WinContext_t
Window drawing context.
Definition GuiTypes.h:30
const Mask_t kGCBackground
Definition GuiTypes.h:290
const Mask_t kGCForeground
Definition GuiTypes.h:289
Handle_t FontH_t
Font handle (as opposed to Font_t which is an index)
Definition GuiTypes.h:36
Handle_t Window_t
Window handle.
Definition GuiTypes.h:29
Handle_t GContext_t
Graphics context handle.
Definition GuiTypes.h:39
Handle_t Drawable_t
Drawable handle.
Definition GuiTypes.h:32
Handle_t FontStruct_t
Pointer to font structure.
Definition GuiTypes.h:40
#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
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
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 GetWindowSize
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 TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
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 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:144
char name[80]
Definition TGX11.cxx:157
XID Window
Definition TGX11.h:38
XID Drawable
Definition TGX11.h:35
#define gVirtualX
Definition TVirtualX.h:365
#define malloc
Definition civetweb.c:1575
Text Attributes class.
Definition TAttText.h:21
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Definition TEnv.cxx:503
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:744
static void Activate()
Static method setting TGX11TTF as the acting gVirtualX.
Definition TGX11TTF.cxx:171
void DrawTextW(WinContext_t wctxt, 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:365
Bool_t Init(void *display) override
Initialize X11 system. Returns kFALSE in case of failure.
Definition TGX11TTF.cxx:182
void RenderString(WinContext_t wctxt, Int_t x, Int_t y, ETextMode mode)
Perform the string rendering in the pad.
Definition TGX11TTF.cxx:461
Int_t SetTextFont(char *fontname, ETextSetMode mode) override
Set text font to specified name.
Definition TGX11TTF.cxx:575
void SetAttText(WinContext_t wctxt, const TAttText &att) override
Set specified font.
Definition TGX11TTF.cxx:553
void Align(Int_t value)
Compute alignment variables.
Definition TGX11TTF.cxx:211
TGX11TTF(TGX11 &&org)
Create copy of TGX11 but now use TrueType fonts.
Definition TGX11TTF.cxx:151
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:242
FT_Vector fAlign
alignment vector
Definition TGX11TTF.h:44
RXImage * GetBackground(WinContext_t wctxt, 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:402
Bool_t IsVisible(WinContext_t wctxt, Int_t x, Int_t y, UInt_t w, UInt_t h)
Test if there is really something to render.
Definition TGX11TTF.cxx:428
@ kTCenter
Definition TGX11TTF.h:41
@ kBRight
Definition TGX11TTF.h:42
@ kBCenter
Definition TGX11TTF.h:42
@ kMCenter
Definition TGX11TTF.h:41
@ kMRight
Definition TGX11TTF.h:41
@ kTRight
Definition TGX11TTF.h:41
This class is the basic interface to the X11 (Xlib) graphics system.
Definition TGX11.h:64
void * fDisplay
Pointer to display.
Definition TGX11.h:105
Int_t GetTextAlignW(WinContext_t wctxt) const
Return text align value for specified window context.
Definition TGX11.cxx:1107
Colormap fColormap
Default colormap, 0 if b/w.
Definition TGX11.h:109
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:112
Bool_t AllocColor(Colormap cmap, RXColor *color)
Allocate color in colormap.
Definition TGX11.cxx:378
void QueryColors(Colormap cmap, RXColor *colors, Int_t ncolors)
Returns the current RGB value for the pixel in the XColor structure.
Definition TGX11.cxx:395
void SetAttText(WinContext_t wctxt, const TAttText &att) override
Set text attributes for specified window.
Definition TGX11.cxx:4605
void DrawTextW(WinContext_t wctxt, 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 on specified window.
Definition TGX11.cxx:878
Bool_t fHasXft
True when XftFonts are used.
Definition TGX11.h:127
Int_t SetTextFont(char *fontname, ETextSetMode mode) override
Set text font to specified name.
Definition TGX11.cxx:3435
void * GetGCW(WinContext_t wctxt, Int_t which) const
Return X11 Graphics Context for specified window context.
Definition TGX11.cxx:1088
Int_t fDepth
Number of color planes.
Definition TGX11.h:119
Bool_t Init(void *display) override
Initialize X11 system. Returns kFALSE in case of failure.
Definition TGX11.cxx:353
Window_t GetWindow(WinContext_t wctxt) const
Return X11 window for specified window context.
Definition TGX11.cxx:1078
void DeleteGC(GContext_t gc) override
Explicitly delete a graphics context.
Definition GX11Gui.cxx:1032
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:106
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:126
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: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
Small utility class that takes care of switching the current gVirtualX to the new TGX11TTF class as s...
Definition TGX11TTF.cxx:140
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:225