-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathfpg_style_chrome_silver_flatmenu.pas
167 lines (131 loc) · 3.93 KB
/
fpg_style_chrome_silver_flatmenu.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
{ Chrome Style with flat menu
by Fred van Stappen
fiens@hotmail.com
}
unit fpg_style_chrome_silver_flatmenu;
{$mode objfpc}{$H+}
/// for custom compil, like using fpgui-dvelop => edit define.inc
//{$I define.inc}
interface
uses
Classes, fpg_main, fpg_base;
type
TExtStyle = class(TfpgStyle)
public
constructor Create; override;
{ General }
procedure DrawControlFrame(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord); override;
{ Buttons }
procedure DrawButtonFace(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord;
AFlags: TfpgButtonFlags); override;
{ Menus }
procedure DrawMenuRow(ACanvas: TfpgCanvas; r: TfpgRect;
AFlags: TfpgMenuItemFlags); override;
function HasButtonHoverEffect: boolean; override;
end;
implementation
uses
fpg_stylemanager;
{ TExtStyle }
constructor TExtStyle.Create;
begin
inherited Create;
fpgSetNamedColor(clWindowBackground, clLightGray);
end;
function TExtStyle.HasButtonHoverEffect: boolean;
begin
Result := True;
end;
procedure TExtStyle.DrawControlFrame(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord);
var
r: TfpgRect;
begin
r.SetRect(x, y, w, h);
ACanvas.SetColor(cldarkgray);
ACanvas.DrawRectangle(r);
r.SetRect(x+1, y+1, w-2, h-2);
ACanvas.SetColor(clwhite);
ACanvas.DrawRectangle(r);
end;
procedure TExtStyle.DrawButtonFace(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord;
AFlags: TfpgButtonFlags);
var
r, r21, r22: TfpgRect;
begin
r.SetRect(x, y, w, h);
r21.SetRect(x, y, w, h div 2);
r22.SetRect(x, y + (h div 2), w, h div 2);
if btfIsDefault in AFlags then
begin
ACanvas.SetColor(TfpgColor($7b7b7b));
ACanvas.SetLineStyle(1, lsSolid);
ACanvas.DrawRectangle(r);
InflateRect(r, -1, -1);
Exclude(AFlags, btfIsDefault);
fpgStyle.DrawButtonFace(ACanvas, r.Left, r.Top, r.Width, r.Height, AFlags);
Exit; //==>
end;
// Clear the canvas
ACanvas.SetColor(clWindowBackground);
ACanvas.FillRectangle(r);
if (btfFlat in AFlags) and not (btfIsPressed in AFlags) then
Exit; // no need to go further
InflateRect(r, -1, -1);
// outer rectangle
ACanvas.SetLineStyle(1, lsSolid);
// ACanvas.SetColor(TfpgColor($a6a6a6));
ACanvas.SetColor(clblack);
ACanvas.DrawRectangle(r);
// so we don't paint over the border
// now paint the face of the button
if (btfIsPressed in AFlags) or (btfHover in AFlags) and not (btfDisabled in AFlags) then
begin
ACanvas.GradientFill(r21, clHilite1, clwhite, gdVertical);
ACanvas.GradientFill(r22, clwhite, clHilite1, gdVertical);
// ACanvas.SetColor(clblack);
ACanvas.SetColor(cldarkgray);
ACanvas.DrawRectangle(r);
InflateRect(r, -1, -1);
if (btfHover in AFlags) then ACanvas.SetColor(clyellow) else ACanvas.SetColor(cllime);
ACanvas.DrawRectangle(r);
end
else
begin
ACanvas.GradientFill(r21, clsilver, $E6E6E6, gdVertical);
ACanvas.GradientFill(r22, $E6E6E6, clsilver, gdVertical);
// ACanvas.SetColor(clblack);
ACanvas.SetColor(cldarkgray);
ACanvas.DrawRectangle(r);
end;
end;
procedure TExtStyle.DrawMenuRow(ACanvas: TfpgCanvas; r: TfpgRect;
AFlags: TfpgMenuItemFlags);
var
r21, r22: TfpgRect;
begin
r21.Height := r.Height div 2;
r21.Width := r.Width;
r21.Top := r.top;
r21.Left := r.Left;
r22.Height := r.Height div 2;
r22.Width := r.Width;
r22.Top := r.top + r22.Height;
r22.Left := r.Left;
ACanvas.SetColor(clwhite);
ACanvas.FillRectangle(r);
inherited DrawMenuRow(ACanvas, r, AFlags);
if (mifSelected in AFlags) and not (mifSeparator in AFlags) then
begin
ACanvas.GradientFill(r21, clsilver, clwhite, gdVertical);
ACanvas.GradientFill(r22, clwhite, clsilver, gdVertical);
ACanvas.SetColor(cldarkgray);
ACanvas.SetTextColor(clblack);
ACanvas.DrawRectangle(r);
InflateRect(r, -1, -1);
ACanvas.SetColor(cllime);
ACanvas.DrawRectangle(r);
end;
end;
initialization
fpgStyleManager.RegisterClass('Chrome silver flat menu', TExtStyle);
end.