2 * Copyright 2010-2015, Haiku, Inc.
3 * Distributed under the terms of the MIT License.
6 * Clemens Zeidler <haiku@clemens-zeidler.de>
7 * Ingo Weinhold <ingo_weinhold@gmx.de>
11 #include "SATDecorator.h"
15 #include <GradientLinear.h>
16 #include <WindowPrivate.h>
18 #include "DrawingEngine.h"
19 #include "SATWindow.h"
22 //#define DEBUG_SATDECORATOR
23 #ifdef DEBUG_SATDECORATOR
24 # define STRACE(x) debug_printf x
30 static const float kResizeKnobSize
= 18.0;
33 static const rgb_color kFrameColors
[4] = {
34 { 152, 152, 152, 255 },
35 { 240, 240, 240, 255 },
36 { 152, 152, 152, 255 },
37 { 108, 108, 108, 255 }
40 static const rgb_color kHighlightFrameColors
[6] = {
42 { 140, 140, 140, 255 },
43 { 124, 124, 124, 255 },
44 { 108, 108, 108, 255 },
49 SATDecorator::SATDecorator(DesktopSettings
& settings
, BRect frame
,
52 DefaultDecorator(settings
, frame
, desktop
)
58 SATDecorator::UpdateColors(DesktopSettings
& settings
)
60 DefaultDecorator::UpdateColors(settings
);
62 // Called during construction, and during any changes
63 fHighlightTabColor
= tint_color(fFocusTabColor
, B_DARKEN_2_TINT
);
64 fHighlightTabColorLight
= tint_color(fHighlightTabColor
,
65 (B_LIGHTEN_MAX_TINT
+ B_LIGHTEN_2_TINT
) / 2);
66 fHighlightTabColorBevel
= tint_color(fHighlightTabColor
, B_LIGHTEN_2_TINT
);
67 fHighlightTabColorShadow
= tint_color(fHighlightTabColor
,
68 (B_DARKEN_1_TINT
+ B_NO_TINT
) / 2);
73 SATDecorator::GetComponentColors(Component component
, uint8 highlight
,
74 ComponentColors _colors
, Decorator::Tab
* _tab
)
76 DefaultDecorator::Tab
* tab
= static_cast<DefaultDecorator::Tab
*>(_tab
);
78 // Get the standard colors from the DefaultDecorator
79 DefaultDecorator::GetComponentColors(component
, highlight
, _colors
, tab
);
81 // Now we need to make some changes if the Stack and tile highlight is used
82 if (highlight
!= HIGHLIGHT_STACK_AND_TILE
)
85 if (tab
&& tab
->isHighlighted
== false
86 && (component
== COMPONENT_TAB
|| component
== COMPONENT_CLOSE_BUTTON
87 || component
== COMPONENT_ZOOM_BUTTON
)) {
93 _colors
[COLOR_TAB_FRAME_LIGHT
] = kFrameColors
[0];
94 _colors
[COLOR_TAB_FRAME_DARK
] = kFrameColors
[3];
95 _colors
[COLOR_TAB
] = fHighlightTabColor
;
96 _colors
[COLOR_TAB_LIGHT
] = fHighlightTabColorLight
;
97 _colors
[COLOR_TAB_BEVEL
] = fHighlightTabColorBevel
;
98 _colors
[COLOR_TAB_SHADOW
] = fHighlightTabColorShadow
;
99 _colors
[COLOR_TAB_TEXT
] = fFocusTextColor
;
102 case COMPONENT_CLOSE_BUTTON
:
103 case COMPONENT_ZOOM_BUTTON
:
104 _colors
[COLOR_BUTTON
] = fHighlightTabColor
;
105 _colors
[COLOR_BUTTON_LIGHT
] = fHighlightTabColorLight
;
108 case COMPONENT_LEFT_BORDER
:
109 case COMPONENT_RIGHT_BORDER
:
110 case COMPONENT_TOP_BORDER
:
111 case COMPONENT_BOTTOM_BORDER
:
112 case COMPONENT_RESIZE_CORNER
:
114 _colors
[0] = kHighlightFrameColors
[0];
115 _colors
[1] = kHighlightFrameColors
[1];
116 _colors
[2] = kHighlightFrameColors
[2];
117 _colors
[3] = kHighlightFrameColors
[3];
118 _colors
[4] = kHighlightFrameColors
[4];
119 _colors
[5] = kHighlightFrameColors
[5];
125 SATWindowBehaviour::SATWindowBehaviour(Window
* window
, StackAndTile
* sat
)
127 DefaultWindowBehaviour(window
),
135 SATWindowBehaviour::AlterDeltaForSnap(Window
* window
, BPoint
& delta
,
138 if (DefaultWindowBehaviour::AlterDeltaForSnap(window
, delta
, now
) == true)
141 SATWindow
* satWindow
= fStackAndTile
->GetSATWindow(window
);
142 if (satWindow
== NULL
)
144 SATGroup
* group
= satWindow
->GetGroup();
148 BRect groupFrame
= group
->WindowAt(0)->CompleteWindowFrame();
149 for (int32 i
= 1; i
< group
->CountItems(); i
++)
150 groupFrame
= groupFrame
| group
->WindowAt(i
)->CompleteWindowFrame();
152 return fMagneticBorder
.AlterDeltaForSnap(window
->Screen(),
153 groupFrame
, delta
, now
);