SynEdit: refactor TLazSynSurface

git-svn-id: trunk@63174 -
This commit is contained in:
martin 2020-05-16 22:17:03 +00:00
parent 43f41ddd9d
commit 0f8b9dd9a8
3 changed files with 59 additions and 34 deletions

View File

@ -190,24 +190,36 @@ type
property OnStatusChange: TStatusChangeEvent read fOnStatusChange write fOnStatusChange; property OnStatusChange: TStatusChangeEvent read fOnStatusChange write fOnStatusChange;
end; end;
{ TLazSynSurfaceWithText }
TLazSynSurfaceWithText = class(TLazSynSurface)
private
FTextArea: TLazSynTextArea;
protected
procedure SetTextArea(AValue: TLazSynTextArea); virtual;
function GetTextArea: TLazSynTextArea; virtual;
public
procedure Assign(Src: TLazSynSurface); override;
property TextArea: TLazSynTextArea read GetTextArea write SetTextArea;
end;
{ TLazSynSurfaceManager } { TLazSynSurfaceManager }
TLazSynSurfaceManager = class(TLazSynSurface) TLazSynSurfaceManager = class(TLazSynSurfaceWithText)
private private
FLeftGutterArea: TLazSynSurface; FLeftGutterArea: TLazSynSurfaceWithText;
FLeftGutterWidth: integer; FLeftGutterWidth: integer;
FRightGutterArea: TLazSynSurface; FRightGutterArea: TLazSynSurfaceWithText;
FRightGutterWidth: integer; FRightGutterWidth: integer;
FTextArea: TLazSynTextArea; procedure SetLeftGutterArea(AValue: TLazSynSurfaceWithText);
procedure SetLeftGutterArea(AValue: TLazSynSurface);
procedure SetLeftGutterWidth(AValue: integer); procedure SetLeftGutterWidth(AValue: integer);
procedure SetRightGutterArea(AValue: TLazSynSurface); procedure SetRightGutterArea(AValue: TLazSynSurfaceWithText);
procedure SetRightGutterWidth(AValue: integer); procedure SetRightGutterWidth(AValue: integer);
procedure SetTextArea(AValue: TLazSynTextArea);
protected protected
function GetLeftGutterArea: TLazSynSurface; virtual; function GetLeftGutterArea: TLazSynSurfaceWithText; virtual;
function GetRightGutterArea: TLazSynSurface; virtual; function GetRightGutterArea: TLazSynSurfaceWithText; virtual;
function GetTextArea: TLazSynTextArea; virtual; procedure SetTextArea(AValue: TLazSynTextArea); override;
function GetTextArea: TLazSynTextArea; override;
protected protected
procedure SetBackgroundColor(AValue: TColor); virtual; procedure SetBackgroundColor(AValue: TColor); virtual;
procedure SetExtraCharSpacing(AValue: integer); virtual; procedure SetExtraCharSpacing(AValue: integer); virtual;
@ -229,9 +241,8 @@ type
procedure InvalidateTextLines(FirstTextLine, LastTextLine: TLineIdx); virtual; procedure InvalidateTextLines(FirstTextLine, LastTextLine: TLineIdx); virtual;
procedure InvalidateGutterLines(FirstTextLine, LastTextLine: TLineIdx); virtual; procedure InvalidateGutterLines(FirstTextLine, LastTextLine: TLineIdx); virtual;
property TextArea: TLazSynTextArea read GetTextArea write SetTextArea; property LeftGutterArea: TLazSynSurfaceWithText read GetLeftGutterArea write SetLeftGutterArea;
property LeftGutterArea: TLazSynSurface read GetLeftGutterArea write SetLeftGutterArea; property RightGutterArea: TLazSynSurfaceWithText read GetRightGutterArea write SetRightGutterArea;
property RightGutterArea: TLazSynSurface read GetRightGutterArea write SetRightGutterArea;
property LeftGutterWidth: integer read FLeftGutterWidth write SetLeftGutterWidth; property LeftGutterWidth: integer read FLeftGutterWidth write SetLeftGutterWidth;
property RightGutterWidth: integer read FRightGutterWidth write SetRightGutterWidth; property RightGutterWidth: integer read FRightGutterWidth write SetRightGutterWidth;
public public
@ -960,6 +971,24 @@ begin
end; // while True end; // while True
end; end;
{ TLazSynSurfaceWithText }
procedure TLazSynSurfaceWithText.SetTextArea(AValue: TLazSynTextArea);
begin
FTextArea := AValue;
end;
function TLazSynSurfaceWithText.GetTextArea: TLazSynTextArea;
begin
Result := FTextArea;
end;
procedure TLazSynSurfaceWithText.Assign(Src: TLazSynSurface);
begin
inherited Assign(Src);
FTextArea := TLazSynSurfaceWithText(Src).FTextArea;
end;
{ TLazSynSurfaceManager } { TLazSynSurfaceManager }
procedure TLazSynSurfaceManager.SetLeftGutterWidth(AValue: integer); procedure TLazSynSurfaceManager.SetLeftGutterWidth(AValue: integer);
@ -989,19 +1018,20 @@ begin
FTextArea.RightEdgeVisible := AValue; FTextArea.RightEdgeVisible := AValue;
end; end;
procedure TLazSynSurfaceManager.SetLeftGutterArea(AValue: TLazSynSurface); procedure TLazSynSurfaceManager.SetLeftGutterArea(AValue: TLazSynSurfaceWithText);
begin begin
if FLeftGutterArea = AValue then Exit; if FLeftGutterArea = AValue then Exit;
FLeftGutterArea := AValue; FLeftGutterArea := AValue;
FLeftGutterArea.DisplayView := DisplayView; FLeftGutterArea.DisplayView := DisplayView;
FLeftGutterArea.TextArea := FTextArea;
end; end;
function TLazSynSurfaceManager.GetLeftGutterArea: TLazSynSurface; function TLazSynSurfaceManager.GetLeftGutterArea: TLazSynSurfaceWithText;
begin begin
Result := FLeftGutterArea; Result := FLeftGutterArea;
end; end;
function TLazSynSurfaceManager.GetRightGutterArea: TLazSynSurface; function TLazSynSurfaceManager.GetRightGutterArea: TLazSynSurfaceWithText;
begin begin
Result := FRightGutterArea; Result := FRightGutterArea;
end; end;
@ -1031,11 +1061,12 @@ begin
FTextArea.ForegroundColor := AValue; FTextArea.ForegroundColor := AValue;
end; end;
procedure TLazSynSurfaceManager.SetRightGutterArea(AValue: TLazSynSurface); procedure TLazSynSurfaceManager.SetRightGutterArea(AValue: TLazSynSurfaceWithText);
begin begin
if FRightGutterArea = AValue then Exit; if FRightGutterArea = AValue then Exit;
FRightGutterArea := AValue; FRightGutterArea := AValue;
FRightGutterArea.DisplayView := DisplayView; FRightGutterArea.DisplayView := DisplayView;
FLeftGutterArea.TextArea := FTextArea;
end; end;
procedure TLazSynSurfaceManager.SetRightGutterWidth(AValue: integer); procedure TLazSynSurfaceManager.SetRightGutterWidth(AValue: integer);
@ -1050,6 +1081,10 @@ begin
if FTextArea = AValue then Exit; if FTextArea = AValue then Exit;
FTextArea := AValue; FTextArea := AValue;
FTextArea.DisplayView := DisplayView; FTextArea.DisplayView := DisplayView;
if FLeftGutterArea <> nil then
FLeftGutterArea.TextArea := FTextArea;
if FRightGutterArea <> nil then
FRightGutterArea.TextArea := FTextArea;
end; end;
procedure TLazSynSurfaceManager.SetVisibleSpecialChars(AValue: TSynVisibleSpecialChars); procedure TLazSynSurfaceManager.SetVisibleSpecialChars(AValue: TSynVisibleSpecialChars);

View File

@ -99,18 +99,15 @@ type
{ TLazSynGutterArea } { TLazSynGutterArea }
TLazSynGutterArea = class(TLazSynSurface) TLazSynGutterArea = class(TLazSynSurfaceWithText)
private private
FGutter: TSynGutter; FGutter: TSynGutter;
FTextArea: TLazSynTextArea;
function GetTextBounds: TRect; function GetTextBounds: TRect;
protected protected
procedure DoPaint(ACanvas: TCanvas; AClip: TRect); override; procedure DoPaint(ACanvas: TCanvas; AClip: TRect); override;
procedure SetTextArea(const ATextArea: TLazSynTextArea); virtual;
public public
procedure InvalidateLines(FirstTextLine, LastTextLine: TLineIdx); override; procedure InvalidateLines(FirstTextLine, LastTextLine: TLineIdx); override;
procedure Assign(Src: TLazSynSurface); override; procedure Assign(Src: TLazSynSurface); override;
property TextArea: TLazSynTextArea read FTextArea write SetTextArea;
property Gutter: TSynGutter read FGutter write FGutter; property Gutter: TSynGutter read FGutter write FGutter;
property TextBounds: TRect read GetTextBounds; property TextBounds: TRect read GetTextBounds;
end; end;
@ -160,15 +157,9 @@ begin
InvalidateRect(Handle, @rcInval, FALSE); InvalidateRect(Handle, @rcInval, FALSE);
end; end;
procedure TLazSynGutterArea.SetTextArea(const ATextArea: TLazSynTextArea);
begin
FTextArea := ATextArea;
end;
procedure TLazSynGutterArea.Assign(Src: TLazSynSurface); procedure TLazSynGutterArea.Assign(Src: TLazSynSurface);
begin begin
inherited Assign(Src); inherited Assign(Src);
FTextArea := TLazSynGutterArea(Src).FTextArea;
FGutter := TLazSynGutterArea(Src).FGutter; FGutter := TLazSynGutterArea(Src).FGutter;
end; end;

View File

@ -96,7 +96,7 @@ type
procedure TextSizeChanged(Sender: TObject); procedure TextSizeChanged(Sender: TObject);
protected protected
procedure DoPaint(ACanvas: TCanvas; AClip: TRect); override; procedure DoPaint(ACanvas: TCanvas; AClip: TRect); override;
procedure SetTextArea(const ATextArea: TLazSynTextArea); override; procedure SetTextArea(ATextArea: TLazSynTextArea); override;
end; end;
{ TSourceLazSynSurfaceManager } { TSourceLazSynSurfaceManager }
@ -108,8 +108,8 @@ type
FTopLineCount: Integer; FTopLineCount: Integer;
procedure SetTopLineCount(AValue: Integer); procedure SetTopLineCount(AValue: Integer);
protected protected
function GetLeftGutterArea: TLazSynSurface; override; function GetLeftGutterArea: TLazSynSurfaceWithText; override;
function GetRightGutterArea: TLazSynSurface; override; function GetRightGutterArea: TLazSynSurfaceWithText; override;
function GetTextArea: TLazSynTextArea; override; function GetTextArea: TLazSynTextArea; override;
protected protected
procedure SetBackgroundColor(AValue: TColor); override; procedure SetBackgroundColor(AValue: TColor); override;
@ -1250,8 +1250,7 @@ begin
Gutter.Paint(ACanvas, Self, AClip, 0, -1); Gutter.Paint(ACanvas, Self, AClip, 0, -1);
end; end;
procedure TSourceLazSynSurfaceGutter.SetTextArea( procedure TSourceLazSynSurfaceGutter.SetTextArea(ATextArea: TLazSynTextArea);
const ATextArea: TLazSynTextArea);
begin begin
inherited SetTextArea(ATextArea); inherited SetTextArea(ATextArea);
ATextArea.AddTextSizeChangeHandler(@TextSizeChanged); ATextArea.AddTextSizeChangeHandler(@TextSizeChanged);
@ -1271,12 +1270,12 @@ begin
BoundsChanged; BoundsChanged;
end; end;
function TSourceLazSynSurfaceManager.GetLeftGutterArea: TLazSynSurface; function TSourceLazSynSurfaceManager.GetLeftGutterArea: TLazSynSurfaceWithText;
begin begin
Result := FOriginalManager.LeftGutterArea; Result := FOriginalManager.LeftGutterArea;
end; end;
function TSourceLazSynSurfaceManager.GetRightGutterArea: TLazSynSurface; function TSourceLazSynSurfaceManager.GetRightGutterArea: TLazSynSurfaceWithText;
begin begin
Result := FOriginalManager.RightGutterArea; Result := FOriginalManager.RightGutterArea;
end; end;