27#include "TGLIncludes.h"
36bool IsGradientFill(
Color_t fillColorIndex)
304 Int_t px = 0, py = 0;
306 pad->XYtoAbsPixel(pad->GetX1(), pad->GetY1(), px, py);
308 py =
gPad->GetWh() - py;
313 glViewport(
GLint(px * scale),
GLint(py * scale),
314 GLsizei(
gPad->GetWw() * pad->GetAbsWNDC() * scale),
315 GLsizei(
gPad->GetWh() * pad->GetAbsHNDC() * scale));
317 glMatrixMode(GL_PROJECTION);
319 glOrtho(pad->GetX1(), pad->GetX2(), pad->GetY1(), pad->GetY2(), -10., 10.);
321 glMatrixMode(GL_MODELVIEW);
323 glTranslated(0., 0., -1.);
325 ::Error(
"TGLPadPainter::SelectDrawable",
326 "function was called not from TPad or TCanvas code\n");
327 throw std::runtime_error(
"");
343 glDisable(GL_DEPTH_TEST);
344 glDisable(GL_CULL_FACE);
345 glDisable(GL_LIGHTING);
351 glClearColor(1.,1.,1.,1.);
352 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
355 glMatrixMode(GL_PROJECTION);
358 glOrtho(
gPad->GetX1(),
gPad->GetX2(),
gPad->GetY1(),
gPad->GetY2(), -10., 10.);
360 glMatrixMode(GL_MODELVIEW);
362 glTranslated(0., 0., -1.);
375 glMatrixMode(GL_PROJECTION);
378 glOrtho(
gPad->GetX1(),
gPad->GetX2(),
gPad->GetY1(),
gPad->GetY2(), -10., 10.);
380 glMatrixMode(GL_MODELVIEW);
432 glPointSize((
GLfloat)pointSize);
434 glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
458 glVertex2d(
gPad->GetX1() + u1 * xRange,
gPad->GetY1() +
v1 * yRange);
459 glVertex2d(
gPad->GetX1() + u2 * xRange,
gPad->GetY1() +
v2 * yRange);
470 if (IsGradientFill(
gVirtualX->GetFillColor())) {
480 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
482 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
495 assert(
x != 0 &&
"DrawFillArea, parameter 'x' is null");
496 assert(
y != 0 &&
"DrawFillArea, parameter 'y' is null");
502 ::Error(
"TGLPadPainter::DrawFillArea",
503 "invalid number of points in a polygon");
507 if (IsGradientFill(
gVirtualX->GetFillColor()))
534 for (
Int_t i = 0; i <
n; ++i) {
536 fVs[i * 3 + 1] =
y[i];
545 for (
Int_t i = 0; i <
n; ++i)
563 for (
Int_t i = 0; i <
n; ++i)
564 glVertex2d(
x[i],
y[i]);
567 glVertex2d(
x[0],
y[0]);
576 glPointSize((
GLfloat)pointSize);
578 glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
581 for (
Int_t i = 0; i <
n; ++i)
582 glVertex2d(
x[i],
y[i]);
600 for (
Int_t i = 0; i <
n; ++i)
601 glVertex2f(
x[i],
y[i]);
604 glVertex2f(
x[0],
y[0]);
625 for (
Int_t i = 0; i <
n; ++i)
626 glVertex2d(
x1 + u[i] * xRange,
y1 +
v[i] * yRange);
634template<
class ValueType>
635void ConvertMarkerPoints(
Int_t n,
const ValueType *
x,
const ValueType *
y, std::vector<TPoint> & dst);
646 ConvertMarkerPoints(
n,
x,
y,
fPoly);
657 ConvertMarkerPoints(
n,
x,
y,
fPoly);
671 glOrtho(0,
gPad->GetAbsWNDC() *
gPad->GetWw(), 0,
gPad->GetAbsHNDC() *
gPad->GetWh(), -10., 10.);
673 glMatrixMode(GL_MODELVIEW);
679 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
688 switch (markerStyle) {
726 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
728 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
731 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
733 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
804 glMatrixMode(GL_MODELVIEW);
817 glOrtho(0,
gPad->GetAbsWNDC() *
gPad->GetWw(), 0,
gPad->GetAbsHNDC() *
gPad->GetWh(), -10., 10.);
819 glMatrixMode(GL_MODELVIEW);
832 fontIndex = 20 + shift * 10;
834 fontIndex += shift * 10;
847 glMatrixMode(GL_MODELVIEW);
919 glMatrixMode(GL_PROJECTION);
930 glMatrixMode(GL_PROJECTION);
941 glMatrixMode(GL_MODELVIEW);
952 glMatrixMode(GL_MODELVIEW);
961 glGetIntegerv(GL_VIEWPORT,
fVp);
981 gROOT->ProcessLine(
Form(
"((TCanvas *)0x%zx)->Flush();", (
size_t)canvas));
983 std::vector<unsigned> buff(canvas->
GetWw() * canvas->
GetWh());
984 glPixelStorei(GL_PACK_ALIGNMENT, 1);
985 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
988 glReadPixels(0, 0, canvas->
GetWw(), canvas->
GetWh(), GL_RGBA, GL_UNSIGNED_BYTE, (
char *)&buff[0]);
992 ::Error(
"TGLPadPainter::SaveImage",
"TImage creation failed");
996 image->DrawRectangle(0, 0, canvas->
GetWw(), canvas->
GetWh());
997 UInt_t *argb = image->GetArgbArray();
1000 ::Error(
"TGLPadPainter::SaveImage",
"null argb array in TImage object");
1007 for (
Int_t i = 0; i < nLines; ++i) {
1008 Int_t base = (nLines - 1 - i) * nPixels;
1009 for (
Int_t j = 0; j < nPixels; ++j, ++base) {
1013 const UInt_t bgra = ((
pix & 0xff) << 16) | (
pix & 0xff00) |
1014 ((
pix & 0xff0000) >> 16) | (
pix & 0xff000000);
1017 argb[i * nPixels + j] = bgra;
1034 ::Error(
"TGLPadPainter::DrawPixels",
"pixel data is null");
1038 if (std::numeric_limits<UInt_t>::digits >= 32) {
1047 ::Error(
"TGLPadPainter::DrawPixels",
"invalid width");
1053 ::Error(
"TGLPadPainter::DrawPixels",
"invalid height");
1062 const Double_t rasterX =
Double_t(dstX) / (pad->GetAbsWNDC() * pad->GetWw()) *
1063 (pad->GetX2() - pad->GetX1()) + pad->GetX1();
1065 const Double_t yRange = pad->GetY2() - pad->GetY1();
1066 const Double_t rasterY = yRange -
Double_t(dstY +
height) / (pad->GetAbsHNDC() * pad->GetWh()) * yRange +
1071 glGetDoublev(GL_CURRENT_RASTER_POSITION, oldPos);
1073 glRasterPos2d(rasterX, rasterY);
1075 std::vector<unsigned char> upsideDownImage(4 *
width *
height);
1076 const unsigned char *srcLine = pixelData + 4 *
width * (
height - 1);
1077 unsigned char *dstLine = &upsideDownImage[0];
1079 std::copy(srcLine, srcLine + 4 *
width, dstLine);
1081 if (enableBlending) {
1083 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1089 glDisable(GL_BLEND);
1092 glRasterPos2d(oldPos[0], oldPos[1]);
1094 ::Error(
"TGLPadPainter::DrawPixels",
"no pad found to draw");
1106 assert(
n > 2 &&
"DrawPolygonWithGradient, invalid number of points");
1107 assert(
x != 0 &&
"DrawPolygonWithGradient, parameter 'x' is null");
1108 assert(
y != 0 &&
"DrawPolygonWithGradient, parameter 'y' is null");
1111 "DrawPolygonWithGradient, the current fill color is not a gradient fill");
1126 glStencilFunc(GL_NEVER, 1, 0xFF);
1127 glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
1129 glStencilMask(0xFF);
1130 glClear(GL_STENCIL_BUFFER_BIT);
1136 glStencilMask(0x00);
1138 glStencilFunc(GL_EQUAL, 0, 0xFF);
1140 glStencilFunc(GL_EQUAL, 1, 0xFF);
1151 assert(lGrad != 0 &&
"DrawPolygonWithGradient, unknown gradient type");
1161 assert(grad != 0 &&
"DrawGradient, parameter 'grad' is null");
1162 assert(nPoints > 2 &&
"DrawGradient, invalid number of points");
1163 assert(xs != 0 &&
"DrawGradient, parameter 'xs' is null");
1164 assert(ys != 0 &&
"DrawGradient, parameter 'ys' is null");
1167 ::Warning(
"TGLPadPainter::DrawGradient",
1168 "extended radial gradient is not supported");
1179 radius *=
TMath::Max(bbox.fWidth, bbox.fHeight);
1180 center.fX = bbox.fWidth * center.fX + bbox.fXMin;
1181 center.fY = bbox.fHeight * center.fY + bbox.fYMin;
1183 const auto w =
gPad->GetX2() -
gPad->GetX1();
1184 const auto h =
gPad->GetY2() -
gPad->GetY1();
1191 const auto pixelW =
gPad->GetAbsWNDC() *
gPad->GetWw();
1192 const auto pixelH =
gPad->GetAbsHNDC() *
gPad->GetWh();
1197 glMatrixMode(GL_PROJECTION);
1200 glOrtho(0., pixelW, 0., pixelH, -10., 10.);
1203 center.fX =
gPad->XtoPixel(center.fX);
1204 center.fY = pixelH -
gPad->YtoPixel(center.fY);
1210 const Double_t yMin = pixelH -
gPad->YtoPixel(bbox.fYMin);
1211 const Double_t yMax = pixelH -
gPad->YtoPixel(bbox.fYMax);
1218 maxR =
TMath::Sqrt(maxDistX * maxDistX + maxDistY * maxDistY);
1223 const Bool_t solidFillAfter = maxR > radius;
1226 const UInt_t nSlices = 500;
1231 const auto nCircles = nColors + 1 + solidFillAfter;
1237 std::vector<Double_t> circles(nSlices * nCircles * 2);
1241 for (
UInt_t i = 0; i < nColors; ++i) {
1242 const auto circle = &circles[i * nSlices * 2];
1244 const auto r = radius * locations[i];
1245 for (
UInt_t j = 0,
e = nSlices * 2 - 2; j <
e; j += 2) {
1250 circle[(nSlices - 1) * 2] = circle[0];
1251 circle[(nSlices - 1) * 2 + 1] = circle[1];
1256 const auto circle = &circles[nColors * nSlices * 2];
1257 for (
UInt_t j = 0,
e = nSlices * 2 - 2; j <
e; j += 2) {
1262 circle[(nSlices - 1) * 2] = circle[0];
1263 circle[(nSlices - 1) * 2 + 1] = circle[1];
1266 if (solidFillAfter) {
1268 const auto circle = &circles[(nCircles - 1) * nSlices * 2];
1269 for (
UInt_t j = 0,
e = nSlices * 2 - 2; j <
e; j += 2) {
1274 circle[(nSlices - 1) * 2] = circle[0];
1275 circle[(nSlices - 1) * 2 + 1] = circle[1];
1290 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1295 glVertex2d(center.fX, center.fY);
1297 for (
UInt_t i = 0,
e = nSlices * 2; i <
e; i += 2)
1298 glVertex2dv(&circles[i]);
1303 for (
UInt_t i = 0; i < nColors - 1; ++i) {
1304 const Double_t *
const inner = &circles[i * nSlices * 2];
1305 const auto innerRGBA = rgba + i * 4;
1306 const auto outerRGBA = rgba + (i + 1) * 4;
1307 const Double_t *
const outer = &circles[(i + 1) * nSlices * 2];
1315 const Double_t *
const inner = &circles[nSlices * (nColors - 1) * 2];
1316 const auto solidRGBA = rgba + (nColors - 1) * 4;
1317 const Double_t *
const outer = &circles[nSlices * nColors * 2];
1322 if (solidFillAfter) {
1324 const Double_t *
const inner = &circles[nSlices * nColors * 2];
1325 const auto solidRGBA = rgba + (nColors - 1) * 4;
1326 const Double_t *
const outer = &circles[nSlices * (nColors + 1) * 2];
1340 assert(grad != 0 &&
"DrawGradient, parameter 'grad' is null");
1341 assert(
n > 2 &&
"DrawGradient, invalid number of points");
1342 assert(
x != 0 &&
"DrawGradient, parameter 'x' is null");
1343 assert(
y != 0 &&
"DrawGradient, parameter 'y' is null");
1359 glMatrixMode(GL_PROJECTION);
1364 glOrtho(0., pixelW, 0., pixelH, -10., 10.);
1367 glMatrixMode(GL_MODELVIEW);
1379 start.fX = start.fX *
w;
1380 start.fY = start.fY *
h;
1381 end.fX = end.fX *
w;
1382 end.fY = end.fY *
h;
1384 start.fX = start.fX * bbox.fWidth + bbox.fXMin;
1385 start.fY = start.fY * bbox.fHeight + bbox.fYMin;
1386 end.fX = end.fX * bbox.fWidth + bbox.fXMin;
1387 end.fY = end.fY * bbox.fHeight + bbox.fYMin;
1394 start.fX =
gPad->XtoPixel(start.fX);
1395 start.fY = pixelH -
gPad->YtoPixel(start.fY);
1396 end.fX =
gPad->XtoPixel(end.fX);
1397 end.fY = pixelH -
gPad->YtoPixel(end.fY);
1400 const Double_t yMin = pixelH -
gPad->YtoPixel(bbox.fYMin);
1401 const Double_t yMax = pixelH -
gPad->YtoPixel(bbox.fYMax);
1411 (end.fY - start.fY) * (end.fY - start.fY));
1418 gradBoxes[0] = start.fY -
h;
1420 gradBoxes[i] = startEndLength * colorPositions[i - 1] + start.fY;
1427 if (end.fX > start.fX)
1430 glTranslated(start.fX, start.fY, 0.);
1431 glRotated(
angle, 0., 0., 1.);
1432 glTranslated(-start.fX, -start.fY, 0.);
1436 const unsigned nEdges = gradBoxes.size();
1438 const Double_t xLeft = start.fX -
h, xRight = start.fX +
h;
1442 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1446 rgba + (nColors - 1) * 4, rgba + (nColors - 1) * 4);
1448 for (
unsigned i = 1; i < nEdges - 2; ++i)
1450 xRight, rgba + (i - 1) * 4, rgba + i * 4);
1460 assert(
n > 2 &&
"DrawTesselation, invalid number of points");
1461 assert(
x != 0 &&
"DrawTesselation, parameter 'x' is null");
1462 assert(
y != 0 &&
"DrawTesselation, parameter 'y' is null");
1467 for (
Int_t i = 0; i <
n; ++i) {
1469 fVs[i * 3 + 1] =
y[i];
1470 fVs[i * 3 + 2] = 0.;
1479 for (
Int_t i = 0; i <
n; ++i)
1489template<
class ValueType>
1490void ConvertMarkerPoints(
Int_t n,
const ValueType *
x,
const ValueType *
y, std::vector<TPoint> & dst)
1495 for (
Int_t i = 0; i <
n; ++i) {
1496 dst[i].fX =
gPad->XtoPixel(
x[i]);
1497 dst[i].fY = padH -
gPad->YtoPixel(
y[i]);
void gluNextContour(GLUtesselator *tess, GLenum type)
void gluBeginPolygon(GLUtesselator *tess)
void gluEndPolygon(GLUtesselator *tess)
void gluTessVertex(GLUtesselator *tess, GLdouble *location, GLvoid *data)
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
const Double_t lineWidthTS
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void pix
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 TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
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 y2
Option_t Option_t TPoint TPoint percent
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 type
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 text
Option_t Option_t TPoint TPoint const char y1
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Double_t GetMaxLineWidth() const
Double_t GetMaxPointSize() const
void DrawOpenThreeTriangles(UInt_t n, const TPoint *xy) const
void DrawFullCrossX(UInt_t n, const TPoint *xy) const
void DrawFullDotSmall(UInt_t n, const TPoint *xy) const
void DrawOpenSquareDiagonal(UInt_t n, const TPoint *xy) const
void DrawOpenDoubleDiamond(UInt_t n, const TPoint *xy) const
void DrawFullFourTrianglesX(UInt_t n, const TPoint *xy) const
void DrawFullDotLarge(UInt_t n, const TPoint *xy) const
void DrawFullThreeTriangles(UInt_t n, const TPoint *xy) const
void DrawCircle(UInt_t n, const TPoint *xy) const
void DrawFullFourTrianglesPlus(UInt_t n, const TPoint *xy) const
void DrawOpenCross(UInt_t n, const TPoint *xy) const
void DrawFullCross(UInt_t n, const TPoint *xy) const
void DrawFullTrianlgeDown(UInt_t n, const TPoint *xy) const
void DrawOpenStar(UInt_t n, const TPoint *xy) const
Full star pentagone.
void DrawX(UInt_t n, const TPoint *xy) const
void DrawPlus(UInt_t n, const TPoint *xy) const
void DrawFullTrianlgeUp(UInt_t n, const TPoint *xy) const
void DrawFullSquare(UInt_t n, const TPoint *xy) const
void DrawOpenFourTrianglesPlus(UInt_t n, const TPoint *xy) const
void DrawStar(UInt_t n, const TPoint *xy) const
void DrawFullDoubleDiamond(UInt_t n, const TPoint *xy) const
void DrawOpenCrossX(UInt_t n, const TPoint *xy) const
void DrawDot(UInt_t n, const TPoint *xy) const
Simple 1-pixel dots.
void DrawOctagonCross(UInt_t n, const TPoint *xy) const
void DrawFourSquaresX(UInt_t n, const TPoint *xy) const
void DrawFourSquaresPlus(UInt_t n, const TPoint *xy) const
void DrawFullDotMedium(UInt_t n, const TPoint *xy) const
void DrawDiamond(UInt_t n, const TPoint *xy) const
void DrawFullStar(UInt_t n, const TPoint *xy) const
Full star pentagone.
void DrawOpenTrianlgeDown(UInt_t n, const TPoint *xy) const
void DrawFullDiamond(UInt_t n, const TPoint *xy) const
void DrawOpenFourTrianglesX(UInt_t n, const TPoint *xy) const
void DrawOpenDiamondCross(UInt_t n, const TPoint *xy) const
static Width_t GetMarkerLineWidth(Style_t style)
Internal helper function that returns the line width of the given marker style (0 = filled marker)
static Style_t GetMarkerStyleBase(Style_t style)
Internal helper function that returns the corresponding marker style with line width 1 for the given ...
TColorGradient extends basic TColor.
const Double_t * GetColors() const
Get colors.
SizeType_t GetNumberOfSteps() const
Get number of steps.
ECoordinateMode GetCoordinateMode() const
Get coordinate mode.
const Double_t * GetColorPositions() const
Get color positions.
void RegisterFont(Int_t size, Int_t file, TGLFont::EMode mode, TGLFont &out)
Provide font with given size, file and FTGL class.
static Int_t GetExtendedFontStartIndex()
static const char * GetFontNameFromId(Int_t)
Get font name from TAttAxis font id.
static TObjArray * GetFontFileArray()
Get id to file name map.
void Render(const char *txt, Double_t x, Double_t y, Double_t angle, Double_t mgn) const
virtual void PostRender() const
Reset GL state after FTFont rendering.
virtual void PreRender(Bool_t autoLight=kTRUE, Bool_t lightOn=kFALSE) const
Set-up GL state before FTFont rendering.
"Delegating" part of TGLPadPainter.
void DrawText(Double_t x, Double_t y, const char *text, ETextMode mode) override
Draw text.
void SetLineColor(Color_t lcolor) override
Delegate to gVirtualX.
void DrawPixels(const unsigned char *pixelData, UInt_t width, UInt_t height, Int_t dstX, Int_t dstY, Bool_t enableBlending) override
Float_t GetTextSize() const override
Delegate to gVirtualX.
void DestroyDrawable(Int_t device) override
Not required at the moment.
void DrawGradient(const TLinearGradient *gradient, Int_t n, const Double_t *x, const Double_t *y)
Rgl::Pad::Tesselator fTess
Float_t GetTextAngle() const override
Delegate to gVirtualX.
void DrawLineNDC(Double_t u1, Double_t v1, Double_t u2, Double_t v2) override
Draw line segment in NDC coordinates.
Style_t GetLineStyle() const override
Delegate to gVirtualX.
Color_t GetTextColor() const override
Delegate to gVirtualX.
std::vector< TPoint > fPoly
void DrawTextHelper(Double_t x, Double_t y, const Char_t *text, ETextMode mode)
void DrawBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, EBoxMode mode) override
Draw filled or hollow box.
void SetFillColor(Color_t fcolor) override
Delegate to gVirtualX.
void SetTextSizePixels(Int_t npixels) override
Delegate to gVirtualX.
void SetTextFont(Font_t tfont) override
Delegate to gVirtualX.
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...
void InvalidateCS() override
When TPad::Range for gPad is called, projection must be changed in OpenGL.
void ClearDrawable() override
Not required at the moment.
Color_t GetLineColor() const override
Delegate to gVirtualX.
void DrawPolyLineNDC(Int_t n, const Double_t *u, const Double_t *v) override
Poly line in NDC.
void DrawPolyLine(Int_t n, const Double_t *x, const Double_t *y) override
Draw poly-line in user coordinates.
void SetTextAlign(Short_t align) override
Delegate to gVirtualX.
Rgl::Pad::GLLimits fLimits
void SetOpacity(Int_t percent) override
Delegate to gVirtualX.
void SetTextAngle(Float_t tangle) override
Delegate to gVirtualX.
void DrawTextNDC(Double_t x, Double_t y, const char *text, ETextMode mode) override
Draw text in NDC.
void SetTextColor(Color_t tcolor) override
Delegate to gVirtualX.
void InitPainter() override
Init gl-pad painter:
void SelectDrawable(Int_t device) override
For gVirtualX this means select pixmap (or window) and all subsequent drawings will go into this pixm...
Rgl::Pad::PolygonStippleSet fSSet
Rgl::Pad::MarkerPainter fMarker
void DrawPolyMarker()
Poly-marker.
void SaveViewport()
Extract and save the current viewport.
void SetLineWidth(Width_t lwidth) override
Delegate to gVirtualX.
void CopyDrawable(Int_t device, Int_t px, Int_t py) override
Not required at the moment.
void SaveImage(TVirtualPad *pad, const char *fileName, Int_t type) const override
Using TImage save frame-buffer contents as a picture.
void SetTextSize(Float_t tsize) override
Delegate to gVirtualX.
void DrawFillArea(Int_t n, const Double_t *x, const Double_t *y) override
Draw tesselated polygon (probably, outline only).
Short_t GetTextAlign() const override
Delegate to gVirtualX.
Style_t GetFillStyle() const override
Delegate to gVirtualX.
void SetFillStyle(Style_t fstyle) override
Delegate to gVirtualX.
Font_t GetTextFont() const override
Delegate to gVirtualX.
void RestoreProjectionMatrix() const
Restore the projection matrix.
void SetLineStyle(Style_t lstyle) override
Delegate to gVirtualX.
void LockPainter() override
Locked state of painter means, that GL context can be invalid, so no GL calls can be executed.
Float_t GetTextMagnitude() const override
Delegate to gVirtualX.
Width_t GetLineWidth() const override
Delegate to gVirtualX.
void DrawTesselation(Int_t n, const Double_t *x, const Double_t *y)
Color_t GetFillColor() const override
Delegate to gVirtualX.
Int_t CreateDrawable(UInt_t w, UInt_t h) override
Not required at the moment.
Bool_t IsTransparent() const override
Delegate to gVirtualX.
void RestoreModelviewMatrix() const
Restore the modelview matrix.
std::vector< Double_t > fVs
void SaveProjectionMatrix() const
Save the projection matrix.
void DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2) override
Draw line segment.
void SaveModelviewMatrix() const
Save the modelview matrix.
void RestoreViewport()
Restore the saved viewport.
static void InitializeIfNeeded()
Initialize globals that require other libraries to be initialized.
static Float_t GetScreenScalingFactor()
Returns scaling factor between screen points and GL viewport pixels.
static TImage * Create()
Create an image.
Define a linear color gradient.
const Point & GetEnd() const
Get end.
const Point & GetStart() const
Get start.
The most important graphics class in the ROOT system.
Define a radial color gradient.
Double_t GetRadius() const
Get radius.
const Point & GetCenter() const
Get center.
EGradientType GetGradientType() const
Get gradient type.
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual UInt_t GetWh() const =0
virtual UInt_t GetWw() const =0
virtual TCanvas * GetCanvas() const =0
BoundingRect< ValueType > FindBoundingRect(Int_t nPoints, const ValueType *xs, const ValueType *ys)
void ExtractRGBA(Color_t colorIndex, Float_t *rgba)
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...
void DrawBoxWithGradientFill(Double_t y1, Double_t y2, Double_t x1, Double_t x2, const Double_t *rgba1, const Double_t *rgba2)
Double_t ACos(Double_t)
Returns the principal value of the arc cosine of x, expressed in radians.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
constexpr Double_t RadToDeg()
Conversion from radian to degree: .
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
constexpr Double_t TwoPi()