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

View File

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

View File

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