35#include <X11/cursorfont.h> 
   36#include <X11/keysym.h> 
   47#include <X11/Xft/Xft.h> 
   64      fGC = 
gc; fXftFont = (XftFont *)font;
 
   70         if (fXftFont) XftFontClose((Display*)
gVirtualX->GetDisplay(), fXftFont);
 
   82   TXftFontData *FindByName(
const char *
name)
 
   91      while (
auto d = (TXftFontData*) next()) {
 
   92         if (
d->fXftFont == (XftFont *)font)
 
  102      while (
auto d = (TXftFontData*) next()) {
 
  109   void AddFont(TXftFontData *
data)
 
  116      while (
auto d = (TXftFontData*) next()) {
 
  117         if (
d->fXftFont == 
data->fXftFont)
 
  118            data->AddReference();
 
  124   void FreeFont(TXftFontData *
data)
 
  155   SetTitle(
"ROOT interface to X11 with TrueType fonts");
 
  165   fXftFontHash = 
nullptr;
 
  187   fXftFontHash = 
nullptr;
 
  188   XFontStruct *
fs = 
nullptr;
 
  189   if (display) 
fs = XLoadQueryFont((Display *)display, 
"-*-helvetica-*-r-*-*-14-*-*-*-*-*-*-*");
 
  191   if (display && 
fs) XFreeFont((Display *)display, 
fs);
 
  194      fXftFontHash = 
new TXftFontHash();
 
  261         const Int_t maxdots = 50000;
 
  263         dots = 
Int_t(source->width * source->rows);
 
  264         dots = dots > maxdots ? maxdots : dots;
 
  269         for (
y = 0; 
y < (
int) source->rows; 
y++) {
 
  270            for (
x = 0; 
x < (
int) source->width; 
x++, bc++) {
 
  272               bc->pixel = XGetPixel(xim, bx + 
x, by + 
y);
 
  273               bc->flags = DoRed | DoGreen | DoBlue;
 
  274               if (++dotcnt >= maxdots) 
break;
 
  281         for (
y = 0; 
y < (
int) source->rows; 
y++) {
 
  282            for (
x = 0; 
x < (
int) source->width; 
x++, bc++) {
 
  286               if (++dotcnt >= maxdots) 
break;
 
  295         if (bc->red == 
r && bc->green == 
g && bc->blue == 
b)
 
  309      if (fore != col[4].
pixel || back != col[0].
pixel) {
 
  311         col[4].flags = DoRed|DoGreen|DoBlue;
 
  314            col[3].flags = DoRed | DoGreen | DoBlue;
 
  322         for (
x = 3; 
x > 0; 
x--) {
 
  323            col[
x].red   = (col[4].red  *
x + col[0].red  *(4-
x)) /4;
 
  324            col[
x].green = (col[4].green*
x + col[0].green*(4-
x)) /4;
 
  325            col[
x].blue  = (col[4].blue *
x + col[0].blue *(4-
x)) /4;
 
  327               Warning(
"DrawImage", 
"cannot allocate smoothing color");
 
  328               col[
x].pixel = col[
x+1].pixel;
 
  335      for (
y = 0; 
y < (
int) source->rows; 
y++) {
 
  336         for (
x = 0; 
x < (
int) source->width; 
x++) {
 
  338            d = ((
d + 10) * 5) / 256;
 
  340            if (
d && 
x < (
int) source->width) {
 
  342               XPutPixel(xim, bx + 
x, by + 
y, 
p);
 
  349      for (
int y = 0; 
y < (
int) source->rows; 
y++) {
 
  352         for (
int x = 0; 
x < (
int) source->width; 
x++) {
 
  353            if (
n == 0) 
d = *s++;
 
  355               XPutPixel(xim, bx + 
x, by + 
y, fore);
 
  358         row += source->pitch;
 
  439   if ((
int)
w == 0 || (
int)
h == 0)  
return kFALSE;
 
  475                               depth, ZPixmap, 0, 
nullptr, 
w, 
h,
 
  476                               depth <= 8 ? 8 : (depth <= 16 ? 16 : 32), 0);
 
  481   xim->data = (
char *) 
malloc(xim->bytes_per_line * 
h);
 
  482   memset(xim->data, 0, xim->bytes_per_line * 
h);
 
  488      Error(
"DrawText", 
"error getting Graphics Context");
 
  491   XGetGCValues((Display*)
fDisplay, *
gc, GCForeground | GCBackground, &values);
 
  498         Error(
"DrawText", 
"error getting background image");
 
  503      Int_t xo = 0, yo = 0;
 
  504      if (
x1 < 0) xo = -
x1;
 
  505      if (
y1 < 0) yo = -
y1;
 
  507      for (
int yp = 0; yp < (
int) bim->height; yp++) {
 
  508         for (
int xp = 0; xp < (
int) bim->width; xp++) {
 
  510            XPutPixel(xim, xo+xp, yo+yp, 
pixel);
 
  517      XAddPixel(xim, values.background);
 
  518      bg = values.background;
 
  524      if (FT_Glyph_To_Bitmap(&glyph->
fImage,
 
  526                                              : ft_render_mode_mono,
 
  527                             nullptr, 1 )) 
continue;
 
  529      FT_Bitmap*     source = &
bitmap->bitmap;
 
  601   TXftFontData *
data = fXftFontHash->FindByName(font_name);
 
  610   data = 
new TXftFontData(0, xftfont, font_name);
 
  611   fXftFontHash->AddFont(
data);
 
  626   TXftFontData *
data = fXftFontHash->FindByFont(
fs);
 
  629      fXftFontHash->FreeFont(
data);
 
  642   TXftFontData *gcdata = fXftFontHash->FindByGC(
gc);
 
  643   if (gcdata) fXftFontHash->FreeFont(gcdata);
 
  668   TXftFontData *
data = fXftFontHash->FindByGC(
gc);
 
  684   TXftFontData *gcdata = fXftFontHash->FindByGC(
gc);
 
  685   TXftFontData *fontdata = fXftFontHash->FindByFont(font);
 
  688      gcdata->fXftFont = (XftFont *)font;
 
  691      TXftFontData *
data = 
new TXftFontData(
gc, (XftFont *)font, fontdata->GetName());
 
  692      fXftFontHash->AddFont(
data);
 
  705   TXftFontData *
data = fXftFontHash->FindByFont(font);
 
  709   XftFont *xftfont = 
data->fXftFont;
 
  712      XGlyphInfo glyph_info;
 
  713      XftTextExtents8((Display *)
fDisplay, xftfont, (XftChar8 *)s, 
len, &glyph_info);
 
  714      return glyph_info.xOff;
 
  729   TXftFontData *
data = fXftFontHash->FindByFont(font);
 
  736   XftFont *xftfont = 
data->fXftFont;
 
  743   max_ascent = xftfont->ascent;
 
  744   max_descent = xftfont->descent;
 
  779   TXftFontData *
data = fXftFontHash->FindByGC(
gc);
 
  787   xftfont = 
data->fXftFont;
 
  809   memset(&xcolor, 0, 
sizeof(xcolor));
 
  810   xcolor.pixel = 
gval.fForeground;
 
  823   xftcolor.color.red = xcolor.red;
 
  824   xftcolor.color.green = xcolor.green;
 
  825   xftcolor.color.blue = xcolor.blue;
 
  826   xftcolor.color.alpha = 0xffff;
 
  827   xftcolor.pixel = 
gval.fForeground;
 
  829   XftDrawString8(xftdraw, &xftcolor, xftfont, 
x, 
y, (XftChar8 *)
text, 
len);
 
  832   XftDrawDestroy(xftdraw);
 
const Mask_t kGCBackground
 
const Mask_t kGCForeground
 
Handle_t FontH_t
Font handle (as opposed to Font_t which is an index)
 
Handle_t Window_t
Window handle.
 
Handle_t GContext_t
Graphics context handle.
 
Handle_t Drawable_t
Drawable handle.
 
Handle_t FontStruct_t
Pointer to font structure.
 
constexpr ULong_t kBitsPerByte
 
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 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 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 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
 
Font_t fTextFont
Text font.
 
Float_t fTextSize
Text size.
 
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
 
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.
 
Interface to low level X11 (Xlib).
 
void RenderString(Int_t x, Int_t y, ETextMode mode)
Perform the string rendering in the pad.
 
static void Activate()
Static method setting TGX11TTF as the acting gVirtualX.
 
void Align(void)
Compute alignment variables.
 
RXImage * GetBackground(Int_t x, Int_t y, UInt_t w, UInt_t h)
Get the background of the current window in an XImage.
 
Bool_t Init(void *display) override
Initialize X11 system. Returns kFALSE in case of failure.
 
void SetTextSize(Float_t textsize) override
Set current text size.
 
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.
 
FT_Vector fAlign
alignment vector
 
void SetTextFont(Font_t fontnumber) override
Set specified font.
 
TGX11TTF(const TGX11 &org)
Create copy of TGX11 but now use TrueType fonts.
 
Bool_t IsVisible(Int_t x, Int_t y, UInt_t w, UInt_t h)
Test if there is really something to render.
 
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.
 
This class is the basic interface to the X11 (Xlib) graphics system.
 
void * fDisplay
Pointer to display.
 
Colormap fColormap
Default colormap, 0 if b/w.
 
FontStruct_t LoadQueryFont(const char *font_name) override
Load font and query font.
 
Int_t fScreenNumber
Screen number.
 
Bool_t AllocColor(Colormap cmap, RXColor *color)
Allocate color in colormap.
 
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.
 
void QueryColors(Colormap cmap, RXColor *colors, Int_t ncolors)
Returns the current RGB value for the pixel in the XColor structure.
 
void * GetGC(Int_t which) const
Return desired Graphics Context ("which" maps directly on gGCList[]).
 
Bool_t fHasXft
True when XftFonts are used.
 
Int_t SetTextFont(char *fontname, ETextSetMode mode) override
Set text font to specified name.
 
Int_t fTextAlign
Text alignment (set in SetTextAlign)
 
Int_t fDepth
Number of color planes.
 
Bool_t Init(void *display) override
Initialize X11 system. Returns kFALSE in case of failure.
 
void DeleteGC(GContext_t gc) override
Explicitly delete a graphics context.
 
void SetTextSize(Float_t textsize) override
Set current text size.
 
void DeleteFont(FontStruct_t fs) override
Explicitly delete font structure obtained with LoadQueryFont().
 
Int_t TextWidth(FontStruct_t font, const char *s, Int_t len) override
Return length of string in pixels. Size depends on font.
 
FontH_t GetFontHandle(FontStruct_t fs) override
Return handle to font described by font structure.
 
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).
 
RVisual * fVisual
Pointer to visual used by all windows.
 
Window_t GetCurrentWindow() const override
Return current window pointer. Protected method used by TGX11TTF.
 
void GetFontProperties(FontStruct_t font, Int_t &max_ascent, Int_t &max_descent) override
Return some font properties.
 
Bool_t fHasTTFonts
True when TrueType fonts are used.
 
THashTable implements a hash table to store TObject's.
 
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.
 
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
 
virtual void SetName(const char *name)
Set the name of the TNamed.
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
 
Definitions for TRefCnt, base class for reference counted objects.
 
void SetRefCount(UInt_t r)
 
UInt_t References() const
 
Small utility class that takes care of switching the current gVirtualX to the new TGX11TTF class as s...
 
TTF helper class containing glyphs description.
 
FT_Glyph fImage
glyph image
 
static void PrepareString(const char *string)
Put the characters in "string" in the "glyphs" array.
 
static TTF::TTGlyph fgGlyphs[kMaxGlyphs]
glyphs
 
static Bool_t fgSmoothing
use anti-aliasing (true when >8 planes, false otherwise)
 
static void Init()
Initialise the TrueType fonts interface.
 
static void LayoutGlyphs()
Compute the glyphs positions, fgAscent and fgWidth (needed for alignment).
 
static void SetSmoothing(Bool_t state)
Set smoothing (anti-aliasing) flag.
 
static void SetRotationMatrix(Float_t angle)
Set the rotation matrix used to rotate the font outlines.
 
static void SetTextFont(Font_t fontnumber)
Set specified font.
 
static Int_t fgAscent
string ascent, used to compute Y alignment
 
static Int_t fgWidth
string width, used to compute X alignment
 
static Bool_t fgInit
true if the Init has been called
 
static const FT_BBox & GetBox()
 
static Int_t fgNumGlyphs
number of glyphs in the string
 
static FT_Matrix * fgRotMatrix
rotation matrix
 
static void SetTextSize(Float_t textsize)
Set current text size.
 
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.
 
Graphics context structure.
 
#define org(otri, vertexptr)