SynEdit, Markup: Defer work if SynEdit is not visible

git-svn-id: trunk@39959 -
This commit is contained in:
martin 2013-01-24 22:35:18 +00:00
parent d67ac0c78c
commit 9256d0293c
5 changed files with 74 additions and 18 deletions

View File

@ -780,6 +780,7 @@ type
AnInfo: TSynEditMouseActionInfo): Boolean;
protected
procedure SetVisible(Value: Boolean); override;
procedure SetColor(Value: TColor); override;
procedure DragOver(Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); override;
@ -3155,6 +3156,13 @@ begin
end;
end;
procedure TCustomSynEdit.SetVisible(Value: Boolean);
begin
inherited SetVisible(Value);
if fMarkupManager <> nil then
fMarkupManager.DoVisibleChanged(Value);
end;
procedure TCustomSynEdit.SetColor(Value: TColor);
begin
inherited SetColor(Value);
@ -3966,7 +3974,8 @@ begin
DoDecPaintLock(Self);
end;
procedure TCustomSynEdit.SetHighlightSearch(const ASearch : String; AOptions : TSynSearchOptions);
procedure TCustomSynEdit.SetHighlightSearch(const ASearch: String;
AOptions: TSynSearchOptions);
begin
fMarkupHighAll.SearchOptions := AOptions;
fMarkupHighAll.SearchString := ASearch;
@ -4699,8 +4708,8 @@ begin
Done := False;
end;
procedure TCustomSynEdit.LineCountChanged(Sender: TSynEditStrings;
AIndex, ACount: Integer);
procedure TCustomSynEdit.LineCountChanged(Sender: TSynEditStrings; AIndex,
ACount: Integer);
begin
{$IFDEF SynFoldDebug}debugln(['FOLD-- LineCountChanged Aindex', AIndex, ' ACount=', ACount]);{$ENDIF}
FBlockSelection.StickyAutoExtend := False;
@ -4735,8 +4744,8 @@ begin
UpdateScrollBars;
end;
procedure TCustomSynEdit.LineTextChanged(Sender: TSynEditStrings;
AIndex, ACount: Integer);
procedure TCustomSynEdit.LineTextChanged(Sender: TSynEditStrings; AIndex,
ACount: Integer);
begin
{$IFDEF SynFoldDebug}debugln(['FOLD-- LineTextChanged Aindex', AIndex, ' ACount=', ACount]);{$ENDIF}
FBlockSelection.StickyAutoExtend := False;

View File

@ -79,6 +79,7 @@ type
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); virtual;
procedure DoTextChanged(StartLine, EndLine : Integer); virtual; // 1 based
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); virtual;
procedure DoVisibleChanged(AVisible: Boolean); virtual;
procedure InvalidateSynLines(FirstLine, LastLine: integer); // Call Synedt to invalidate lines
function ScreenRowToRow(aRow : Integer) : Integer;
@ -147,6 +148,7 @@ type
destructor Destroy; override;
procedure IncPaintLock; override;
procedure DecPaintLock; override;
procedure DoVisibleChanged(AVisible: Boolean); override;
Procedure AddMarkUp(aMarkUp : TSynEditMarkup; AsFirst: Boolean = False);
Procedure RemoveMarkUp(aMarkUp : TSynEditMarkup);
@ -317,6 +319,11 @@ procedure TSynEditMarkup.DoMarkupChanged(AMarkup : TSynSelectedColor);
begin
end;
procedure TSynEditMarkup.DoVisibleChanged(AVisible: Boolean);
begin
//
end;
procedure TSynEditMarkup.InvalidateSynLines(FirstLine, LastLine : integer);
begin
if assigned(fInvalidateLinesMethod)
@ -371,7 +378,7 @@ begin
inherited Destroy;
end;
procedure TSynEditMarkup.FinishMarkupForRow(aRow : Integer);
procedure TSynEditMarkup.FinishMarkupForRow(aRow: Integer);
begin
end;
@ -415,7 +422,7 @@ begin
dec(FPaintLock);
end;
procedure TSynEditMarkup.PrepareMarkupForRow(aRow : Integer);
procedure TSynEditMarkup.PrepareMarkupForRow(aRow: Integer);
begin
end;
@ -456,7 +463,8 @@ begin
TSynEditMarkup(fMarkUpList[i]).DecPaintLock;
end;
procedure TSynEditMarkupManager.AddMarkUp(aMarkUp : TSynEditMarkup; AsFirst: Boolean = False);
procedure TSynEditMarkupManager.AddMarkUp(aMarkUp: TSynEditMarkup;
AsFirst: Boolean);
begin
if AsFirst then
fMarkUpList.Insert(0, aMarkUp)
@ -486,7 +494,7 @@ begin
Result := fMarkUpList.Count;
end;
procedure TSynEditMarkupManager.FinishMarkupForRow(aRow : Integer);
procedure TSynEditMarkupManager.FinishMarkupForRow(aRow: Integer);
var
i : integer;
begin
@ -504,7 +512,7 @@ begin
TSynEditMarkup(fMarkUpList[i]).EndMarkup;
end;
procedure TSynEditMarkupManager.PrepareMarkupForRow(aRow : Integer);
procedure TSynEditMarkupManager.PrepareMarkupForRow(aRow: Integer);
var
i : integer;
begin
@ -527,7 +535,8 @@ begin
end;
function TSynEditMarkupManager.GetMarkupAttributeAtRowCol(const aRow: Integer;
const aStartCol: TLazSynDisplayTokenBound; const AnRtlInfo: TLazSynDisplayRtlInfo) : TSynSelectedColor;
const aStartCol: TLazSynDisplayTokenBound;
const AnRtlInfo: TLazSynDisplayRtlInfo): TSynSelectedColor;
begin
assert(false);
Result := MarkupInfo;
@ -575,7 +584,8 @@ begin
end;
end;
procedure TSynEditMarkupManager.TextChanged(aFirstCodeLine, aLastCodeLine: Integer);
procedure TSynEditMarkupManager.TextChanged(aFirstCodeLine,
aLastCodeLine: Integer);
var
i : integer;
begin
@ -644,6 +654,16 @@ begin
TSynEditMarkup(fMarkUpList[i]).SetCaret(AValue);
end;
procedure TSynEditMarkupManager.DoVisibleChanged(AVisible: Boolean);
var
i: Integer;
begin
inherited DoVisibleChanged(AVisible);
if fMarkUpList = nil then exit;
for i := 0 to fMarkUpList.Count-1 do
TSynEditMarkup(fMarkUpList[i]).DoVisibleChanged(AVisible);
end;
end.

View File

@ -52,6 +52,7 @@ type
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override;
procedure DoTextChanged(StartLine, EndLine : Integer); override;
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
procedure DoVisibleChanged(AVisible: Boolean); override;
public
constructor Create(ASynEdit: TSynEditBase);
procedure DecPaintLock; override;
@ -172,12 +173,21 @@ begin
InvalidateBracketHighlight;
end;
procedure TSynEditMarkupBracket.DoVisibleChanged(AVisible: Boolean);
begin
inherited DoVisibleChanged(AVisible);
if SynEdit.IsVisible then
InvalidateBracketHighlight;
end;
procedure TSynEditMarkupBracket.InvalidateBracketHighlight;
var
NewPos, NewAntiPos, SwapPos : TPoint;
begin
FNeedInvalidate := True;
if (Caret = nil) or (not SynEdit.HandleAllocated) or (FPaintLock > 0) then
if (Caret = nil) or (not SynEdit.HandleAllocated) or (FPaintLock > 0) or
(not SynEdit.IsVisible)
then
exit;
FNeedInvalidate := False;

View File

@ -110,6 +110,7 @@ type
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override;
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
procedure DoTextChanged(StartLine, EndLine: 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;
property MarkupEnabled: Boolean read FMarkupEnabled;
@ -697,7 +698,7 @@ var
FirstKeptValidIdx: Integer; // The first index, kept after the removed invalidated range
p: TPoint;
begin
if FPaintLock > 0 then begin
if (FPaintLock > 0) or (not SynEdit.IsVisible) then begin
FNeedValidate := True;
if not SkipPaint then
FNeedValidatePaint := True;
@ -718,7 +719,6 @@ begin
MaybeDropOldMatches;
FirstKeptValidIdx := DeleteInvalidMatches;
//DebugLnEnter(['>>> ValidateMatches ', FFirstInvalidLine, ' - ',FLastInvalidLine, ' Cnt=',FMatches.Count, ' Idx: ', FirstKeptValidIdx, ' ',SynEdit.Name, ' # ',fSearchString]);
FindInitialize;
if not IsPosValid(FSearchedEnd) then
@ -841,14 +841,21 @@ begin
InvalidateLines(StartLine, MaxInt); // EndLine); // Might be LineCount changed
end;
procedure TSynEditMarkupHighlightAll.DoVisibleChanged(AVisible: Boolean);
begin
inherited DoVisibleChanged(AVisible);
if FNeedValidate and SynEdit.IsVisible then
ValidateMatches(True);
end;
function TSynEditMarkupHighlightAll.HasVisibleMatch: Boolean;
begin
Result := ( HideSingleMatch and (FMatches.Count > 1) ) or
( (not HideSingleMatch) and (FMatches.Count > 0) );
end;
procedure TSynEditMarkupHighlightAll.InvalidateLines(AFirstLine: Integer; ALastLine: Integer;
SkipPaint: Boolean);
procedure TSynEditMarkupHighlightAll.InvalidateLines(AFirstLine: Integer;
ALastLine: Integer; SkipPaint: Boolean);
begin
if AFirstLine < 1 then
AFirstLine := 1;

View File

@ -56,6 +56,7 @@ type
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override;
procedure DoTextChanged(StartLine, EndLine : Integer); override;
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
procedure DoVisibleChanged(AVisible: Boolean); override;
procedure InvalidateCurrentHighlight;
public
constructor Create(ASynEdit: TSynEditBase);
@ -329,12 +330,21 @@ begin
InvalidateCurrentHighlight;
end;
procedure TSynEditMarkupWordGroup.DoVisibleChanged(AVisible: Boolean);
begin
inherited DoVisibleChanged(AVisible);
if SynEdit.IsVisible then
InvalidateCurrentHighlight;
end;
procedure TSynEditMarkupWordGroup.InvalidateCurrentHighlight;
var
NewPos, NewAntiPos, NewMiddlePos : TWordPoint;
begin
FNeedInvalidate := True;
if (Caret = nil) or (not SynEdit.HandleAllocated) or (FPaintLock > 0) then
if (Caret = nil) or (not SynEdit.HandleAllocated) or (FPaintLock > 0) or
(not SynEdit.IsVisible)
then
exit;
FNeedInvalidate := False;