HaikuControlLook.h revision fe66a314
1/*
2 * Copyright 2009-2017, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _HAIKU_CONTROL_LOOK_H
6#define _HAIKU_CONTROL_LOOK_H
7
8
9#include <ControlLook.h>
10
11
12class BBitmap;
13class BControl;
14class BGradientLinear;
15class BView;
16
17
18namespace BPrivate {
19
20
21class HaikuControlLook : public BControlLook {
22public:
23								HaikuControlLook();
24	virtual						~HaikuControlLook();
25
26	virtual BAlignment			DefaultLabelAlignment() const;
27	virtual float				DefaultLabelSpacing() const;
28
29	virtual	float				DefaultItemSpacing() const;
30
31	static	float				ComposeSpacing(float spacing);
32
33	virtual uint32				Flags(BControl* control) const;
34
35	virtual	void				DrawButtonFrame(BView* view, BRect& rect,
36									const BRect& updateRect,
37									const rgb_color& base,
38									const rgb_color& background,
39									uint32 flags = 0,
40									uint32 borders = B_ALL_BORDERS);
41	virtual	void				DrawButtonFrame(BView* view, BRect& rect,
42									const BRect& updateRect,
43									float radius,
44									const rgb_color& base,
45									const rgb_color& background,
46									uint32 flags = 0,
47									uint32 borders = B_ALL_BORDERS);
48	virtual	void				DrawButtonFrame(BView* view, BRect& rect,
49									const BRect& updateRect,
50									float leftTopRadius,
51									float rightTopRadius,
52									float leftBottomRadius,
53									float rightBottomRadius,
54									const rgb_color& base,
55									const rgb_color& background,
56									uint32 flags = 0,
57									uint32 borders = B_ALL_BORDERS);
58
59	virtual	void				DrawButtonBackground(BView* view, BRect& rect,
60									const BRect& updateRect,
61									const rgb_color& base,
62									uint32 flags = 0,
63									uint32 borders = B_ALL_BORDERS,
64									orientation orientation = B_HORIZONTAL);
65	virtual	void				DrawButtonBackground(BView* view, BRect& rect,
66									const BRect& updateRect,
67									float radius,
68									const rgb_color& base,
69									uint32 flags = 0,
70									uint32 borders = B_ALL_BORDERS,
71									orientation orientation = B_HORIZONTAL);
72	virtual	void				DrawButtonBackground(BView* view, BRect& rect,
73									const BRect& updateRect,
74									float leftTopRadius,
75									float rightTopRadius,
76									float leftBottomRadius,
77									float rightBottomRadius,
78									const rgb_color& base,
79									uint32 flags = 0,
80									uint32 borders = B_ALL_BORDERS,
81									orientation orientation = B_HORIZONTAL);
82
83	virtual	void				DrawMenuBarBackground(BView* view, BRect& rect,
84									const BRect& updateRect,
85									const rgb_color& base,
86									uint32 flags = 0,
87									uint32 borders = B_ALL_BORDERS);
88
89	virtual	void				DrawMenuFieldFrame(BView* view, BRect& rect,
90									const BRect& updateRect,
91									const rgb_color& base,
92									const rgb_color& background,
93									uint32 flags = 0,
94									uint32 borders = B_ALL_BORDERS);
95	virtual	void				DrawMenuFieldFrame(BView* view, BRect& rect,
96									const BRect& updateRect,
97									float radius,
98									const rgb_color& base,
99									const rgb_color& background,
100									uint32 flags = 0,
101									uint32 borders = B_ALL_BORDERS);
102	virtual	void				DrawMenuFieldFrame(BView* view, BRect& rect,
103									const BRect& updateRect,
104									float leftTopRadius,
105									float rightTopRadius,
106									float leftBottomRadius,
107									float rightBottomRadius,
108									const rgb_color& base,
109									const rgb_color& background,
110									uint32 flags = 0,
111									uint32 borders = B_ALL_BORDERS);
112
113	virtual	void				DrawMenuFieldBackground(BView* view,
114									BRect& rect, const BRect& updateRect,
115									const rgb_color& base, bool popupIndicator,
116									uint32 flags = 0);
117	virtual	void				DrawMenuFieldBackground(BView* view,
118									BRect& rect, const BRect& updateRect,
119									float radius, const rgb_color& base,
120									bool popupIndicator, uint32 flags = 0);
121	virtual	void				DrawMenuFieldBackground(BView* view,
122									BRect& rect, const BRect& updateRect,
123									float leftTopRadius,
124									float rightTopRadius,
125									float leftBottomRadius,
126									float rightBottomRadius,
127									const rgb_color& base,
128									bool popupIndicator, uint32 flags = 0);
129	virtual	void				DrawMenuFieldBackground(BView* view,
130									BRect& rect, const BRect& updateRect,
131									const rgb_color& base, uint32 flags = 0,
132									uint32 borders = B_ALL_BORDERS);
133
134	virtual	void				DrawMenuBackground(BView* view,
135									BRect& rect, const BRect& updateRect,
136									const rgb_color& base, uint32 flags = 0,
137									uint32 borders = B_ALL_BORDERS);
138
139	virtual	void				DrawMenuItemBackground(BView* view,
140									BRect& rect, const BRect& updateRect,
141									const rgb_color& base, uint32 flags = 0,
142									uint32 borders = B_ALL_BORDERS);
143
144	virtual	void				DrawStatusBar(BView* view, BRect& rect,
145									const BRect& updateRect,
146									const rgb_color& base,
147									const rgb_color& barColor,
148									float progressPosition);
149
150	virtual	void				DrawCheckBox(BView* view, BRect& rect,
151									const BRect& updateRect,
152									const rgb_color& base,
153									uint32 flags = 0);
154
155	virtual	void				DrawRadioButton(BView* view, BRect& rect,
156									const BRect& updateRect,
157									const rgb_color& base,
158									uint32 flags = 0);
159
160	virtual	void				DrawScrollBarBackground(BView* view,
161									BRect& rect1, BRect& rect2,
162									const BRect& updateRect,
163									const rgb_color& base, uint32 flags,
164									orientation orientation);
165	virtual	void				DrawScrollBarBackground(BView* view,
166									BRect& rect, const BRect& updateRect,
167									const rgb_color& base, uint32 flags,
168									orientation orientation);
169
170	virtual	void				DrawScrollViewFrame(BView* view,
171									BRect& rect, const BRect& updateRect,
172									BRect verticalScrollBarFrame,
173									BRect horizontalScrollBarFrame,
174									const rgb_color& base,
175									border_style borderStyle,
176									uint32 flags = 0,
177									uint32 borders = B_ALL_BORDERS);
178
179	virtual	void				DrawArrowShape(BView* view,
180									BRect& rect, const BRect& updateRect,
181									const rgb_color& base, uint32 direction,
182									uint32 flags = 0,
183									float tint = B_DARKEN_MAX_TINT);
184
185	virtual	rgb_color			SliderBarColor(const rgb_color& base);
186
187	virtual	void				DrawSliderBar(BView* view, BRect rect,
188									const BRect& updateRect,
189									const rgb_color& base,
190									rgb_color leftFillColor,
191									rgb_color rightFillColor,
192									float sliderScale, uint32 flags,
193									orientation orientation);
194	virtual	void				DrawSliderBar(BView* view, BRect rect,
195									const BRect& updateRect,
196									const rgb_color& base, rgb_color fillColor,
197									uint32 flags, orientation orientation);
198
199	virtual	void				DrawSliderThumb(BView* view, BRect& rect,
200									const BRect& updateRect,
201									const rgb_color& base, uint32 flags,
202									orientation orientation);
203
204	virtual	void				DrawSliderTriangle(BView* view, BRect& rect,
205									const BRect& updateRect,
206									const rgb_color& base, uint32 flags,
207									orientation orientation);
208	virtual	void				DrawSliderTriangle(BView* view, BRect& rect,
209									const BRect& updateRect,
210									const rgb_color& base,
211									const rgb_color& fill, uint32 flags,
212									orientation orientation);
213
214	virtual	void				DrawSliderHashMarks(BView* view, BRect& rect,
215									const BRect& updateRect,
216									const rgb_color& base, int32 count,
217									hash_mark_location location,
218									uint32 flags, orientation orientation);
219
220	virtual	void				DrawActiveTab(BView* view, BRect& rect,
221									const BRect& updateRect,
222									const rgb_color& base, uint32 flags = 0,
223									uint32 borders = B_ALL_BORDERS,
224									uint32 side = B_TOP_BORDER);
225
226	virtual	void				DrawInactiveTab(BView* view, BRect& rect,
227									const BRect& updateRect,
228									const rgb_color& base, uint32 flags = 0,
229									uint32 borders = B_ALL_BORDERS,
230									uint32 side = B_TOP_BORDER);
231
232	virtual	void				DrawSplitter(BView* view, BRect& rect,
233									const BRect& updateRect,
234									const rgb_color& base,
235									orientation orientation,
236									uint32 flags = 0,
237									uint32 borders = B_ALL_BORDERS);
238
239	// various borders
240
241	virtual	void				DrawBorder(BView* view, BRect& rect,
242									const BRect& updateRect,
243									const rgb_color& base,
244									border_style borderStyle, uint32 flags = 0,
245									uint32 borders = B_ALL_BORDERS);
246
247	virtual	void				DrawRaisedBorder(BView* view, BRect& rect,
248									const BRect& updateRect,
249									const rgb_color& base, uint32 flags = 0,
250									uint32 borders = B_ALL_BORDERS);
251
252	virtual	void				DrawGroupFrame(BView* view, BRect& rect,
253									const BRect& updateRect,
254									const rgb_color& base,
255									uint32 borders = B_ALL_BORDERS);
256
257	virtual	void				DrawTextControlBorder(BView* view, BRect& rect,
258									const BRect& updateRect,
259									const rgb_color& base, uint32 flags = 0,
260									uint32 borders = B_ALL_BORDERS);
261
262	// aligned labels
263
264	virtual	void				DrawLabel(BView* view, const char* label,
265									BRect rect, const BRect& updateRect,
266									const rgb_color& base, uint32 flags,
267									const rgb_color* textColor = NULL);
268	virtual	void				DrawLabel(BView* view, const char* label,
269									BRect rect, const BRect& updateRect,
270									const rgb_color& base, uint32 flags,
271									const BAlignment& alignment,
272									const rgb_color* textColor = NULL);
273	// TODO: Would be nice to have a (non-virtual) version of this method
274	// which takes an array of labels and locations. That would save some
275	// setup with the view graphics state.
276	virtual	void				DrawLabel(BView* view, const char* label,
277									const rgb_color& base, uint32 flags,
278									const BPoint& where,
279									const rgb_color* textColor = NULL);
280
281	virtual	void				DrawLabel(BView* view, const char* label,
282									const BBitmap* icon, BRect rect,
283									const BRect& updateRect,
284									const rgb_color& base, uint32 flags,
285									const BAlignment& alignment,
286									const rgb_color* textColor = NULL);
287
288	virtual	void				GetFrameInsets(frame_type frameType,
289									uint32 flags, float& _left, float& _top,
290									float& _right, float& _bottom);
291	virtual	void				GetBackgroundInsets(
292									background_type backgroundType,
293									uint32 flags, float& _left, float& _top,
294									float& _right, float& _bottom);
295
296	virtual	void				DrawButtonWithPopUpBackground(BView* view,
297									BRect& rect, const BRect& updateRect,
298									const rgb_color& base,
299									uint32 flags = 0,
300									uint32 borders = B_ALL_BORDERS,
301									orientation orientation = B_HORIZONTAL);
302	virtual	void				DrawButtonWithPopUpBackground(BView* view,
303									BRect& rect, const BRect& updateRect,
304									float radius,
305									const rgb_color& base,
306									uint32 flags = 0,
307									uint32 borders = B_ALL_BORDERS,
308									orientation orientation = B_HORIZONTAL);
309	virtual	void				DrawButtonWithPopUpBackground(BView* view,
310									BRect& rect, const BRect& updateRect,
311									float leftTopRadius,
312									float rightTopRadius,
313									float leftBottomRadius,
314									float rightBottomRadius,
315									const rgb_color& base,
316									uint32 flags = 0,
317									uint32 borders = B_ALL_BORDERS,
318									orientation orientation = B_HORIZONTAL);
319
320protected:
321			void				_DrawButtonFrame(BView* view, BRect& rect,
322									const BRect& updateRect,
323									float leftTopRadius,
324									float rightTopRadius,
325									float leftBottomRadius,
326									float rightBottomRadius,
327									const rgb_color& base,
328									const rgb_color& background,
329									float contrast, float brightness = 1.0,
330									uint32 flags = 0,
331									uint32 borders = B_ALL_BORDERS);
332
333			void				_DrawOuterResessedFrame(BView* view,
334									BRect& rect, const rgb_color& base,
335									float contrast = 1.0f,
336									float brightness = 1.0f,
337									uint32 flags = 0,
338									uint32 borders = B_ALL_BORDERS);
339
340			void				_DrawFrame(BView* view, BRect& rect,
341									const rgb_color& left,
342									const rgb_color& top,
343									const rgb_color& right,
344									const rgb_color& bottom,
345									uint32 borders = B_ALL_BORDERS);
346			void				_DrawFrame(BView* view, BRect& rect,
347									const rgb_color& left,
348									const rgb_color& top,
349									const rgb_color& right,
350									const rgb_color& bottom,
351									const rgb_color& rightTop,
352									const rgb_color& leftBottom,
353									uint32 borders = B_ALL_BORDERS);
354
355			void				_DrawButtonBackground(BView* view, BRect& rect,
356									const BRect& updateRect,
357									float leftTopRadius,
358									float rightTopRadius,
359									float leftBottomRadius,
360									float rightBottomRadius,
361									const rgb_color& base,
362									bool popupIndicator = false,
363									uint32 flags = 0,
364									uint32 borders = B_ALL_BORDERS,
365									orientation orientation = B_HORIZONTAL);
366			void				_DrawFlatButtonBackground(BView* view,
367									BRect& rect, const BRect& updateRect,
368									const rgb_color& base,
369									bool popupIndicator = false,
370									uint32 flags = 0,
371									uint32 borders = B_ALL_BORDERS,
372									orientation orientation = B_HORIZONTAL);
373			void				_DrawNonFlatButtonBackground(BView* view,
374									BRect& rect, const BRect& updateRect,
375									BRegion& clipping,
376									float leftTopRadius,
377									float rightTopRadius,
378									float leftBottomRadius,
379									float rightBottomRadius,
380									const rgb_color& base,
381									bool popupIndicator = false,
382									uint32 flags = 0,
383									uint32 borders = B_ALL_BORDERS,
384									orientation orientation = B_HORIZONTAL);
385
386			void				_DrawPopUpMarker(BView* view, const BRect& rect,
387									const rgb_color& base, uint32 flags);
388
389			void				_DrawMenuFieldBackgroundOutside(BView* view,
390									BRect& rect, const BRect& updateRect,
391									float leftTopRadius,
392									float rightTopRadius,
393									float leftBottomRadius,
394									float rightBottomRadius,
395									const rgb_color& base,
396									bool popupIndicator = false,
397									uint32 flags = 0);
398
399			void				_DrawMenuFieldBackgroundInside(BView* view,
400									BRect& rect, const BRect& updateRect,
401									float leftTopRadius,
402									float rightTopRadius,
403									float leftBottomRadius,
404									float rightBottomRadius,
405									const rgb_color& base, uint32 flags = 0,
406									uint32 borders = B_ALL_BORDERS);
407
408	// Rounded corner methods
409			void				_DrawRoundCornerLeftTop(BView* view,
410									BRect& cornerRect, const BRect& updateRect,
411									const rgb_color& background,
412									const rgb_color& edgeColor,
413									const rgb_color& frameColor,
414									const rgb_color& bevelColor,
415									const BGradientLinear& fillGradient);
416
417			void				_DrawRoundCornerFrameLeftTop(BView* view,
418									BRect& cornerRect, const BRect& updateRect,
419									const rgb_color& background,
420									const rgb_color& edgeColor,
421									const rgb_color& frameColor);
422
423			void				_DrawRoundCornerBackgroundLeftTop(BView* view,
424									BRect& cornerRect, const BRect& updateRect,
425									const rgb_color& bevelColor,
426									const BGradientLinear& fillGradient);
427
428			void				_DrawRoundCornerRightTop(BView* view,
429									BRect& cornerRect, const BRect& updateRect,
430									const rgb_color& background,
431									const rgb_color& edgeTopColor,
432									const rgb_color& edgeRightColor,
433									const rgb_color& frameTopColor,
434									const rgb_color& frameRightColor,
435									const rgb_color& bevelTopColor,
436									const rgb_color& bevelRightColor,
437									const BGradientLinear& fillGradient);
438
439			void				_DrawRoundCornerFrameRightTop(BView* view,
440									BRect& cornerRect, const BRect& updateRect,
441									const rgb_color& background,
442									const rgb_color& edgeTopColor,
443									const rgb_color& edgeRightColor,
444									const rgb_color& frameTopColor,
445									const rgb_color& frameRightColor);
446
447			void				_DrawRoundCornerBackgroundRightTop(BView* view,
448									BRect& cornerRect, const BRect& updateRect,
449									const rgb_color& bevelTopColor,
450									const rgb_color& bevelRightColor,
451									const BGradientLinear& fillGradient);
452
453			void				_DrawRoundCornerLeftBottom(BView* view,
454									BRect& cornerRect, const BRect& updateRect,
455									const rgb_color& background,
456									const rgb_color& edgeLeftColor,
457									const rgb_color& edgeBottomColor,
458									const rgb_color& frameLeftColor,
459									const rgb_color& frameBottomColor,
460									const rgb_color& bevelLeftColor,
461									const rgb_color& bevelBottomColor,
462									const BGradientLinear& fillGradient);
463
464			void				_DrawRoundCornerFrameLeftBottom(BView* view,
465									BRect& cornerRect, const BRect& updateRect,
466									const rgb_color& background,
467									const rgb_color& edgeLeftColor,
468									const rgb_color& edgeBottomColor,
469									const rgb_color& frameLeftColor,
470									const rgb_color& frameBottomColor);
471
472			void				_DrawRoundCornerBackgroundLeftBottom(BView* view,
473									BRect& cornerRect, const BRect& updateRect,
474									const rgb_color& bevelLeftColor,
475									const rgb_color& bevelBottomColor,
476									const BGradientLinear& fillGradient);
477
478			void				_DrawRoundCornerRightBottom(BView* view,
479									BRect& cornerRect, const BRect& updateRect,
480									const rgb_color& background,
481									const rgb_color& edgeColor,
482									const rgb_color& frameColor,
483									const rgb_color& bevelColor,
484									const BGradientLinear& fillGradient);
485
486			void				_DrawRoundCornerFrameRightBottom(BView* view,
487									BRect& cornerRect, const BRect& updateRect,
488									const rgb_color& background,
489									const rgb_color& edgeColor,
490									const rgb_color& frameColor);
491
492			void				_DrawRoundCornerBackgroundRightBottom(
493									BView* view,
494									BRect& cornerRect, const BRect& updateRect,
495									const rgb_color& bevelColor,
496									const BGradientLinear& fillGradient);
497
498			void				_DrawRoundBarCorner(BView* view, BRect& rect,
499									const BRect& updateRect,
500									const rgb_color& edgeLightColor,
501									const rgb_color& edgeShadowColor,
502									const rgb_color& frameLightColor,
503									const rgb_color& frameShadowColor,
504									const rgb_color& fillLightColor,
505									const rgb_color& fillShadowColor,
506									float leftInset, float topInset,
507									float rightInset, float bottomInset,
508									orientation orientation);
509
510	// Border color methods
511			rgb_color			_EdgeLightColor(const rgb_color& base,
512									float contrast, float brightness,
513									uint32 flags);
514
515			rgb_color			_EdgeShadowColor(const rgb_color& base,
516									float contrast, float brightness,
517									uint32 flags);
518
519			rgb_color			_FrameLightColor(const rgb_color& base,
520									uint32 flags);
521
522			rgb_color			_FrameShadowColor(const rgb_color& base,
523									uint32 flags);
524
525			rgb_color			_BevelLightColor(const rgb_color& base,
526									uint32 flags);
527
528			rgb_color			_BevelShadowColor(const rgb_color& base,
529									uint32 flags);
530
531	// Background gradient methods
532			void				_FillGradient(BView* view, const BRect& rect,
533									const rgb_color& base, float topTint,
534									float bottomTint,
535									orientation orientation = B_HORIZONTAL);
536
537			void				_FillGlossyGradient(BView* view,
538									const BRect& rect, const rgb_color& base,
539									float topTint, float middle1Tint,
540									float middle2Tint, float bottomTint,
541									orientation orientation = B_HORIZONTAL);
542
543			void				_MakeGradient(BGradientLinear& gradient,
544									const BRect& rect, const rgb_color& base,
545									float topTint, float bottomTint,
546									orientation orientation = B_HORIZONTAL) const;
547
548			void				_MakeGlossyGradient(BGradientLinear& gradient,
549									const BRect& rect, const rgb_color& base,
550									float topTint, float middle1Tint,
551									float middle2Tint, float bottomTint,
552									orientation orientation = B_HORIZONTAL) const;
553
554			void				_MakeButtonGradient(BGradientLinear& gradient,
555									BRect& rect, const rgb_color& base,
556									uint32 flags, orientation orientation = B_HORIZONTAL) const;
557
558			bool				_RadioButtonAndCheckBoxMarkColor(
559									const rgb_color& base, rgb_color& color,
560									uint32 flags) const;
561
562private:
563			bool				fCachedOutline;
564};
565
566
567} // namespace BPrivate
568
569#endif // _HAIKU_CONTROL_LOOK_H
570