SynEdit Gutter: Fixing some AutoSize stuff

git-svn-id: trunk@18362 -
This commit is contained in:
martin 2009-01-20 21:14:03 +00:00
parent de0f8578f0
commit 3b28b9026f
6 changed files with 67 additions and 15 deletions

View File

@ -7857,7 +7857,8 @@ var
begin
if not (csLoading in ComponentState) then begin
FGutter.AutoSizeDigitCount(FTheLinesView.Count); // Todo: Make the LineNumberGutterPart an observer
nW := fGutter.RealGutterWidth(fCharWidth);
fGutter.RealGutterWidth(fCharWidth);
nW := fGutter.Width;
if nW = fGutterWidth then
InvalidateGutter
else

View File

@ -99,7 +99,7 @@ type
public
constructor Create(AOwner: TComponent); override;
constructor Create(AOwner: TComponent; AGutter: TSynGutter);
// destructor Destroy; override;
destructor Destroy; override;
property Items[Index: Integer]: TSynGutterPartBase
read GetPart write PutPart; default;
end;
@ -114,12 +114,12 @@ type
FMarkupInfo: TSynSelectedColor;
FCursor: TCursor;
FVisible: Boolean;
FWidth : integer;
FOnChange: TNotifyEvent;
FOnGutterClick: TGutterClickEvent;
function GetGutterParts: TSynGutterPartList;
procedure SetMarkupInfo(const AValue: TSynSelectedColor);
protected
FWidth : integer;
procedure SetAutoSize(const AValue : boolean); virtual;
procedure SetVisible(const AValue : boolean); virtual;
procedure SetWidth(const AValue : integer); virtual;
@ -476,7 +476,7 @@ begin
Result := FLeftOffset + FRightOffset;
for i := FGutterPartList.Count-1 downto 0 do
for i := GutterPartCount-1 downto 0 do
Result := Result + GutterPart[i].RealGutterWidth(CharWidth);
end;
@ -487,7 +487,10 @@ end;
function TSynGutter.GetGutterPartCount: integer;
begin
result := FGutterPartList.Count;
if FGutterPartList <> nil then
result := FGutterPartList.Count
else
Result := 0;
end;
function TSynGutter.GetGutterPartCountByClass(AClass: TSynGutterPartBaseClass): integer;
@ -552,6 +555,7 @@ procedure TSynGutter.Clear;
var
i: Integer;
begin
if FGutterPartList = nil then exit;
for i := FGutterPartList.Count-1 downto 0 do
GutterPart[i].Free;
FGutterPartList.Clear;
@ -597,7 +601,7 @@ end;
procedure TSynGutter.SetWidth(Value: integer);
begin
Value := Max(0, Value);
if FWidth <> Value then
if (FWidth <> Value) and not FAutoSize then
begin
FWidth := Value;
DoChange(Self);
@ -606,6 +610,8 @@ end;
procedure TSynGutter.DoChange(Sender: TObject);
begin
If FAutoSize then
FWidth := RealGutterWidth(FTextDrawer.CharWidth);
if Assigned(FOnChange) then
FOnChange(Self);
end;
@ -654,7 +660,7 @@ var
begin
i := 0;
x2 := x;
while i < FGutterPartList.Count-1 do begin
while i < GutterPartCount-1 do begin
if GutterPart[i].Visible then begin
if x2 >= GutterPart[i].Width then
x2 := x2 - GutterPart[i].Width
@ -690,12 +696,13 @@ begin
AClip.Left := FLeftOffset;
rcLine := AClip;
rcLine.Right := rcLine.Left;
for i := 0 to FGutterPartList.Count -1 do
for i := 0 to GutterPartCount -1 do
begin
if rcLine.Right >= AClip.Right then break;
if GutterPart[i].Visible then
begin
rcLine.Left := rcLine.Right;
rcLine.Right := rcLine.Left + GutterPart[i].Width;
rcLine.Right := min(rcLine.Left + GutterPart[i].Width, AClip.Right);
GutterPart[i].Paint(Canvas, rcLine, FirstLine, LastLine);
end;
end;
@ -737,7 +744,7 @@ end;
procedure TSynGutterPartBase.SetWidth(const AValue : integer);
begin
if FWidth=AValue then exit;
if (FWidth=AValue) or (FAutoSize) then exit;
FWidth:=AValue;
DoChange(self);
end;
@ -798,7 +805,7 @@ end;
constructor TSynGutterSeparator.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Width := 2;
FWidth := 2;
end;
procedure TSynGutterSeparator.Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: integer);
@ -842,6 +849,13 @@ begin
Create(AOwner);
end;
destructor TSynGutterPartList.Destroy;
begin
FGutter.FGutterPartList := nil;
OnChange := nil;
inherited Destroy;
end;
procedure TSynGutterPartList.RegisterItem(AnItem: TSynObjectListItem);
begin
TSynGutterPartBase(AnItem).OnChange := {$IFDEF FPC}@{$ENDIF}DoChange;

View File

@ -18,6 +18,8 @@ type
function GetSavedColor: TColor;
procedure SetModifiedColor(const AValue: TColor);
procedure SetSavedColor(const AValue: TColor);
protected
procedure DoChange(Sender: TObject); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -44,7 +46,7 @@ begin
MarkupInfo.Foreground := clGreen;
MarkupInfo.FrameColor := $00E9FC;
Width := 6;
FWidth := 4;
end;
destructor TSynGutterChanges.Destroy;
@ -72,6 +74,13 @@ begin
MarkupInfo.Foreground := AValue;
end;
procedure TSynGutterChanges.DoChange(Sender: TObject);
begin
if AutoSize then
FWidth := 4;
inherited DoChange(Sender);
end;
function TSynGutterChanges.RealGutterWidth(CharWidth: integer): integer;
begin
if not Visible then

View File

@ -15,6 +15,8 @@ type
TSynGutterCodeFolding = class(TSynGutterPartBase)
private
FFoldView: TSynEditFoldedView;
protected
procedure DoChange(Sender: TObject); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -33,6 +35,13 @@ uses
{ TSynGutterCodeFolding }
procedure TSynGutterCodeFolding.DoChange(Sender: TObject);
begin
if AutoSize then
FWidth := 10;
inherited DoChange(Sender);
end;
constructor TSynGutterCodeFolding.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
@ -42,7 +51,7 @@ begin
MarkupInfo.Foreground := clDkGray;
MarkupInfo.FrameColor := clNone;
Width := 10;
FWidth := 10;
end;
destructor TSynGutterCodeFolding.Destroy;

View File

@ -28,6 +28,8 @@ type
procedure SetShowOnlyLineNumbersMultiplesOf(const AValue : integer);
procedure SetZeroStart(const AValue : boolean);
function FormatLineNumber(Line: integer; IsDot: boolean): string;
protected
procedure DoChange(Sender: TObject); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -63,6 +65,7 @@ begin
FShowOnlyLineNumbersMultiplesOf := 1;
FLeadingZeros := false;
FZeroStart := False;
FWidth := 25;
end;
destructor TSynGutterLineNumber.Destroy;
@ -133,7 +136,7 @@ begin
end;
if AutoSize then
Width := FAutoSizeDigitCount * CharWidth + 1;
FWidth := FAutoSizeDigitCount * CharWidth + 1;
Result := Width;
end;
@ -177,6 +180,13 @@ begin
end;
end;
procedure TSynGutterLineNumber.DoChange(Sender: TObject);
begin
if AutoSize then
FWidth := RealGutterWidth(FTextDrawer.CharWidth);
inherited DoChange(Sender);
end;
procedure TSynGutterLineNumber.Paint(Canvas : TCanvas; AClip : TRect; FirstLine, LastLine : integer);
var
i, iLine: integer;

View File

@ -17,6 +17,8 @@ type
FFoldView: TSynEditFoldedView;
FBookMarkOpt: TSynBookMarkOpt;
FInternalImage: TSynInternalImage;
protected
procedure DoChange(Sender: TObject); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -33,6 +35,13 @@ uses
{ TSynGutterMarks }
procedure TSynGutterMarks.DoChange(Sender: TObject);
begin
if AutoSize then
FWidth := 22;
inherited DoChange(Sender);
end;
constructor TSynGutterMarks.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
@ -40,7 +49,7 @@ begin
FBookMarkOpt := TSynEdit(SynEdit).BookMarkOptions;
FInternalImage := nil;
Width := 22;
FWidth := 22;
end;
destructor TSynGutterMarks.Destroy;