mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-26 15:00:26 +02:00
SynEdit, Markup-HighAll: Small optimization, when text edited (better invalidation range)
git-svn-id: trunk@39961 -
This commit is contained in:
parent
91d248abf7
commit
d488360cad
@ -466,6 +466,7 @@ type
|
||||
FLastMousePoint: TPoint; // Pixel
|
||||
FChangedLinesStart: integer; // 1 based, 0 means invalid
|
||||
FChangedLinesEnd: integer; // 1 based, 0 means invalid, -1 means rest of screen
|
||||
FChangedLinesDiff: integer; // count changed +/-
|
||||
FBeautifier, FDefaultBeautifier: TSynCustomBeautifier;
|
||||
FBeautifyStartLineIdx, FBeautifyEndLineIdx: Integer;
|
||||
|
||||
@ -2239,6 +2240,7 @@ begin
|
||||
end;
|
||||
FChangedLinesStart:=0;
|
||||
FChangedLinesEnd:=0;
|
||||
FChangedLinesDiff:=0;
|
||||
end;
|
||||
FCaret.Unlock; // Maybe after FFoldedLinesView
|
||||
FBlockSelection.Unlock;
|
||||
@ -4677,7 +4679,7 @@ begin
|
||||
end;
|
||||
if not assigned(FHighlighter) then begin
|
||||
if ATextChanged then begin
|
||||
fMarkupManager.TextChanged(FChangedLinesStart, FChangedLinesEnd);
|
||||
fMarkupManager.TextChanged(FChangedLinesStart, FChangedLinesEnd, FChangedLinesDiff);
|
||||
// TODO: see TSynEditFoldedView.LineCountChanged, this is only needed, because NeedFixFrom does not always work
|
||||
FFoldedLinesView.FixFoldingAtTextIndex(FChangedLinesStart, FChangedLinesEnd);
|
||||
end;
|
||||
@ -4689,7 +4691,7 @@ begin
|
||||
|
||||
// Todo: text may not have changed
|
||||
if ATextChanged then
|
||||
fMarkupManager.TextChanged(FChangedLinesStart, FChangedLinesEnd);
|
||||
fMarkupManager.TextChanged(FChangedLinesStart, FChangedLinesEnd, FChangedLinesDiff);
|
||||
TopView := TopView;
|
||||
end;
|
||||
|
||||
@ -4732,6 +4734,7 @@ begin
|
||||
if (FChangedLinesStart<1) or (FChangedLinesStart>AIndex+1) then
|
||||
FChangedLinesStart:=AIndex+1;
|
||||
FChangedLinesEnd := -1; // Invalidate the rest of lines
|
||||
FChangedLinesDiff := FChangedLinesDiff + ACount;
|
||||
end else begin
|
||||
ScanRanges;
|
||||
InvalidateLines(AIndex + 1, -1);
|
||||
@ -7649,7 +7652,7 @@ begin
|
||||
if fHighlighter.AttributeChangeNeedScan then begin
|
||||
FHighlighter.CurrentLines := FTheLinesView;
|
||||
FHighlighter.ScanAllRanges;
|
||||
fMarkupManager.TextChanged(0, FTheLinesView.Count - 1);
|
||||
fMarkupManager.TextChanged(0, FTheLinesView.Count - 1, 0);
|
||||
TopView := TopView;
|
||||
end;
|
||||
end;
|
||||
|
@ -77,7 +77,7 @@ type
|
||||
procedure DoCaretChanged(Sender: TObject); virtual;
|
||||
procedure DoTopLineChanged(OldTopLine : Integer); virtual;
|
||||
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); virtual;
|
||||
procedure DoTextChanged(StartLine, EndLine : Integer); virtual; // 1 based
|
||||
procedure DoTextChanged(StartLine, EndLine, ACountDiff: Integer); virtual; // 1 based
|
||||
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); virtual;
|
||||
procedure DoVisibleChanged(AVisible: Boolean); virtual;
|
||||
|
||||
@ -109,7 +109,7 @@ type
|
||||
AMarkup: TSynSelectedColor); virtual;
|
||||
|
||||
// Notifications about Changes to the text
|
||||
Procedure TextChanged(aFirstCodeLine, aLastCodeLine: Integer); virtual; // 1 based
|
||||
Procedure TextChanged(aFirstCodeLine, aLastCodeLine, ACountDiff: Integer); virtual; // 1 based
|
||||
Procedure TempDisable;
|
||||
Procedure TempEnable;
|
||||
procedure IncPaintLock; virtual;
|
||||
@ -174,7 +174,7 @@ type
|
||||
AMarkup: TSynSelectedColor); override;
|
||||
|
||||
// Notifications about Changes to the text
|
||||
Procedure TextChanged(aFirstCodeLine, aLastCodeLine: Integer); override;
|
||||
Procedure TextChanged(aFirstCodeLine, aLastCodeLine, ACountDiff: Integer); override;
|
||||
end;
|
||||
|
||||
|
||||
@ -311,7 +311,7 @@ procedure TSynEditMarkup.DoLinesInWindoChanged(OldLinesInWindow : Integer);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkup.DoTextChanged(StartLine, EndLine: Integer);
|
||||
procedure TSynEditMarkup.DoTextChanged(StartLine, EndLine, ACountDiff: Integer);
|
||||
begin
|
||||
end;
|
||||
|
||||
@ -396,9 +396,9 @@ begin
|
||||
AMarkup.Merge(c, aStartCol, AEndCol);
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkup.TextChanged(aFirstCodeLine, aLastCodeLine: Integer);
|
||||
procedure TSynEditMarkup.TextChanged(aFirstCodeLine, aLastCodeLine, ACountDiff: Integer);
|
||||
begin
|
||||
DoTextChanged(aFirstCodeLine, aLastCodeLine);
|
||||
DoTextChanged(aFirstCodeLine, aLastCodeLine, ACountDiff);
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkup.TempDisable;
|
||||
@ -584,13 +584,13 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupManager.TextChanged(aFirstCodeLine,
|
||||
aLastCodeLine: Integer);
|
||||
procedure TSynEditMarkupManager.TextChanged(aFirstCodeLine, aLastCodeLine,
|
||||
ACountDiff: Integer);
|
||||
var
|
||||
i : integer;
|
||||
begin
|
||||
for i := 0 to fMarkUpList.Count-1 do
|
||||
TSynEditMarkup(fMarkUpList[i]).TextChanged(aFirstCodeLine, aLastCodeLine);
|
||||
TSynEditMarkup(fMarkUpList[i]).TextChanged(aFirstCodeLine, aLastCodeLine, ACountDiff);
|
||||
end;
|
||||
|
||||
function TSynEditMarkupManager.GetMarkup(Index: integer): TSynEditMarkup;
|
||||
|
@ -50,7 +50,7 @@ type
|
||||
procedure DoCaretChanged(Sender: TObject); override;
|
||||
procedure DoTopLineChanged(OldTopLine : Integer); override;
|
||||
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override;
|
||||
procedure DoTextChanged(StartLine, EndLine : Integer); override;
|
||||
procedure DoTextChanged(StartLine, EndLine, ACountDiff: Integer); override;
|
||||
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
|
||||
procedure DoVisibleChanged(AVisible: Boolean); override;
|
||||
public
|
||||
@ -163,7 +163,8 @@ begin
|
||||
InvalidateBracketHighlight;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupBracket.DoTextChanged(StartLine, EndLine: Integer);
|
||||
procedure TSynEditMarkupBracket.DoTextChanged(StartLine, EndLine,
|
||||
ACountDiff: Integer);
|
||||
begin
|
||||
InvalidateBracketHighlight;
|
||||
end;
|
||||
|
@ -109,7 +109,7 @@ type
|
||||
procedure DoTopLineChanged(OldTopLine : Integer); override;
|
||||
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override;
|
||||
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
|
||||
procedure DoTextChanged(StartLine, EndLine: Integer); override; // 1 based
|
||||
procedure DoTextChanged(StartLine, EndLine, ACountDiff: Integer); override; // 1 based
|
||||
procedure DoVisibleChanged(AVisible: Boolean); override;
|
||||
function HasVisibleMatch: Boolean; // does not check, if in visible line range. Only Count and DideSingleMatch
|
||||
property MatchCount: Integer read GetMatchCount;
|
||||
@ -169,7 +169,7 @@ type
|
||||
procedure SetSearchString(const AValue : String); override;
|
||||
procedure SelectionChanged(Sender: TObject);
|
||||
procedure DoCaretChanged(Sender: TObject); override;
|
||||
procedure DoTextChanged(StartLine, EndLine : Integer); override;
|
||||
procedure DoTextChanged(StartLine, EndLine, ACountDiff: Integer); override;
|
||||
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
|
||||
procedure RestartTimer;
|
||||
procedure ScrollTimerHandler(Sender: TObject);
|
||||
@ -835,10 +835,14 @@ begin
|
||||
FNextPosRow := -1;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupHighlightAll.DoTextChanged(StartLine, EndLine: Integer);
|
||||
procedure TSynEditMarkupHighlightAll.DoTextChanged(StartLine, EndLine,
|
||||
ACountDiff: Integer);
|
||||
begin
|
||||
if (fSearchString = '') then exit;
|
||||
InvalidateLines(StartLine, MaxInt); // EndLine); // Might be LineCount changed
|
||||
if ACountDiff = 0 then
|
||||
InvalidateLines(StartLine, EndLine+1)
|
||||
else
|
||||
InvalidateLines(StartLine, MaxInt); // LineCount changed
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupHighlightAll.DoVisibleChanged(AVisible: Boolean);
|
||||
@ -1134,7 +1138,8 @@ begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupHighlightAllCaret.DoTextChanged(StartLine, EndLine: Integer);
|
||||
procedure TSynEditMarkupHighlightAllCaret.DoTextChanged(StartLine, EndLine,
|
||||
ACountDiff: Integer);
|
||||
begin
|
||||
FStateChanged := True; // Something changed, paint will be called
|
||||
if ( (not HideSingleMatch) and (MatchCount > 0) ) or
|
||||
|
@ -50,7 +50,7 @@ type
|
||||
procedure DoCaretChanged(Sender: TObject); override;
|
||||
procedure DoTopLineChanged(OldTopLine : Integer); override;
|
||||
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override;
|
||||
procedure DoTextChanged(StartLine, EndLine : Integer); override;
|
||||
procedure DoTextChanged(StartLine, EndLine, ACountDiff: Integer); override;
|
||||
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
|
||||
public
|
||||
constructor Create(ASynEdit: TSynEditBase);
|
||||
@ -110,7 +110,8 @@ begin
|
||||
InvalidateLineHighlight;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupSpecialLine.DoTextChanged(StartLine, EndLine: Integer);
|
||||
procedure TSynEditMarkupSpecialLine.DoTextChanged(StartLine, EndLine,
|
||||
ACountDiff: Integer);
|
||||
begin
|
||||
InvalidateLineHighlight;
|
||||
end;
|
||||
|
@ -54,7 +54,7 @@ type
|
||||
procedure DoCaretChanged(Sender: TObject); override;
|
||||
procedure DoTopLineChanged(OldTopLine : Integer); override;
|
||||
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override;
|
||||
procedure DoTextChanged(StartLine, EndLine : Integer); override;
|
||||
procedure DoTextChanged(StartLine, EndLine, ACountDiff: Integer); override;
|
||||
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
|
||||
procedure DoVisibleChanged(AVisible: Boolean); override;
|
||||
procedure InvalidateCurrentHighlight;
|
||||
@ -319,7 +319,8 @@ procedure TSynEditMarkupWordGroup.DoLinesInWindoChanged(OldLinesInWindow: Intege
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupWordGroup.DoTextChanged(StartLine, EndLine: Integer);
|
||||
procedure TSynEditMarkupWordGroup.DoTextChanged(StartLine, EndLine,
|
||||
ACountDiff: Integer);
|
||||
begin
|
||||
InvalidateCurrentHighlight;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user