mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 16:49:07 +02:00
customdrawn: Advances a lot the look of the XP button
git-svn-id: trunk@34049 -
This commit is contained in:
parent
bea498988d
commit
c03db51b4d
@ -51,6 +51,25 @@ type
|
|||||||
implementation
|
implementation
|
||||||
|
|
||||||
const
|
const
|
||||||
|
|
||||||
|
// Button
|
||||||
|
|
||||||
|
WINXP_BUTTON_BODY_TOP = $00FFFFFF;
|
||||||
|
WINXP_BUTTON_BODY_BOTTOM = $00EAF0F0;
|
||||||
|
|
||||||
|
WINXP_BUTTON_BODY_LINES_PREPRELAST = $00E6EBEC;
|
||||||
|
WINXP_BUTTON_BODY_LINES_PRELAST = $00D6DFE2;
|
||||||
|
WINXP_BUTTON_BODY_LINES_LAST = $00C5D0D6;
|
||||||
|
|
||||||
|
WINXP_BUTTON_SUNKEN_BODY_BOTTOM = $00E3E9EA;
|
||||||
|
|
||||||
|
WINXP_BUTTON_FRAME_DARK_BLUE = $00743C00;
|
||||||
|
WINXP_BUTTON_FRAME_MED_DARK_BLUE = $00A27055;
|
||||||
|
WINXP_BUTTON_FRAME_MEDIUM_BLUE = $00A8957A;
|
||||||
|
WINXP_BUTTON_FRAME_LIGHT_BLUE = $00DDCFC0;
|
||||||
|
|
||||||
|
// CheckBox
|
||||||
|
|
||||||
WINXP_CHECKBOX_GRADIENT_1 = $00D6DED6;
|
WINXP_CHECKBOX_GRADIENT_1 = $00D6DED6;
|
||||||
WINXP_CHECKBOX_GRADIENT_2 = $00CED6D6;
|
WINXP_CHECKBOX_GRADIENT_2 = $00CED6D6;
|
||||||
WINXP_CHECKBOX_GRADIENT_3 = $00D6DED6;
|
WINXP_CHECKBOX_GRADIENT_3 = $00D6DED6;
|
||||||
@ -122,51 +141,74 @@ procedure TCDDrawerWinXP.DrawButton(ADest: TCanvas;
|
|||||||
var
|
var
|
||||||
Str: string;
|
Str: string;
|
||||||
lColor: TColor;
|
lColor: TColor;
|
||||||
|
lRect: TRect;
|
||||||
begin
|
begin
|
||||||
|
// Background corners
|
||||||
|
lColor := AStateEx.ParentRGBColor;
|
||||||
|
ADest.Pixels[0, 0] := lColor;
|
||||||
|
ADest.Pixels[ASize.cx-1, 0] := lColor;
|
||||||
|
ADest.Pixels[0, ASize.cy-1] := lColor;
|
||||||
|
ADest.Pixels[ASize.cx-1, ASize.cy-1] := lColor;
|
||||||
|
|
||||||
|
// Main body
|
||||||
if csfSunken in AState then
|
if csfSunken in AState then
|
||||||
begin
|
begin
|
||||||
lColor := AStateEx.RGBColor;
|
|
||||||
|
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Brush.Style := bsSolid;
|
||||||
ADest.Brush.Color := lColor;
|
ADest.Brush.Color := WINXP_BUTTON_SUNKEN_BODY_BOTTOM;
|
||||||
ADest.Pen.Color := lColor;
|
ADest.Pen.Color := WINXP_BUTTON_SUNKEN_BODY_BOTTOM;
|
||||||
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
|
ADest.Rectangle(1, 1, ASize.cx-1, ASize.cy-1);
|
||||||
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
|
end
|
||||||
else
|
else if csfEnabled in AState then
|
||||||
begin
|
begin
|
||||||
if csfHasFocus in AState then
|
// First the gradient
|
||||||
lColor := RGBToColor($FB, $FB, $FB)
|
lRect := Bounds(1, 1, ASize.cx-4, ASize.cy-5);
|
||||||
else
|
ADest.GradientFill(lRect, WINXP_BUTTON_BODY_TOP, WINXP_BUTTON_BODY_BOTTOM, gdVertical);
|
||||||
lColor := AStateEx.RGBColor;
|
// Now the extra lines which make the bottom-right
|
||||||
|
ADest.Pen.Color := WINXP_BUTTON_BODY_LINES_PREPRELAST;
|
||||||
ADest.Brush.Color := lColor;
|
ADest.Line(1, ASize.cy-4, ASize.cx-3, ASize.cy-4);
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Line(ASize.cx-3, ASize.cy-4, ASize.cx-3, 1);
|
||||||
ADest.FillRect(0, 0, ASize.cx, ASize.cy);
|
ADest.Pen.Color := WINXP_BUTTON_BODY_LINES_PRELAST;
|
||||||
ADest.Pen.Color := lColor;
|
ADest.Line(2, ASize.cy-3, ASize.cx-2, ASize.cy-3);
|
||||||
ADest.RecTangle(0, 0, ASize.cx, ASize.cy);
|
ADest.Line(ASize.cx-2, ASize.cy-3, ASize.cx-2, 2);
|
||||||
ADest.Pen.Color := GetAColor(lColor, 86);
|
ADest.Pen.Color := WINXP_BUTTON_BODY_LINES_LAST;
|
||||||
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(3, ASize.cy-1, ASize.cx-3, ASize.cy-1);
|
||||||
ADest.Line(2, ASize.cy - 2, ASize.cx - 2, ASize.cy - 2);
|
end
|
||||||
ADest.Pen.Color := GetAColor(lColor, 93);
|
else // disabled
|
||||||
ADest.Line(1, ASize.cy - 4, ASize.cx - 1, ASize.cy - 4);
|
begin
|
||||||
ADest.Pen.Color := GetAColor(lColor, 91);
|
// ToDo
|
||||||
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;
|
end;
|
||||||
|
|
||||||
|
// Now the frame
|
||||||
|
ADest.Pixels[1, 0] := WINXP_BUTTON_FRAME_MEDIUM_BLUE;
|
||||||
|
ADest.Pixels[0, 1] := WINXP_BUTTON_FRAME_MEDIUM_BLUE;
|
||||||
|
ADest.Pixels[1, 1] := WINXP_BUTTON_FRAME_MED_DARK_BLUE;
|
||||||
|
ADest.Pixels[2, 1] := WINXP_BUTTON_FRAME_LIGHT_BLUE;
|
||||||
|
ADest.Pixels[1, 2] := WINXP_BUTTON_FRAME_LIGHT_BLUE;
|
||||||
|
|
||||||
|
ADest.Pixels[ASize.cx-2, 0] := WINXP_BUTTON_FRAME_MEDIUM_BLUE;
|
||||||
|
ADest.Pixels[ASize.cx-1, 1] := WINXP_BUTTON_FRAME_MEDIUM_BLUE;
|
||||||
|
ADest.Pixels[ASize.cx-2, 1] := WINXP_BUTTON_FRAME_MED_DARK_BLUE;
|
||||||
|
ADest.Pixels[ASize.cx-3, 1] := WINXP_BUTTON_FRAME_LIGHT_BLUE;
|
||||||
|
ADest.Pixels[ASize.cx-2, 2] := WINXP_BUTTON_FRAME_LIGHT_BLUE;
|
||||||
|
|
||||||
|
ADest.Pixels[1, ASize.cy-1] := WINXP_BUTTON_FRAME_MEDIUM_BLUE;
|
||||||
|
ADest.Pixels[0, ASize.cy-2] := WINXP_BUTTON_FRAME_MEDIUM_BLUE;
|
||||||
|
ADest.Pixels[1, ASize.cy-2] := WINXP_BUTTON_FRAME_MED_DARK_BLUE;
|
||||||
|
ADest.Pixels[2, ASize.cy-2] := WINXP_BUTTON_FRAME_LIGHT_BLUE;
|
||||||
|
ADest.Pixels[1, ASize.cy-3] := WINXP_BUTTON_FRAME_LIGHT_BLUE;
|
||||||
|
|
||||||
|
ADest.Pixels[ASize.cx-2, ASize.cy-1] := WINXP_BUTTON_FRAME_MEDIUM_BLUE;
|
||||||
|
ADest.Pixels[ASize.cx-1, ASize.cy-2] := WINXP_BUTTON_FRAME_MEDIUM_BLUE;
|
||||||
|
ADest.Pixels[ASize.cx-2, ASize.cy-2] := WINXP_BUTTON_FRAME_MED_DARK_BLUE;
|
||||||
|
ADest.Pixels[ASize.cx-3, ASize.cy-2] := WINXP_BUTTON_FRAME_LIGHT_BLUE;
|
||||||
|
ADest.Pixels[ASize.cx-2, ASize.cy-3] := WINXP_BUTTON_FRAME_LIGHT_BLUE;
|
||||||
|
|
||||||
|
ADest.Pen.Color := WINXP_BUTTON_FRAME_DARK_BLUE;
|
||||||
|
ADest.Line(2, 0, ASize.cx-2, 0);
|
||||||
|
ADest.Line(2, ASize.cy-1, ASize.cx-2, ASize.cy-1);
|
||||||
|
ADest.Line(0, 2, 0, ASize.cy-2);
|
||||||
|
ADest.Line(ASize.cx-1, 2, ASize.cx-1, ASize.cy-2);
|
||||||
|
|
||||||
// Button text
|
// Button text
|
||||||
ADest.Font.Assign(AStateEx.Font);
|
ADest.Font.Assign(AStateEx.Font);
|
||||||
ADest.Brush.Style := bsClear;
|
ADest.Brush.Style := bsClear;
|
||||||
|
Loading…
Reference in New Issue
Block a user