cocoa: Implements basic TSpeedButton look

git-svn-id: trunk@49580 -
This commit is contained in:
sekelsenmat 2015-08-01 06:28:38 +00:00
parent 5497dfc55a
commit 726931d294
6 changed files with 29 additions and 26 deletions

View File

@ -67,7 +67,7 @@ type
// Standard Tab // Standard Tab
// =================================== // ===================================
// TCDButton // TCDButton
procedure DrawButton(ADest: TFPCustomCanvas; ASize: TSize; procedure DrawButton(ADest: TFPCustomCanvas; ADestPos: TPoint; 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;
@ -572,7 +572,7 @@ begin
end; end;
procedure TCDDrawerAndroid.DrawButton(ADest: TFPCustomCanvas; ASize: TSize; procedure TCDDrawerAndroid.DrawButton(ADest: TFPCustomCanvas; ADestPos: TPoint; ASize: TSize;
AState: TCDControlState; AStateEx: TCDButtonStateEx); AState: TCDControlState; AStateEx: TCDButtonStateEx);
var var
lDest: TCanvas absolute ADest; lDest: TCanvas absolute ADest;

View File

@ -55,7 +55,7 @@ type
// Standard Tab // Standard Tab
// =================================== // ===================================
// TCDButton // TCDButton
procedure DrawButton(ADest: TFPCustomCanvas; ASize: TSize; procedure DrawButton(ADest: TFPCustomCanvas; ADestPos: TPoint; 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;
@ -83,7 +83,7 @@ type
procedure DrawScrollBar(ADest: TCanvas; ASize: TSize; procedure DrawScrollBar(ADest: TCanvas; ASize: TSize;
AState: TCDControlState; AStateEx: TCDPositionedCStateEx); override; AState: TCDControlState; AStateEx: TCDPositionedCStateEx); override;
// TCDGroupBox // TCDGroupBox
procedure DrawGroupBox(ADest: TFPCustomCanvas; ASize: TSize; procedure DrawGroupBox(ADest: TFPCustomCanvas; ADestPos: TPoint; ASize: TSize;
AState: TCDControlState; AStateEx: TCDControlStateEx); override; AState: TCDControlState; AStateEx: TCDControlStateEx); override;
// TCDPanel // TCDPanel
procedure DrawPanel(ADest: TCanvas; ASize: TSize; procedure DrawPanel(ADest: TCanvas; ASize: TSize;
@ -702,7 +702,7 @@ begin
end; end;
procedure TCDDrawerCommon.DrawButton(ADest: TFPCustomCanvas; procedure TCDDrawerCommon.DrawButton(ADest: TFPCustomCanvas;
ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx); ADestPos: TPoint; ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx);
var var
Str: string; Str: string;
lGlyphLeftSpacing: Integer = 0; lGlyphLeftSpacing: Integer = 0;
@ -1275,7 +1275,7 @@ begin
end; end;
procedure TCDDrawerCommon.DrawGroupBox(ADest: TFPCustomCanvas; procedure TCDDrawerCommon.DrawGroupBox(ADest: TFPCustomCanvas;
ASize: TSize; AState: TCDControlState; AStateEx: TCDControlStateEx); ADestPos: TPoint; ASize: TSize; AState: TCDControlState; AStateEx: TCDControlStateEx);
var var
FCaptionMiddle: integer = 0; FCaptionMiddle: integer = 0;
lTextSize: TSize; lTextSize: TSize;

View File

@ -21,7 +21,7 @@ type
procedure DrawExpandTriangle(ADest: TCanvas; ASize: TSize; procedure DrawExpandTriangle(ADest: TCanvas; ASize: TSize;
AX, AY: Integer; AFacing: TCDControlStateFlag); AX, AY: Integer; AFacing: TCDControlStateFlag);
// //
procedure DrawMacSquareButton(ADest: TFPCustomCanvas; ASize: TSize; procedure DrawMacSquareButton(ADest: TFPCustomCanvas; ADestPos: TPoint; ASize: TSize;
AState: TCDControlState; AStateEx: TCDButtonStateEx); AState: TCDControlState; AStateEx: TCDButtonStateEx);
public public
function GetMeasures(AMeasureID: Integer): Integer; override; function GetMeasures(AMeasureID: Integer): Integer; override;
@ -29,7 +29,7 @@ type
// Standard Tab // Standard Tab
// =================================== // ===================================
// TCDButton // TCDButton
procedure DrawButton(ADest: TFPCustomCanvas; ASize: TSize; procedure DrawButton(ADest: TFPCustomCanvas; ADestPos: TPoint; ASize: TSize;
AState: TCDControlState; AStateEx: TCDButtonStateEx); override; AState: TCDControlState; AStateEx: TCDButtonStateEx); override;
// =================================== // ===================================
// Common Controls Tab // Common Controls Tab
@ -108,7 +108,7 @@ begin
end; end;
procedure TCDDrawerMac.DrawMacSquareButton(ADest: TFPCustomCanvas; procedure TCDDrawerMac.DrawMacSquareButton(ADest: TFPCustomCanvas;
ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx); ADestPos: TPoint; ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx);
var var
lDest: TCanvas absolute ADest; lDest: TCanvas absolute ADest;
Str: string; Str: string;
@ -117,6 +117,7 @@ var
lFrameDark, lFrameMedDark, lFrameMedium, lFrameLight: TColor; lFrameDark, lFrameMedDark, lFrameMedium, lFrameLight: TColor;
lSelTop, lSelTopGrad, lSelBottomGrad, lSelBottom: TColor; lSelTop, lSelTopGrad, lSelBottomGrad, lSelBottom: TColor;
lGradientTop, lGradientBottom: TColor; lGradientTop, lGradientBottom: TColor;
lPosX, lPosY: Integer;
begin begin
// Main body with gradient // Main body with gradient
if csfSunken in AState then if csfSunken in AState then
@ -129,7 +130,7 @@ begin
lGradientTop := MAC_SQUARE_BUTTON_FOCUS_GRADIENT_TOP; lGradientTop := MAC_SQUARE_BUTTON_FOCUS_GRADIENT_TOP;
lGradientBottom := MAC_SQUARE_BUTTON_FOCUS_GRADIENT_BOTTOM; lGradientBottom := MAC_SQUARE_BUTTON_FOCUS_GRADIENT_BOTTOM;
end; end;
lRect := Bounds(0, 0, ASize.cx, ASize.cy); lRect := Bounds(ADestPos.X, ADestPos.Y, ASize.cx, ASize.cy);
lDest.GradientFill(lRect, lGradientTop, lGradientBottom, gdVertical); lDest.GradientFill(lRect, lGradientTop, lGradientBottom, gdVertical);
// outter rectangle // outter rectangle
@ -139,27 +140,29 @@ begin
lDest.Pen.Color := MAC_SQUARE_BUTTON_FOCUS_FRAME_OUTTER lDest.Pen.Color := MAC_SQUARE_BUTTON_FOCUS_FRAME_OUTTER
else else
lDest.Pen.Color := MAC_SQUARE_BUTTON_FRAME; lDest.Pen.Color := MAC_SQUARE_BUTTON_FRAME;
ADest.Rectangle(0, 0, ASize.cx, ASize.cy); ADest.Rectangle(Bounds(ADestPos.X, ADestPos.Y, ASize.cx, ASize.cy));
//ADest.Rectangle(1, 1, ASize.cx-1, ASize.cy-1); //ADest.Rectangle(1, 1, ASize.cx-1, ASize.cy-1);
// inner rectangle (only for focused) // inner rectangle (only for focused)
if (csfHasFocus in AState) and not (csfSunken in AState) then if (csfHasFocus in AState) and not (csfSunken in AState) then
begin begin
lDest.Pen.Color := MAC_SQUARE_BUTTON_FOCUS_FRAME_INNER; lDest.Pen.Color := MAC_SQUARE_BUTTON_FOCUS_FRAME_INNER;
ADest.Rectangle(1, 1, ASize.cx-1, ASize.cy-1); ADest.Rectangle(Bounds(ADestPos.X+1, ADestPos.Y+1, ASize.cx-1, ASize.cy-1));
//ADest.Rectangle(2, 2, ASize.cx-2, ASize.cy-2); //ADest.Rectangle(2, 2, ASize.cx-2, ASize.cy-2);
//ADest.Rectangle(3, 3, ASize.cx-3, ASize.cy-3); //ADest.Rectangle(3, 3, ASize.cx-3, ASize.cy-3);
end; end;
// Button text // Button text
ADest.Font.Assign(AStateEx.Font); if AStateEx.Font <> nil then
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 if (csfSunken in AState) then
ADest.Font.FPColor := colWhite; ADest.Font.FPColor := colWhite;
Str := AStateEx.Caption; Str := AStateEx.Caption;
lDest.TextOut((ASize.cx - lDest.TextWidth(Str)) div 2, lPosX := ADestPos.X + (ASize.cx - lDest.TextWidth(Str)) div 2;
(ASize.cy - lDest.TextHeight(Str)) div 2, Str); lPosX := ADestPos.Y + (ASize.cy - lDest.TextHeight(Str)) div 2;
lDest.TextOut(lPosX, lPosY, Str);
end; end;
function TCDDrawerMac.GetMeasures(AMeasureID: Integer): Integer; function TCDDrawerMac.GetMeasures(AMeasureID: Integer): Integer;
@ -172,10 +175,10 @@ begin
end; end;
end; end;
procedure TCDDrawerMac.DrawButton(ADest: TFPCustomCanvas; ASize: TSize; procedure TCDDrawerMac.DrawButton(ADest: TFPCustomCanvas; ADestPos: TPoint; ASize: TSize;
AState: TCDControlState; AStateEx: TCDButtonStateEx); AState: TCDControlState; AStateEx: TCDButtonStateEx);
begin begin
DrawMacSquareButton(ADest, ASize, AState, AStateEx); DrawMacSquareButton(ADest, ADestPos, ASize, AState, AStateEx);
end; end;
procedure TCDDrawerMac.DrawToolBarItem(ADest: TCanvas; ASize: TSize; procedure TCDDrawerMac.DrawToolBarItem(ADest: TCanvas; ASize: TSize;

View File

@ -37,7 +37,7 @@ type
// Standard Tab // Standard Tab
// =================================== // ===================================
// TCDButton // TCDButton
procedure DrawButton(ADest: TFPCustomCanvas; ASize: TSize; procedure DrawButton(ADest: TFPCustomCanvas; ADestPos: TPoint; 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;
@ -184,7 +184,7 @@ begin
end; end;
procedure TCDDrawerWinXP.DrawButton(ADest: TFPCustomCanvas; procedure TCDDrawerWinXP.DrawButton(ADest: TFPCustomCanvas;
ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx); ADestPos: TPoint; ASize: TSize; AState: TCDControlState; AStateEx: TCDButtonStateEx);
var var
lDest: TCanvas absolute ADest; lDest: TCanvas absolute ADest;
Str: string; Str: string;

View File

@ -927,7 +927,7 @@ begin
lControlId := GetControlId(); lControlId := GetControlId();
PrepareControlState; PrepareControlState;
PrepareControlStateEx; PrepareControlStateEx;
FDrawer.DrawControl(ACanvas, lSize, lControlId, FState, FStateEx); FDrawer.DrawControl(ACanvas, Point(0, 0), lSize, lControlId, FState, FStateEx);
end; end;
procedure TCDControl.MouseEnter; procedure TCDControl.MouseEnter;

View File

@ -336,7 +336,7 @@ type
function GetClientArea(ADest: TCanvas; ASize: TSize; AControlId: TCDControlID; function GetClientArea(ADest: TCanvas; ASize: TSize; AControlId: TCDControlID;
AState: TCDControlState; AStateEx: TCDControlStateEx): TRect; virtual; abstract; AState: TCDControlState; AStateEx: TCDControlStateEx): TRect; virtual; abstract;
// To set a different position to draw the control then (0, 0) use the window org of the canvas // To set a different position to draw the control then (0, 0) use the window org of the canvas
procedure DrawControl(ADest: TCanvas; ASize: TSize; procedure DrawControl(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
AControl: TCDControlID; AState: TCDControlState; AStateEx: TCDControlStateEx); AControl: TCDControlID; AState: TCDControlState; AStateEx: TCDControlStateEx);
// General drawing routines. The ones using TFPCustomCanvas are reusable in LCL-CustomDrawn // General drawing routines. The ones using TFPCustomCanvas are reusable in LCL-CustomDrawn
procedure DrawFocusRect(ADest: TFPCustomCanvas; ADestPos: TPoint; ASize: TSize); virtual; abstract; procedure DrawFocusRect(ADest: TFPCustomCanvas; ADestPos: TPoint; ASize: TSize); virtual; abstract;
@ -355,7 +355,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: TFPCustomCanvas; ASize: TSize; procedure DrawButton(ADest: TFPCustomCanvas; ADestPos: TPoint; 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;
@ -383,7 +383,7 @@ type
procedure DrawScrollBar(ADest: TCanvas; ASize: TSize; procedure DrawScrollBar(ADest: TCanvas; ASize: TSize;
AState: TCDControlState; AStateEx: TCDPositionedCStateEx); virtual; abstract; AState: TCDControlState; AStateEx: TCDPositionedCStateEx); virtual; abstract;
// TCDGroupBox // TCDGroupBox
procedure DrawGroupBox(ADest: TFPCustomCanvas; ASize: TSize; procedure DrawGroupBox(ADest: TFPCustomCanvas; ADestPos: TPoint; ASize: TSize;
AState: TCDControlState; AStateEx: TCDControlStateEx); virtual; abstract; AState: TCDControlState; AStateEx: TCDControlStateEx); virtual; abstract;
// TCDPanel // TCDPanel
procedure DrawPanel(ADest: TCanvas; ASize: TSize; procedure DrawPanel(ADest: TCanvas; ASize: TSize;
@ -703,20 +703,20 @@ begin
end; end;
end; end;
procedure TCDDrawer.DrawControl(ADest: TCanvas; ASize: TSize; procedure TCDDrawer.DrawControl(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
AControl: TCDControlID; AState: TCDControlState; AStateEx: TCDControlStateEx AControl: TCDControlID; AState: TCDControlState; AStateEx: TCDControlStateEx
); );
begin begin
case AControl of case AControl of
cidControl: DrawControl(ADest, ASize, AState, AStateEx); cidControl: DrawControl(ADest, ASize, AState, AStateEx);
// //
cidButton: DrawButton(ADest, ASize, AState, TCDButtonStateEx(AStateEx)); cidButton: DrawButton(ADest, ADestPos, ASize, AState, TCDButtonStateEx(AStateEx));
cidEdit: DrawEdit(ADest, ASize, AState, TCDEditStateEx(AStateEx)); cidEdit: DrawEdit(ADest, ASize, AState, TCDEditStateEx(AStateEx));
cidCheckBox: DrawCheckBox(ADest, ASize, AState, AStateEx); cidCheckBox: DrawCheckBox(ADest, ASize, AState, AStateEx);
cidRadioButton:DrawRadioButton(ADest, ASize, AState, AStateEx); cidRadioButton:DrawRadioButton(ADest, ASize, AState, AStateEx);
cidComboBox: DrawComboBox(ADest, ASize, AState, TCDEditStateEx(AStateEx)); cidComboBox: DrawComboBox(ADest, ASize, AState, TCDEditStateEx(AStateEx));
cidScrollBar: DrawScrollBar(ADest, ASize, AState, TCDPositionedCStateEx(AStateEx)); cidScrollBar: DrawScrollBar(ADest, ASize, AState, TCDPositionedCStateEx(AStateEx));
cidGroupBox: DrawGroupBox(ADest, ASize, AState, AStateEx); cidGroupBox: DrawGroupBox(ADest, ADestPos, ASize, AState, AStateEx);
cidPanel: DrawPanel(ADest, ASize, AState, TCDPanelStateEx(AStateEx)); cidPanel: DrawPanel(ADest, ASize, AState, TCDPanelStateEx(AStateEx));
// //
cidStaticText: DrawStaticText(ADest, ASize, AState, AStateEx); cidStaticText: DrawStaticText(ADest, ASize, AState, AStateEx);