SynEdit, Markup-HighAll: Small optimization, when text edited (better invalidation range)

git-svn-id: trunk@39961 -
This commit is contained in:
martin 2013-01-25 00:23:30 +00:00
parent 91d248abf7
commit d488360cad
6 changed files with 34 additions and 23 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;