38 bool IsGradientFill(
Color_t fillColorIndex)
64 fVp[0] = fVp[1] = fVp[2] = fVp[3] = 0;
315 glViewport(GLint(px * scale), GLint(
py * scale),
316 GLsizei(
gPad->GetWw() *
pad->GetAbsWNDC() * scale),
317 GLsizei(
gPad->GetWh() *
pad->GetAbsHNDC() * scale));
319 glMatrixMode(GL_PROJECTION);
321 glOrtho(
pad->GetX1(),
pad->GetX2(),
pad->GetY1(),
pad->GetY2(), -10., 10.);
323 glMatrixMode(GL_MODELVIEW);
325 glTranslated(0., 0., -1.);
327 ::Error(
"TGLPadPainter::SelectDrawable",
328 "function was called not from TPad or TCanvas code\n");
329 throw std::runtime_error(
"");
345 glDisable(GL_DEPTH_TEST);
346 glDisable(GL_CULL_FACE);
347 glDisable(GL_LIGHTING);
350 glViewport(0, 0, GLsizei(
gPad->GetWw()), GLsizei(
gPad->GetWh()));
352 glDepthMask(GL_TRUE);
353 glClearColor(1.,1.,1.,1.);
354 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
355 glDepthMask(GL_FALSE);
357 glMatrixMode(GL_PROJECTION);
360 glOrtho(
gPad->GetX1(),
gPad->GetX2(),
gPad->GetY1(),
gPad->GetY2(), -10., 10.);
362 glMatrixMode(GL_MODELVIEW);
364 glTranslated(0., 0., -1.);
377 glMatrixMode(GL_PROJECTION);
380 glOrtho(
gPad->GetX1(),
gPad->GetX2(),
gPad->GetY1(),
gPad->GetY2(), -10., 10.);
382 glMatrixMode(GL_MODELVIEW);
417 gPad->XtoAbsPixel(x2),
gPad->YtoAbsPixel(y2));
434 glPointSize((GLfloat)pointSize);
436 glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
460 glVertex2d(
gPad->GetX1() + u1 * xRange,
gPad->GetY1() + v1 * yRange);
461 glVertex2d(
gPad->GetX1() + u2 * xRange,
gPad->GetY1() + v2 * yRange);
472 if (IsGradientFill(
gVirtualX->GetFillColor())) {
482 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
483 glRectd(x1, y1, x2, y2);
484 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
488 glRectd(x1, y1, x2, y2);
497 assert(x != 0 &&
"DrawFillArea, parameter 'x' is null");
498 assert(y != 0 &&
"DrawFillArea, parameter 'y' is null");
504 ::Error(
"TGLPadPainter::DrawFillArea",
505 "invalid number of points in a polygon");
509 if (IsGradientFill(
gVirtualX->GetFillColor()))
536 for (
Int_t i = 0; i <
n; ++i) {
538 fVs[i * 3 + 1] = y[i];
545 gluNextContour(t, (GLenum)GLU_UNKNOWN);
547 for (
Int_t i = 0; i <
n; ++i)
548 gluTessVertex(t, &
fVs[i * 3], &
fVs[i * 3]);
563 glBegin(GL_LINE_STRIP);
565 for (
Int_t i = 0; i <
n; ++i)
566 glVertex2d(x[i], y[i]);
569 glVertex2d(x[0], y[0]);
578 glPointSize((GLfloat)pointSize);
580 glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
583 for (
Int_t i = 0; i <
n; ++i)
584 glVertex2d(x[i], y[i]);
600 glBegin(GL_LINE_STRIP);
602 for (
Int_t i = 0; i <
n; ++i)
603 glVertex2f(x[i], y[i]);
606 glVertex2f(x[0], y[0]);
625 glBegin(GL_LINE_STRIP);
627 for (
Int_t i = 0; i <
n; ++i)
628 glVertex2d(x1 + u[i] * xRange, y1 + v[i] * yRange);
636 template<
class ValueType>
637 void ConvertMarkerPoints(
Int_t n,
const ValueType *x,
const ValueType *y, std::vector<TPoint> & dst);
648 ConvertMarkerPoints(n, x, y,
fPoly);
659 ConvertMarkerPoints(n, x, y,
fPoly);
673 glOrtho(0,
gPad->GetAbsWNDC() *
gPad->GetWw(), 0,
gPad->GetAbsHNDC() *
gPad->GetWh(), -10., 10.);
675 glMatrixMode(GL_MODELVIEW);
681 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
687 switch (markerStyle) {
724 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
726 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
729 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
731 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
747 glMatrixMode(GL_MODELVIEW);
759 glOrtho(0,
gPad->GetAbsWNDC() *
gPad->GetWw(), 0,
gPad->GetAbsHNDC() *
gPad->GetWh(), -10., 10.);
761 glMatrixMode(GL_MODELVIEW);
774 fontIndex = 20 + shift * 10;
776 fontIndex += shift * 10;
789 glMatrixMode(GL_MODELVIEW);
861 glMatrixMode(GL_PROJECTION);
872 glMatrixMode(GL_PROJECTION);
883 glMatrixMode(GL_MODELVIEW);
894 glMatrixMode(GL_MODELVIEW);
903 glGetIntegerv(GL_VIEWPORT,
fVp);
925 std::vector<unsigned> buff(canvas->GetWw() * canvas->GetWh());
926 glPixelStorei(GL_PACK_ALIGNMENT, 1);
927 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
930 glReadPixels(0, 0, canvas->GetWw(), canvas->GetWh(), GL_RGBA, GL_UNSIGNED_BYTE, (
char *)&buff[0]);
934 ::Error(
"TGLPadPainter::SaveImage",
"TImage creation failed");
938 image->
DrawRectangle(0, 0, canvas->GetWw(), canvas->GetWh());
942 ::Error(
"TGLPadPainter::SaveImage",
"null argb array in TImage object");
946 const Int_t nLines = canvas->GetWh();
947 const Int_t nPixels = canvas->GetWw();
949 for (
Int_t i = 0; i < nLines; ++i) {
950 Int_t base = (nLines - 1 - i) * nPixels;
951 for (
Int_t j = 0; j < nPixels; ++j, ++base) {
954 const UInt_t pix = buff[base];
955 const UInt_t bgra = ((pix & 0xff) << 16) | (pix & 0xff00) |
956 ((pix & 0xff0000) >> 16) | (pix & 0xff000000);
959 argb[i * nPixels + j] = bgra;
976 ::Error(
"TGLPadPainter::DrawPixels",
"pixel data is null");
980 if (std::numeric_limits<UInt_t>::digits >= 32) {
989 ::Error(
"TGLPadPainter::DrawPixels",
"invalid width");
995 ::Error(
"TGLPadPainter::DrawPixels",
"invalid height");
1005 (
pad->GetX2() -
pad->GetX1()) +
pad->GetX1();
1008 const Double_t rasterY = yRange -
Double_t(dstY + height) / (
pad->GetAbsHNDC() *
pad->GetWh()) * yRange +
1011 GLdouble oldPos[4] = {};
1013 glGetDoublev(GL_CURRENT_RASTER_POSITION, oldPos);
1015 glRasterPos2d(rasterX, rasterY);
1017 std::vector<unsigned char> upsideDownImage(4 * width * height);
1018 const unsigned char *srcLine = pixelData + 4 * width * (height - 1);
1019 unsigned char *dstLine = &upsideDownImage[0];
1020 for (
UInt_t i = 0; i < height; ++i, srcLine -= 4 * width, dstLine += 4 * width)
1021 std::copy(srcLine, srcLine + 4 * width, dstLine);
1023 if (enableBlending) {
1025 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1028 glDrawPixels(width, height,
GL_BGRA, GL_UNSIGNED_BYTE, &upsideDownImage[0]);
1031 glDisable(GL_BLEND);
1034 glRasterPos2d(oldPos[0], oldPos[1]);
1036 ::Error(
"TGLPadPainter::DrawPixels",
"no pad found to draw");
1048 assert(n > 2 &&
"DrawPolygonWithGradient, invalid number of points");
1049 assert(x != 0 &&
"DrawPolygonWithGradient, parameter 'x' is null");
1050 assert(y != 0 &&
"DrawPolygonWithGradient, parameter 'y' is null");
1053 "DrawPolygonWithGradient, the current fill color is not a gradient fill");
1066 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
1068 glStencilFunc(GL_NEVER, 1, 0xFF);
1069 glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
1071 glStencilMask(0xFF);
1072 glClear(GL_STENCIL_BUFFER_BIT);
1077 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
1078 glStencilMask(0x00);
1080 glStencilFunc(GL_EQUAL, 0, 0xFF);
1082 glStencilFunc(GL_EQUAL, 1, 0xFF);
1093 assert(lGrad != 0 &&
"DrawPolygonWithGradient, unknown gradient type");
1103 assert(grad != 0 &&
"DrawGradient, parameter 'grad' is null");
1104 assert(nPoints > 2 &&
"DrawGradient, invalid number of points");
1105 assert(xs != 0 &&
"DrawGradient, parameter 'xs' is null");
1106 assert(ys != 0 &&
"DrawGradient, parameter 'ys' is null");
1109 ::Warning(
"TGLPadPainter::DrawGradient",
1110 "extended radial gradient is not supported");
1121 radius *=
TMath::Max(bbox.fWidth, bbox.fHeight);
1122 center.fX = bbox.fWidth * center.fX + bbox.fXMin;
1123 center.fY = bbox.fHeight * center.fY + bbox.fYMin;
1125 const auto w =
gPad->GetX2() -
gPad->GetX1();
1126 const auto h =
gPad->GetY2() -
gPad->GetY1();
1133 const auto pixelW =
gPad->GetAbsWNDC() *
gPad->GetWw();
1134 const auto pixelH =
gPad->GetAbsHNDC() *
gPad->GetWh();
1139 glMatrixMode(GL_PROJECTION);
1142 glOrtho(0., pixelW, 0., pixelH, -10., 10.);
1145 center.fX =
gPad->XtoPixel(center.fX);
1146 center.fY = pixelH -
gPad->YtoPixel(center.fY);
1152 const Double_t yMin = pixelH -
gPad->YtoPixel(bbox.fYMin);
1153 const Double_t yMax = pixelH -
gPad->YtoPixel(bbox.fYMax);
1160 maxR =
TMath::Sqrt(maxDistX * maxDistX + maxDistY * maxDistY);
1165 const Bool_t solidFillAfter = maxR > radius;
1168 const UInt_t nSlices = 500;
1173 const auto nCircles = nColors + 1 + solidFillAfter;
1179 std::vector<Double_t> circles(nSlices * nCircles * 2);
1183 for (
UInt_t i = 0; i < nColors; ++i) {
1184 const auto circle = &circles[i * nSlices * 2];
1186 const auto r = radius * locations[i];
1187 for (
UInt_t j = 0, e = nSlices * 2 - 2; j < e; j += 2) {
1188 circle[j] = center.fX +
r *
TMath::Cos(angle * j);
1189 circle[j + 1] = center.fY +
r *
TMath::Sin(angle * j);
1192 circle[(nSlices - 1) * 2] = circle[0];
1193 circle[(nSlices - 1) * 2 + 1] = circle[1];
1198 const auto circle = &circles[nColors * nSlices * 2];
1199 for (
UInt_t j = 0, e = nSlices * 2 - 2; j < e; j += 2) {
1200 circle[j] = center.fX + radius *
TMath::Cos(angle * j);
1201 circle[j + 1] = center.fY + radius *
TMath::Sin(angle * j);
1204 circle[(nSlices - 1) * 2] = circle[0];
1205 circle[(nSlices - 1) * 2 + 1] = circle[1];
1208 if (solidFillAfter) {
1210 const auto circle = &circles[(nCircles - 1) * nSlices * 2];
1211 for (
UInt_t j = 0, e = nSlices * 2 - 2; j < e; j += 2) {
1212 circle[j] = center.fX + maxR *
TMath::Cos(angle * j);
1213 circle[j + 1] = center.fY + maxR *
TMath::Sin(angle * j);
1216 circle[(nSlices - 1) * 2] = circle[0];
1217 circle[(nSlices - 1) * 2 + 1] = circle[1];
1232 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1235 glBegin(GL_TRIANGLE_FAN);
1237 glVertex2d(center.fX, center.fY);
1239 for (
UInt_t i = 0, e = nSlices * 2; i < e; i += 2)
1240 glVertex2dv(&circles[i]);
1245 for (
UInt_t i = 0; i < nColors - 1; ++i) {
1246 const Double_t *
const inner = &circles[i * nSlices * 2];
1247 const auto innerRGBA = rgba + i * 4;
1248 const auto outerRGBA = rgba + (i + 1) * 4;
1249 const Double_t *
const outer = &circles[(i + 1) * nSlices * 2];
1256 glBegin(GL_QUAD_STRIP);
1257 const Double_t *
const inner = &circles[nSlices * (nColors - 1) * 2];
1258 const auto solidRGBA = rgba + (nColors - 1) * 4;
1259 const Double_t *
const outer = &circles[nSlices * nColors * 2];
1264 if (solidFillAfter) {
1265 glBegin(GL_QUAD_STRIP);
1266 const Double_t *
const inner = &circles[nSlices * nColors * 2];
1267 const auto solidRGBA = rgba + (nColors - 1) * 4;
1268 const Double_t *
const outer = &circles[nSlices * (nColors + 1) * 2];
1282 assert(grad != 0 &&
"DrawGradient, parameter 'grad' is null");
1283 assert(n > 2 &&
"DrawGradient, invalid number of points");
1284 assert(x != 0 &&
"DrawGradient, parameter 'x' is null");
1285 assert(y != 0 &&
"DrawGradient, parameter 'y' is null");
1301 glMatrixMode(GL_PROJECTION);
1306 glOrtho(0., pixelW, 0., pixelH, -10., 10.);
1309 glMatrixMode(GL_MODELVIEW);
1321 start.
fX = start.
fX *
w;
1322 start.
fY = start.
fY *
h;
1323 end.
fX = end.
fX *
w;
1324 end.
fY = end.
fY *
h;
1326 start.
fX = start.
fX * bbox.fWidth + bbox.fXMin;
1327 start.
fY = start.
fY * bbox.fHeight + bbox.fYMin;
1328 end.
fX = end.
fX * bbox.fWidth + bbox.fXMin;
1329 end.
fY = end.
fY * bbox.fHeight + bbox.fYMin;
1336 start.
fX =
gPad->XtoPixel(start.
fX);
1337 start.
fY = pixelH -
gPad->YtoPixel(start.
fY);
1339 end.
fY = pixelH -
gPad->YtoPixel(end.
fY);
1342 const Double_t yMin = pixelH -
gPad->YtoPixel(bbox.fYMin);
1343 const Double_t yMax = pixelH -
gPad->YtoPixel(bbox.fYMax);
1353 (end.
fY - start.
fY) * (end.
fY - start.
fY));
1360 gradBoxes[0] = start.
fY -
h;
1362 gradBoxes[i] = startEndLength * colorPositions[i - 1] + start.
fY;
1369 if (end.
fX > start.
fX)
1372 glTranslated(start.
fX, start.
fY, 0.);
1373 glRotated(angle, 0., 0., 1.);
1374 glTranslated(-start.
fX, -start.
fY, 0.);
1378 const unsigned nEdges = gradBoxes.size();
1384 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1388 rgba + (nColors - 1) * 4, rgba + (nColors - 1) * 4);
1390 for (
unsigned i = 1; i < nEdges - 2; ++i)
1392 xRight, rgba + (i - 1) * 4, rgba + i * 4);
1402 assert(n > 2 &&
"DrawTesselation, invalid number of points");
1403 assert(x != 0 &&
"DrawTesselation, parameter 'x' is null");
1404 assert(y != 0 &&
"DrawTesselation, parameter 'y' is null");
1409 for (
Int_t i = 0; i <
n; ++i) {
1411 fVs[i * 3 + 1] = y[i];
1412 fVs[i * 3 + 2] = 0.;
1419 gluNextContour(t, (GLenum)GLU_UNKNOWN);
1421 for (
Int_t i = 0; i <
n; ++i)
1422 gluTessVertex(t, &
fVs[i * 3], &
fVs[i * 3]);
1431 template<
class ValueType>
1432 void ConvertMarkerPoints(
Int_t n,
const ValueType *x,
const ValueType *y, std::vector<TPoint> & dst)
1437 for (
Int_t i = 0; i <
n; ++i) {
1438 dst[i].fX =
gPad->XtoPixel(x[i]);
1439 dst[i].fY = padH -
gPad->YtoPixel(y[i]);
Color_t GetFillColor() const
Delegate to gVirtualX.
void DrawDot(UInt_t n, const TPoint *xy) const
Simple 1-pixel dots.
void SelectDrawable(Int_t device)
For gVirtualX this means select pixmap (or window) and all subsequent drawings will go into this pixm...
void DrawFullDotLarge(UInt_t n, const TPoint *xy) const
void SetTextColor(Color_t tcolor)
Delegate to gVirtualX.
Rgl::Pad::PolygonStippleSet fSSet
static const char * GetFontNameFromId(Int_t)
Get font name from TAttAxis font id.
ECoordinateMode GetCoordinateMode() const
Get coordinate mode.
void LockPainter()
Locked state of painter means, that GL context can be invalid, so no GL calls can be executed...
void DrawPolygonWithGradient(Int_t n, const Double_t *x, const Double_t *y)
At the moment I assume both linear and radial gradients will work the same way - using a stencil buff...
Double_t GetMaxLineWidth() const
void DrawQuadStripWithRadialGradientFill(unsigned nPoints, const Double_t *inner, const Double_t *innerRGBA, const Double_t *outer, const Double_t *outerRGBA)
TODO: is it possible to use GLdouble to avoid problems with Double_t/GLdouble if they are not the sam...
Int_t CreateDrawable(UInt_t w, UInt_t h)
Not required at the moment.
virtual void WriteImage(const char *, EImageFileTypes=TImage::kUnknown)
void DrawCircle(UInt_t n, const TPoint *xy) const
void DrawPolyLine(Int_t n, const Double_t *x, const Double_t *y)
Draw poly-line in user coordinates.
void SetTextSize(Float_t tsize)
Delegate to gVirtualX.
void ClearDrawable()
Not required at the moment.
Rgl::Pad::Tesselator fTess
virtual UInt_t * GetArgbArray()
static Float_t GetScreenScalingFactor()
Returns scaling factor between screen points and GL viewport pixels.
void SetLineColor(Color_t lcolor)
Delegate to gVirtualX.
void DrawLineNDC(Double_t u1, Double_t v1, Double_t u2, Double_t v2)
Draw line segment in NDC coordinates.
void DrawText(Double_t x, Double_t y, const char *text, ETextMode mode)
Draw text.
Width_t GetLineWidth() const
Delegate to gVirtualX.
Bool_t IsTransparent() const
Delegate to gVirtualX.
void DrawFullTrianlgeDown(UInt_t n, const TPoint *xy) const
void DrawBoxWithGradientFill(Double_t y1, Double_t y2, Double_t x1, Double_t x2, const Double_t *rgba1, const Double_t *rgba2)
const Point & GetCenter() const
Get center.
Define a radial color gradient.
void DrawPolyLineNDC(Int_t n, const Double_t *u, const Double_t *v)
Poly line in NDC.
void DrawGradient(const TLinearGradient *gradient, Int_t n, const Double_t *x, const Double_t *y)
void SetTextSizePixels(Int_t npixels)
Delegate to gVirtualX.
void DrawDiamond(UInt_t n, const TPoint *xy) const
void InvalidateCS()
When TPad::Range for gPad is called, projection must be changed in OpenGL.
void DrawFullDotMedium(UInt_t n, const TPoint *xy) const
void RegisterFont(Int_t size, Int_t file, TGLFont::EMode mode, TGLFont &out)
Provide font with given size, file and FTGL class.
static const double x2[5]
void Render(const char *txt, Double_t x, Double_t y, Double_t angle, Double_t mgn) const
void DrawBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, EBoxMode mode)
Draw filled or hollow box.
void ExtractRGBA(Color_t colorIndex, Float_t *rgba)
Rgl::Pad::MarkerPainter fMarker
virtual void DrawRectangle(UInt_t, UInt_t, UInt_t, UInt_t, const char *="#000000", UInt_t=1)
std::vector< TPoint > fPoly
Short_t GetTextAlign() const
Delegate to gVirtualX.
void RestoreViewport()
Restore the saved viewport.
void DrawFullSquare(UInt_t n, const TPoint *xy) const
void DrawFullDotSmall(UInt_t n, const TPoint *xy) const
TVirtualPad is an abstract base class for the Pad and Canvas classes.
void DrawPolyMarker()
Poly-marker.
void DrawFullStar(UInt_t n, const TPoint *xy) const
HIGZ full star pentagone.
void Error(const char *location, const char *msgfmt,...)
void DrawPlus(UInt_t n, const TPoint *xy) const
void CopyDrawable(Int_t id, Int_t px, Int_t py)
Not required at the moment.
void DrawPixels(const unsigned char *pixelData, UInt_t width, UInt_t height, Int_t dstX, Int_t dstY, Bool_t enableBlending)
const Double_t lineWidthTS
void RestoreProjectionMatrix() const
Restore the projection matrix.
Double_t GetRadius() const
Get radius.
static void InitializeIfNeeded()
Initialize globals that require other libraries to be initialized.
Float_t GetTextSize() const
Delegate to gVirtualX.
SizeType_t GetNumberOfSteps() const
Get number of steps.
void DrawFullTrianlgeUp(UInt_t n, const TPoint *xy) const
"Delegating" part of TGLPadPainter.
void DrawCross(UInt_t n, const TPoint *xy) const
ClassImp(TGLPadPainter) TGLPadPainter
void DrawFillArea(Int_t n, const Double_t *x, const Double_t *y)
Draw tesselated polygon (probably, outline only).
The most important graphics class in the ROOT system.
char * Form(const char *fmt,...)
const Point & GetEnd() const
Get end.
void DrawStar(UInt_t n, const TPoint *xy) const
void SaveViewport()
Extract and save the current viewport.
Color_t GetTextColor() const
Delegate to gVirtualX.
virtual void PostRender() const
Reset GL state after FTFont rendering.
Rgl::Pad::GLLimits fLimits
void SetFillStyle(Style_t fstyle)
Delegate to gVirtualX.
void SaveModelviewMatrix() const
Save the modelview matrix.
void Warning(const char *location, const char *msgfmt,...)
void RestoreModelviewMatrix() const
Restore the modelview matrix.
void SetTextAlign(Short_t align)
Delegate to gVirtualX.
Double_t GetMaxPointSize() const
std::vector< Double_t > fVs
void DrawTextNDC(Double_t x, Double_t y, const char *text, ETextMode mode)
Draw text in NDC.
Define a linear color gradient.
void SetFillColor(Color_t fcolor)
Delegate to gVirtualX.
EGradientType GetGradientType() const
Get gradient type.
const Double_t * GetColors() const
Get colors.
void SetTextAngle(Float_t tangle)
Delegate to gVirtualX.
static const double x1[5]
void SaveProjectionMatrix() const
Save the projection matrix.
void InitPainter()
Init gl-pad painter:
Int_t GetEntries() const
Return the number of objects in array (i.e.
const Point & GetStart() const
Get start.
BoundingRect< ValueType > FindBoundingRect(Int_t nPoints, const ValueType *xs, const ValueType *ys)
void SaveImage(TVirtualPad *pad, const char *fileName, Int_t type) const
Using TImage save frame-buffer contents as a picture.
void DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw line segment.
Style_t GetLineStyle() const
Delegate to gVirtualX.
Font_t GetTextFont() const
Delegate to gVirtualX.
const Double_t * GetColorPositions() const
Get color positions.
Short_t Max(Short_t a, Short_t b)
void DrawTextHelper(Double_t x, Double_t y, const Char_t *text, ETextMode mode)
Float_t GetTextAngle() const
Delegate to gVirtualX.
virtual void PreRender(Bool_t autoLight=kTRUE, Bool_t lightOn=kFALSE) const
Set-up GL state before FTFont rendering.
void SetTextFont(Font_t tfont)
Delegate to gVirtualX.
void SetLineStyle(Style_t lstyle)
Delegate to gVirtualX.
void SetLineWidth(Width_t lwidth)
Delegate to gVirtualX.
static TObjArray * GetFontFileArray()
Get id to file name map.
Style_t GetFillStyle() const
Delegate to gVirtualX.
static Int_t GetExtendedFontStartIndex()
Double_t Sqrt(Double_t x)
void DestroyDrawable()
Not required at the moment.
Color_t GetLineColor() const
Delegate to gVirtualX.
TColorGradient extends basic TColor.
void SetOpacity(Int_t percent)
Delegate to gVirtualX.
Float_t GetTextMagnitude() const
Delegate to gVirtualX.
void DrawX(UInt_t n, const TPoint *xy) const
void DrawOpenStar(UInt_t n, const TPoint *xy) const
HIGZ full star pentagone.
void DrawTesselation(Int_t n, const Double_t *x, const Double_t *y)
const char Int_t const char * image
virtual TCanvas * GetCanvas() const =0