38 bool IsGradientFill(
Color_t fillColorIndex)
64 fVp[0] = fVp[1] = fVp[2] = fVp[3] = 0;
305 if (
TPad *pad = dynamic_cast<TPad *>(
gPad)) {
306 Int_t px = 0, py = 0;
308 pad->XYtoAbsPixel(pad->GetX1(), pad->GetY1(), px, py);
310 py =
gPad->GetWh() - py;
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");
999 if (
TPad *pad = dynamic_cast<TPad *>(
gPad)) {
1004 const Double_t rasterX =
Double_t(dstX) / (pad->GetAbsWNDC() * pad->GetWw()) *
1005 (pad->GetX2() - pad->GetX1()) + pad->GetX1();
1007 const Double_t yRange = pad->GetY2() - pad->GetY1();
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");
1052 assert(dynamic_cast<TColorGradient *>(
gROOT->GetColor(
gVirtualX->GetFillColor())) != 0 &&
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]);
Double_t GetRadius() const
Get radius.
void SelectDrawable(Int_t device)
For gVirtualX this means select pixmap (or window) and all subsequent drawings will go into this pixm...
void DrawCircle(UInt_t n, const TPoint *xy) const
Color_t GetLineColor() const
Delegate to gVirtualX.
virtual void PreRender(Bool_t autoLight=kTRUE, Bool_t lightOn=kFALSE) const
Set-up GL state before FTFont rendering.
void Render(const char *txt, Double_t x, Double_t y, Double_t angle, Double_t mgn) const
void SetTextColor(Color_t tcolor)
Delegate to gVirtualX.
Rgl::Pad::PolygonStippleSet fSSet
const Point & GetCenter() const
Get center.
static const char * GetFontNameFromId(Int_t)
Get font name from TAttAxis font id.
void LockPainter()
Locked state of painter means, that GL context can be invalid, so no GL calls can be executed...
const Double_t * GetColorPositions() const
Get color positions.
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...
ECoordinateMode GetCoordinateMode() const
Get coordinate mode.
void DrawX(UInt_t n, const TPoint *xy) 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 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.
SizeType_t GetNumberOfSteps() const
Get number of steps.
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.
const Point & GetEnd() const
Get end.
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.
Float_t GetTextAngle() const
Delegate to gVirtualX.
void SaveModelviewMatrix() const
Save the modelview matrix.
void DrawBoxWithGradientFill(Double_t y1, Double_t y2, Double_t x1, Double_t x2, const Double_t *rgba1, const Double_t *rgba2)
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 SaveImage(TVirtualPad *pad, const char *fileName, Int_t type) const
Using TImage save frame-buffer contents as a picture.
void SetTextSizePixels(Int_t npixels)
Delegate to gVirtualX.
void InvalidateCS()
When TPad::Range for gPad is called, projection must be changed in OpenGL.
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 RestoreModelviewMatrix() const
Restore the modelview matrix.
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
void RestoreViewport()
Restore the saved viewport.
void SaveProjectionMatrix() const
Save the projection matrix.
Short_t GetTextAlign() const
Delegate to gVirtualX.
TVirtualPad is an abstract base class for the Pad and Canvas classes.
void DrawPolyMarker()
Poly-marker.
void Error(const char *location, const char *msgfmt,...)
Font_t GetTextFont() const
Delegate to gVirtualX.
void DrawOpenStar(UInt_t n, const TPoint *xy) const
HIGZ full star pentagone.
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)
void DrawDot(UInt_t n, const TPoint *xy) const
Simple 1-pixel dots.
const Double_t lineWidthTS
static void InitializeIfNeeded()
Initialize globals that require other libraries to be initialized.
void DrawFullDotMedium(UInt_t n, const TPoint *xy) const
"Delegating" part of TGLPadPainter.
void DrawFillArea(Int_t n, const Double_t *x, const Double_t *y)
Draw tesselated polygon (probably, outline only).
void DrawPlus(UInt_t n, const TPoint *xy) const
void DrawCross(UInt_t n, const TPoint *xy) const
Color_t GetTextColor() const
Delegate to gVirtualX.
void DrawFullStar(UInt_t n, const TPoint *xy) const
HIGZ full star pentagone.
The most important graphics class in the ROOT system.
char * Form(const char *fmt,...)
void SaveViewport()
Extract and save the current viewport.
Rgl::Pad::GLLimits fLimits
void DrawFullDotSmall(UInt_t n, const TPoint *xy) const
void SetFillStyle(Style_t fstyle)
Delegate to gVirtualX.
void Warning(const char *location, const char *msgfmt,...)
void DrawFullTrianlgeDown(UInt_t n, const TPoint *xy) const
void SetTextAlign(Short_t align)
Delegate to gVirtualX.
std::vector< Double_t > fVs
void DrawTextNDC(Double_t x, Double_t y, const char *text, ETextMode mode)
Draw text in NDC.
Color_t GetFillColor() const
Delegate to gVirtualX.
Define a linear color gradient.
void SetFillColor(Color_t fcolor)
Delegate to gVirtualX.
Double_t GetMaxLineWidth() const
Double_t GetMaxPointSize() const
Style_t GetLineStyle() const
Delegate to gVirtualX.
const Point & GetStart() const
Get start.
void SetTextAngle(Float_t tangle)
Delegate to gVirtualX.
static const double x1[5]
void RestoreProjectionMatrix() const
Restore the projection matrix.
void DrawDiamond(UInt_t n, const TPoint *xy) const
void DrawStar(UInt_t n, const TPoint *xy) const
void DrawFullDotLarge(UInt_t n, const TPoint *xy) const
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
void InitPainter()
Init gl-pad painter:
void DrawFullSquare(UInt_t n, const TPoint *xy) const
BoundingRect< ValueType > FindBoundingRect(Int_t nPoints, const ValueType *xs, const ValueType *ys)
void DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw line segment.
Style_t GetFillStyle() const
Delegate to gVirtualX.
virtual void PostRender() const
Reset GL state after FTFont rendering.
EGradientType GetGradientType() const
Get gradient type.
Short_t Max(Short_t a, Short_t b)
Bool_t IsTransparent() const
Delegate to gVirtualX.
void DrawTextHelper(Double_t x, Double_t y, const Char_t *text, ETextMode mode)
void DrawFullTrianlgeUp(UInt_t n, const TPoint *xy) const
const Double_t * GetColors() const
Get colors.
Int_t GetEntries() const
Return the number of objects in array (i.e.
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.
static Int_t GetExtendedFontStartIndex()
Float_t GetTextSize() const
Delegate to gVirtualX.
Double_t Sqrt(Double_t x)
static TImage * Create()
Create an image.
void DestroyDrawable()
Not required at the moment.
TColorGradient extends basic TColor.
void SetOpacity(Int_t percent)
Delegate to gVirtualX.
Float_t GetTextMagnitude() const
Delegate to gVirtualX.
Width_t GetLineWidth() const
Delegate to gVirtualX.
void DrawTesselation(Int_t n, const Double_t *x, const Double_t *y)
virtual TCanvas * GetCanvas() const =0