xref: /haiku/src/apps/gradients/GradientsView.cpp (revision 19ae20e67e91fc09cc9fc5c0e60e21e24e7a53eb)
1 /*
2  * Copyright (c) 2008-2009, Haiku, Inc.
3  * Distributed under the terms of the MIT license.
4  *
5  * Authors:
6  *		Artur Wyszynski <harakash@gmail.com>
7  */
8 
9 
10 #include "GradientsView.h"
11 #include <GradientLinear.h>
12 #include <GradientRadial.h>
13 #include <GradientRadialFocus.h>
14 #include <GradientDiamond.h>
15 #include <GradientConic.h>
16 
17 
GradientsView(const BRect & rect)18 GradientsView::GradientsView(const BRect &rect)
19 	: BView(rect, "gradientsview", B_FOLLOW_ALL, B_WILL_DRAW | B_PULSE_NEEDED),
20 	fType(BGradient::TYPE_LINEAR)
21 {
22 }
23 
24 
~GradientsView()25 GradientsView::~GradientsView()
26 {
27 }
28 
29 
30 void
Draw(BRect update)31 GradientsView::Draw(BRect update)
32 {
33 	switch (fType) {
34 		case BGradient::TYPE_LINEAR:
35 			DrawLinear(update);
36 			break;
37 
38 		case BGradient::TYPE_RADIAL:
39 			DrawRadial(update);
40 			break;
41 
42 		case BGradient::TYPE_RADIAL_FOCUS:
43 			DrawRadialFocus(update);
44 			break;
45 
46 		case BGradient::TYPE_DIAMOND:
47 			DrawDiamond(update);
48 			break;
49 
50 		case BGradient::TYPE_CONIC:
51 			DrawConic(update);
52 			break;
53 
54 		case BGradient::TYPE_NONE:
55 		default:
56 			break;
57 	}
58 }
59 
60 
61 void
DrawLinear(BRect update)62 GradientsView::DrawLinear(BRect update)
63 {
64 	BGradientLinear gradient;
65 	rgb_color c;
66 	c.red = 255;
67 	c.green = 0;
68 	c.blue = 0;
69 	gradient.AddColor(c, 0);
70 	c.red = 0;
71 	c.green = 255;
72 	c.blue = 0;
73 	gradient.AddColor(c, 127);
74 	c.red = 0;
75 	c.green = 0;
76 	c.blue = 255;
77 	gradient.AddColor(c, 255);
78 
79 	// RoundRect
80 	SetHighColor(0, 0, 0);
81 	FillRoundRect(BRect(10, 10, 110, 110), 5, 5);
82 	gradient.SetStart(BPoint(120, 10));
83 	gradient.SetEnd(BPoint(220, 110));
84 	FillRoundRect(BRect(120, 10, 220, 110), 5, 5, gradient);
85 
86 	// Rect
87 	SetHighColor(0, 0, 0);
88 	FillRect(BRect(10, 120, 110, 220));
89 	gradient.SetStart(BPoint(120, 120));
90 	gradient.SetEnd(BPoint(220, 220));
91 	FillRect(BRect(120, 120, 220, 220), gradient);
92 
93 	// Triangle
94 	SetHighColor(0, 0, 0);
95 	FillTriangle(BPoint(60, 230), BPoint(10, 330), BPoint(110, 330));
96 	gradient.SetStart(BPoint(60, 230));
97 	gradient.SetEnd(BPoint(60, 330));
98 	FillTriangle(BPoint(170, 230), BPoint(120, 330), BPoint(220, 330),
99 		gradient);
100 
101 	// Ellipse
102 	SetHighColor(0, 0, 0);
103 	FillEllipse(BPoint(60, 390), 50, 50);
104 	gradient.SetStart(BPoint(60, 340));
105 	gradient.SetEnd(BPoint(60, 440));
106 	FillEllipse(BPoint(170, 390), 50, 50, gradient);
107 }
108 
109 
110 void
DrawRadial(BRect update)111 GradientsView::DrawRadial(BRect update)
112 {
113 	BGradientRadial gradient;
114 	gradient.AddColor(make_color(255, 0, 0), 0);
115 	gradient.AddColor(make_color(0, 255, 0), 127);
116 	gradient.AddColor(make_color(0, 0, 255), 255);
117 
118 	// RoundRect
119 	SetHighColor(0, 0, 0);
120 	FillRoundRect(BRect(10, 10, 110, 110), 5, 5);
121 	gradient.SetCenter(BPoint(170, 60));
122 	gradient.SetRadius(50);
123 	FillRoundRect(BRect(120, 10, 220, 110), 5, 5, gradient);
124 
125 	// Rect
126 	SetHighColor(0, 0, 0);
127 	FillRect(BRect(10, 120, 110, 220));
128 	gradient.SetCenter(BPoint(170, 170));
129 	FillRect(BRect(120, 120, 220, 220), gradient);
130 
131 	// Triangle
132 	SetHighColor(0, 0, 0);
133 	FillTriangle(BPoint(60, 230), BPoint(10, 330), BPoint(110, 330));
134 	gradient.SetCenter(BPoint(170, 280));
135 	FillTriangle(BPoint(170, 230), BPoint(120, 330), BPoint(220, 330),
136 		gradient);
137 
138 	// Ellipse
139 	SetHighColor(0, 0, 0);
140 	FillEllipse(BPoint(60, 390), 50, 50);
141 	gradient.SetCenter(BPoint(170, 390));
142 	FillEllipse(BPoint(170, 390), 50, 50, gradient);
143 }
144 
145 
146 void
DrawRadialFocus(BRect update)147 GradientsView::DrawRadialFocus(BRect update)
148 {
149 	BGradientRadialFocus gradient;
150 	rgb_color c;
151 	c.red = 255;
152 	c.green = 0;
153 	c.blue = 0;
154 	gradient.AddColor(c, 0);
155 	c.red = 0;
156 	c.green = 255;
157 	c.blue = 0;
158 	gradient.AddColor(c, 127);
159 	c.red = 0;
160 	c.green = 0;
161 	c.blue = 255;
162 	gradient.AddColor(c, 255);
163 
164 	// RoundRect
165 	SetHighColor(0, 0, 0);
166 	FillRoundRect(BRect(10, 10, 110, 110), 5, 5);
167 	gradient.SetCenter(BPoint(170, 60));
168 	FillRoundRect(BRect(120, 10, 220, 110), 5, 5, gradient);
169 
170 	// Rect
171 	SetHighColor(0, 0, 0);
172 	FillRect(BRect(10, 120, 110, 220));
173 	gradient.SetCenter(BPoint(170, 170));
174 	FillRect(BRect(120, 120, 220, 220), gradient);
175 
176 	// Triangle
177 	SetHighColor(0, 0, 0);
178 	FillTriangle(BPoint(60, 230), BPoint(10, 330), BPoint(110, 330));
179 	gradient.SetCenter(BPoint(170, 280));
180 	FillTriangle(BPoint(170, 230), BPoint(120, 330), BPoint(220, 330),
181 		gradient);
182 
183 	// Ellipse
184 	SetHighColor(0, 0, 0);
185 	FillEllipse(BPoint(60, 390), 50, 50);
186 	gradient.SetCenter(BPoint(170, 390));
187 	FillEllipse(BPoint(170, 390), 50, 50, gradient);
188 }
189 
190 
191 void
DrawDiamond(BRect update)192 GradientsView::DrawDiamond(BRect update)
193 {
194 	BGradientDiamond gradient;
195 	rgb_color c;
196 	c.red = 255;
197 	c.green = 0;
198 	c.blue = 0;
199 	gradient.AddColor(c, 0);
200 	c.red = 0;
201 	c.green = 255;
202 	c.blue = 0;
203 	gradient.AddColor(c, 127);
204 	c.red = 0;
205 	c.green = 0;
206 	c.blue = 255;
207 	gradient.AddColor(c, 255);
208 
209 	// RoundRect
210 	SetHighColor(0, 0, 0);
211 	FillRoundRect(BRect(10, 10, 110, 110), 5, 5);
212 	gradient.SetCenter(BPoint(170, 60));
213 	FillRoundRect(BRect(120, 10, 220, 110), 5, 5, gradient);
214 
215 	// Rect
216 	SetHighColor(0, 0, 0);
217 	FillRect(BRect(10, 120, 110, 220));
218 	gradient.SetCenter(BPoint(170, 170));
219 	FillRect(BRect(120, 120, 220, 220), gradient);
220 
221 	// Triangle
222 	SetHighColor(0, 0, 0);
223 	FillTriangle(BPoint(60, 230), BPoint(10, 330), BPoint(110, 330));
224 	gradient.SetCenter(BPoint(170, 280));
225 	FillTriangle(BPoint(170, 230), BPoint(120, 330), BPoint(220, 330),
226 		gradient);
227 
228 	// Ellipse
229 	SetHighColor(0, 0, 0);
230 	FillEllipse(BPoint(60, 390), 50, 50);
231 	gradient.SetCenter(BPoint(170, 390));
232 	FillEllipse(BPoint(170, 390), 50, 50, gradient);
233 }
234 
235 
236 void
DrawConic(BRect update)237 GradientsView::DrawConic(BRect update)
238 {
239 	BGradientConic gradient;
240 	rgb_color c;
241 	c.red = 255;
242 	c.green = 0;
243 	c.blue = 0;
244 	gradient.AddColor(c, 0);
245 	c.red = 0;
246 	c.green = 255;
247 	c.blue = 0;
248 	gradient.AddColor(c, 127);
249 	c.red = 0;
250 	c.green = 0;
251 	c.blue = 255;
252 	gradient.AddColor(c, 255);
253 
254 	// RoundRect
255 	SetHighColor(0, 0, 0);
256 	FillRoundRect(BRect(10, 10, 110, 110), 5, 5);
257 	gradient.SetCenter(BPoint(170, 60));
258 	FillRoundRect(BRect(120, 10, 220, 110), 5, 5, gradient);
259 
260 	// Rect
261 	SetHighColor(0, 0, 0);
262 	FillRect(BRect(10, 120, 110, 220));
263 	gradient.SetCenter(BPoint(170, 170));
264 	FillRect(BRect(120, 120, 220, 220), gradient);
265 
266 	// Triangle
267 	SetHighColor(0, 0, 0);
268 	FillTriangle(BPoint(60, 230), BPoint(10, 330), BPoint(110, 330));
269 	gradient.SetCenter(BPoint(170, 280));
270 	FillTriangle(BPoint(170, 230), BPoint(120, 330), BPoint(220, 330),
271 		gradient);
272 
273 	// Ellipse
274 	SetHighColor(0, 0, 0);
275 	FillEllipse(BPoint(60, 390), 50, 50);
276 	gradient.SetCenter(BPoint(170, 390));
277 	FillEllipse(BPoint(170, 390), 50, 50, gradient);
278 }
279 
280 
281 void
SetType(BGradient::Type type)282 GradientsView::SetType(BGradient::Type type)
283 {
284 	fType = type;
285 	Invalidate();
286 }
287