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);
 
 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();
 
 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.
Float_t GetTextMagnitude() const
Delegate to gVirtualX.
Color_t GetFillColor() const
Delegate to gVirtualX.
Color_t GetLineColor() const
Delegate to gVirtualX.
Font_t GetTextFont() const
Delegate to gVirtualX.
Style_t GetLineStyle() const
Delegate to gVirtualX.
void SetTextSize(Float_t tsize)
Delegate to gVirtualX.
void DrawTextNDC(Double_t x, Double_t y, const char *text, ETextMode mode)
Draw text in NDC.
void SetTextSizePixels(Int_t npixels)
Delegate to gVirtualX.
void DrawGradient(const TLinearGradient *gradient, Int_t n, const Double_t *x, const Double_t *y)
Rgl::Pad::Tesselator fTess
void DrawLineNDC(Double_t u1, Double_t v1, Double_t u2, Double_t v2)
Draw line segment in NDC coordinates.
void DrawBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, EBoxMode mode)
Draw filled or hollow box.
std::vector< TPoint > fPoly
void DrawTextHelper(Double_t x, Double_t y, const Char_t *text, ETextMode mode)
void SetLineColor(Color_t lcolor)
Delegate to gVirtualX.
Int_t CreateDrawable(UInt_t w, UInt_t h)
Not required at the moment.
void DrawPolyLineNDC(Int_t n, const Double_t *u, const Double_t *v)
Poly line in NDC.
void DrawPolyLine(Int_t n, const Double_t *x, const Double_t *y)
Draw poly-line in user coordinates.
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 DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw line segment.
void SetFillColor(Color_t fcolor)
Delegate to gVirtualX.
void SetTextFont(Font_t tfont)
Delegate to gVirtualX.
void SetTextAlign(Short_t align)
Delegate to gVirtualX.
Rgl::Pad::GLLimits fLimits
Float_t GetTextSize() const
Delegate to gVirtualX.
void DrawPixels(const unsigned char *pixelData, UInt_t width, UInt_t height, Int_t dstX, Int_t dstY, Bool_t enableBlending)
Rgl::Pad::PolygonStippleSet fSSet
Rgl::Pad::MarkerPainter fMarker
void SetLineStyle(Style_t lstyle)
Delegate to gVirtualX.
void DrawPolyMarker()
Poly-marker.
void SaveViewport()
Extract and save the current viewport.
Width_t GetLineWidth() const
Delegate to gVirtualX.
void LockPainter()
Locked state of painter means, that GL context can be invalid, so no GL calls can be executed.
void SetFillStyle(Style_t fstyle)
Delegate to gVirtualX.
void ClearDrawable()
Not required at the moment.
Short_t GetTextAlign() const
Delegate to gVirtualX.
Bool_t IsTransparent() const
Delegate to gVirtualX.
void SaveImage(TVirtualPad *pad, const char *fileName, Int_t type) const
Using TImage save frame-buffer contents as a picture.
void SetOpacity(Int_t percent)
Delegate to gVirtualX.
Style_t GetFillStyle() const
Delegate to gVirtualX.
void RestoreProjectionMatrix() const
Restore the projection matrix.
void SetLineWidth(Width_t lwidth)
Delegate to gVirtualX.
void SetTextColor(Color_t tcolor)
Delegate to gVirtualX.
Float_t GetTextAngle() const
Delegate to gVirtualX.
void DrawFillArea(Int_t n, const Double_t *x, const Double_t *y)
Draw tesselated polygon (probably, outline only).
void DrawText(Double_t x, Double_t y, const char *text, ETextMode mode)
Draw text.
void CopyDrawable(Int_t device, Int_t px, Int_t py)
Not required at the moment.
void DrawTesselation(Int_t n, const Double_t *x, const Double_t *y)
void SelectDrawable(Int_t device)
For gVirtualX this means select pixmap (or window) and all subsequent drawings will go into this pixm...
void InitPainter()
Init gl-pad painter:
Color_t GetTextColor() const
Delegate to gVirtualX.
void DestroyDrawable(Int_t device)
Not required at the moment.
void InvalidateCS()
When TPad::Range for gPad is called, projection must be changed in OpenGL.
void RestoreModelviewMatrix() const
Restore the modelview matrix.
std::vector< Double_t > fVs
void SaveProjectionMatrix() const
Save the projection matrix.
void SetTextAngle(Float_t tangle)
Delegate to gVirtualX.
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()