35 ClassImp(TColorGradient);
40 TColorGradient::TColorGradient()
41 : fCoordinateMode(kObjectBoundingMode)
49 TColorGradient::TColorGradient(Color_t colorIndex, UInt_t nPoints,
const Double_t *points,
50 const Color_t *indices, ECoordinateMode mode)
51 : fCoordinateMode(mode)
53 assert(nPoints != 0 &&
"TColorGradient, number of points is 0");
54 assert(points != 0 &&
"TColorGradient, points parameter is null");
55 assert(indices != 0 &&
"TColorGradient, indices parameter is null");
57 ResetColor(nPoints, points, indices);
58 RegisterColor(colorIndex);
65 TColorGradient::TColorGradient(Color_t colorIndex, UInt_t nPoints,
const Double_t *points,
66 const Double_t *colors, ECoordinateMode mode)
67 : fCoordinateMode(mode)
69 assert(nPoints != 0 &&
"TColorGradient, number of points is 0");
70 assert(points != 0 &&
"TColorGradient, points parameter is null");
71 assert(colors != 0 &&
"TColorGradient, colors parameter is null");
73 ResetColor(nPoints, points, colors);
74 RegisterColor(colorIndex);
80 void TColorGradient::ResetColor(UInt_t nPoints,
const Double_t *points,
const Color_t *colorIndices)
82 assert(nPoints != 0 &&
"ResetColor, number of points is 0");
83 assert(points != 0 &&
"ResetColor, points parameter is null");
84 assert(colorIndices != 0 &&
"ResetColor, colorIndices parameter is null");
86 fColorPositions.assign(points, points + nPoints);
87 fColors.resize(nPoints * 4);
90 for (UInt_t i = 0, pos = 0; i < nPoints; ++i, pos += 4) {
91 const TColor *clearColor = gROOT->GetColor(colorIndices[i]);
92 if (!clearColor || dynamic_cast<const TColorGradient *>(clearColor)) {
94 Error(
"ResetColor",
"Bad color for index %d, set to opaque black", colorIndices[i]);
96 fColors[pos + 1] = 0.;
97 fColors[pos + 2] = 0.;
98 fColors[pos + 3] = 1.;
100 clearColor->GetRGB(rgba[0], rgba[1], rgba[2]);
101 rgba[3] = clearColor->GetAlpha();
102 fColors[pos] = rgba[0];
103 fColors[pos + 1] = rgba[1];
104 fColors[pos + 2] = rgba[2];
105 fColors[pos + 3] = rgba[3];
113 void TColorGradient::ResetColor(UInt_t nPoints,
const Double_t *points,
114 const Double_t *colors)
116 assert(nPoints != 0 &&
"ResetColor, number of points is 0");
117 assert(points != 0 &&
"ResetColor, points parameter is null");
118 assert(colors != 0 &&
"ResetColor, colors parameter is null");
120 fColorPositions.assign(points, points + nPoints);
121 fColors.assign(colors, colors + nPoints * 4);
127 void TColorGradient::SetCoordinateMode(ECoordinateMode mode)
129 fCoordinateMode = mode;
135 TColorGradient::ECoordinateMode TColorGradient::GetCoordinateMode()
const
137 return fCoordinateMode;
143 TColorGradient::SizeType_t TColorGradient::GetNumberOfSteps()
const
145 return fColorPositions.size();
151 const Double_t *TColorGradient::GetColorPositions()
const
153 return &fColorPositions[0];
159 const Double_t *TColorGradient::GetColors()
const
167 void TColorGradient::RegisterColor(Color_t colorIndex)
169 fNumber = colorIndex;
170 SetName(TString::Format(
"Color%d", colorIndex));
173 if (gROOT->GetColor(colorIndex)) {
174 Warning(
"RegisterColor",
"Color with index %d is already defined", colorIndex);
178 if (TObjArray *colors = (TObjArray*)gROOT->GetListOfColors()) {
179 colors->AddAtAndExpand(
this, colorIndex);
181 Error(
"RegisterColor",
"List of colors is a null pointer in gROOT, color was not registered");
187 ClassImp(TLinearGradient);
193 TLinearGradient::TLinearGradient()
200 TLinearGradient::TLinearGradient(Color_t newColor, UInt_t nPoints,
const Double_t *points,
201 const Color_t *colorIndices, ECoordinateMode mode)
202 : TColorGradient(newColor, nPoints, points, colorIndices, mode)
209 TLinearGradient::TLinearGradient(Color_t newColor, UInt_t nPoints,
const Double_t *points,
210 const Double_t *colors, ECoordinateMode mode)
211 : TColorGradient(newColor, nPoints, points, colors, mode)
218 void TLinearGradient::SetStartEnd(
const Point &p1,
const Point &p2)
227 const TColorGradient::Point &TLinearGradient::GetStart()
const
235 const TColorGradient::Point &TLinearGradient::GetEnd()
const
240 ClassImp(TRadialGradient);
246 TRadialGradient::TRadialGradient()
253 TRadialGradient::TRadialGradient(Color_t newColor, UInt_t nPoints,
const Double_t *points,
254 const Color_t *colorIndices, ECoordinateMode mode)
255 : TColorGradient(newColor, nPoints, points, colorIndices, mode)
262 TRadialGradient::TRadialGradient(Color_t newColor, UInt_t nPoints,
const Double_t *points,
263 const Double_t *colors, ECoordinateMode mode)
264 : TColorGradient(newColor, nPoints, points, colors, mode)
271 TRadialGradient::EGradientType TRadialGradient::GetGradientType()
const
279 void TRadialGradient::SetStartEndR1R2(
const Point &p1, Double_t r1,
const Point &p2, Double_t r2)
292 const TColorGradient::Point &TRadialGradient::GetStart()
const
300 Double_t TRadialGradient::GetR1()
const
308 const TColorGradient::Point &TRadialGradient::GetEnd()
const
316 Double_t TRadialGradient::GetR2()
const
324 void TRadialGradient::SetRadialGradient(
const Point ¢er, Double_t radius)
335 const TColorGradient::Point &TRadialGradient::GetCenter()
const
343 Double_t TRadialGradient::GetRadius()
const