62#define FONT_UNDERLINE 4
63#define FONT_OVERSTRIKE 5
64#define FONT_NUMFIELDS 6
73#define XLFD_SETWIDTH 4
74#define XLFD_ADD_STYLE 5
75#define XLFD_PIXEL_SIZE 6
76#define XLFD_POINT_SIZE 7
77#define XLFD_RESOLUTION_X 8
78#define XLFD_RESOLUTION_Y 9
79#define XLFD_SPACING 10
80#define XLFD_AVERAGE_WIDTH 11
81#define XLFD_REGISTRY 12
82#define XLFD_ENCODING 13
83#define XLFD_NUMFIELDS 14
99 Int_t fNumDisplayChars;
122struct XLFDAttributes_t {
124 const char *fFoundry;
146 Int_t fDeletePending;
186struct FontStateMap_t {
Int_t fNumKey;
const char *fStrKey; };
257 0, 0, 0, 0, 0, 0, 0,
'a',
'b',
't',
'n',
'v',
'f',
'r', 0
279 Error(
"GetFontMetrics",
"argument may not be 0");
303 Printf(
"TGFont: %s, %s, ref cnt = %u",
348 if (strncasecmp(family,
"itc ", 4) == 0) {
351 if ((strcasecmp(family,
"Arial") == 0)
352 || (strcasecmp(family,
"Geneva") == 0)) {
353 family =
"Helvetica";
354 }
else if ((strcasecmp(family,
"Times New Roman") == 0)
355 || (strcasecmp(family,
"New York") == 0)) {
357 }
else if ((strcasecmp(family,
"Courier New") == 0)
358 || (strcasecmp(family,
"Monaco") == 0)) {
360 }
else if (strcasecmp(family,
"AvantGarde") == 0) {
361 family =
"AvantGarde";
362 }
else if (strcasecmp(family,
"ZapfChancery") == 0) {
363 family =
"ZapfChancery";
364 }
else if (strcasecmp(family,
"ZapfDingbats") == 0) {
365 family =
"ZapfDingbats";
375 src =
dest = (
char*)dst->
Data() + len;
377 for (; *src !=
'\0'; src++,
dest++) {
378 while (isspace(
UChar_t(*src))) {
383 if ((upper != 0) && (islower(
UChar_t(*src)))) {
390 family = (
char *) dst->
Data() + len;
392 if (family != (
char *) dst->
Data() + len) {
394 family = (
char *) dst->
Data() + len;
396 if (strcasecmp(family,
"NewCenturySchoolbook") == 0) {
398 dst->
Append(
"NewCenturySchlbk");
399 family = (
char *) dst->
Data() + len;
406 if (strcmp(family,
"Bookman") == 0) {
407 weightString =
"Light";
408 }
else if (strcmp(family,
"AvantGarde") == 0) {
409 weightString =
"Book";
410 }
else if (strcmp(family,
"ZapfChancery") == 0) {
411 weightString =
"Medium";
414 if ((strcmp(family,
"Bookman") == 0)
415 || (strcmp(family,
"AvantGarde") == 0)) {
416 weightString =
"Demi";
418 weightString =
"Bold";
428 if ((strcmp(family,
"Helvetica") == 0)
429 || (strcmp(family,
"Courier") == 0)
430 || (strcmp(family,
"AvantGarde") == 0)) {
431 slantString =
"Oblique";
433 slantString =
"Italic";
440 if ((slantString.
IsNull()) && (weightString.
IsNull())) {
441 if ((strcmp(family,
"Times") == 0)
442 || (strcmp(family,
"NewCenturySchlbk") == 0)
443 || (strcmp(family,
"Palatino") == 0)) {
492 if (maxLength <= 0) {
495 newX = curX = termX = 0;
497 sawNonSpace = !isspace(
UChar_t(*p));
503 if (newX > maxLength) {
529 if ((flags &
kTextPartialOK) && (numChars > 0) && (curX < maxLength)) {
542 if (term == source) {
552 return term - source;
570 numChars = strlen(
string);
585 numChars = strlen(
string);
655 const char *start, *end, *special;
656 Int_t n,
y=0, charsThisChunk, maxChunks;
657 Int_t baseline,
h, curX, newX, maxWidth;
659 LayoutChunk_t *chunk;
664 Int_t maxLines, curLine, layoutHeight;
666 lineLengths = staticLineLengths;
672 numChars = strlen(
string);
677 layout->
fFont =
this;
689 end =
string + numChars;
696 for (start =
string; start < end;) {
697 if (start >= special) {
700 for (special = start; special < end; special++) {
702 if ((*special ==
'\n') || (*special ==
'\r')) {
707 if (*special ==
'\t') {
718 if (start < special) {
720 wrapLength - curX, flags, &newX);
722 flags &= ~kTextAtLeastOne;
723 if (charsThisChunk > 0) {
724 chunk =
NewChunk(layout, &maxChunks, start,
725 charsThisChunk, curX, newX, baseline);
727 start += charsThisChunk;
731 if ((start == special) && (special < end)) {
733 LayoutChunk_t *newchunk = 0;
736 if (*special ==
'\t') {
739 newchunk =
NewChunk(layout, &maxChunks, start, 1, curX, newX, baseline);
740 if (newchunk) newchunk->fNumDisplayChars = -1;
742 if ((start < end) && ((wrapLength <= 0) || (newX <= wrapLength))) {
747 flags &= ~kTextAtLeastOne;
751 newchunk =
NewChunk(layout, &maxChunks, start, 1, curX, 1000000000, baseline);
752 if (newchunk) newchunk->fNumDisplayChars = -1;
762 while ((start < end) && isspace(
UChar_t(*start))) {
764 if ((*start ==
'\n') || (*start ==
'\r')) {
769 if (*start ==
'\t') {
779 charsThisChunk = start - (chunk->fStart + chunk->fNumChars);
780 if (charsThisChunk > 0) {
781 chunk->fNumChars +=
MeasureChars(chunk->fStart + chunk->fNumChars,
782 charsThisChunk, 0, 0, &chunk->fTotalWidth);
783 chunk->fTotalWidth += curX;
792 if (curX > maxWidth) {
799 if (curLine >= maxLines) {
802 newLengths =
new int[2 * maxLines];
803 memcpy((
void *) newLengths, lineLengths, maxLines *
sizeof (
int));
805 if (lineLengths != staticLineLengths) {
806 delete[] lineLengths;
808 lineLengths = newLengths;
811 lineLengths[curLine] = curX;
824 chunk =
NewChunk(layout, &maxChunks, start, 0, curX, 1000000000, baseline);
825 chunk->fNumDisplayChars = -1;
835 if (chunk)
y = chunk->fY;
839 if (chunk->fY !=
y) {
843 extra = maxWidth - lineLengths[curLine];
845 chunk->fX += extra / 2;
852 layout->
fWidth = maxWidth;
862 layout->
fChunks =
new LayoutChunk_t[1];
863 layout->
fChunks[0].fStart = string;
864 layout->
fChunks[0].fNumChars = 0;
865 layout->
fChunks[0].fNumDisplayChars = -1;
868 layout->
fChunks[0].fTotalWidth = 0;
869 layout->
fChunks[0].fDisplayWidth = 0;
875 *height = layoutHeight;
877 if (lineLengths != staticLineLengths) {
878 delete[] lineLengths;
913 Int_t i, numDisplayChars, drawX;
914 LayoutChunk_t *chunk;
916 if (lastChar < 0) lastChar = 100000000;
920 numDisplayChars = chunk->fNumDisplayChars;
921 if ((numDisplayChars > 0) && (firstChar < numDisplayChars)) {
922 if (firstChar <= 0) {
928 if (lastChar < numDisplayChars) numDisplayChars = lastChar;
929 fFont->
DrawChars(dst, gc, chunk->fStart + firstChar, numDisplayChars - firstChar,
930 x + chunk->fX + drawX,
y + chunk->fY);
932 firstChar -= chunk->fNumChars;
933 lastChar -= chunk->fNumChars;
935 if (lastChar <= 0)
break;
960 int xx, yy,
width, height;
992 LayoutChunk_t *chunk, *last;
993 Int_t i,
n, dummy, baseline, pos;
1006 baseline = chunk->fY;
1007 if (y < baseline + fFont->fFM.fDescent) {
1008 if (x < chunk->fX) {
1012 return (chunk->fStart -
fString);
1028 while ((i <
fNumChunks) && (chunk->fY == baseline)) {
1029 if (x < chunk->fX + chunk->fTotalWidth) {
1033 if (chunk->fNumDisplayChars < 0) {
1038 return (chunk->fStart -
fString);
1042 return ((chunk->fStart +
n - 1) -
fString);
1053 pos = (last->fStart + last->fNumChars) -
fString;
1064 return ((last->fStart + last->fNumChars) -
fString);
1098 LayoutChunk_t *chunk;
1099 Int_t i, xx = 0, ww = 0;
1108 if (chunk->fNumDisplayChars < 0) {
1111 ww = chunk->fTotalWidth;
1114 }
else if (index < chunk->fNumChars) {
1124 index -= chunk->fNumChars;
1132 xx = chunk->fX + chunk->fTotalWidth;
1180 Int_t i,
x1,
x2, y1, y2, xDiff, yDiff, dist, minDist, ascent, descent;
1181 LayoutChunk_t *chunk;
1189 if (chunk->fStart[0] ==
'\n') {
1198 y1 = chunk->fY - ascent;
1199 x2 = chunk->fX + chunk->fDisplayWidth;
1200 y2 = chunk->fY + descent;
1204 }
else if (
x >=
x2) {
1212 }
else if (
y >= y2) {
1217 if ((xDiff == 0) && (yDiff == 0)) {
1221 if ((dist < minDist) || !minDist) {
1247 LayoutChunk_t *chunk;
1248 Int_t left, top, right, bottom;
1264 if (chunk->fStart[0] ==
'\n') {
1274 x2 = chunk->fX + chunk->fDisplayWidth;
1277 if ((right <
x1) || (left >=
x2) || (bottom < y1) || (top >= y2)) {
1282 }
else if ((
x1 < left) || (
x2 >= right) || (y1 < top) || (y2 >= bottom)) {
1284 }
else if (result == -1) {
1325 LayoutChunk_t *chunk;
1326 Int_t i, j, used,
c, baseline;
1329 baseline = chunk->fY;
1334 if (baseline != chunk->fY) {
1338 baseline = chunk->fY;
1340 if (chunk->fNumDisplayChars <= 0) {
1341 if (chunk->fStart[0] ==
'\t') {
1346 for (j = 0; j < chunk->fNumDisplayChars; j++) {
1348 if ((
c ==
'(') || (
c ==
')') || (
c ==
'\\') || (
c < 0x20) || (
c >=
UChar_t(0x7f))) {
1357 sprintf(buf + used,
"\\%03o",
c);
1398 const char *start,
Int_t numChars,
1401 LayoutChunk_t *chunk;
1404 maxChunks = *maxPtr;
1406 if (maxChunks == 0) {
1411 chunk =
new LayoutChunk_t[maxChunks];
1418 *maxPtr = maxChunks;
1422 chunk->fStart = start;
1423 chunk->fNumChars = numChars;
1424 chunk->fNumDisplayChars = numChars;
1427 chunk->fTotalWidth = newX - curX;
1428 chunk->fDisplayWidth = newX - curX;
1451 const char *source,
Int_t numChars,
1459 for (i = 0; i < numChars; i++) {
1481 const char *source,
Int_t numChars,
1486 if ((
x + (max_width * numChars) > 0x7fff)) {
1494 numChars =
MeasureChars(source, numChars, 0x7fff -
x, 0, &length);
1497 gVirtualX->DrawString(dst, gc,
x,
y, source, numChars);
1547 if (!font || !*font) {
1548 Error(
"GetFont",
"argument may not be 0 or empty");
1597 f->MeasureChars(
"0", 1, 0, 0, &
f->fTabWidth);
1599 if (!
f->fTabWidth) {
1600 f->fTabWidth =
f->fFM.fMaxWidth;
1607 if (!
f->fTabWidth) {
1614 Int_t descent =
f->fFM.fDescent;
1615 f->fUnderlinePos = descent/2;
1616 f->fUnderlineHeight =
f->fFA.fPointsize/10;
1618 if (!
f->fUnderlineHeight) {
1619 f->fUnderlineHeight = 1;
1621 if (
f->fUnderlinePos +
f->fUnderlineHeight > descent) {
1627 f->fUnderlineHeight = descent -
f->fUnderlinePos;
1629 if (!
f->fUnderlineHeight) {
1631 f->fUnderlineHeight = 1;
1709 if (
f->RemoveReference() == 0) {
1715 TNamedFont *nf = (TNamedFont *) font->
fNamedHash;
1717 if ((nf->RemoveReference() == 0) && (nf->fDeletePending != 0)) {
1736 while ((
f = (
TGFont*) next())) {
1737 if (
f->fFontStruct == font) {
1753 while ((
f = (
TGFont*) next())) {
1754 if (
f->fFontH == font) {
1782 return (
const char *)obj->
GetName();
1795 const char *str = 0;
1831 int len = strlen(str)+1;
1832 result[i] =
new char[len];
1833 strlcpy(result[i], str, len);
1835 result[i] =
new char[20];
1836 snprintf(result[i], 20,
"%d", num);
1875 if (
gROOT->ClassSaved(TGFont::Class())) {
1880 out <<
" TGFont *ufont; // will reflect user font changes" << std::endl;
1882 out <<
" ufont = gClient->GetFont(" << quote <<
GetName() << quote <<
");" << std::endl;
1901 while (*p && ((*p ==
' ') || (*p ==
'\t'))) {
1916 while (*p && (*p !=
'"')) {
1925 while (*p && (*p !=
' ') && (*p !=
'\t')) {
1954 XLFDAttributes_t xa;
1956 int len = strlen(
string)+1;
1957 char *str =
new char[len];
1958 strlcpy(str,
string, len);
1960 if (*str ==
'-' || *str ==
'*') {
1989 if ((errno == ERANGE) || (end == s)) {
2049 memset(field,
'\0',
sizeof (field));
2052 if (*str ==
'-') str++;
2054 ds.Append((
char *) str);
2055 src = (
char*)ds.Data();
2058 for (i = 0; *src !=
'\0'; src++) {
2060 *src = tolower(
UChar_t(*src));
2082 field[j + 1] = field[j];
2137 xa->fFA.fPointsize /= 10;
2164 xa->fFA.fPointsize = -xa->fFA.fPointsize;
2194 const FontStateMap_t *
m;
2196 if (!map->fStrKey) {
2200 for (
m = map;
m->fStrKey != 0;
m++) {
2201 if (strcasecmp(strKey,
m->fStrKey) == 0) {
2217 for ( ; map->fStrKey != 0; map++) {
2218 if (numKey == map->fNumKey)
return map->fStrKey;
2243 return (ch !=
'*' && ch !=
'?');
2264 char *family, *end, *p;
2274 nameList =
gVirtualX->ListFonts(
"*", 10000, numNames);
2276 for (i = 0; i < numNames; i++) {
2277 if (nameList[i][0] !=
'-') {
2280 family = strchr(nameList[i] + 1,
'-');
2285 end = strchr(family,
'-');
2290 for (p = family; *p !=
'\0'; p++) {
2301 dst =
new char*[entries+1];
2303 TIter next(&familyTable);
2307 while ((obj = next())) {
2326 for (i = 0;
f[i] != 0; ++i) {
2345 Int_t numNames, score, i, scaleable, pixelsize, xaPixelsize;
2346 Int_t bestIdx, bestScore, bestScaleableIdx, bestScaleableScore;
2347 XLFDAttributes_t xa;
2352 const char *fmt, *family;
2360 if (pixelsize < 0) {
2362 d = -pixelsize * 25.4/72;
2369 pixelsize = (
int)
d;
2376 fmt =
"-*-%.240s-*-*-*-*-*-*-*-*-*-*-*-*";
2378 nameList =
gVirtualX->ListFonts(buf.
Data(), 32768, numNames);
2385 nameList =
gVirtualX->ListFonts(buf.
Data(), 32768, numNames);
2390 fontStruct =
gVirtualX->LoadQueryFont(
"fixed");
2393 fontStruct =
gVirtualX->LoadQueryFont(
"*");
2407 bestScaleableIdx = 0;
2410 for (i = 0; i < numNames; i++) {
2416 xaPixelsize = -xa.fFA.fPointsize;
2423 if (xa.fFoundry && (strcasecmp(xa.fFoundry,
"adobe") != 0)) {
2426 if (!xa.fFA.fPointsize) {
2437 if (xaPixelsize > pixelsize) {
2438 score += (xaPixelsize - pixelsize) * 120;
2440 score += (pixelsize - xaPixelsize) * 100;
2467 if ((xa.fCharset ==
kFontCSNormal) && (xa.fEncoding != 1)) {
2475 if (score < bestScaleableScore) {
2476 bestScaleableIdx = i;
2477 bestScaleableScore = score;
2480 if (score < bestScore) {
2498 if (bestScaleableScore < bestScore) {
2504 str = nameList[bestScaleableIdx];
2506 str = strchr(str + 1,
'-');
2510 rest = strchr(rest + 1,
'-');
2513 buf =
TString::Format(
"%.240s-*-%d-*-*-*-*-*%s", nameList[bestScaleableIdx], pixelsize, rest);
2519 buf = nameList[bestIdx];
2527 if (bestScaleableScore <
kMaxInt) {
2538 font =
MakeFont(fontPtr, fontStruct, buf);
2557 fixedDefault = fixedDefault && ((*
name ==
'-') || (*
name ==
'*'));
2580 const char *fontName)
2584 Int_t i,
width, firstChar, lastChar,
n, replaceOK;
2587 XLFDAttributes_t xa;
2593 newFont =
new TGFont(fontName);
2599 newFont->
fFA = xa.fFA;
2615 gVirtualX->GetFontProperties(fontStruct, ascent, descent);
2630 for (i = 0; i < 256; i++) {
2631 if ((i == 160) || (i == 173) || (i == 177) ||
2632 (i < firstChar) || (i > lastChar)) {
2644 char ch[2] = {0, 0};
2646 for (i = 0; i < 256; i++) {
2675 for (i = 0; i < 256; i++) {
Handle_t FontH_t
Font handle (as opposed to Font_t which is an index)
Handle_t Drawable_t
Drawable handle.
Handle_t GContext_t
Graphics context handle.
Handle_t FontStruct_t
Pointer to font structure.
static const double x2[5]
static const double x1[5]
include TDocParser_001 C image html pict1_TDocParser_001 png width
R__EXTERN Int_t gErrorIgnoreLevel
static const FontStateMap_t gWeightMap[]
static char * GetToken(char *str)
static const FontStateMap_t gXlfdCharsetMap[]
static const FontStateMap_t gUnderlineMap[]
static const FontStateMap_t gOverstrikeMap[]
static int GetControlCharSubst(int c, char buf[4])
When displaying text in a widget, a backslashed escape sequence is substituted for control characters...
static const FontStateMap_t gXlfdSlantMap[]
static const FontStateMap_t gSlantMap[]
static const FontStateMap_t gXlfdgWeightMap[]
static const FontStateMap_t gXlfdSetwidthMap[]
void Printf(const char *fmt,...)
char * StrDup(const char *str)
Duplicate the string str.
virtual Int_t GetEntries() const
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
FontStruct_t GetFontByName(const char *name, Bool_t fixedDefault=kTRUE) const
Get a font by name.
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.
TGFont * GetFont(const char *font, Bool_t fixedDefault=kTRUE)
Get the specified font.
const char * NameOfFont(TGFont *font)
Given a font, return a textual string identifying it.
char ** GetFontFamilies()
Return information about the font families that are available on the current display.
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.
int FindStateNum(const FontStateMap_t *map, const char *strKey)
Given a lookup table, map a string to a number in the table.
TGFont * GetNativeFont(const char *name, Bool_t fixedDefault=kTRUE)
The return value is a pointer to an TGFont object that represents the native font.
const char * GetUid(const char *string)
Given a string, this procedure returns a unique identifier for the string.
Bool_t FieldSpecified(const char *field)
Helper function for ParseXLFD().
TGFont * FindFontByHandle(FontH_t font) const
Find font based on its font handle. Returns 0 if font is not found.
virtual ~TGFontPool()
Cleanup font pool.
void FreeFont(const TGFont *font)
Free font. If ref count is 0 delete font.
char ** GetAttributeInfo(const FontAttributes_t *fa)
Return information about the font attributes as an array of strings.
const char * FindStateString(const FontStateMap_t *map, int numKey)
Given a lookup table, map a number to a string in the table.
void FreeFontFamilies(char **f)
Delete an array of families allocated GetFontFamilies() method.
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...
TGFont * MakeFont(TGFont *font, FontStruct_t fontStruct, const char *fontName)
Helper for GetNativeFont() and GetFontFromAttributes().
TGFont * FindFont(FontStruct_t font) const
Find font based on its font struct. Returns 0 if font is not found.
void FreeAttributeInfo(char **info)
Free attributes info.
void Print(Option_t *option="") const
List all fonts in the pool.
void GetFontMetrics(FontMetrics_t *m) const
Get font metrics.
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.
friend class TGTextLayout
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.
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.
Int_t TextWidth(const char *string, Int_t numChars=-1) const
A wrapper function for the more complicated interface of MeasureChars.
FontStruct_t operator()() const
Not inline due to a bug in g++ 2.96 20000731 (Red Hat Linux 7.0)
LayoutChunk_t * NewChunk(TGTextLayout *layout, int *maxPtr, const char *start, int numChars, int curX, int newX, int y) const
Helper function for ComputeTextLayout().
virtual void SavePrimitive(std::ostream &out, Option_t *="")
Save the used font as a C++ statement(s) on output stream out.
Int_t XTextWidth(const char *string, Int_t numChars=-1) const
Return text widht in pixels.
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.
void Print(Option_t *option="") const
Print font info.
Int_t PostscriptFontName(TString *dst) const
Return the name of the corresponding Postscript font for this TGFont.
virtual ~TGFont()
Delete font.
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.
void DrawText(Drawable_t dst, GContext_t gc, Int_t x, Int_t y, Int_t firstChar, Int_t lastChar) const
Use the information in the TGTextLayout object to display a multi-line, justified string of text.
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.
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...
void ToPostscript(TString *dst) const
Outputs the contents of a text layout in Postscript format.
Int_t DistanceToText(Int_t x, Int_t y) const
Computes the distance in pixels from the given point to the given text layout.
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 ...
virtual ~TGTextLayout()
destructor
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.
THashTable implements a hash table to store TObject's.
TObject * Remove(TObject *obj)
Remove object from the hashtable.
void Add(TObject *obj)
Add object to the hash table.
void Print(Option_t *option, Int_t recurse) const
Print the collection header and its elements.
TObject * FindObject(const char *name) const
Find object using its name.
virtual const char * GetName() const
Returns name of object.
Collectable string class.
const char * GetName() const
Returns name of object.
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definitions for TRefCnt, base class for reference counted objects.
UInt_t References() const
const char * Data() const
TString & Append(const char *cs)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Double_t Hypot(Double_t x, Double_t y)
#define dest(otri, vertexptr)