lazarus/components/customdrawn/customdrawn_winxp.pas
sekelsenmat e2ab4a0218 Customdrawn: Adds support to color palettes
git-svn-id: trunk@33301 -
2011-11-04 16:24:21 +00:00

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.