168 lines
3.9 KiB
ObjectPascal
168 lines
3.9 KiB
ObjectPascal
{ 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.
|