mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 04:39:22 +02:00
SynEdit: Caret, minor optimization. Do not register callbacks, unless needed.
git-svn-id: trunk@39695 -
This commit is contained in:
parent
cdadce87e0
commit
1f2700f715
@ -171,6 +171,9 @@ type
|
|||||||
|
|
||||||
{ TSynEditCaret }
|
{ TSynEditCaret }
|
||||||
|
|
||||||
|
TSynEditCaretFlag = (scLinesEditedRegistered);
|
||||||
|
TSynEditCaretFlags = set of TSynEditCaretFlag;
|
||||||
|
|
||||||
TSynEditCaret = class(TSynEditPointBase)
|
TSynEditCaret = class(TSynEditPointBase)
|
||||||
private
|
private
|
||||||
FAllowPastEOL: Boolean;
|
FAllowPastEOL: Boolean;
|
||||||
@ -178,17 +181,22 @@ type
|
|||||||
FForcePastEOL: Integer;
|
FForcePastEOL: Integer;
|
||||||
FForceAdjustToNextChar: Integer;
|
FForceAdjustToNextChar: Integer;
|
||||||
FKeepCaretX: Boolean;
|
FKeepCaretX: Boolean;
|
||||||
|
|
||||||
FLinePos: Integer; // 1 based
|
FLinePos: Integer; // 1 based
|
||||||
FCharPos: Integer; // 1 based
|
FCharPos: Integer; // 1 based
|
||||||
FLastCharPos: Integer; // used by KeepCaretX
|
FLastCharPos: Integer; // used by KeepCaretX
|
||||||
|
|
||||||
FBytePos, FBytePosOffset: Integer; // 1 based
|
FBytePos, FBytePosOffset: Integer; // 1 based
|
||||||
|
|
||||||
FOldLinePos: Integer; // 1 based
|
FOldLinePos: Integer; // 1 based
|
||||||
FOldCharPos: Integer; // 1 based
|
FOldCharPos: Integer; // 1 based
|
||||||
|
|
||||||
FAdjustToNextChar: Boolean;
|
FAdjustToNextChar: Boolean;
|
||||||
FMaxLeftChar: TMaxLeftCharFunc;
|
FMaxLeftChar: TMaxLeftCharFunc;
|
||||||
FChangeOnTouch: Boolean;
|
FChangeOnTouch: Boolean;
|
||||||
FSkipTabs: Boolean;
|
FSkipTabs: Boolean;
|
||||||
FTouched: Boolean;
|
FTouched: Boolean;
|
||||||
|
FFlags: TSynEditCaretFlags;
|
||||||
|
|
||||||
procedure AdjustToChar;
|
procedure AdjustToChar;
|
||||||
procedure UpdateBytePos;
|
procedure UpdateBytePos;
|
||||||
@ -197,7 +205,7 @@ type
|
|||||||
procedure InternalSetLineCharPos(NewLine, NewCharPos: Integer;
|
procedure InternalSetLineCharPos(NewLine, NewCharPos: Integer;
|
||||||
KeepLastCharPos: Boolean = False;
|
KeepLastCharPos: Boolean = False;
|
||||||
ForceSet: Boolean = False);
|
ForceSet: Boolean = False);
|
||||||
procedure setCharPos(const AValue: Integer);
|
procedure SetCharPos(const AValue: Integer);
|
||||||
procedure SetAllowPastEOL(const AValue: Boolean);
|
procedure SetAllowPastEOL(const AValue: Boolean);
|
||||||
procedure SetKeepCaretX(const AValue: Boolean);
|
procedure SetKeepCaretX(const AValue: Boolean);
|
||||||
procedure setLinePos(const AValue: Integer);
|
procedure setLinePos(const AValue: Integer);
|
||||||
@ -211,6 +219,7 @@ type
|
|||||||
function GetLineText: string;
|
function GetLineText: string;
|
||||||
procedure SetLineText(const AValue : string);
|
procedure SetLineText(const AValue : string);
|
||||||
procedure SetSkipTabs(const AValue: Boolean);
|
procedure SetSkipTabs(const AValue: Boolean);
|
||||||
|
procedure RegisterLinesEditedHandler;
|
||||||
protected
|
protected
|
||||||
procedure SetLines(const AValue: TSynEditStrings); override;
|
procedure SetLines(const AValue: TSynEditStrings); override;
|
||||||
procedure DoLock; override;
|
procedure DoLock; override;
|
||||||
@ -452,8 +461,10 @@ end;
|
|||||||
|
|
||||||
procedure TSynEditCaret.IncAutoMoveOnEdit;
|
procedure TSynEditCaret.IncAutoMoveOnEdit;
|
||||||
begin
|
begin
|
||||||
if FAutoMoveOnEdit =0 then
|
if FAutoMoveOnEdit = 0 then begin
|
||||||
|
RegisterLinesEditedHandler;
|
||||||
UpdateBytePos;
|
UpdateBytePos;
|
||||||
|
end;
|
||||||
inc(FAutoMoveOnEdit);
|
inc(FAutoMoveOnEdit);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -621,7 +632,7 @@ begin
|
|||||||
Result := Point(FOldCharPos, FOldLinePos);
|
Result := Point(FOldCharPos, FOldLinePos);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynEditCaret.setCharPos(const AValue : Integer);
|
procedure TSynEditCaret.SetCharPos(const AValue : Integer);
|
||||||
begin
|
begin
|
||||||
InternalSetLineCharPos(FLinePos, AValue);
|
InternalSetLineCharPos(FLinePos, AValue);
|
||||||
end;
|
end;
|
||||||
@ -756,14 +767,23 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSynEditCaret.RegisterLinesEditedHandler;
|
||||||
|
begin
|
||||||
|
if (scLinesEditedRegistered in FFlags) or (FLines = nil) then
|
||||||
|
exit;
|
||||||
|
Include(FFlags, scLinesEditedRegistered);
|
||||||
|
FLines.AddEditHandler(@DoLinesEdited);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSynEditCaret.SetLines(const AValue: TSynEditStrings);
|
procedure TSynEditCaret.SetLines(const AValue: TSynEditStrings);
|
||||||
begin
|
begin
|
||||||
if FLines = AValue then exit;
|
if FLines = AValue then exit;
|
||||||
if FLines <> nil then
|
if (FLines <> nil) then
|
||||||
FLines.RemoveEditHandler(@DoLinesEdited);
|
FLines.RemoveEditHandler(@DoLinesEdited);
|
||||||
|
Exclude(FFlags, scLinesEditedRegistered);
|
||||||
inherited SetLines(AValue);
|
inherited SetLines(AValue);
|
||||||
if FLines <> nil then
|
if FAutoMoveOnEdit > 0 then
|
||||||
FLines.AddEditHandler(@DoLinesEdited);
|
RegisterLinesEditedHandler;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynEditCaret.DoLock;
|
procedure TSynEditCaret.DoLock;
|
||||||
|
Loading…
Reference in New Issue
Block a user