mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-12 05:21:27 +02:00
customdrawn: Adds a client area getter
git-svn-id: trunk@33271 -
This commit is contained in:
parent
ed780f4ced
commit
936b420ba8
@ -28,6 +28,8 @@ type
|
||||
AState: TCDControlState; AStateEx: TCDControlStateEx;
|
||||
var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override;
|
||||
function GetColor(AColorID: Integer): TColor; override;
|
||||
function GetClientArea(ADest: TCanvas; ASize: TSize; AControlId: TCDControlID;
|
||||
AState: TCDControlState; AStateEx: TCDControlStateEx): TRect; override;
|
||||
procedure DrawControl(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
||||
AControl: TCDControlID; AState: TCDControlState; AStateEx: TCDControlStateEx); override;
|
||||
// ===================================
|
||||
@ -91,7 +93,7 @@ begin
|
||||
TCDCONTROL_CAPTION_HEIGHT: Result := ADest.TextHeight('ŹÇ')+3;
|
||||
TCDCTABCONTROL_TAB_HEIGHT:
|
||||
begin
|
||||
if AStateEx.Font.Size = 0 then Result := 22
|
||||
if AStateEx.Font.Size = 0 then Result := ADest.TextHeight('Z')+14
|
||||
else Result := AStateEx.Font.Size + 14;
|
||||
end;
|
||||
TCDCTABCONTROL_TAB_WIDTH:
|
||||
@ -135,6 +137,23 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCDDrawerCommon.GetClientArea(ADest: TCanvas; ASize: TSize;
|
||||
AControlId: TCDControlID; AState: TCDControlState; AStateEx: TCDControlStateEx
|
||||
): TRect;
|
||||
begin
|
||||
Result := Bounds(0, 0, ASize.cx, ASize.cy);
|
||||
|
||||
case AControlId of
|
||||
cidCTabControl:
|
||||
begin
|
||||
Result.Top := GetMeasuresEx(ADest, TCDCTABCONTROL_TAB_HEIGHT, AState, AStateEx) + 2;
|
||||
Result.Left := 2;
|
||||
Result.Right := Result.Right - 2;
|
||||
Result.Bottom := Result.Bottom - 2;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCDDrawerCommon.DrawControl(ADest: TCanvas; ADestPos: TPoint;
|
||||
ASize: TSize; AControl: TCDControlID; AState: TCDControlState;
|
||||
AStateEx: TCDControlStateEx);
|
||||
@ -495,8 +514,8 @@ begin
|
||||
ADest.Brush.Color := clWhite;
|
||||
SetLength(Points, 5);
|
||||
Points[0] := Point(AStateEx.CurStartLeftPos, lTabTopPos);
|
||||
Points[1] := Point(AStateEx.CurStartLeftPos+lTabWidth-5, lTabTopPos);
|
||||
Points[2] := Point(AStateEx.CurStartLeftPos+lTabWidth, lTabTopPos+5);
|
||||
Points[1] := Point(AStateEx.CurStartLeftPos+lTabWidth-2, lTabTopPos);
|
||||
Points[2] := Point(AStateEx.CurStartLeftPos+lTabWidth, lTabTopPos+2);
|
||||
Points[3] := Point(AStateEx.CurStartLeftPos+lTabWidth, lTabTopPos+lTabHeight);
|
||||
Points[4] := Point(AStateEx.CurStartLeftPos, lTabTopPos+lTabHeight);
|
||||
ADest.Polygon(Points);
|
||||
@ -505,9 +524,9 @@ begin
|
||||
ADest.Pen.Style := psSolid;
|
||||
ADest.Brush.Style := bsClear;
|
||||
ADest.Pen.Color := ColorToRGB($009C9B91);
|
||||
ADest.MoveTo(AStateEx.CurStartLeftPos+1, lTabTopPos);
|
||||
ADest.LineTo(AStateEx.CurStartLeftPos+lTabWidth-5, lTabTopPos);
|
||||
ADest.LineTo(AStateEx.CurStartLeftPos+lTabWidth, lTabTopPos+5);
|
||||
ADest.MoveTo(AStateEx.CurStartLeftPos, lTabTopPos);
|
||||
ADest.LineTo(AStateEx.CurStartLeftPos+lTabWidth-2, lTabTopPos);
|
||||
ADest.LineTo(AStateEx.CurStartLeftPos+lTabWidth, lTabTopPos+2);
|
||||
ADest.LineTo(AStateEx.CurStartLeftPos+lTabWidth, lTabTopPos+lTabHeight);
|
||||
|
||||
if IsSelected then
|
||||
|
@ -1518,16 +1518,18 @@ end;
|
||||
procedure TCDPageControl.PositionTabSheet(ATabSheet: TCDTabSheet);
|
||||
var
|
||||
lTabHeight, lIndex: Integer;
|
||||
lClientArea: TRect;
|
||||
begin
|
||||
lIndex := FTabs.IndexOfObject(ATabSheet);
|
||||
FTabCState.TabIndex := lIndex;
|
||||
PrepareControlState;
|
||||
PrepareControlStateEx;
|
||||
lTabHeight := FDrawer.GetMeasuresEx(Canvas, TCDCTABCONTROL_TAB_HEIGHT, FState, FStateEx);
|
||||
ATabSheet.BorderSpacing.Top := lTabHeight;
|
||||
ATabSheet.BorderSpacing.Left := 2;
|
||||
ATabSheet.BorderSpacing.Right := 3;
|
||||
ATabSheet.BorderSpacing.Bottom := 3;
|
||||
lClientArea := FDrawer.GetClientArea(Canvas, Size(Width, Height), GetControlId, FState, FStateEx);
|
||||
|
||||
ATabSheet.BorderSpacing.Top := lClientArea.Top;
|
||||
ATabSheet.BorderSpacing.Left := lClientArea.Left;
|
||||
ATabSheet.BorderSpacing.Right := Width - lClientArea.Right;
|
||||
ATabSheet.BorderSpacing.Bottom := Height - lClientArea.Bottom;
|
||||
ATabSheet.Align := alClient;
|
||||
end;
|
||||
|
||||
|
@ -151,6 +151,8 @@ type
|
||||
AState: TCDControlState; AStateEx: TCDControlStateEx;
|
||||
var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); virtual; abstract;
|
||||
function GetColor(AColorID: Integer): TColor; virtual; abstract;
|
||||
function GetClientArea(ADest: TCanvas; ASize: TSize; AControlId: TCDControlID;
|
||||
AState: TCDControlState; AStateEx: TCDControlStateEx): TRect; virtual; abstract;
|
||||
procedure DrawControl(ADest: TCanvas; ADestPos: TPoint; ASize: TSize;
|
||||
AControl: TCDControlID; AState: TCDControlState; AStateEx: TCDControlStateEx); virtual; abstract;
|
||||
// TCDButton
|
||||
|
Loading…
Reference in New Issue
Block a user