mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-14 14:52:44 +02:00
127 lines
3.6 KiB
ObjectPascal
127 lines
3.6 KiB
ObjectPascal
unit customdrawn_winxp;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
// RTL
|
|
Classes, SysUtils, Types,
|
|
// LCL -> Use only TForm, TWinControl, TCanvas and TLazIntfImage
|
|
Graphics, Controls, LCLType,
|
|
//
|
|
customdrawndrawers, customdrawn_common, customdrawnutils;
|
|
|
|
type
|
|
|
|
{ TCDDrawerWinXP }
|
|
|
|
TCDDrawerWinXP = class(TCDDrawerCommon)
|
|
public
|
|
function GetDrawStyle: TCDDrawStyle; override;
|
|
procedure LoadFallbackPaletteColors; override;
|
|
// ===================================
|
|
// Standard Tab
|
|
// ===================================
|
|
// TCDButton
|
|
procedure DrawButton(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
|
AState: TCDControlState; AStateEx: TCDControlStateEx); override;
|
|
// TCDEdit
|
|
procedure DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
|
AState: TCDControlState; AStateEx: TCDEditStateEx); override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
const
|
|
WINXP_FRAME_BLUE = $00B99D7F;
|
|
WINXP_FORM = $00D8E9EC;
|
|
|
|
{ TCDDrawerWinXP }
|
|
|
|
function TCDDrawerWinXP.GetDrawStyle: TCDDrawStyle;
|
|
begin
|
|
Result := dsWinXP;
|
|
end;
|
|
|
|
procedure TCDDrawerWinXP.LoadFallbackPaletteColors;
|
|
begin
|
|
Palette.BtnFace := WINXP_FORM;
|
|
Palette.Form := WINXP_FORM;
|
|
end;
|
|
|
|
procedure TCDDrawerWinXP.DrawButton(ADest: TCanvas; ADestPos: TPoint;
|
|
ASize: TSize; AState: TCDControlState; AStateEx: TCDControlStateEx);
|
|
var
|
|
Str: string;
|
|
lColor: TColor;
|
|
begin
|
|
if csfSunken in AState then
|
|
begin
|
|
lColor := AStateEx.RGBColor;
|
|
|
|
ADest.Brush.Style := bsSolid;
|
|
ADest.Brush.Color := lColor;
|
|
ADest.Pen.Color := lColor;
|
|
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
|
|
ADest.FillRect(0, 0, ASize.cx, ASize.cy);
|
|
ADest.Brush.Color := GetAColor(lColor, 93);
|
|
ADest.Pen.Color := GetAColor(lColor, 76);
|
|
ADest.RoundRect(0, 0, ASize.cx, ASize.cy, 8, 8);
|
|
end
|
|
else
|
|
begin
|
|
if csfHasFocus in AState then
|
|
lColor := RGBToColor($FB, $FB, $FB)
|
|
else
|
|
lColor := AStateEx.RGBColor;
|
|
|
|
ADest.Brush.Color := lColor;
|
|
ADest.Brush.Style := bsSolid;
|
|
ADest.FillRect(0, 0, ASize.cx, ASize.cy);
|
|
ADest.Pen.Color := lColor;
|
|
ADest.RecTangle(0, 0, ASize.cx, ASize.cy);
|
|
ADest.Pen.Color := GetAColor(lColor, 86);
|
|
ADest.RoundRect(0, 0, ASize.cx, ASize.cy, 8, 8);
|
|
// Pen.Color := aColor;
|
|
// RecTangle(0, 6, Width, Height);
|
|
ADest.Pen.Color := GetAColor(lColor, 86);
|
|
ADest.Line(0, 3, 0, ASize.cy - 3);
|
|
ADest.Line(ASize.cx, 3, ASize.cx, ASize.cy - 3);
|
|
ADest.Line(3, ASize.cy - 1, ASize.cx - 3, ASize.cy - 1);
|
|
ADest.Line(2, ASize.cy - 2, ASize.cx - 2, ASize.cy - 2);
|
|
ADest.Pen.Color := GetAColor(lColor, 93);
|
|
ADest.Line(1, ASize.cy - 4, ASize.cx - 1, ASize.cy - 4);
|
|
ADest.Pen.Color := GetAColor(lColor, 91);
|
|
ADest.Line(1, ASize.cy - 3, ASize.cx - 1, ASize.cy - 3);
|
|
ADest.Pen.Color := GetAColor(lColor, 88);
|
|
ADest.Line(ASize.cx - 2, 4, ASize.cx - 2, ASize.cy - 3);
|
|
//Pen.Color := GetAColor(aColor, 94);
|
|
//Line(2, 2, 6, 2);
|
|
end;
|
|
|
|
// Button text
|
|
ADest.Font.Assign(AStateEx.Font);
|
|
ADest.Brush.Style := bsClear;
|
|
ADest.Pen.Style := psSolid;
|
|
Str := AStateEx.Caption;
|
|
ADest.TextOut((ASize.cx - ADest.TextWidth(Str)) div 2,
|
|
(ASize.cy - ADest.TextHeight(Str)) div 2, Str);
|
|
end;
|
|
|
|
procedure TCDDrawerWinXP.DrawEditBackground(ADest: TCanvas; ADestPos: TPoint;
|
|
ASize: TSize; AState: TCDControlState; AStateEx: TCDEditStateEx);
|
|
begin
|
|
// The background
|
|
ADest.Brush.Color := clWhite;
|
|
ADest.Brush.Style := bsSolid;
|
|
ADest.Pen.Color := WINXP_FRAME_BLUE;
|
|
ADest.Pen.Style := psSolid;
|
|
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
|
|
end;
|
|
|
|
initialization
|
|
RegisterDrawer(TCDDrawerWinXP.Create, dsWinXP);
|
|
end.
|
|
|