1/*
2 * Copyright 2009-2014 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		DarkWyrm, bpmagic@columbus.rr.com
7 *		Adrien Destugues, pulkomandy@gmail.com
8 *		John Scipione, jscipione@gmail.com
9 */
10#ifndef MAC_DECORATOR_H
11#define MAC_DECORATOR_H
12
13
14#include "DecorManager.h"
15#include "RGBColor.h"
16#include "SATDecorator.h"
17
18
19class MacDecorAddOn : public DecorAddOn {
20public:
21								MacDecorAddOn(image_id id, const char* name);
22
23protected:
24	virtual Decorator*			_AllocateDecorator(DesktopSettings& settings,
25									BRect rect, Desktop* desktop);
26};
27
28
29class MacDecorator: public SATDecorator {
30public:
31								MacDecorator(DesktopSettings& settings,
32									BRect frame, Desktop* desktop);
33	virtual						~MacDecorator();
34
35			void				Draw(BRect updateRect);
36			void				Draw();
37
38	virtual	Region				RegionAt(BPoint where, int32& tab) const;
39
40	virtual	bool				SetRegionHighlight(Region region,
41									uint8 highlight, BRegion* dirty,
42									int32 tab = -1);
43
44protected:
45			void				_DoLayout();
46
47	virtual	void				_DrawFrame(BRect invalid);
48
49	virtual	void				_DrawTab(Decorator::Tab* tab, BRect invalid);
50	virtual	void				_DrawButtons(Decorator::Tab* tab,
51									const BRect& invalid);
52	virtual	void				_DrawTitle(Decorator::Tab* tab, BRect rect);
53
54	virtual	void				_DrawMinimize(Decorator::Tab* tab, bool direct,
55									BRect rect);
56	virtual	void				_DrawZoom(Decorator::Tab* tab, bool direct,
57									BRect rect);
58	virtual	void				_DrawClose(Decorator::Tab* tab, bool direct,
59									BRect rect);
60
61	virtual	void				_SetTitle(Tab* tab, const char* string,
62									BRegion* updateRegion = NULL);
63
64	virtual	void				_MoveBy(BPoint offset);
65	virtual	void				_ResizeBy(BPoint offset, BRegion* dirty);
66
67			Decorator::Tab*		_AllocateNewTab();
68
69	virtual	bool				_AddTab(DesktopSettings& settings,
70									int32 index = -1,
71									BRegion* updateRegion = NULL);
72	virtual	bool				_RemoveTab(int32 index,
73									BRegion* updateRegion = NULL);
74	virtual	bool				_MoveTab(int32 from, int32 to, bool isMoving,
75									BRegion* updateRegion = NULL);
76
77	virtual	void				_GetFootprint(BRegion *region);
78
79	virtual	void				_UpdateFont(DesktopSettings& settings);
80
81private:
82			void				_DrawButton(Decorator::Tab* tab, bool direct,
83									BRect rect, bool pressed);
84			void				_DrawBlendedRect(DrawingEngine* engine,
85									BRect r, bool down);
86
87			rgb_color			fButtonHighColor;
88			rgb_color			fButtonLowColor;
89
90			rgb_color			fFrameHighColor;
91			rgb_color			fFrameMidColor;
92			rgb_color			fFrameLowColor;
93			rgb_color			fFrameLowerColor;
94
95			rgb_color			fFocusTextColor;
96			rgb_color			fNonFocusTextColor;
97};
98
99
100#endif	// MAC_DECORATOR_H
101