This tutorial demonstrates how to use radial gradients, custom colors, transparency. 
Requires OpenGL: either set OpenGL.CanvasPreferGL to 1 in the $ROOTSYS/etc/system.rootrc, or use gStyle->SetCanvasPreferGL(kTRUE).
 
#include <cassert>
#include <cstdlib>
 
 
 
 
namespace {
 
{
{1., 0.,  0., 1.},
{1., 0.3, 0., 1.},
{0., 0.,  1., 1.},
{1., 1.,  0., 1.},
{1., 0.,  1., 1.},
{0., 1.,  1., 1.},
{0., 1.,  0., 1.},
{0., 0.5,  0., 1.},
{1., 0.,  0., 0.5},
{1., 0.3, 0., 0.5},
{0., 0.,  1., 0.5},
{1., 1.,  0., 0.5},
{1., 0.,  1., 0.5},
{0., 1.,  1., 0.5},
{0., 1.,  0., 0.5},
{0., 0.5,  0., 0.5},
{1., 0.,  0., 0.2},
{1., 0.3, 0., 0.2},
{0., 0.,  1., 0.2},
{1., 1.,  0., 0.2},
{1., 0.,  1., 0.2},
{0., 1.,  1., 0.2},
{0., 1.,  0., 0.2},
{0., 0.5,  0., 0.2}
};
 
const unsigned nBasicColors = sizeof basicColors / sizeof basicColors[0];
 
{
   const Double_t * 
const fromRGBA = basicColors[(std::rand() % (nBasicColors / 2))];
 
   
   const Double_t * 
const toRGBA = basicColors[nBasicColors / 2 + (std::rand() % (nBasicColors / 2))];
 
 
   const Double_t rgbas[] = {fromRGBA[0], fromRGBA[1], fromRGBA[2], fromRGBA[3],
 
                             toRGBA[0], toRGBA[1], toRGBA[2], toRGBA[3]};
 
      return -1;
 
   
 
   return idx[0];
}
 
{
   assert(
gPad != 
nullptr && 
"add_ellipse, no pad to add ellipse");
 
 
   const Color_t newColor = CreateRandomGradientFill();
 
   if (newColor == -1) {
      ::Error(
"add_ellipse", 
"failed to find a new color index for a gradient fill");
 
      return false;
   }
 
 
   return true;
}
 
}
 
void radialgradients()
{
 
 
   TCanvas * 
const cnv = 
new TCanvas(
"radial gradients", 
"radial gradients", 800, 800);
 
      ::Error(
"radialgradients", 
"this demo OpenGL");
 
      delete cnv;
      return;
   }
 
   for (unsigned i = 0; i < 100; ++i)
         break;
 
}
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
 
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
 
R__EXTERN TRandom * gRandom
 
R__EXTERN TStyle * gStyle
 
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
 
void Update() override
Update canvas pad buffers.
 
void Draw(Option_t *option="") override
Draw this ellipse with its current attributes.
 
void Modified(Bool_t flag=1) override
 
Define a radial color gradient.
 
void SetRadialGradient(const Point ¢er, Double_t radius)
Set radial gradient.
 
virtual void SetSeed(ULong_t seed=0)
Set the random generator seed.
 
Double_t Rndm() override
Machine independent random number generator.
 
void SetCanvasPreferGL(Bool_t prefer=kTRUE)
 
unsigned FindFreeCustomColorIndices(T(&indices)[N])