You've already forked lazarus-ccr
tvplanit: Fix painting of non-themed standard NavBar buttons
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4992 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -8,7 +8,6 @@
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="project1"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<Icon Value="0"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
|
@ -17,7 +17,7 @@ object Form1: TForm1
|
||||
AllowRearrange = True
|
||||
BackgroundColor = clInactiveCaption
|
||||
BackgroundMethod = bmTile
|
||||
BorderStyle = bsNone
|
||||
BorderStyle = bsSingle
|
||||
ButtonHeight = 20
|
||||
DrawingStyle = dsEtchedButton
|
||||
FolderCollection = <
|
||||
@ -256,7 +256,7 @@ object Form1: TForm1
|
||||
TabOrder = 6
|
||||
object BkColor: TColorBox
|
||||
Left = 88
|
||||
Height = 24
|
||||
Height = 22
|
||||
Top = 3
|
||||
Width = 272
|
||||
Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbCustomColors]
|
||||
@ -348,6 +348,30 @@ object Form1: TForm1
|
||||
TabOrder = 5
|
||||
end
|
||||
end
|
||||
object RgBorderStyle: TRadioGroup
|
||||
Left = 141
|
||||
Height = 66
|
||||
Top = 288
|
||||
Width = 139
|
||||
AutoFill = True
|
||||
Caption = 'Border style'
|
||||
ChildSizing.LeftRightSpacing = 6
|
||||
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
|
||||
ChildSizing.EnlargeVertical = crsHomogenousChildResize
|
||||
ChildSizing.ShrinkHorizontal = crsScaleChilds
|
||||
ChildSizing.ShrinkVertical = crsScaleChilds
|
||||
ChildSizing.Layout = cclLeftToRightThenTopToBottom
|
||||
ChildSizing.ControlsPerLine = 1
|
||||
ClientHeight = 46
|
||||
ClientWidth = 135
|
||||
ItemIndex = 1
|
||||
Items.Strings = (
|
||||
'bsNone'
|
||||
'bsSingle'
|
||||
)
|
||||
OnClick = RgBorderStyleClick
|
||||
TabOrder = 7
|
||||
end
|
||||
object Images: TImageList
|
||||
Height = 32
|
||||
Width = 32
|
||||
|
@ -23,6 +23,7 @@ type
|
||||
IconsLbl: TLabel;
|
||||
IconsLink: TLabel;
|
||||
Panel2: TPanel;
|
||||
RgBorderStyle: TRadioGroup;
|
||||
RbBkColor: TRadioButton;
|
||||
RbBkImage: TRadioButton;
|
||||
RbBkImageTile: TRadioButton;
|
||||
@ -42,6 +43,7 @@ type
|
||||
procedure IconsLinkClick(Sender: TObject);
|
||||
procedure IconsLinkMouseEnter(Sender: TObject);
|
||||
procedure IconsLinkMouseLeave(Sender: TObject);
|
||||
procedure RgBorderStyleClick(Sender: TObject);
|
||||
procedure RgDrawingStyleClick(Sender: TObject);
|
||||
procedure RgIconSizeClick(Sender: TObject);
|
||||
procedure RbBkColorChange(Sender: TObject);
|
||||
@ -153,6 +155,7 @@ begin
|
||||
RandSeed := 1;
|
||||
IconsLink.Left := IconsLbl.Left + IconsLbl.Width;
|
||||
RgDrawingStyle.ItemIndex := ord(VpNavBar1.DrawingStyle);
|
||||
RgBorderStyle.ItemIndex := ord(VpNavBar1.BorderStyle);
|
||||
BkColor.Selected := VpNavBar1.BackgroundColor;
|
||||
case VpNavBar1.BackgroundMethod of
|
||||
bmNone:
|
||||
@ -225,6 +228,11 @@ begin
|
||||
VpNavBar1.Invalidate;
|
||||
end;
|
||||
|
||||
procedure TForm1.RgBorderStyleClick(Sender: TObject);
|
||||
begin
|
||||
VpNavBar1.BorderStyle := TBorderStyle(RgBorderStyle.ItemIndex);
|
||||
end;
|
||||
|
||||
procedure TForm1.VpNavBar1FolderChanged(Sender: TObject; Index: Integer);
|
||||
var
|
||||
folder: TVpNavFolder;
|
||||
|
@ -2805,11 +2805,12 @@ procedure TVpCustomNavBar.SetDrawingStyle(Value: TVpFolderDrawingStyle);
|
||||
begin
|
||||
if Value <> FDrawingStyle then begin
|
||||
FDrawingStyle := Value;
|
||||
{
|
||||
if FDrawingStyle = dsEtchedButton then
|
||||
BorderStyle := bsNone
|
||||
else
|
||||
BorderStyle := bsSingle;
|
||||
|
||||
}
|
||||
{Minimum ButtonHeight for CoolTabs is 17}
|
||||
if (FDrawingStyle = dsCoolTab) and (FButtonHeight < 17) then
|
||||
FButtonHeight := 17;
|
||||
|
@ -143,13 +143,14 @@ begin
|
||||
if folder.ItemCount = 0 then
|
||||
exit;
|
||||
|
||||
// Distance of top-most icon to the last upper button
|
||||
Inc(CurPos, 8);
|
||||
|
||||
with nabItemsRect^ do begin
|
||||
Top := CurPos;
|
||||
Left := 0;
|
||||
Right := FNavBar.ClientWidth;
|
||||
Bottom := FNavBar.ClientHeight - (FNavBar.FolderCount - FActiveFolder - 1) * FButtonHeight + 1;
|
||||
Bottom := FNavBar.ClientHeight - (FNavBar.FolderCount - FActiveFolder - 1) * FButtonHeight;
|
||||
end;
|
||||
|
||||
for J := 0 to folder.ItemCount-1 do begin
|
||||
@ -213,9 +214,8 @@ var
|
||||
begin
|
||||
if FBackgroundImage.Empty or (FBackgroundMethod = bmNone) then
|
||||
begin
|
||||
Canvas.Pen.Color := FBackgroundColor;
|
||||
Canvas.Brush.Color := FBackgroundColor;
|
||||
Canvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
|
||||
Canvas.FillRect(R.Left, R.Top, R.Right, R.Bottom);
|
||||
end else
|
||||
begin
|
||||
case FBackgroundMethod of
|
||||
@ -224,7 +224,7 @@ begin
|
||||
if (FBackgroundImage.Width < WidthOf(R)) or (FBackgroundImage.Height < HeightOf(R))
|
||||
then begin
|
||||
Canvas.Brush.Color := FBackgroundColor;
|
||||
Canvas.FillRect(R.Left, R.Top, R.Right, R.Bottom);
|
||||
Canvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
|
||||
end;
|
||||
Canvas.Draw(R.Left, R.Top, FBackgroundImage);
|
||||
end;
|
||||
@ -285,6 +285,7 @@ var
|
||||
Points: array[1..5] of TPoint;
|
||||
begin
|
||||
Result := R;
|
||||
|
||||
with Canvas do begin
|
||||
{Fill the tab area}
|
||||
Brush.Style := bsSolid;
|
||||
@ -294,6 +295,9 @@ begin
|
||||
Brush.Color := ATabColor;
|
||||
FillRect(R);
|
||||
|
||||
if IsMouseOverFolder(ATabIndex) then
|
||||
; // do what?
|
||||
|
||||
{Draw the bottom, left line}
|
||||
Pen.Color := clBlack;
|
||||
MoveTo(R.Left, R.Bottom - 1);
|
||||
@ -392,6 +396,7 @@ begin
|
||||
Result := R;
|
||||
|
||||
if ThemeServices.ThemesEnabled then begin
|
||||
// themed button
|
||||
if IsMouseOverFolder(ATabIndex) and nabMouseDown then
|
||||
tb := tbPushButtonPressed
|
||||
else
|
||||
@ -402,9 +407,47 @@ begin
|
||||
details := ThemeServices.GetElementDetails(tb);
|
||||
InflateRect(R, 1, 1);
|
||||
ThemeServices.DrawElement(Canvas.Handle, details, R);
|
||||
end else
|
||||
begin
|
||||
// non-themed button
|
||||
Canvas.Brush.Color := clBtnFace;
|
||||
Canvas.FillRect(R);
|
||||
if nabMouseDown and IsMouseOverFolder(ATabIndex) then
|
||||
begin
|
||||
if R.Top = 0 then R.Top := 1;
|
||||
|
||||
Canvas.Pen.Color := clBtnHighlight; // bright at bottom/right
|
||||
Canvas.MoveTo(R.Left, R.Bottom-1);
|
||||
Canvas.LineTo(R.Right-1, R.Bottom-1);
|
||||
Canvas.LineTo(R.Right-1, R.Top-1);
|
||||
|
||||
Canvas.Pen.Color := clGray; // dark at top/left
|
||||
Canvas.MoveTo(R.Left, R.Bottom-2);
|
||||
Canvas.LineTo(R.Left, R.Top);
|
||||
Canvas.LineTo(R.Right-1, R.Top);
|
||||
|
||||
Canvas.Pen.Color := clBtnShadow; // shadow at top/left
|
||||
Canvas.MoveTo(R.Left+1, R.Bottom-2);
|
||||
Canvas.LineTo(R.Left+1, R.Top);
|
||||
Canvas.LineTo(R.Right-2, R.Top);
|
||||
end else
|
||||
begin
|
||||
Canvas.Pen.Color := clGray; // bottom/right
|
||||
Canvas.MoveTo(R.Left, R.Bottom-1);
|
||||
Canvas.LineTo(R.Right-1, R.Bottom-1);
|
||||
Canvas.LineTo(R.Right-1, R.Top-1);
|
||||
|
||||
Canvas.Pen.Color := clBtnHighlight; // top/left
|
||||
Canvas.MoveTo(R.Left, R.Bottom-2);
|
||||
Canvas.LineTo(R.Left, R.Top);
|
||||
Canvas.LineTo(R.Right-1, R.Top);
|
||||
|
||||
Canvas.Pen.Color := clBtnShadow; // bottom/right shadow
|
||||
Canvas.MoveTo(R.Left+1, R.Bottom-2);
|
||||
Canvas.LineTo(R.Right-2, R.Bottom-2);
|
||||
Canvas.LineTo(R.Right-2, R.Top);
|
||||
end;
|
||||
end;
|
||||
//TODO: TR := DrawButtonFace(DrawBmp.Canvas, MyRect, 1, bsNew, False,
|
||||
// (I = FHotFolder) and nabMouseDown, False);
|
||||
end;
|
||||
|
||||
{ Draw regular etched (Win98 style) buttons
|
||||
@ -415,10 +458,16 @@ begin
|
||||
with Canvas do begin
|
||||
Brush.Color := clBtnFace;
|
||||
FillRect(R);
|
||||
|
||||
Frame3D(R, 1, bvLowered);
|
||||
if not IsMouseOverFolder(aTabIndex) then
|
||||
Frame3D(R, 1, bvRaised);
|
||||
{
|
||||
// InflateRect(R, -1, -1);
|
||||
if IsMouseOverFolder(ATabIndex) then
|
||||
Frame3D(R, 1, bvLowered) else
|
||||
Frame3D(r, 1, bvRaised);
|
||||
}
|
||||
end;
|
||||
Result := R;
|
||||
end;
|
||||
@ -842,11 +891,11 @@ begin
|
||||
{ Draw the folder buttons at the bottom }
|
||||
DrawBottomFolderButtons(DrawBmp.Canvas, MyRect, CurPos);
|
||||
|
||||
finally
|
||||
{ Copy the buffer bitmap to the control }
|
||||
FNavBar.Canvas.CopyMode := cmSrcCopy;
|
||||
FNavBar.Canvas.CopyRect(MyRect, DrawBmp.Canvas, MyRect);
|
||||
FNavBar.Canvas.CopyRect(MyRect, DrawBmp.Canvas, Rect(0, 0, DrawBmp.Width,DrawBmp.Height));
|
||||
|
||||
finally
|
||||
DrawBmp.Free;
|
||||
end;
|
||||
end;
|
||||
|
Reference in New Issue
Block a user