ROOT
v6-36
Reference Guide
Loading...
Searching...
No Matches
gradients.C
Go to the documentation of this file.
1
/// \file
2
/// \ingroup tutorial_cocoa
3
/// This macro requires OS X and ROOT
4
/// compiled with --enable-cocoa to run.
5
///
6
/// Features:
7
/// 1. Radial and linear gradients
8
/// 2. Transparent/semitransparent colours.
9
/// 3. Shadows.
10
///
11
/// \macro_code
12
///
13
/// \author Timur Pocheptsov
14
15
// Includes for ACLiC:
16
#include "
TColorGradient.h
"
17
#include "
TVirtualX.h
"
18
#include "
TCanvas.h
"
19
#include "
TError.h
"
20
#include "
TText.h
"
21
#include "
TPie.h
"
22
23
// Cocoa aux. functions.
24
#include "
customcolor.h
"
25
26
void
gradients()
27
{
28
// Find free colour indices in the ROOT's palette for:
29
// 1. A radial gradient for TPie;
30
// 2. A linear gradient for TCanvas
31
// 3. A fully transparent fill color for a nested pad.
32
33
Color_t
colorIndices
[3] = {};
34
if
(
ROOT::CocoaTutorials::FindFreeCustomColorIndices
(
colorIndices
) != 3) {
35
::Error
(
"grad"
,
"failed to create new custom colors"
);
36
return
;
37
}
38
39
// Better names:
40
const
Color_t
&
radialFill
=
colorIndices
[0];
41
const
Color_t
&
linearFill
=
colorIndices
[1];
42
const
Color_t
&
transparentFill
=
colorIndices
[2];
43
44
// Create a canvas to check if we have a right back-end which supports gradients:
45
TCanvas
*
const
c
=
new
TCanvas
(
"cpie"
,
"Gradient colours demo"
, 700, 700);
46
// Before we allocated any new colour or created any object:
47
if
(
gVirtualX
&& !
gVirtualX
->InheritsFrom(
"TGCocoa"
)) {
48
::Error
(
"gradients"
,
"This macro requires OS X and ROOT built with --enable-cocoa"
);
49
delete
c
;
50
return
;
51
}
52
53
// Linear gradient is defined by: 1) colors (to interpolate between them),
54
// 2) coordinates for these colors along the gradient axis [0., 1.] (must be sorted!).
55
// 3) Start and end points for a gradient, you specify them in some NDC rect ([0,0 - 1,1]),
56
// and this rect is either: bounding rect of your polygon/object to fill
57
//(gradient->SetCoordinateMode(TColorGradient::kObjectBoundingMode))
58
// or bounding rect of a pad (gradient->SetCoordinateMode(TColorGradient::kPadMode)).
59
// kObjectBoundingMode is the default one.
60
61
// Colour positions in the gradient's palette (here I place colors at the
62
// ends of 0-1):
63
const
Double_t
locations
[] = {0., 1.};
64
// Linear gradient fill (with an axis angle == 45):
65
const
Double_t
rgbaData1
[] = {0.2, 0.2, 0.2, 1.,
/*gray*/
66
0.8, 1., 0.9, 1.
/*pale green*/
};
67
TLinearGradient
*
const
gradientFill1
=
new
TLinearGradient
(
linearFill
, 2,
locations
,
rgbaData1
);
68
// 45 degrees:
69
gradientFill1
->SetStartEnd(
TColorGradient::Point
(0., 0.),
TColorGradient::Point
(1., 1.));
70
// Set as a background color in the canvas:
71
c
->SetFillColor(
linearFill
);
72
73
// Draw a text in the canvas (the object above the text will be
74
// semi-transparent):
75
TText
*
const
t =
new
TText
(0.05, 0.7,
"Can you see the text?"
);
76
t->
Draw
();
77
78
// We create a nested pad on top to render a TPie in,
79
// this way we still have a text (below) + TPie with
80
// a fancy colour on top.
81
TPad
*
const
pad
=
new
TPad
(
"p"
,
"p"
, 0., 0., 1., 1.);
82
83
// TPad itself is fully transparent:
84
new
TColor
(
transparentFill
, 1., 1., 1.,
"transparent_fill_color"
, 0.);
85
pad
->SetFillColor(
transparentFill
);
86
// Add our pad into the canvas:
87
pad
->Draw();
88
pad
->cd();
89
90
// Radial gradient fill for a TPie object:
91
const
Double_t
rgbaData2
[] = {
/*opaque orange at the start:*/
1., 0.8, 0., 1.,
92
/*transparent red at the end:*/
1., 0.2, 0., 0.8};
93
94
//
95
// With Quartz/Cocoa we support the "extended" radial gradient:
96
// you can specify two centers and two radiuses - the start and
97
// the end of your radial gradient (+ colors/positions as with a linear
98
// gradient).
99
//
100
101
TRadialGradient
*
const
gradientFill2
=
new
TRadialGradient
(
radialFill
, 2,
locations
,
rgbaData2
);
102
// Parameters for a gradient fill:
103
// the gradient is 'pad-related' - we calculate everything in a pad's
104
// space and consider it as a NDC (so pad's rect is (0,0), (1,1)).
105
gradientFill2
->SetCoordinateMode(
TColorGradient::kPadMode
);
106
// Centers for both circles are the same point.
107
gradientFill2
->SetStartEndR1R2(
TColorGradient::Point
(0.5, 0.5), 0.1,
TColorGradient::Point
(0.5, 0.5), 0.4);
108
109
const
UInt_t
nSlices
= 5;
110
// Values for a TPie (non-const, that's how TPie's ctor is declared):
111
Double_t
values[
nSlices
] = {0.8, 1.2, 1.2, 0.8, 1.};
112
Int_t
colors
[
nSlices
] = {
radialFill
,
radialFill
,
radialFill
,
radialFill
,
radialFill
};
113
114
TPie
*
const
pie
=
new
TPie
(
"pie"
,
"TPie:"
,
nSlices
, values,
colors
);
115
// One slice is slightly shifted:
116
pie
->SetEntryRadiusOffset(2, 0.05);
117
// Move labels to the center (to fit the pad's space):
118
pie
->SetLabelsOffset(-0.08);
119
//
120
pie
->SetRadius(0.4);
121
pie
->Draw(
"rsc"
);
122
}
c
#define c(i)
Definition
RSha256.hxx:101
Int_t
int Int_t
Definition
RtypesCore.h:45
Color_t
short Color_t
Definition
RtypesCore.h:85
UInt_t
unsigned int UInt_t
Definition
RtypesCore.h:46
Double_t
double Double_t
Definition
RtypesCore.h:59
TCanvas.h
TRangeDynCast
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Definition
TCollection.h:358
TColorGradient.h
TError.h
Error
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
Definition
TError.cxx:185
TPie.h
TText.h
TVirtualX.h
gVirtualX
#define gVirtualX
Definition
TVirtualX.h:337
colors
Color * colors
Definition
X3DBuffer.c:21
ROOT::Detail::TRangeCast
Definition
TCollection.h:311
TCanvas
The Canvas class.
Definition
TCanvas.h:23
TColorGradient::kPadMode
@ kPadMode
Definition
TColorGradient.h:42
TColor
The color creation and management class.
Definition
TColor.h:22
TLinearGradient
Definition
TColorGradient.h:97
TObject::Draw
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Definition
TObject.cxx:293
TPad
The most important graphics class in the ROOT system.
Definition
TPad.h:28
TPie
Draw a Pie Chart,.
Definition
TPie.h:23
TRadialGradient
Definition
TColorGradient.h:124
TText
Base class for several text objects.
Definition
TText.h:22
customcolor.h
ROOT::CocoaTutorials::FindFreeCustomColorIndices
unsigned FindFreeCustomColorIndices(Color_t(&indices)[N])
Definition
customcolor.h:38
TColorGradient::Point
Definition
TColorGradient.h:46
tutorials
visualisation
cocoa
gradients.C
ROOT v6-36 - Reference Guide Generated on Thu Aug 21 2025 04:30:48 (GVA Time) using Doxygen 1.10.0