mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 02:29:21 +02:00
SynEdit: reduce Markup overhead
git-svn-id: trunk@25907 -
This commit is contained in:
parent
e8cd533048
commit
fd774a6bc5
@ -1802,6 +1802,7 @@ begin
|
||||
FOldTopView := TopView;
|
||||
end;
|
||||
inc(FPaintLock);
|
||||
FMarkupManager.IncPaintLock;
|
||||
FFoldedLinesView.Lock; //DecPaintLock triggers ScanFrom, and folds must wait
|
||||
FTrimmedLinesView.Lock; // Lock before caret
|
||||
FCaret.Lock;
|
||||
@ -1827,6 +1828,7 @@ begin
|
||||
FCaret.Unlock; // Maybe after FFoldedLinesView
|
||||
FTrimmedLinesView.UnLock; // Must be unlocked after caret // May Change lines
|
||||
FFoldedLinesView.UnLock; // after ScanFrom, but before UpdateCaret
|
||||
FMarkupManager.DecPaintLock;
|
||||
Dec(FPaintLock);
|
||||
if (FPaintLock = 0) and HandleAllocated then begin
|
||||
ScrollAfterTopLineChanged;
|
||||
@ -4111,13 +4113,13 @@ end;
|
||||
procedure TCustomSynEdit.CreateHandle;
|
||||
begin
|
||||
Application.RemoveOnIdleHandler(@IdleScanRanges);
|
||||
inherited CreateHandle; //SizeOrFontChanged will be called
|
||||
ScanRanges;
|
||||
if sfAfterLoadFromFile in fStateFlags then
|
||||
AfterLoadFromFile;
|
||||
UpdateScrollBars;
|
||||
//if fStateFlags * [sfEnsureCursorPos, sfEnsureCursorPosAtResize] <> [] then
|
||||
// EnsureCursorPosVisible;
|
||||
DoIncPaintLock(nil);
|
||||
try
|
||||
inherited CreateHandle; //SizeOrFontChanged will be called
|
||||
Include(fStateFlags, sfScrollbarChanged);
|
||||
finally
|
||||
DoDecPaintLock(nil);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCustomSynEdit.SetScrollBars(const Value: TScrollStyle);
|
||||
@ -4648,6 +4650,7 @@ begin
|
||||
FHighlighter.CurrentLines := FLines; // Trailing spaces are not needed
|
||||
FHighlighter.ScanRanges;
|
||||
|
||||
// Todo: text may not have changed
|
||||
fMarkupManager.TextChanged(FChangedLinesStart, FChangedLinesEnd);
|
||||
Topline := TopLine;
|
||||
end;
|
||||
@ -5549,7 +5552,7 @@ begin
|
||||
fTSearch.ResetIdentChars;
|
||||
end;
|
||||
RecalcCharExtent;
|
||||
ScanRanges;
|
||||
ScanRanges; // Todo: Skip if paintlocked
|
||||
finally
|
||||
DecPaintLock;
|
||||
end;
|
||||
@ -6484,7 +6487,6 @@ begin
|
||||
end;
|
||||
Exclude(fStateFlags, sfAfterLoadFromFile);
|
||||
if assigned(FFoldedLinesView) then begin
|
||||
// TODO: Maybe defer until after paintlock?
|
||||
ScanRanges;
|
||||
FFoldedLinesView.UnfoldAll;
|
||||
FFoldedLinesView.CollapseDefaultFolds;
|
||||
|
@ -61,6 +61,7 @@ type
|
||||
procedure SetStyle(const AValue : TFontStyles);
|
||||
|
||||
protected
|
||||
FPaintLock: Integer;
|
||||
procedure MarkupChanged(AMarkup: TObject);
|
||||
|
||||
procedure SetInvalidateLinesMethod(const AValue : TInvalidateLines); virtual;
|
||||
@ -98,6 +99,8 @@ type
|
||||
Procedure TextChanged(aFirstCodeLine, aLastCodeLine: Integer); virtual;
|
||||
Procedure TempDisable;
|
||||
Procedure TempEnable;
|
||||
procedure IncPaintLock; virtual;
|
||||
procedure DecPaintLock; virtual;
|
||||
|
||||
property MarkupInfo : TSynSelectedColor read fMarkupInfo;
|
||||
property FGColor : TColor read GetFGColor;
|
||||
@ -129,7 +132,9 @@ type
|
||||
public
|
||||
constructor Create(ASynEdit : TSynEditBase);
|
||||
destructor Destroy; override;
|
||||
|
||||
procedure IncPaintLock; override;
|
||||
procedure DecPaintLock; override;
|
||||
|
||||
Procedure AddMarkUp(aMarkUp : TSynEditMarkup; AsFirst: Boolean = False);
|
||||
Procedure RemoveMarkUp(aMarkUp : TSynEditMarkup);
|
||||
function Count: Integer;
|
||||
@ -361,6 +366,16 @@ begin
|
||||
dec(FTempEnable);
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkup.IncPaintLock;
|
||||
begin
|
||||
inc(FPaintLock);
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkup.DecPaintLock;
|
||||
begin
|
||||
dec(FPaintLock);
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkup.PrepareMarkupForRow(aRow : Integer);
|
||||
begin
|
||||
end;
|
||||
@ -384,6 +399,24 @@ begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupManager.IncPaintLock;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
inherited IncPaintLock;
|
||||
for i := 0 to fMarkUpList.Count-1 do
|
||||
TSynEditMarkup(fMarkUpList[i]).IncPaintLock;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupManager.DecPaintLock;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
inherited DecPaintLock;
|
||||
for i := 0 to fMarkUpList.Count-1 do
|
||||
TSynEditMarkup(fMarkUpList[i]).IncPaintLock;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupManager.AddMarkUp(aMarkUp : TSynEditMarkup; AsFirst: Boolean = False);
|
||||
begin
|
||||
if AsFirst then
|
||||
|
@ -42,6 +42,7 @@ type
|
||||
FBracketHighlightPos: TPoint;
|
||||
FBracketHighlightAntiPos: TPoint;
|
||||
FHighlightStyle: TSynEditBracketHighlightStyle;
|
||||
FNeedInvalidate: Boolean;
|
||||
procedure SetHighlightStyle(const AValue: TSynEditBracketHighlightStyle);
|
||||
protected
|
||||
procedure FindMatchingBracketPair(PhysCaret: TPoint;
|
||||
@ -53,6 +54,7 @@ type
|
||||
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
|
||||
public
|
||||
constructor Create(ASynEdit: TSynEditBase);
|
||||
procedure DecPaintLock; override;
|
||||
|
||||
function GetMarkupAttributeAtRowCol(const aRow, aCol: Integer): TSynSelectedColor; override;
|
||||
function GetNextMarkupColAfterRowCol(const aRow, aCol: Integer): Integer; override;
|
||||
@ -79,6 +81,13 @@ begin
|
||||
MarkupInfo.StyleMask := [];
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupBracket.DecPaintLock;
|
||||
begin
|
||||
inherited DecPaintLock;
|
||||
if (FPaintLock = 0) and FNeedInvalidate then
|
||||
InvalidateBracketHighlight;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupBracket.SetHighlightStyle(
|
||||
const AValue: TSynEditBracketHighlightStyle);
|
||||
begin
|
||||
@ -163,8 +172,11 @@ procedure TSynEditMarkupBracket.InvalidateBracketHighlight;
|
||||
var
|
||||
NewPos, NewAntiPos, SwapPos : TPoint;
|
||||
begin
|
||||
if (Caret = nil) or (not SynEdit.HandleAllocated) then
|
||||
FNeedInvalidate := True;
|
||||
if (Caret = nil) or (not SynEdit.HandleAllocated) or (FPaintLock > 0) then
|
||||
exit;
|
||||
|
||||
FNeedInvalidate := False;
|
||||
NewPos.Y:=-1;
|
||||
NewAntiPos.Y:=-1;
|
||||
if eoBracketHighlight in TSynEdit(SynEdit).Options
|
||||
|
@ -45,6 +45,7 @@ type
|
||||
FHighlightPos2: TWordPoint;
|
||||
FHighlightPos3: TWordPoint;
|
||||
FHighlighter: TSynCustomHighlighter;
|
||||
FNeedInvalidate: Boolean;
|
||||
procedure SetHighlighter(const AValue: TSynCustomHighlighter);
|
||||
protected
|
||||
procedure FindMatchingWords(PhysCaret: TPoint;
|
||||
@ -57,6 +58,7 @@ type
|
||||
procedure InvalidateCurrentHighlight;
|
||||
public
|
||||
constructor Create(ASynEdit: TSynEditBase);
|
||||
procedure DecPaintLock; override;
|
||||
|
||||
function GetMarkupAttributeAtRowCol(const aRow, aCol: Integer): TSynSelectedColor; override;
|
||||
function GetNextMarkupColAfterRowCol(const aRow, aCol: Integer): Integer; override;
|
||||
@ -99,6 +101,13 @@ begin
|
||||
MarkupInfo.StyleMask := [];
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupWordGroup.DecPaintLock;
|
||||
begin
|
||||
inherited DecPaintLock;
|
||||
if (FPaintLock = 0) and FNeedInvalidate then
|
||||
InvalidateCurrentHighlight;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkupWordGroup.SetHighlighter(const AValue: TSynCustomHighlighter);
|
||||
begin
|
||||
FHighlighter := AValue;
|
||||
@ -319,8 +328,11 @@ procedure TSynEditMarkupWordGroup.InvalidateCurrentHighlight;
|
||||
var
|
||||
NewPos, NewAntiPos, NewMiddlePos : TWordPoint;
|
||||
begin
|
||||
if (Caret = nil) or (not SynEdit.HandleAllocated) then
|
||||
FNeedInvalidate := True;
|
||||
if (Caret = nil) or (not SynEdit.HandleAllocated) or (FPaintLock > 0) then
|
||||
exit;
|
||||
|
||||
FNeedInvalidate := False;
|
||||
FindMatchingWords(Caret.LineCharPos, NewPos, NewAntiPos, NewMiddlePos);
|
||||
|
||||
// invalidate old highlighting, if changed
|
||||
|
Loading…
Reference in New Issue
Block a user