mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-28 15:40:41 +02:00
LCL-CustomDrawn and CustomDrawn: Advances the migration to TFPCustomCanvas which allowed to support TUpDown and TSpeedButton in LCL-CustomDrawn
git-svn-id: trunk@36155 -
This commit is contained in:
parent
67188bf7b7
commit
0ef97f99db
@ -57,7 +57,7 @@ type
|
|||||||
// Standard Tab
|
// Standard Tab
|
||||||
// ===================================
|
// ===================================
|
||||||
// TCDButton
|
// TCDButton
|
||||||
procedure DrawButton(ADest: TCanvas; ASize: TSize;
|
procedure DrawButton(ADest: TFPCustomCanvas; ASize: TSize;
|
||||||
AState: TCDControlState; AStateEx: TCDButtonStateEx); override;
|
AState: TCDControlState; AStateEx: TCDButtonStateEx); override;
|
||||||
{ // TCDEdit
|
{ // TCDEdit
|
||||||
procedure DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
procedure DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
||||||
@ -310,9 +310,10 @@ begin
|
|||||||
// Don't draw anything, tickmarks are impressed into the general images
|
// Don't draw anything, tickmarks are impressed into the general images
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCDDrawerAndroid.DrawButton(ADest: TCanvas; ASize: TSize;
|
procedure TCDDrawerAndroid.DrawButton(ADest: TFPCustomCanvas; ASize: TSize;
|
||||||
AState: TCDControlState; AStateEx: TCDButtonStateEx);
|
AState: TCDControlState; AStateEx: TCDButtonStateEx);
|
||||||
var
|
var
|
||||||
|
lDest: TCanvas absolute ADest;
|
||||||
Str: string;
|
Str: string;
|
||||||
lGlyphLeftSpacing: Integer = 0;
|
lGlyphLeftSpacing: Integer = 0;
|
||||||
lTextOutPos: TPoint;
|
lTextOutPos: TPoint;
|
||||||
@ -320,90 +321,91 @@ var
|
|||||||
lColor: TColor;
|
lColor: TColor;
|
||||||
lRect: TRect;
|
lRect: TRect;
|
||||||
begin
|
begin
|
||||||
|
if not (ADest is TCanvas) then Exit; // ToDo
|
||||||
// Background corners
|
// Background corners
|
||||||
lColor := AStateEx.ParentRGBColor;
|
lColor := AStateEx.ParentRGBColor;
|
||||||
ADest.Pixels[0, 0] := lColor;
|
lDest.Pixels[0, 0] := lColor;
|
||||||
ADest.Pixels[1, 0] := lColor;
|
lDest.Pixels[1, 0] := lColor;
|
||||||
ADest.Pixels[0, 1] := lColor;
|
lDest.Pixels[0, 1] := lColor;
|
||||||
ADest.Pixels[ASize.cx-1, 0] := lColor;
|
lDest.Pixels[ASize.cx-1, 0] := lColor;
|
||||||
ADest.Pixels[ASize.cx-2, 0] := lColor;
|
lDest.Pixels[ASize.cx-2, 0] := lColor;
|
||||||
ADest.Pixels[ASize.cx-1, 1] := lColor;
|
lDest.Pixels[ASize.cx-1, 1] := lColor;
|
||||||
ADest.Pixels[0, ASize.cy-1] := lColor;
|
lDest.Pixels[0, ASize.cy-1] := lColor;
|
||||||
ADest.Pixels[1, ASize.cy-1] := lColor;
|
lDest.Pixels[1, ASize.cy-1] := lColor;
|
||||||
ADest.Pixels[0, ASize.cy-2] := lColor;
|
lDest.Pixels[0, ASize.cy-2] := lColor;
|
||||||
ADest.Pixels[ASize.cx-1, ASize.cy-1] := lColor;
|
lDest.Pixels[ASize.cx-1, ASize.cy-1] := lColor;
|
||||||
ADest.Pixels[ASize.cx-2, ASize.cy-1] := lColor;
|
lDest.Pixels[ASize.cx-2, ASize.cy-1] := lColor;
|
||||||
ADest.Pixels[ASize.cx-1, ASize.cy-2] := lColor;
|
lDest.Pixels[ASize.cx-1, ASize.cy-2] := lColor;
|
||||||
|
|
||||||
// Darker corners
|
// Darker corners
|
||||||
lColor := ANDROID_BUTTON_CORNERS;
|
lColor := ANDROID_BUTTON_CORNERS;
|
||||||
ADest.Pixels[1, 1] := lColor;
|
lDest.Pixels[1, 1] := lColor;
|
||||||
ADest.Pixels[2, 0] := lColor;
|
lDest.Pixels[2, 0] := lColor;
|
||||||
ADest.Pixels[0, 2] := lColor;
|
lDest.Pixels[0, 2] := lColor;
|
||||||
ADest.Pixels[ASize.cx-3, 0] := lColor;
|
lDest.Pixels[ASize.cx-3, 0] := lColor;
|
||||||
ADest.Pixels[ASize.cx-2, 1] := lColor;
|
lDest.Pixels[ASize.cx-2, 1] := lColor;
|
||||||
ADest.Pixels[ASize.cx-1, 2] := lColor;
|
lDest.Pixels[ASize.cx-1, 2] := lColor;
|
||||||
ADest.Pixels[0, ASize.cy-3] := lColor;
|
lDest.Pixels[0, ASize.cy-3] := lColor;
|
||||||
ADest.Pixels[1, ASize.cy-2] := lColor;
|
lDest.Pixels[1, ASize.cy-2] := lColor;
|
||||||
ADest.Pixels[2, ASize.cy-1] := lColor;
|
lDest.Pixels[2, ASize.cy-1] := lColor;
|
||||||
ADest.Pixels[ASize.cx-1, ASize.cy-3] := lColor;
|
lDest.Pixels[ASize.cx-1, ASize.cy-3] := lColor;
|
||||||
ADest.Pixels[ASize.cx-2, ASize.cy-2] := lColor;
|
lDest.Pixels[ASize.cx-2, ASize.cy-2] := lColor;
|
||||||
ADest.Pixels[ASize.cx-3, ASize.cy-1] := lColor;
|
lDest.Pixels[ASize.cx-3, ASize.cy-1] := lColor;
|
||||||
|
|
||||||
// Button image
|
// Button image
|
||||||
if csfSunken in AState then
|
if csfSunken in AState then
|
||||||
begin
|
begin
|
||||||
// Top lines
|
// Top lines
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 3, ASize.cx-3, 0, ANDROID_BUTTON_SUNKEN_FIRST_LINE_A, ANDROID_BUTTON_SUNKEN_FIRST_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 3, ASize.cx-3, 0, ANDROID_BUTTON_SUNKEN_FIRST_LINE_A, ANDROID_BUTTON_SUNKEN_FIRST_LINE_B);
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 2, ASize.cx-2, 1, ANDROID_BUTTON_SUNKEN_SECOND_LINE_A, ANDROID_BUTTON_SUNKEN_SECOND_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 2, ASize.cx-2, 1, ANDROID_BUTTON_SUNKEN_SECOND_LINE_A, ANDROID_BUTTON_SUNKEN_SECOND_LINE_B);
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 1, ASize.cx-1, 2, ANDROID_BUTTON_SUNKEN_THIRD_LINE_A, ANDROID_BUTTON_SUNKEN_THIRD_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 1, ASize.cx-1, 2, ANDROID_BUTTON_SUNKEN_THIRD_LINE_A, ANDROID_BUTTON_SUNKEN_THIRD_LINE_B);
|
||||||
|
|
||||||
// The central gradient
|
// The central gradient
|
||||||
lRect := Bounds(0, 3, ASize.cx, (ASize.cy-6) div 3+1);
|
lRect := Bounds(0, 3, ASize.cx, (ASize.cy-6) div 3+1);
|
||||||
DrawAndroidMixedVertGradientFill(ADest, lRect, ANDROID_BUTTON_SUNKEN_TOP_GRADIENT_A,
|
DrawAndroidMixedVertGradientFill(lDest, lRect, ANDROID_BUTTON_SUNKEN_TOP_GRADIENT_A,
|
||||||
ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_A, ANDROID_BUTTON_SUNKEN_TOP_GRADIENT_B, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_B);
|
ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_A, ANDROID_BUTTON_SUNKEN_TOP_GRADIENT_B, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_B);
|
||||||
lRect := Bounds(0, 3+(ASize.cy-6) div 3, ASize.cx, (ASize.cy-6) div 3+1);
|
lRect := Bounds(0, 3+(ASize.cy-6) div 3, ASize.cx, (ASize.cy-6) div 3+1);
|
||||||
DrawAndroidMixedFill(ADest, lRect, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_A, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_B);
|
DrawAndroidMixedFill(lDest, lRect, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_A, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_B);
|
||||||
lRect := Bounds(0, 3+2*(ASize.cy-6) div 3, ASize.cx, (ASize.cy-6) div 3+1);
|
lRect := Bounds(0, 3+2*(ASize.cy-6) div 3, ASize.cx, (ASize.cy-6) div 3+1);
|
||||||
DrawAndroidMixedVertGradientFill(ADest, lRect, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_A,
|
DrawAndroidMixedVertGradientFill(lDest, lRect, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_A,
|
||||||
ANDROID_BUTTON_SUNKEN_BOTTOM_GRADIENT_A, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_B, ANDROID_BUTTON_SUNKEN_BOTTOM_GRADIENT_B);
|
ANDROID_BUTTON_SUNKEN_BOTTOM_GRADIENT_A, ANDROID_BUTTON_SUNKEN_MIDDLE_GRADIENT_B, ANDROID_BUTTON_SUNKEN_BOTTOM_GRADIENT_B);
|
||||||
|
|
||||||
// Bottom lines
|
// Bottom lines
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 1, ASize.cx-1, ASize.cy-3, ANDROID_BUTTON_SUNKEN_PREPRELAST_LINE_A, ANDROID_BUTTON_SUNKEN_PREPRELAST_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 1, ASize.cx-1, ASize.cy-3, ANDROID_BUTTON_SUNKEN_PREPRELAST_LINE_A, ANDROID_BUTTON_SUNKEN_PREPRELAST_LINE_B);
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 2, ASize.cx-2, ASize.cy-2, ANDROID_BUTTON_SUNKEN_PRELAST_LINE_A, ANDROID_BUTTON_SUNKEN_PRELAST_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 2, ASize.cx-2, ASize.cy-2, ANDROID_BUTTON_SUNKEN_PRELAST_LINE_A, ANDROID_BUTTON_SUNKEN_PRELAST_LINE_B);
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 3, ASize.cx-3, ASize.cy-1, ANDROID_BUTTON_SUNKEN_LAST_LINE_A, ANDROID_BUTTON_SUNKEN_LAST_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 3, ASize.cx-3, ASize.cy-1, ANDROID_BUTTON_SUNKEN_LAST_LINE_A, ANDROID_BUTTON_SUNKEN_LAST_LINE_B);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
// Top lines
|
// Top lines
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 3, ASize.cx-3, 0, ANDROID_BUTTON_FIRST_LINE_A, ANDROID_BUTTON_FIRST_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 3, ASize.cx-3, 0, ANDROID_BUTTON_FIRST_LINE_A, ANDROID_BUTTON_FIRST_LINE_B);
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 2, ASize.cx-2, 1, ANDROID_BUTTON_SECOND_LINE_A, ANDROID_BUTTON_SECOND_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 2, ASize.cx-2, 1, ANDROID_BUTTON_SECOND_LINE_A, ANDROID_BUTTON_SECOND_LINE_B);
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 1, ASize.cx-1, 2, ANDROID_BUTTON_THIRD_LINE_A, ANDROID_BUTTON_THIRD_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 1, ASize.cx-1, 2, ANDROID_BUTTON_THIRD_LINE_A, ANDROID_BUTTON_THIRD_LINE_B);
|
||||||
|
|
||||||
// The central gradient
|
// The central gradient
|
||||||
lRect := Bounds(0, 3, ASize.cx, (ASize.cy-6) div 3+1);
|
lRect := Bounds(0, 3, ASize.cx, (ASize.cy-6) div 3+1);
|
||||||
DrawAndroidMixedVertGradientFill(ADest, lRect, ANDROID_BUTTON_TOP_GRADIENT_A,
|
DrawAndroidMixedVertGradientFill(lDest, lRect, ANDROID_BUTTON_TOP_GRADIENT_A,
|
||||||
ANDROID_BUTTON_MIDDLE_GRADIENT_A, ANDROID_BUTTON_TOP_GRADIENT_B, ANDROID_BUTTON_MIDDLE_GRADIENT_B);
|
ANDROID_BUTTON_MIDDLE_GRADIENT_A, ANDROID_BUTTON_TOP_GRADIENT_B, ANDROID_BUTTON_MIDDLE_GRADIENT_B);
|
||||||
lRect := Bounds(0, 3+(ASize.cy-6) div 3, ASize.cx, (ASize.cy-6) div 3+1);
|
lRect := Bounds(0, 3+(ASize.cy-6) div 3, ASize.cx, (ASize.cy-6) div 3+1);
|
||||||
DrawAndroidMixedFill(ADest, lRect, ANDROID_BUTTON_MIDDLE_GRADIENT_A, ANDROID_BUTTON_MIDDLE_GRADIENT_B);
|
DrawAndroidMixedFill(lDest, lRect, ANDROID_BUTTON_MIDDLE_GRADIENT_A, ANDROID_BUTTON_MIDDLE_GRADIENT_B);
|
||||||
lRect := Bounds(0, 3+2*(ASize.cy-6) div 3, ASize.cx, (ASize.cy-6) div 3+1);
|
lRect := Bounds(0, 3+2*(ASize.cy-6) div 3, ASize.cx, (ASize.cy-6) div 3+1);
|
||||||
DrawAndroidMixedVertGradientFill(ADest, lRect, ANDROID_BUTTON_MIDDLE_GRADIENT_A,
|
DrawAndroidMixedVertGradientFill(lDest, lRect, ANDROID_BUTTON_MIDDLE_GRADIENT_A,
|
||||||
ANDROID_BUTTON_BOTTOM_GRADIENT_A, ANDROID_BUTTON_MIDDLE_GRADIENT_B, ANDROID_BUTTON_BOTTOM_GRADIENT_B);
|
ANDROID_BUTTON_BOTTOM_GRADIENT_A, ANDROID_BUTTON_MIDDLE_GRADIENT_B, ANDROID_BUTTON_BOTTOM_GRADIENT_B);
|
||||||
|
|
||||||
// Bottom lines
|
// Bottom lines
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 1, ASize.cx-1, ASize.cy-3, ANDROID_BUTTON_PREPRELAST_LINE_A, ANDROID_BUTTON_PREPRELAST_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 1, ASize.cx-1, ASize.cy-3, ANDROID_BUTTON_PREPRELAST_LINE_A, ANDROID_BUTTON_PREPRELAST_LINE_B);
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 2, ASize.cx-2, ASize.cy-2, ANDROID_BUTTON_PRELAST_LINE_A, ANDROID_BUTTON_PRELAST_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 2, ASize.cx-2, ASize.cy-2, ANDROID_BUTTON_PRELAST_LINE_A, ANDROID_BUTTON_PRELAST_LINE_B);
|
||||||
DrawAndroidAlternatedHorzLine(ADest, 3, ASize.cx-3, ASize.cy-1, ANDROID_BUTTON_LAST_LINE_A, ANDROID_BUTTON_LAST_LINE_B);
|
DrawAndroidAlternatedHorzLine(lDest, 3, ASize.cx-3, ASize.cy-1, ANDROID_BUTTON_LAST_LINE_A, ANDROID_BUTTON_LAST_LINE_B);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if csfHasFocus in AState then
|
if csfHasFocus in AState then
|
||||||
DrawFocusRect(ADest, Point(5, 5), Size(ASize.cx-10, ASize.cy-10));
|
DrawFocusRect(lDest, Point(5, 5), Size(ASize.cx-10, ASize.cy-10));
|
||||||
|
|
||||||
// Position calculations
|
// Position calculations
|
||||||
ADest.Font.Assign(AStateEx.Font);
|
ADest.Font.Assign(AStateEx.Font);
|
||||||
Str := AStateEx.Caption;
|
Str := AStateEx.Caption;
|
||||||
lGlyphCaptionHeight := Max(ADest.TextHeight(Str), AStateEx.Glyph.Height);
|
lGlyphCaptionHeight := Max(lDest.TextHeight(Str), AStateEx.Glyph.Height);
|
||||||
lTextOutPos.X := (ASize.cx - ADest.TextWidth(Str) - AStateEx.Glyph.Width) div 2;
|
lTextOutPos.X := (ASize.cx - lDest.TextWidth(Str) - AStateEx.Glyph.Width) div 2;
|
||||||
lTextOutPos.Y := (ASize.cy - lGlyphCaptionHeight) div 2;
|
lTextOutPos.Y := (ASize.cy - lGlyphCaptionHeight) div 2;
|
||||||
lTextOutPos.X := Max(lTextOutPos.X, 5);
|
lTextOutPos.X := Max(lTextOutPos.X, 5);
|
||||||
lTextOutPos.Y := Max(lTextOutPos.Y, 5);
|
lTextOutPos.Y := Max(lTextOutPos.Y, 5);
|
||||||
@ -411,13 +413,13 @@ begin
|
|||||||
// Button glyph
|
// Button glyph
|
||||||
if not AStateEx.Glyph.Empty then
|
if not AStateEx.Glyph.Empty then
|
||||||
begin
|
begin
|
||||||
ADest.Draw(lTextOutPos.X, lTextOutPos.Y, AStateEx.Glyph);
|
lDest.Draw(lTextOutPos.X, lTextOutPos.Y, AStateEx.Glyph);
|
||||||
lGlyphLeftSpacing := AStateEx.Glyph.Width+5;
|
lGlyphLeftSpacing := AStateEx.Glyph.Width+5;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Button text
|
// Button text
|
||||||
lTextOutPos.X := lTextOutPos.X + lGlyphLeftSpacing;
|
lTextOutPos.X := lTextOutPos.X + lGlyphLeftSpacing;
|
||||||
lTextOutPos.Y := (ASize.cy - ADest.TextHeight(Str)) div 2;
|
lTextOutPos.Y := (ASize.cy - lDest.TextHeight(Str)) div 2;
|
||||||
ADest.Brush.Style := bsClear;
|
ADest.Brush.Style := bsClear;
|
||||||
ADest.Pen.Style := psSolid;
|
ADest.Pen.Style := psSolid;
|
||||||
if csfSunken in AState then
|
if csfSunken in AState then
|
||||||
@ -425,7 +427,7 @@ begin
|
|||||||
Inc(lTextOutPos.X);
|
Inc(lTextOutPos.X);
|
||||||
Inc(lTextOutPos.Y);
|
Inc(lTextOutPos.Y);
|
||||||
end;
|
end;
|
||||||
ADest.TextOut(lTextOutPos.X, lTextOutPos.Y, Str)
|
lDest.TextOut(lTextOutPos.X, lTextOutPos.Y, Str)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCDDrawerAndroid.DrawCheckBoxSquare(ADest: TCanvas; ADestPos: TPoint;
|
procedure TCDDrawerAndroid.DrawCheckBoxSquare(ADest: TCanvas; ADestPos: TPoint;
|
||||||
|
@ -32,7 +32,7 @@ type
|
|||||||
// Standard Tab
|
// Standard Tab
|
||||||
// ===================================
|
// ===================================
|
||||||
// TCDButton
|
// TCDButton
|
||||||
procedure DrawButton(ADest: TCanvas; ASize: TSize;
|
procedure DrawButton(ADest: TFPCustomCanvas; ASize: TSize;
|
||||||
AState: TCDControlState; AStateEx: TCDButtonStateEx); override;
|
AState: TCDControlState; AStateEx: TCDButtonStateEx); override;
|
||||||
// TCDEdit
|
// TCDEdit
|
||||||
procedure DrawEditFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
procedure DrawEditFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
||||||
@ -85,41 +85,43 @@ begin
|
|||||||
ADest.Rectangle(Bounds(ADestPos.X, ADestPos.Y, ASize.cx, ASize.cy));
|
ADest.Rectangle(Bounds(ADestPos.X, ADestPos.Y, ASize.cx, ASize.cy));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCDDrawerWinCE.DrawButton(ADest: TCanvas;
|
procedure TCDDrawerWinCE.DrawButton(ADest: TFPCustomCanvas;
|
||||||
ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx);
|
ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx);
|
||||||
var
|
var
|
||||||
|
lDest: TCanvas absolute ADest;
|
||||||
Str: string;
|
Str: string;
|
||||||
begin
|
begin
|
||||||
|
if not (ADest is TCanvas) then Exit; // ToDo support non-TCanvas
|
||||||
// Button background
|
// Button background
|
||||||
if csfSunken in AState then
|
if csfSunken in AState then
|
||||||
begin
|
begin
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Brush.Style := bsSolid;
|
||||||
ADest.Brush.Color := Palette.BtnShadow;
|
lDest.Brush.Color := Palette.BtnShadow;
|
||||||
ADest.Pen.Color := clBlack;
|
lDest.Pen.Color := clBlack;
|
||||||
ADest.Pen.Style := psSolid;
|
ADest.Pen.Style := psSolid;
|
||||||
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
|
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Brush.Style := bsSolid;
|
||||||
ADest.Brush.Color := AStateEx.RGBColor;
|
lDest.Brush.Color := AStateEx.RGBColor;
|
||||||
ADest.Pen.Color := clBlack;
|
lDest.Pen.Color := clBlack;
|
||||||
ADest.Pen.Style := psSolid;
|
ADest.Pen.Style := psSolid;
|
||||||
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
|
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Focus
|
// Focus
|
||||||
if (csfHasFocus in AState) and not (csfSunken in AState) then
|
if (csfHasFocus in AState) and not (csfSunken in AState) then
|
||||||
DrawFocusRect(ADest, Point(4, 4), Size(ASize.cx-8, ASize.cy-8));
|
DrawFocusRect(lDest, Point(4, 4), Size(ASize.cx-8, ASize.cy-8));
|
||||||
|
|
||||||
// Button text
|
// Button text
|
||||||
ADest.Font.Assign(AStateEx.Font);
|
ADest.Font.Assign(AStateEx.Font);
|
||||||
ADest.Brush.Style := bsClear;
|
ADest.Brush.Style := bsClear;
|
||||||
ADest.Pen.Style := psSolid;
|
ADest.Pen.Style := psSolid;
|
||||||
if csfSunken in AState then ADest.Font.Color := clWhite;
|
if csfSunken in AState then lDest.Font.Color := clWhite;
|
||||||
Str := AStateEx.Caption;
|
Str := AStateEx.Caption;
|
||||||
ADest.TextOut((ASize.cx - ADest.TextWidth(Str)) div 2,
|
lDest.TextOut((ASize.cx - lDest.TextWidth(Str)) div 2,
|
||||||
(ASize.cy - ADest.TextHeight(Str)) div 2, Str);
|
(ASize.cy - lDest.TextHeight(Str)) div 2, Str);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCDDrawerWinCE.DrawEditFrame(ADest: TCanvas; ADestPos: TPoint;
|
procedure TCDDrawerWinCE.DrawEditFrame(ADest: TCanvas; ADestPos: TPoint;
|
||||||
|
@ -6,7 +6,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
// RTL
|
// RTL
|
||||||
Classes, SysUtils, Types,
|
Classes, SysUtils, Types, fpcanvas, fpimage,
|
||||||
// LCL -> Use only TForm, TWinControl, TCanvas and TLazIntfImage
|
// LCL -> Use only TForm, TWinControl, TCanvas and TLazIntfImage
|
||||||
Graphics, Controls, LCLType,
|
Graphics, Controls, LCLType,
|
||||||
//
|
//
|
||||||
@ -38,7 +38,7 @@ type
|
|||||||
// Standard Tab
|
// Standard Tab
|
||||||
// ===================================
|
// ===================================
|
||||||
// TCDButton
|
// TCDButton
|
||||||
procedure DrawButton(ADest: TCanvas; ASize: TSize;
|
procedure DrawButton(ADest: TFPCustomCanvas; ASize: TSize;
|
||||||
AState: TCDControlState; AStateEx: TCDButtonStateEx); override;
|
AState: TCDControlState; AStateEx: TCDButtonStateEx); override;
|
||||||
// TCDEdit
|
// TCDEdit
|
||||||
procedure DrawEditFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
procedure DrawEditFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
||||||
@ -152,9 +152,10 @@ begin
|
|||||||
ADest.Line(ADestPos.X+i, ADestPos.Y+4-i, ADestPos.X+i, ADestPos.Y+3+4-i);
|
ADest.Line(ADestPos.X+i, ADestPos.Y+4-i, ADestPos.X+i, ADestPos.Y+3+4-i);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCDDrawerWinXP.DrawButton(ADest: TCanvas;
|
procedure TCDDrawerWinXP.DrawButton(ADest: TFPCustomCanvas;
|
||||||
ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx);
|
ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx);
|
||||||
var
|
var
|
||||||
|
lDest: TCanvas absolute ADest;
|
||||||
Str: string;
|
Str: string;
|
||||||
lColor: TColor;
|
lColor: TColor;
|
||||||
lRect: TRect;
|
lRect: TRect;
|
||||||
@ -163,39 +164,39 @@ var
|
|||||||
begin
|
begin
|
||||||
// Background corners
|
// Background corners
|
||||||
lColor := AStateEx.ParentRGBColor;
|
lColor := AStateEx.ParentRGBColor;
|
||||||
ADest.Pixels[0, 0] := lColor;
|
lDest.Pixels[0, 0] := lColor;
|
||||||
ADest.Pixels[ASize.cx-1, 0] := lColor;
|
lDest.Pixels[ASize.cx-1, 0] := lColor;
|
||||||
ADest.Pixels[0, ASize.cy-1] := lColor;
|
lDest.Pixels[0, ASize.cy-1] := lColor;
|
||||||
ADest.Pixels[ASize.cx-1, ASize.cy-1] := lColor;
|
lDest.Pixels[ASize.cx-1, ASize.cy-1] := lColor;
|
||||||
|
|
||||||
// Main body
|
// Main body
|
||||||
if csfSunken in AState then
|
if csfSunken in AState then
|
||||||
begin
|
begin
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Brush.Style := bsSolid;
|
||||||
ADest.Brush.Color := WINXP_BUTTON_SUNKEN_BODY_BOTTOM;
|
lDest.Brush.Color := WINXP_BUTTON_SUNKEN_BODY_BOTTOM;
|
||||||
ADest.Pen.Color := WINXP_BUTTON_SUNKEN_BODY_BOTTOM;
|
lDest.Pen.Color := WINXP_BUTTON_SUNKEN_BODY_BOTTOM;
|
||||||
ADest.Rectangle(1, 1, ASize.cx-1, ASize.cy-1);
|
ADest.Rectangle(1, 1, ASize.cx-1, ASize.cy-1);
|
||||||
end
|
end
|
||||||
else if csfEnabled in AState then
|
else if csfEnabled in AState then
|
||||||
begin
|
begin
|
||||||
// First the gradient
|
// First the gradient
|
||||||
lRect := Bounds(1, 1, ASize.cx-4, ASize.cy-5);
|
lRect := Bounds(1, 1, ASize.cx-4, ASize.cy-5);
|
||||||
ADest.GradientFill(lRect, WINXP_BUTTON_BODY_TOP, WINXP_BUTTON_BODY_BOTTOM, gdVertical);
|
lDest.GradientFill(lRect, WINXP_BUTTON_BODY_TOP, WINXP_BUTTON_BODY_BOTTOM, gdVertical);
|
||||||
// Now the extra lines which make the bottom-right
|
// Now the extra lines which make the bottom-right
|
||||||
ADest.Pen.Color := WINXP_BUTTON_BODY_LINES_PREPRELAST;
|
lDest.Pen.Color := WINXP_BUTTON_BODY_LINES_PREPRELAST;
|
||||||
ADest.Line(1, ASize.cy-4, ASize.cx-3, ASize.cy-4);
|
ADest.Line(1, ASize.cy-4, ASize.cx-3, ASize.cy-4);
|
||||||
ADest.Line(ASize.cx-3, ASize.cy-4, ASize.cx-3, 1);
|
ADest.Line(ASize.cx-3, ASize.cy-4, ASize.cx-3, 1);
|
||||||
ADest.Pen.Color := WINXP_BUTTON_BODY_LINES_PRELAST;
|
lDest.Pen.Color := WINXP_BUTTON_BODY_LINES_PRELAST;
|
||||||
ADest.Line(2, ASize.cy-3, ASize.cx-2, ASize.cy-3);
|
ADest.Line(2, ASize.cy-3, ASize.cx-2, ASize.cy-3);
|
||||||
ADest.Line(ASize.cx-2, ASize.cy-3, ASize.cx-2, 2);
|
ADest.Line(ASize.cx-2, ASize.cy-3, ASize.cx-2, 2);
|
||||||
ADest.Pen.Color := WINXP_BUTTON_BODY_LINES_LAST;
|
lDest.Pen.Color := WINXP_BUTTON_BODY_LINES_LAST;
|
||||||
ADest.Line(3, ASize.cy-1, ASize.cx-3, ASize.cy-1);
|
ADest.Line(3, ASize.cy-1, ASize.cx-3, ASize.cy-1);
|
||||||
end
|
end
|
||||||
else // disabled
|
else // disabled
|
||||||
begin
|
begin
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Brush.Style := bsSolid;
|
||||||
ADest.Brush.Color := WINXP_BUTTON_DISABLED_BODY;
|
lDest.Brush.Color := WINXP_BUTTON_DISABLED_BODY;
|
||||||
ADest.Pen.Color := WINXP_BUTTON_DISABLED_BODY;
|
lDest.Pen.Color := WINXP_BUTTON_DISABLED_BODY;
|
||||||
ADest.Rectangle(1, 1, ASize.cx-1, ASize.cy-1);
|
ADest.Rectangle(1, 1, ASize.cx-1, ASize.cy-1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -215,35 +216,35 @@ begin
|
|||||||
lFrameLight := WINXP_BUTTON_FRAME_LIGHT_DISABLED;
|
lFrameLight := WINXP_BUTTON_FRAME_LIGHT_DISABLED;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
ADest.Pixels[1, 0] := lFrameMedium;
|
lDest.Pixels[1, 0] := lFrameMedium;
|
||||||
ADest.Pixels[0, 1] := lFrameMedium;
|
lDest.Pixels[0, 1] := lFrameMedium;
|
||||||
ADest.Pixels[1, 1] := lFrameMedDark;
|
lDest.Pixels[1, 1] := lFrameMedDark;
|
||||||
ADest.Pixels[2, 1] := lFrameLight;
|
lDest.Pixels[2, 1] := lFrameLight;
|
||||||
ADest.Pixels[1, 2] := lFrameLight;
|
lDest.Pixels[1, 2] := lFrameLight;
|
||||||
|
|
||||||
ADest.Pixels[ASize.cx-2, 0] := lFrameMedium;
|
lDest.Pixels[ASize.cx-2, 0] := lFrameMedium;
|
||||||
ADest.Pixels[ASize.cx-1, 1] := lFrameMedium;
|
lDest.Pixels[ASize.cx-1, 1] := lFrameMedium;
|
||||||
ADest.Pixels[ASize.cx-2, 1] := lFrameMedDark;
|
lDest.Pixels[ASize.cx-2, 1] := lFrameMedDark;
|
||||||
ADest.Pixels[ASize.cx-3, 1] := lFrameLight;
|
lDest.Pixels[ASize.cx-3, 1] := lFrameLight;
|
||||||
ADest.Pixels[ASize.cx-2, 2] := lFrameLight;
|
lDest.Pixels[ASize.cx-2, 2] := lFrameLight;
|
||||||
|
|
||||||
ADest.Pixels[1, ASize.cy-1] := lFrameMedium;
|
lDest.Pixels[1, ASize.cy-1] := lFrameMedium;
|
||||||
ADest.Pixels[0, ASize.cy-2] := lFrameMedium;
|
lDest.Pixels[0, ASize.cy-2] := lFrameMedium;
|
||||||
ADest.Pixels[1, ASize.cy-2] := lFrameMedDark;
|
lDest.Pixels[1, ASize.cy-2] := lFrameMedDark;
|
||||||
ADest.Pixels[2, ASize.cy-2] := lFrameLight;
|
lDest.Pixels[2, ASize.cy-2] := lFrameLight;
|
||||||
ADest.Pixels[1, ASize.cy-3] := lFrameLight;
|
lDest.Pixels[1, ASize.cy-3] := lFrameLight;
|
||||||
|
|
||||||
ADest.Pixels[ASize.cx-2, ASize.cy-1] := lFrameMedium;
|
lDest.Pixels[ASize.cx-2, ASize.cy-1] := lFrameMedium;
|
||||||
ADest.Pixels[ASize.cx-1, ASize.cy-2] := lFrameMedium;
|
lDest.Pixels[ASize.cx-1, ASize.cy-2] := lFrameMedium;
|
||||||
ADest.Pixels[ASize.cx-2, ASize.cy-2] := lFrameMedDark;
|
lDest.Pixels[ASize.cx-2, ASize.cy-2] := lFrameMedDark;
|
||||||
ADest.Pixels[ASize.cx-3, ASize.cy-2] := lFrameLight;
|
lDest.Pixels[ASize.cx-3, ASize.cy-2] := lFrameLight;
|
||||||
ADest.Pixels[ASize.cx-2, ASize.cy-3] := lFrameLight;
|
lDest.Pixels[ASize.cx-2, ASize.cy-3] := lFrameLight;
|
||||||
|
|
||||||
ADest.Pen.Color := lFrameDark;
|
lDest.Pen.Color := lFrameDark;
|
||||||
ADest.Line(2, 0, ASize.cx-2, 0);
|
lDest.Line(2, 0, ASize.cx-2, 0);
|
||||||
ADest.Line(2, ASize.cy-1, ASize.cx-2, ASize.cy-1);
|
lDest.Line(2, ASize.cy-1, ASize.cx-2, ASize.cy-1);
|
||||||
ADest.Line(0, 2, 0, ASize.cy-2);
|
lDest.Line(0, 2, 0, ASize.cy-2);
|
||||||
ADest.Line(ASize.cx-1, 2, ASize.cx-1, ASize.cy-2);
|
lDest.Line(ASize.cx-1, 2, ASize.cx-1, ASize.cy-2);
|
||||||
|
|
||||||
// Now focus / mouseover indication, note that both disappear when sunked in WinXP
|
// Now focus / mouseover indication, note that both disappear when sunked in WinXP
|
||||||
if ((csfHasFocus in AState) or (csfMouseOver in AState)) and not (csfSunken in AState) then
|
if ((csfHasFocus in AState) or (csfMouseOver in AState)) and not (csfSunken in AState) then
|
||||||
@ -264,19 +265,19 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// Top
|
// Top
|
||||||
ADest.Pen.Color := lSelTop;
|
lDest.Pen.Color := lSelTop;
|
||||||
ADest.Line(2, 1, ASize.cx-2, 1);
|
ADest.Line(2, 1, ASize.cx-2, 1);
|
||||||
ADest.Pen.Color := lSelTopGrad;
|
lDest.Pen.Color := lSelTopGrad;
|
||||||
ADest.Line(1, 2, ASize.cx-1, 2);
|
ADest.Line(1, 2, ASize.cx-1, 2);
|
||||||
// Gradient
|
// Gradient
|
||||||
lRect := Bounds(1, 2, 2, ASize.cy-4);
|
lRect := Bounds(1, 2, 2, ASize.cy-4);
|
||||||
ADest.GradientFill(lRect, lSelTopGrad, lSelBottomGrad, gdVertical);
|
lDest.GradientFill(lRect, lSelTopGrad, lSelBottomGrad, gdVertical);
|
||||||
lRect := Bounds(ASize.cx-3, 2, 2, ASize.cy-4);
|
lRect := Bounds(ASize.cx-3, 2, 2, ASize.cy-4);
|
||||||
ADest.GradientFill(lRect, lSelTopGrad, lSelBottomGrad, gdVertical);
|
lDest.GradientFill(lRect, lSelTopGrad, lSelBottomGrad, gdVertical);
|
||||||
// Bottom
|
// Bottom
|
||||||
ADest.Pen.Color := lSelBottomGrad;
|
lDest.Pen.Color := lSelBottomGrad;
|
||||||
ADest.Line(1, ASize.cy-3, ASize.cx-1, ASize.cy-3);
|
ADest.Line(1, ASize.cy-3, ASize.cx-1, ASize.cy-3);
|
||||||
ADest.Pen.Color := lSelBottom;
|
lDest.Pen.Color := lSelBottom;
|
||||||
ADest.Line(2, ASize.cy-2, ASize.cx-2, ASize.cy-2);
|
ADest.Line(2, ASize.cy-2, ASize.cx-2, ASize.cy-2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -285,8 +286,8 @@ begin
|
|||||||
ADest.Brush.Style := bsClear;
|
ADest.Brush.Style := bsClear;
|
||||||
ADest.Pen.Style := psSolid;
|
ADest.Pen.Style := psSolid;
|
||||||
Str := AStateEx.Caption;
|
Str := AStateEx.Caption;
|
||||||
ADest.TextOut((ASize.cx - ADest.TextWidth(Str)) div 2,
|
lDest.TextOut((ASize.cx - lDest.TextWidth(Str)) div 2,
|
||||||
(ASize.cy - ADest.TextHeight(Str)) div 2, Str);
|
(ASize.cy - lDest.TextHeight(Str)) div 2, Str);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCDDrawerWinXP.DrawEditFrame(ADest: TCanvas; ADestPos: TPoint;
|
procedure TCDDrawerWinXP.DrawEditFrame(ADest: TCanvas; ADestPos: TPoint;
|
||||||
|
@ -6,7 +6,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
// RTL / FCL
|
// RTL / FCL
|
||||||
Classes, SysUtils, Types, Math, fpcanvas,
|
Classes, SysUtils, Types, Math, fpcanvas, fpimage,
|
||||||
// LazUtils
|
// LazUtils
|
||||||
lazutf8,
|
lazutf8,
|
||||||
// LCL -> Use only TForm, TWinControl, TCanvas and TLazIntfImage
|
// LCL -> Use only TForm, TWinControl, TCanvas and TLazIntfImage
|
||||||
@ -55,7 +55,7 @@ type
|
|||||||
// Standard Tab
|
// Standard Tab
|
||||||
// ===================================
|
// ===================================
|
||||||
// TCDButton
|
// TCDButton
|
||||||
procedure DrawButton(ADest: TCanvas; ASize: TSize;
|
procedure DrawButton(ADest: TFPCustomCanvas; ASize: TSize;
|
||||||
AState: TCDControlState; AStateEx: TCDButtonStateEx); override;
|
AState: TCDControlState; AStateEx: TCDButtonStateEx); override;
|
||||||
// TCDEdit
|
// TCDEdit
|
||||||
procedure DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
procedure DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
||||||
@ -638,7 +638,7 @@ begin
|
|||||||
ADest.FillRect(0, 0, ASize.cx, ASize.cy);
|
ADest.FillRect(0, 0, ASize.cx, ASize.cy);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCDDrawerCommon.DrawButton(ADest: TCanvas;
|
procedure TCDDrawerCommon.DrawButton(ADest: TFPCustomCanvas;
|
||||||
ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx);
|
ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx);
|
||||||
var
|
var
|
||||||
Str: string;
|
Str: string;
|
||||||
@ -648,20 +648,20 @@ var
|
|||||||
begin
|
begin
|
||||||
// background
|
// background
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Brush.Style := bsSolid;
|
||||||
ADest.Brush.Color := AStateEx.RGBColor;
|
ADest.Brush.FPColor := AStateEx.FPRGBColor;
|
||||||
ADest.Pen.Color := clWhite;
|
ADest.Pen.FPColor := colWhite;
|
||||||
ADest.Pen.Style := psSolid;
|
ADest.Pen.Style := psSolid;
|
||||||
ADest.Rectangle(0, 0, ASize.cx - 1, ASize.cy - 1);
|
ADest.Rectangle(0, 0, ASize.cx - 1, ASize.cy - 1);
|
||||||
ADest.Pen.Color := clWhite;
|
ADest.Pen.FPColor := colWhite;
|
||||||
ADest.Line(0, 0, ASize.cx - 1, 0);
|
ADest.Line(0, 0, ASize.cx - 1, 0);
|
||||||
ADest.Line(0, 0, 0, ASize.cy - 1);
|
ADest.Line(0, 0, 0, ASize.cy - 1);
|
||||||
ADest.Pen.Color := clGray;
|
ADest.Pen.FPColor := colGray;
|
||||||
ADest.Line(0, ASize.cy - 1, ASize.cx - 1, ASize.cy - 1);
|
ADest.Line(0, ASize.cy - 1, ASize.cx - 1, ASize.cy - 1);
|
||||||
ADest.Line(ASize.cx - 1, ASize.cy - 1, ASize.cx - 1, -1);
|
ADest.Line(ASize.cx - 1, ASize.cy - 1, ASize.cx - 1, -1);
|
||||||
ADest.Pen.Color := $0099A8AC;
|
ADest.Pen.FPColor := TColorToFPColor($0099A8AC);
|
||||||
ADest.Line(1, ASize.cy - 2, ASize.cx - 2, ASize.cy - 2);
|
ADest.Line(1, ASize.cy - 2, ASize.cx - 2, ASize.cy - 2);
|
||||||
ADest.Line(ASize.cx - 2, ASize.cx - 2, ASize.cx - 2, 0);
|
ADest.Line(ASize.cx - 2, ASize.cx - 2, ASize.cx - 2, 0);
|
||||||
ADest.Pen.Color := $00E2EFF1;
|
ADest.Pen.FPColor := TColorToFPColor($00E2EFF1);
|
||||||
ADest.Line(1, 1, ASize.cx - 2, 1);
|
ADest.Line(1, 1, ASize.cx - 2, 1);
|
||||||
ADest.Line(1, 1, 1, ASize.cy - 2);
|
ADest.Line(1, 1, 1, ASize.cy - 2);
|
||||||
|
|
||||||
@ -669,33 +669,36 @@ begin
|
|||||||
if csfSunken in AState then
|
if csfSunken in AState then
|
||||||
begin
|
begin
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Brush.Style := bsSolid;
|
||||||
ADest.Brush.Color := AStateEx.RGBColor;
|
ADest.Brush.FPColor := AStateEx.FPRGBColor;
|
||||||
ADest.Pen.Color := clWhite;
|
ADest.Pen.FPColor := colWhite;
|
||||||
ADest.Pen.Style := psSolid;
|
ADest.Pen.Style := psSolid;
|
||||||
ADest.Rectangle(0, 0, ASize.cx - 1, ASize.cy - 1);
|
ADest.Rectangle(0, 0, ASize.cx - 1, ASize.cy - 1);
|
||||||
ADest.Pen.Color := clGray;
|
ADest.Pen.FPColor := colGray;
|
||||||
ADest.Line(0, 0, ASize.cx - 1, 0);
|
ADest.Line(0, 0, ASize.cx - 1, 0);
|
||||||
ADest.Line(0, 0, 0, ASize.cy - 1);
|
ADest.Line(0, 0, 0, ASize.cy - 1);
|
||||||
ADest.Pen.Color := clWhite;
|
ADest.Pen.FPColor := colWhite;
|
||||||
ADest.Line(0, ASize.cy - 1, ASize.cx - 1, ASize.cy - 1);
|
ADest.Line(0, ASize.cy - 1, ASize.cx - 1, ASize.cy - 1);
|
||||||
ADest.Line(ASize.cx - 1, ASize.cy - 1, ASize.cx - 1, -1);
|
ADest.Line(ASize.cx - 1, ASize.cy - 1, ASize.cx - 1, -1);
|
||||||
ADest.Pen.Color := $00E2EFF1;
|
ADest.Pen.FPColor := TColorToFPColor($00E2EFF1);
|
||||||
ADest.Line(1, ASize.cy - 2, ASize.cx - 2, ASize.cy - 2);
|
ADest.Line(1, ASize.cy - 2, ASize.cx - 2, ASize.cy - 2);
|
||||||
ADest.Line(ASize.cx - 2, ASize.cy - 2, ASize.cx - 2, 0);
|
ADest.Line(ASize.cx - 2, ASize.cy - 2, ASize.cx - 2, 0);
|
||||||
ADest.Pen.Color := $0099A8AC;
|
ADest.Pen.FPColor := TColorToFPColor($0099A8AC);
|
||||||
ADest.Line(1, 1, ASize.cx - 2, 1);
|
ADest.Line(1, 1, ASize.cx - 2, 1);
|
||||||
ADest.Line(1, 1, 1, ASize.cy - 2);
|
ADest.Line(1, 1, 1, ASize.cy - 2);
|
||||||
end
|
end
|
||||||
else if csfHasFocus in AState then
|
else if csfHasFocus in AState then
|
||||||
begin
|
begin
|
||||||
DrawFocusRect(ADest, Point(3, 3), Size(ASize.cx - 7, ASize.cy - 7));
|
if ADest is TCanvas then
|
||||||
|
DrawFocusRect(TCanvas(ADest), Point(3, 3), Size(ASize.cx - 7, ASize.cy - 7));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Position calculations
|
// Position calculations
|
||||||
|
if ADest is TCanvas then
|
||||||
|
begin
|
||||||
ADest.Font.Assign(AStateEx.Font);
|
ADest.Font.Assign(AStateEx.Font);
|
||||||
Str := AStateEx.Caption;
|
Str := AStateEx.Caption;
|
||||||
lGlyphCaptionHeight := Max(ADest.TextHeight(Str), AStateEx.Glyph.Height);
|
lGlyphCaptionHeight := Max(TCanvas(ADest).TextHeight(Str), AStateEx.Glyph.Height);
|
||||||
lTextOutPos.X := (ASize.cx - ADest.TextWidth(Str) - AStateEx.Glyph.Width) div 2;
|
lTextOutPos.X := (ASize.cx - TCanvas(ADest).TextWidth(Str) - AStateEx.Glyph.Width) div 2;
|
||||||
lTextOutPos.Y := (ASize.cy - lGlyphCaptionHeight) div 2;
|
lTextOutPos.Y := (ASize.cy - lGlyphCaptionHeight) div 2;
|
||||||
lTextOutPos.X := Max(lTextOutPos.X, 5);
|
lTextOutPos.X := Max(lTextOutPos.X, 5);
|
||||||
lTextOutPos.Y := Max(lTextOutPos.Y, 5);
|
lTextOutPos.Y := Max(lTextOutPos.Y, 5);
|
||||||
@ -703,13 +706,13 @@ begin
|
|||||||
// Button glyph
|
// Button glyph
|
||||||
if not AStateEx.Glyph.Empty then
|
if not AStateEx.Glyph.Empty then
|
||||||
begin
|
begin
|
||||||
ADest.Draw(lTextOutPos.X, lTextOutPos.Y, AStateEx.Glyph);
|
TCanvas(ADest).Draw(lTextOutPos.X, lTextOutPos.Y, AStateEx.Glyph);
|
||||||
lGlyphLeftSpacing := AStateEx.Glyph.Width+5;
|
lGlyphLeftSpacing := AStateEx.Glyph.Width+5;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Button text
|
// Button text
|
||||||
lTextOutPos.X := lTextOutPos.X + lGlyphLeftSpacing;
|
lTextOutPos.X := lTextOutPos.X + lGlyphLeftSpacing;
|
||||||
lTextOutPos.Y := (ASize.cy - ADest.TextHeight(Str)) div 2;
|
lTextOutPos.Y := (ASize.cy - TCanvas(ADest).TextHeight(Str)) div 2;
|
||||||
ADest.Brush.Style := bsClear;
|
ADest.Brush.Style := bsClear;
|
||||||
ADest.Pen.Style := psSolid;
|
ADest.Pen.Style := psSolid;
|
||||||
if csfEnabled in AState then
|
if csfEnabled in AState then
|
||||||
@ -724,16 +727,17 @@ begin
|
|||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
// The disabled text is composed by a white shadow under it and a grey text
|
// The disabled text is composed by a white shadow under it and a grey text
|
||||||
ADest.Font.Color := clWhite;
|
TCanvas(ADest).Font.Color := clWhite;
|
||||||
Inc(lTextOutPos.X);
|
Inc(lTextOutPos.X);
|
||||||
Inc(lTextOutPos.Y);
|
Inc(lTextOutPos.Y);
|
||||||
ADest.TextOut(lTextOutPos.X, lTextOutPos.Y, Str);
|
TCanvas(ADest).TextOut(lTextOutPos.X, lTextOutPos.Y, Str);
|
||||||
//
|
//
|
||||||
ADest.Font.Color := WIN2000_DISABLED_TEXT;
|
TCanvas(ADest).Font.Color := WIN2000_DISABLED_TEXT;
|
||||||
Dec(lTextOutPos.X);
|
Dec(lTextOutPos.X);
|
||||||
Dec(lTextOutPos.Y);
|
Dec(lTextOutPos.Y);
|
||||||
ADest.TextOut(lTextOutPos.X, lTextOutPos.Y, Str);
|
ADest.TextOut(lTextOutPos.X, lTextOutPos.Y, Str);
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCDDrawerCommon.DrawEditBackground(ADest: TCanvas;
|
procedure TCDDrawerCommon.DrawEditBackground(ADest: TCanvas;
|
||||||
@ -1175,10 +1179,10 @@ begin
|
|||||||
if FCaptionMiddle = 0 then FCaptionMiddle := 5;
|
if FCaptionMiddle = 0 then FCaptionMiddle := 5;
|
||||||
|
|
||||||
// Background
|
// Background
|
||||||
ADest.Brush.FPColor := TColorToFPColor(AStateEx.ParentRGBColor);
|
ADest.Brush.FPColor := AStateEx.FPParentRGBColor;
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Brush.Style := bsSolid;
|
||||||
ADest.Pen.Style := psSolid;
|
ADest.Pen.Style := psSolid;
|
||||||
ADest.Pen.FPColor := TColorToFPColor(AStateEx.ParentRGBColor);
|
ADest.Pen.FPColor := AStateEx.FPParentRGBColor;
|
||||||
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
|
ADest.Rectangle(0, 0, ASize.cx, ASize.cy);
|
||||||
|
|
||||||
// frame
|
// frame
|
||||||
@ -1201,7 +1205,7 @@ begin
|
|||||||
|
|
||||||
// fill the text background
|
// fill the text background
|
||||||
ADest.Brush.Style := bsSolid;
|
ADest.Brush.Style := bsSolid;
|
||||||
ADest.Brush.FPColor := TColorToFPColor(AStateEx.ParentRGBColor);
|
ADest.Brush.FPColor := AStateEx.FPParentRGBColor;
|
||||||
ADest.Pen.Style := psClear;
|
ADest.Pen.Style := psClear;
|
||||||
ADest.Rectangle(Bounds(FCaptionMiddle, 0, lTextSize.cx+5, lTextSize.cy));
|
ADest.Rectangle(Bounds(FCaptionMiddle, 0, lTextSize.cx+5, lTextSize.cy));
|
||||||
|
|
||||||
|
@ -810,9 +810,11 @@ procedure TCDControl.PrepareControlStateEx;
|
|||||||
begin
|
begin
|
||||||
if Parent <> nil then FStateEx.ParentRGBColor := Parent.GetRGBColorResolvingParent
|
if Parent <> nil then FStateEx.ParentRGBColor := Parent.GetRGBColorResolvingParent
|
||||||
else FStateEx.ParentRGBColor := clSilver;
|
else FStateEx.ParentRGBColor := clSilver;
|
||||||
|
FStateEx.FPParentRGBColor := TColorToFPColor(FStateEx.ParentRGBColor);
|
||||||
|
|
||||||
if Color = clDefault then FStateEx.RGBColor := FDrawer.GetControlDefaultColor(GetControlId())
|
if Color = clDefault then FStateEx.RGBColor := FDrawer.GetControlDefaultColor(GetControlId())
|
||||||
else FStateEx.RGBColor := GetRGBColorResolvingParent;
|
else FStateEx.RGBColor := GetRGBColorResolvingParent;
|
||||||
|
FStateEx.FPRGBColor := TColorToFPColor(FStateEx.RGBColor);
|
||||||
|
|
||||||
FStateEx.Caption := Caption;
|
FStateEx.Caption := Caption;
|
||||||
FStateEx.Font := Font;
|
FStateEx.Font := Font;
|
||||||
|
@ -5,7 +5,7 @@ unit customdrawndrawers;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, Types, fpcanvas,
|
Classes, SysUtils, Types, fpcanvas, fpimage,
|
||||||
// LCL for types
|
// LCL for types
|
||||||
Controls, Graphics, ComCtrls, ExtCtrls;
|
Controls, Graphics, ComCtrls, ExtCtrls;
|
||||||
|
|
||||||
@ -129,7 +129,9 @@ type
|
|||||||
TCDControlStateEx = class
|
TCDControlStateEx = class
|
||||||
public
|
public
|
||||||
ParentRGBColor: TColor;
|
ParentRGBColor: TColor;
|
||||||
|
FPParentRGBColor: TFPColor;
|
||||||
RGBColor: TColor;
|
RGBColor: TColor;
|
||||||
|
FPRGBColor: TFPColor;
|
||||||
Caption: string;
|
Caption: string;
|
||||||
Font: TFont; // Just a reference, never Free
|
Font: TFont; // Just a reference, never Free
|
||||||
AutoSize: Boolean;
|
AutoSize: Boolean;
|
||||||
@ -312,7 +314,7 @@ type
|
|||||||
procedure DrawControl(ADest: TCanvas; ASize: TSize;
|
procedure DrawControl(ADest: TCanvas; ASize: TSize;
|
||||||
AState: TCDControlState; AStateEx: TCDControlStateEx); virtual; abstract;
|
AState: TCDControlState; AStateEx: TCDControlStateEx); virtual; abstract;
|
||||||
// TCDButton
|
// TCDButton
|
||||||
procedure DrawButton(ADest: TCanvas; ASize: TSize;
|
procedure DrawButton(ADest: TFPCustomCanvas; ASize: TSize;
|
||||||
AState: TCDControlState; AStateEx: TCDButtonStateEx); virtual; abstract;
|
AState: TCDControlState; AStateEx: TCDButtonStateEx); virtual; abstract;
|
||||||
// TCDEdit
|
// TCDEdit
|
||||||
procedure DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
procedure DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
||||||
|
@ -1146,6 +1146,8 @@ function TCDWidgetSet.DrawFrameControl(DC: HDC; const Rect: TRect; uType,
|
|||||||
var
|
var
|
||||||
LazDC: TLazCanvas absolute DC;
|
LazDC: TLazCanvas absolute DC;
|
||||||
lControlStateEx: TCDControlStateEx;
|
lControlStateEx: TCDControlStateEx;
|
||||||
|
lState: TCDControlState;
|
||||||
|
lSize: TSize;
|
||||||
begin
|
begin
|
||||||
Result := False;
|
Result := False;
|
||||||
|
|
||||||
@ -1160,44 +1162,50 @@ begin
|
|||||||
case uType of
|
case uType of
|
||||||
DFC_BUTTON:
|
DFC_BUTTON:
|
||||||
begin
|
begin
|
||||||
|
lSize := Types.Size(Rect.Right-Rect.Left, Rect.Bottom-Rect.Top);
|
||||||
|
|
||||||
|
if (DFCS_BUTTONPUSH and uState) <> 0 then
|
||||||
|
lControlStateEx := TCDButtonStateEx.Create
|
||||||
|
else
|
||||||
lControlStateEx := TCDControlStateEx.Create;
|
lControlStateEx := TCDControlStateEx.Create;
|
||||||
|
|
||||||
try
|
try
|
||||||
lControlStateEx.Font := TFont.Create;
|
lControlStateEx.Font := TFont.Create;
|
||||||
{if uState and DFCS_FLAT <> 0 then
|
lControlStateEx.ParentRGBColor := clSilver;
|
||||||
Features := QStyleOptionButtonFlat
|
lControlStateEx.FPParentRGBColor := colSilver;
|
||||||
else
|
lControlStateEx.RGBColor := GetDefaultDrawer().FallbackPalette.BtnFace;
|
||||||
Features := QStyleOptionButtonNone;
|
lControlStateEx.FPRGBColor := TColorToFPColor(lControlStateEx.RGBColor);
|
||||||
if (uState and $1F) in [DFCS_BUTTONCHECK, DFCS_BUTTON3STATE] then
|
|
||||||
Element := QStyleCE_CheckBox
|
|
||||||
else
|
|
||||||
if (DFCS_BUTTONRADIO and uState) <> 0 then
|
|
||||||
Element := QStyleCE_RadioButton
|
|
||||||
else
|
|
||||||
if (DFCS_BUTTONPUSH and uState) <> 0 then
|
|
||||||
Element := QStyleCE_PushButton
|
|
||||||
else
|
|
||||||
if (DFCS_BUTTONRADIOIMAGE and uState) <> 0 then
|
|
||||||
Element := QStyleCE_RadioButton
|
|
||||||
//TODO: what to implement here ?
|
|
||||||
else
|
|
||||||
if (DFCS_BUTTONRADIOMASK and uState) <> 0 then
|
|
||||||
Element := QStyleCE_RadioButton
|
|
||||||
//TODO: what to implement here ?
|
|
||||||
;}
|
|
||||||
{Opt := QStyleOptionButton_create();
|
|
||||||
QStyleOptionButton_setFeatures(Opt, Features);
|
|
||||||
QStyleOption_setRect(Opt, @Rect);
|
|
||||||
QStyleOption_setState(Opt, State);
|
|
||||||
QStyle_drawControl(QApplication_style(), Element, Opt, Painter, Widget);
|
|
||||||
QStyleOptionButton_destroy(Opt);}
|
|
||||||
|
|
||||||
//GetDefaultDrawer().DrawButton();
|
//if uState and DFCS_FLAT <> 0 then lState := [csfEnabled];
|
||||||
|
if uState and DFCS_INACTIVE = 0 then lState := lState + [csfEnabled];
|
||||||
|
if uState and DFCS_PUSHED <> 0 then lState := lState + [csfSunken];
|
||||||
|
|
||||||
|
if (uState and $1F) in [DFCS_BUTTONCHECK, DFCS_BUTTON3STATE] then
|
||||||
|
begin
|
||||||
|
//Element := QStyleCE_CheckBox
|
||||||
|
end
|
||||||
|
else if (DFCS_BUTTONRADIO and uState) <> 0 then
|
||||||
|
begin
|
||||||
|
//Element := QStyleCE_RadioButton
|
||||||
|
end
|
||||||
|
else if (DFCS_BUTTONPUSH and uState) <> 0 then
|
||||||
|
begin
|
||||||
|
GetDefaultDrawer().DrawButton(LazDC, lSize, lState, TCDButtonStateEx(lControlStateEx));
|
||||||
|
end
|
||||||
|
else if (DFCS_BUTTONRADIOIMAGE and uState) <> 0 then
|
||||||
|
begin
|
||||||
|
//Element := QStyleCE_RadioButton
|
||||||
|
//TODO: what to implement here ?
|
||||||
|
end
|
||||||
|
else if (DFCS_BUTTONRADIOMASK and uState) <> 0 then
|
||||||
|
begin
|
||||||
|
//Element := QStyleCE_RadioButton
|
||||||
|
//TODO: what to implement here ?
|
||||||
|
end;
|
||||||
finally
|
finally
|
||||||
lControlStateEx.Font.Free;
|
lControlStateEx.Font.Free;
|
||||||
lControlStateEx.Free;
|
lControlStateEx.Free;
|
||||||
end;
|
end;
|
||||||
begin
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
DFC_CAPTION: ; // title bar captions
|
DFC_CAPTION: ; // title bar captions
|
||||||
DFC_MENU: ; // menu
|
DFC_MENU: ; // menu
|
||||||
|
Loading…
Reference in New Issue
Block a user