Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGFont.h
Go to the documentation of this file.
1// @(#)root/gui:$Id$
2// Author: Fons Rademakers 20/5/2003
3
4/*************************************************************************
5 * Copyright (C) 1995-2021, 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#ifndef ROOT_TGFont
13#define ROOT_TGFont
14
15
16#include "TNamed.h"
17#include "TGObject.h"
18#include "TRefCnt.h"
19
20class THashTable;
21class TObjString;
22class TGFont;
23
24// Flags passed to TGFont::MeasureChars and TGFont::ComputeTextLayout
25
32};
33
42};
43
49};
50
51
53 Int_t fAscent; // from baseline to top of font
54 Int_t fDescent; // from baseline to bottom of font
55 Int_t fLinespace; // the sum of the ascent and descent
56 Int_t fMaxWidth; // width of widest character in font
57 Bool_t fFixed; // true if monospace, false otherwise
58};
59
60
62
63 const char *fFamily; // Font family. The most important field.
64 Int_t fPointsize; // Pointsize of font, 0 for default size, or negative number meaning pixel size.
65 Int_t fWeight; // Weight flag; see below for def'n.
66 Int_t fSlant; // Slant flag; see below for def'n.
67 Int_t fUnderline; // Non-zero for underline font.
68 Int_t fOverstrike; // Non-zero for overstrike font.
69
70 FontAttributes_t(): // default constructor
71 fFamily (nullptr),
72 fPointsize (0),
75 fUnderline (0),
76 fOverstrike(0) { }
77
78 FontAttributes_t(const FontAttributes_t& f): // copy constructor
82 fSlant (f.fSlant),
85
86 FontAttributes_t& operator=(const FontAttributes_t& f) // assignment operator
87 {
88 if (this != &f) {
90 fPointsize = f.fPointsize;
91 fWeight = f.fWeight;
92 fSlant = f.fSlant;
93 fUnderline = f.fUnderline;
94 fOverstrike = f.fOverstrike;
95 }
96 return *this;
97 }
98
99};
100
101
102
103struct LayoutChunk_t;
104
105
106class TGTextLayout : public TObject {
107
108friend class TGFont;
109
110protected:
111 const TGFont *fFont; ///< The font used when laying out the text.
112 const char *fString; ///< The string that was laid out.
113 Int_t fWidth; ///< The maximum width of all lines in the text layout.
114 Int_t fNumChunks; ///< Number of chunks actually used in following array.
115 LayoutChunk_t *fChunks; ///< Array of chunks. The actual size will be maxChunks.
116
117 TGTextLayout(const TGTextLayout &tlayout) = delete;
118 void operator=(const TGTextLayout &tlayout) = delete;
119
120public:
121 TGTextLayout(): fFont(nullptr), fString(""), fWidth(0), fNumChunks(0), fChunks(nullptr) {}
122 ~TGTextLayout() override;
123
125 Int_t firstChar, Int_t lastChar) const;
127 Int_t x, Int_t y, Int_t underline) const;
128 Int_t PointToChar(Int_t x, Int_t y) const;
129 Int_t CharBbox(Int_t index, Int_t *x, Int_t *y, Int_t *w, Int_t *h) const;
132 void ToPostscript(TString *dst) const;
133
134 ClassDefOverride(TGTextLayout,0) // Keep track of string measurement information.
135};
136
137
138// The following class is used to keep track of the generic information about a font.
139
140class TGFont : public TNamed, public TRefCnt {
141
142friend class TGFontPool;
143friend class TGTextLayout;
144
145private:
146 FontStruct_t fFontStruct; ///< Low level graphics fontstruct
147 FontH_t fFontH; ///< Font handle (derived from fontstruct)
148 FontMetrics_t fFM; ///< Cached font metrics
149 FontAttributes_t fFA; ///< Actual font attributes obtained when the font was created
150 TObjString *fNamedHash; ///< Pointer to the named object TGFont was based on
151 Int_t fTabWidth; ///< Width of tabs in this font (pixels).
152 Int_t fUnderlinePos; ///< Offset from baseline to origin of underline bar
153 ///< (used for drawing underlines on a non-underlined font).
154 Int_t fUnderlineHeight; ///< Height of underline bar (used for drawing
155 ///< underlines on a non-underlined font).
156 char fTypes[256]; ///< Array giving types of all characters in
157 ///< the font, used when displaying control characters.
158 Int_t fWidths[256]; ///< Array giving widths of all possible characters in the font.
159 Int_t fBarHeight; ///< Height of underline or overstrike bar
160 ///< (used for simulating a native underlined or strikeout font).
161
162protected:
163 TGFont(const char *name)
164 : TNamed(name,""), TRefCnt(), fFontStruct(0), fFontH(0), fFM(),
166 {
167 SetRefCount(1);
168 for (Int_t i=0; i<256; i++) {
169 fWidths[i] = 0;
170 fTypes[i] = ' ';
171 }
172 }
173
174 TGFont(const TGFont &) = delete;
175 void operator=(const TGFont &) = delete;
176
177 LayoutChunk_t *NewChunk(TGTextLayout *layout, int *maxPtr,
178 const char *start, int numChars,
179 int curX, int newX, int y) const;
180public:
181 ~TGFont() override;
182
183 FontH_t GetFontHandle() const { return fFontH; }
185 FontStruct_t operator()() const;
186 void GetFontMetrics(FontMetrics_t *m) const;
188
189 Int_t PostscriptFontName(TString *dst) const;
190 Int_t TextWidth(const char *string, Int_t numChars = -1) const;
191 Int_t XTextWidth(const char *string, Int_t numChars = -1) const;
192 Int_t TextHeight() const { return fFM.fLinespace; }
194 const char *string, Int_t x, Int_t y,
195 Int_t firstChar, Int_t lastChar) const;
196 TGTextLayout *ComputeTextLayout(const char *string, Int_t numChars,
197 Int_t wrapLength, Int_t justify, Int_t flags,
198 UInt_t *width, UInt_t *height) const;
199 Int_t MeasureChars(const char *source, Int_t numChars, Int_t maxLength,
200 Int_t flags, Int_t *length) const;
201 void DrawCharsExp(Drawable_t dst, GContext_t gc, const char *source,
202 Int_t numChars, Int_t x, Int_t y) const;
203 void DrawChars(Drawable_t dst, GContext_t gc, const char *source,
204 Int_t numChars, Int_t x, Int_t y) const;
205
206 void Print(Option_t *option="") const override;
207 void SavePrimitive(std::ostream &out, Option_t * = "") override;
208
209 ClassDefOverride(TGFont,0) // GUI font description
210};
211
212
213struct FontStateMap_t;
214struct XLFDAttributes_t;
215
216
217class TGFontPool : public TGObject {
218
219private:
220 THashTable *fList; // TGFont objects pool
221 THashTable *fUidTable; // Hash table for some used string values like family names, etc.
222 THashTable *fNamedTable; // Map a name to a set of attributes for a font
223
224 TGFontPool(const TGFontPool& fp) = delete;
225 TGFontPool& operator=(const TGFontPool& fp) = delete;
226
227protected:
228 const char *GetUid(const char *string);
229 Bool_t ParseXLFD(const char *string, XLFDAttributes_t *xa);
231 int FindStateNum(const FontStateMap_t *map, const char *strKey);
232 const char *FindStateString(const FontStateMap_t *map, int numKey);
233 Bool_t FieldSpecified(const char *field);
234 TGFont *GetNativeFont(const char *name, Bool_t fixedDefault = kTRUE);
235 TGFont *MakeFont(TGFont *font, FontStruct_t fontStruct, const char *fontName);
236
237public:
238 TGFontPool(TGClient *client);
239 ~TGFontPool() override;
240
241 TGFont *GetFont(const char *font, Bool_t fixedDefault = kTRUE);
242 TGFont *GetFont(const TGFont *font);
244 TGFont *GetFont(const char *family, Int_t ptsize, Int_t weight, Int_t slant);
245
246 void FreeFont(const TGFont *font);
247
248 TGFont *FindFont(FontStruct_t font) const;
249 TGFont *FindFontByHandle(FontH_t font) const;
250
251 char **GetAttributeInfo(const FontAttributes_t *fa);
252 void FreeAttributeInfo(char **info);
253 char **GetFontFamilies();
254 void FreeFontFamilies(char **f);
255 Bool_t ParseFontName(const char *string, FontAttributes_t *fa);
256 const char *NameOfFont(TGFont *font);
257
258 void Print(Option_t *option="") const override;
259
261};
262
263#endif
Handle_t FontH_t
Font handle (as opposed to Font_t which is an index)
Definition GuiTypes.h:35
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 f(i)
Definition RSha256.hxx:104
#define h(i)
Definition RSha256.hxx:106
int Int_t
Definition RtypesCore.h:45
unsigned int UInt_t
Definition RtypesCore.h:46
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
const char Option_t
Definition RtypesCore.h:66
#define BIT(n)
Definition Rtypes.h:85
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
EFontWeight
Definition TGFont.h:34
@ kFontWeightBlack
Definition TGFont.h:40
@ kFontWeightBold
Definition TGFont.h:37
@ kFontWeightNormal
Definition TGFont.h:35
@ kFontWeightDemibold
Definition TGFont.h:39
@ kFontWeightLight
Definition TGFont.h:38
@ kFontWeightUnknown
Definition TGFont.h:41
@ kFontWeightMedium
Definition TGFont.h:36
EFontSlant
Definition TGFont.h:44
@ kFontSlantOblique
Definition TGFont.h:47
@ kFontSlantUnknown
Definition TGFont.h:48
@ kFontSlantRoman
Definition TGFont.h:45
@ kFontSlantItalic
Definition TGFont.h:46
ETextLayoutFlags
Definition TGFont.h:26
@ kTextIgnoreTabs
Definition TGFont.h:30
@ kTextWholeWords
Definition TGFont.h:27
@ kTextPartialOK
Definition TGFont.h:29
@ kTextAtLeastOne
Definition TGFont.h:28
@ kTextIgnoreNewlines
Definition TGFont.h:31
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 index
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 length
Option_t Option_t width
Option_t Option_t TPoint TPoint DrawText
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
char name[80]
Definition TGX11.cxx:110
Window client.
Definition TGClient.h:37
Provides a pool of fonts.
Definition TGFont.h:217
Bool_t ParseFontName(const char *string, FontAttributes_t *fa)
Converts a string into a set of font attributes that can be used to construct a font.
Definition TGFont.cxx:1962
TGFont * GetFont(const char *font, Bool_t fixedDefault=kTRUE)
Get the specified font.
Definition TGFont.cxx:1558
const char * NameOfFont(TGFont *font)
Given a font, return a textual string identifying it.
Definition TGFont.cxx:2262
THashTable * fList
Definition TGFont.h:220
char ** GetFontFamilies()
Return information about the font families that are available on the current display.
Definition TGFont.cxx:2274
TGFontPool(const TGFontPool &fp)=delete
Bool_t ParseXLFD(const char *string, XLFDAttributes_t *xa)
Break up a fully specified XLFD into a set of font attributes.
Definition TGFont.cxx:2054
int FindStateNum(const FontStateMap_t *map, const char *strKey)
Given a lookup table, map a string to a number in the table.
Definition TGFont.cxx:2205
TGFont * GetNativeFont(const char *name, Bool_t fixedDefault=kTRUE)
The return value is a pointer to an TGFont object that represents the native font.
Definition TGFont.cxx:2565
const char * GetUid(const char *string)
Given a string, this procedure returns a unique identifier for the string.
Definition TGFont.cxx:1785
Bool_t FieldSpecified(const char *field)
Helper function for ParseXLFD().
Definition TGFont.cxx:2247
THashTable * fUidTable
Definition TGFont.h:221
TGFont * FindFontByHandle(FontH_t font) const
Find font based on its font handle. Returns 0 if font is not found.
Definition TGFont.cxx:1761
THashTable * fNamedTable
Definition TGFont.h:222
void FreeFont(const TGFont *font)
Free font. If ref count is 0 delete font.
Definition TGFont.cxx:1718
char ** GetAttributeInfo(const FontAttributes_t *fa)
Return information about the font attributes as an array of strings.
Definition TGFont.cxx:1805
const char * FindStateString(const FontStateMap_t *map, int numKey)
Given a lookup table, map a number to a string in the table.
Definition TGFont.cxx:2228
void FreeFontFamilies(char **f)
Delete an array of families allocated GetFontFamilies() method.
Definition TGFont.cxx:2333
TGFont * GetFontFromAttributes(FontAttributes_t *fa, TGFont *fontPtr)
Given a desired set of attributes for a font, find a font with the closest matching attributes and cr...
Definition TGFont.cxx:2356
TGFont * MakeFont(TGFont *font, FontStruct_t fontStruct, const char *fontName)
Helper for GetNativeFont() and GetFontFromAttributes().
Definition TGFont.cxx:2590
~TGFontPool() override
Cleanup font pool.
Definition TGFont.cxx:1544
TGFont * FindFont(FontStruct_t font) const
Find font based on its font struct. Returns 0 if font is not found.
Definition TGFont.cxx:1744
void Print(Option_t *option="") const override
List all fonts in the pool.
Definition TGFont.cxx:1876
void FreeAttributeInfo(char **info)
Free attributes info.
Definition TGFont.cxx:1859
TGFontPool & operator=(const TGFontPool &fp)=delete
Encapsulate fonts used in the GUI system.
Definition TGFont.h:140
char fTypes[256]
Array giving types of all characters in the font, used when displaying control characters.
Definition TGFont.h:156
void GetFontMetrics(FontMetrics_t *m) const
Get font metrics.
Definition TGFont.cxx:286
void UnderlineChars(Drawable_t dst, GContext_t gc, const char *string, Int_t x, Int_t y, Int_t firstChar, Int_t lastChar) const
This procedure draws an underline for a given range of characters in a given string.
Definition TGFont.cxx:617
void DrawCharsExp(Drawable_t dst, GContext_t gc, const char *source, Int_t numChars, Int_t x, Int_t y) const
Draw a string of characters on the screen.
Definition TGFont.cxx:1463
Int_t fBarHeight
Height of underline or overstrike bar (used for simulating a native underlined or strikeout font).
Definition TGFont.h:159
TObjString * fNamedHash
Pointer to the named object TGFont was based on.
Definition TGFont.h:150
Int_t fWidths[256]
Array giving widths of all possible characters in the font.
Definition TGFont.h:158
Int_t MeasureChars(const char *source, Int_t numChars, Int_t maxLength, Int_t flags, Int_t *length) const
Determine the number of characters from the string that will fit in the given horizontal span.
Definition TGFont.cxx:488
~TGFont() override
Delete font.
Definition TGFont.cxx:276
Int_t TextHeight() const
Definition TGFont.h:192
FontStruct_t GetFontStruct() const
Definition TGFont.h:184
Int_t fTabWidth
Width of tabs in this font (pixels).
Definition TGFont.h:151
Int_t TextWidth(const char *string, Int_t numChars=-1) const
A wrapper function for the more complicated interface of MeasureChars.
Definition TGFont.cxx:575
FontH_t fFontH
Font handle (derived from fontstruct)
Definition TGFont.h:147
Int_t fUnderlineHeight
Height of underline bar (used for drawing underlines on a non-underlined font).
Definition TGFont.h:154
FontStruct_t operator()() const
Not inline due to a bug in g++ 2.96 20000731 (Red Hat Linux 7.0)
Definition TGFont.cxx:300
FontAttributes_t fFA
Actual font attributes obtained when the font was created.
Definition TGFont.h:149
void operator=(const TGFont &)=delete
TGFont(const TGFont &)=delete
LayoutChunk_t * NewChunk(TGTextLayout *layout, int *maxPtr, const char *start, int numChars, int curX, int newX, int y) const
Helper function for ComputeTextLayout().
Definition TGFont.cxx:1410
FontMetrics_t fFM
Cached font metrics.
Definition TGFont.h:148
TGFont(const char *name)
Definition TGFont.h:163
Int_t XTextWidth(const char *string, Int_t numChars=-1) const
Return text width in pixels.
Definition TGFont.cxx:590
FontAttributes_t GetFontAttributes() const
Definition TGFont.h:187
void SavePrimitive(std::ostream &out, Option_t *="") override
Save the used font as a C++ statement(s) on output stream out.
Definition TGFont.cxx:1884
TGTextLayout * ComputeTextLayout(const char *string, Int_t numChars, Int_t wrapLength, Int_t justify, Int_t flags, UInt_t *width, UInt_t *height) const
Computes the amount of screen space needed to display a multi-line, justified string of text.
Definition TGFont.cxx:661
Int_t fUnderlinePos
Offset from baseline to origin of underline bar (used for drawing underlines on a non-underlined font...
Definition TGFont.h:152
Int_t PostscriptFontName(TString *dst) const
Return the name of the corresponding Postscript font for this TGFont.
Definition TGFont.cxx:343
void DrawChars(Drawable_t dst, GContext_t gc, const char *source, Int_t numChars, Int_t x, Int_t y) const
Perform a quick sanity check to ensure we won't overflow the X coordinate space.
Definition TGFont.cxx:1493
FontH_t GetFontHandle() const
Definition TGFont.h:183
FontStruct_t fFontStruct
Low level graphics fontstruct.
Definition TGFont.h:146
void Print(Option_t *option="") const override
Print font info.
Definition TGFont.cxx:308
This class is the baseclass for all ROOT GUI widgets.
Definition TGObject.h:21
Is used to keep track of string measurement information when using the text layout facilities.
Definition TGFont.h:106
Int_t PointToChar(Int_t x, Int_t y) const
Use the information in the TGTextLayout token to determine the character closest to the given point.
Definition TGFont.cxx:1003
Int_t IntersectText(Int_t x, Int_t y, Int_t w, Int_t h) const
Determines whether a text layout lies entirely inside, entirely outside, or overlaps a given rectangl...
Definition TGFont.cxx:1257
const TGFont * fFont
The font used when laying out the text.
Definition TGFont.h:111
void operator=(const TGTextLayout &tlayout)=delete
void ToPostscript(TString *dst) const
Outputs the contents of a text layout in Postscript format.
Definition TGFont.cxx:1334
Int_t fNumChunks
Number of chunks actually used in following array.
Definition TGFont.h:114
TGTextLayout(const TGTextLayout &tlayout)=delete
Int_t DistanceToText(Int_t x, Int_t y) const
Computes the distance in pixels from the given point to the given text layout.
Definition TGFont.cxx:1191
Int_t CharBbox(Int_t index, Int_t *x, Int_t *y, Int_t *w, Int_t *h) const
Use the information in the TGTextLayout token to return the bounding box for the character specified ...
Definition TGFont.cxx:1109
LayoutChunk_t * fChunks
Array of chunks. The actual size will be maxChunks.
Definition TGFont.h:115
Int_t fWidth
The maximum width of all lines in the text layout.
Definition TGFont.h:113
void UnderlineChar(Drawable_t dst, GContext_t gc, Int_t x, Int_t y, Int_t underline) const
Use the information in the TGTextLayout object to display an underline below an individual character.
Definition TGFont.cxx:970
const char * fString
The string that was laid out.
Definition TGFont.h:112
~TGTextLayout() override
destructor
Definition TGFont.cxx:900
THashTable implements a hash table to store TObject's.
Definition THashTable.h:35
The TNamed class is the base class for all named ROOT classes.
Definition TNamed.h:29
Collectable string class.
Definition TObjString.h:28
Mother of all ROOT objects.
Definition TObject.h:41
Definitions for TRefCnt, base class for reference counted objects.
Definition TRefCnt.h:27
void SetRefCount(UInt_t r)
Definition TRefCnt.h:39
Basic string class.
Definition TString.h:139
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
const char * fFamily
Definition TGFont.h:63
Int_t fWeight
Definition TGFont.h:65
Int_t fPointsize
Definition TGFont.h:64
FontAttributes_t & operator=(const FontAttributes_t &f)
Definition TGFont.h:86
FontAttributes_t(const FontAttributes_t &f)
Definition TGFont.h:78
Int_t fUnderline
Definition TGFont.h:67
Int_t fOverstrike
Definition TGFont.h:68
Int_t fLinespace
Definition TGFont.h:55
Int_t fMaxWidth
Definition TGFont.h:56
Bool_t fFixed
Definition TGFont.h:57
Int_t fAscent
Definition TGFont.h:53
Int_t fDescent
Definition TGFont.h:54
TMarker m
Definition textangle.C:8