mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-08 14:35:58 +02:00
SynEdit: Fixed some issues with not redrawing when folded
git-svn-id: trunk@20621 -
This commit is contained in:
parent
2401f2c20c
commit
00e3b0160c
@ -1688,12 +1688,12 @@ procedure TCustomSynEdit.ScanFromAfterLock;
|
||||
var
|
||||
LastLineChanged: LongInt;
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- ScanFromAfterLock; fPaintLock:=', fPaintLock, ' fHighlighterNeedsUpdateStartLine=', fHighlighterNeedsUpdateStartLine,' fHighlighterNeedsUpdateEndLine=',fHighlighterNeedsUpdateEndLine]);{$ENDIF}
|
||||
if fHighlighterNeedsUpdateStartLine>0 then begin
|
||||
//DebugLn('TCustomSynEdit.DecPaintLock ',dbgs(fHighlighterNeedsUpdateStartLine),'-',dbgs(fHighlighterNeedsUpdateEndLine));
|
||||
if fHighlighterNeedsUpdateStartLine<=FTheLinesView.Count then begin
|
||||
if fHighlighterNeedsUpdateEndLine>FTheLinesView.Count then
|
||||
fHighlighterNeedsUpdateEndLine:=FTheLinesView.Count;
|
||||
LastLineChanged:=fHighlighterNeedsUpdateEndLine;
|
||||
// rescan all lines in range
|
||||
// Note: The highlighter range of the line can be invalid as well,
|
||||
// so start scan one line earlier
|
||||
@ -4379,6 +4379,7 @@ end;
|
||||
function TCustomSynEdit.ScanFrom(var Index: integer; AtLeastTilIndex: integer): integer;
|
||||
// Index and AtLeastTilIndex are 0 based
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- ScanFrom Index=', Index, ' AtLeats=', AtLeastTilIndex]);{$ENDIF}
|
||||
if Index < 0 then Index := 0;
|
||||
if not assigned(fHighlighter) or (Index > FTheLinesView.Count - 1) then begin
|
||||
FFoldedLinesView.FixFoldingAtTextIndex(Index);
|
||||
@ -4395,11 +4396,13 @@ begin
|
||||
Topline := TopLine;
|
||||
if Index > 0 then dec(Index);
|
||||
Dec(Result);
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- ScanFrom Result=', Result]);{$ENDIF}
|
||||
end;
|
||||
|
||||
procedure TCustomSynEdit.LineCountChanged(Sender: TSynEditStrings;
|
||||
AIndex, ACount: Integer);
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- LineCountChanged Aindex', AIndex, ' ACount=', ACount]);{$ENDIF}
|
||||
if PaintLock>0 then begin
|
||||
if (fHighlighterNeedsUpdateStartLine<1)
|
||||
or (fHighlighterNeedsUpdateStartLine>AIndex+1) then
|
||||
@ -4426,6 +4429,7 @@ procedure TCustomSynEdit.LineTextChanged(Sender: TSynEditStrings;
|
||||
var
|
||||
EndIndex: Integer;
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- LineTextChanged Aindex', AIndex, ' ACount=', ACount]);{$ENDIF}
|
||||
if PaintLock>0 then begin
|
||||
if (fHighlighterNeedsUpdateStartLine<1)
|
||||
or (fHighlighterNeedsUpdateStartLine>AIndex+1) then
|
||||
@ -4460,6 +4464,7 @@ procedure TCustomSynEdit.FoldChanged(Index : integer);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- FoldChanged; Index=', Index, ' topline=', TopLine, ' ScreenRowToRow(LinesInWindow + 1)=', ScreenRowToRow(LinesInWindow + 1)]);{$ENDIF}
|
||||
TopLine := TopLine;
|
||||
i := FFoldedLinesView.CollapsedLineForFoldAtLine(CaretY);
|
||||
if i > 0 then begin
|
||||
|
@ -328,7 +328,6 @@ type
|
||||
Line, LogX, LogX2, ELine, ELogX, ELogX2, FType: Integer;
|
||||
end;
|
||||
|
||||
|
||||
{ TSynTextFoldAVLNodeData }
|
||||
|
||||
function TSynTextFoldAVLNodeData.TreeDepth : integer;
|
||||
@ -874,6 +873,7 @@ function TSynTextFoldAVLTree.InsertNewFold(ALine, AColumn, ACount : Integer) : T
|
||||
var
|
||||
r : TSynTextFoldAVLNodeData;
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- InsertNewFold ALine:=', ALine, ' AColumn=', AColumn]);{$ENDIF}
|
||||
r := NewNode;
|
||||
r.LineOffset := ALine;
|
||||
r.FoldIndex := AColumn;
|
||||
@ -891,6 +891,7 @@ var
|
||||
OldFold : TSynTextFoldAVLNode;
|
||||
lcount: Integer;
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- RemoveFoldForLine ALine:=', ALine, ' IgnoreFirst=', IgnoreFirst,' OnlyCol=',OnlyCol]);{$ENDIF}
|
||||
Result := ALine;
|
||||
OldFold := FindFoldForLine(ALine, true);
|
||||
if (not OldFold.IsInFold) // behind last node
|
||||
@ -923,6 +924,7 @@ var
|
||||
OnlyNested: Boolean;
|
||||
Nested: TSynTextFoldAVLNode;
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- RemoveFoldForNodeAtLine: ALine:=', ALine, ' ANode.StartLine=', ANode.StartLine]);{$ENDIF}
|
||||
OnlyNested := ALine >= ANode.StartLine + ANode.FullCount;
|
||||
// The cfCollapsed line is one line before the fold
|
||||
Result := ANode.StartLine-1; // Return the cfcollapsed that was unfolded
|
||||
@ -1764,6 +1766,7 @@ begin
|
||||
// ftopline is not a folded line
|
||||
// so node.FoldedBefore(next node after ftopl) does apply
|
||||
tpos := fTopLine + node.FoldedBefore;
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- CalculateMaps fTopLine:=', fTopLine, ' tpos=',tpos]);{$ENDIF}
|
||||
cnt := fLines.Count;
|
||||
for i := 0 to fLinesInWindow do begin
|
||||
if tpos > cnt then begin
|
||||
@ -2236,12 +2239,16 @@ var
|
||||
Procedure DoRemoveNode(var theNode: TSynTextFoldAVLNode);
|
||||
var
|
||||
tmpnode: TSynTextFoldAVLNode;
|
||||
l: Integer;
|
||||
begin
|
||||
Result := True;
|
||||
tmpnode := theNode.Prev;
|
||||
l := theNode.StartLine;
|
||||
doFoldTree.RemoveFoldForNodeAtLine(theNode, -1); // Don't touch any nested node
|
||||
if tmpnode.IsInFold then theNode := tmpnode.Next
|
||||
else theNode := doFoldTree.FindFirstFold;
|
||||
if Assigned(fOnFoldChanged) then
|
||||
fOnFoldChanged(l);
|
||||
end;
|
||||
var
|
||||
FldLine, FldIndex, FldLen, FldCol: Integer;
|
||||
@ -2318,6 +2325,7 @@ var
|
||||
var
|
||||
node, tmpnode: TSynTextFoldAVLNode;
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['>>FOLD-- FixFolding: Start=', AStart, ' AMinEnd=',AMinEnd]);{$ENDIF}
|
||||
Result := false;
|
||||
if fLockCount > 0 then begin
|
||||
fNeedCaretCheck := true; // We may be here as a result of lines deleted/inserted
|
||||
@ -2353,6 +2361,7 @@ begin
|
||||
|
||||
Result := DoFixFolding(AStart, AMinEnd, 0, aFoldTree, node);
|
||||
CalculateMaps;
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['<<FOLD-- FixFolding: DONE=', Result]);{$ENDIF}
|
||||
end;
|
||||
|
||||
procedure TSynEditFoldedView.DoCaretChanged(Sender : TObject);
|
||||
@ -2364,12 +2373,14 @@ begin
|
||||
exit;
|
||||
end;
|
||||
i := TSynEditCaret(Sender).LinePos-1;
|
||||
{$IFDEF SYNFOLDDEBUG}if FoldedAtTextIndex[i] then debugln(['FOLD-- DoCaretChanged about to unfold at Index=', i]);{$ENDIF}
|
||||
if FoldedAtTextIndex[i] then
|
||||
UnFoldAtTextIndexCollapsed(i);
|
||||
end;
|
||||
|
||||
procedure TSynEditFoldedView.LineCountChanged(Sender: TSynEditStrings; AIndex, ACount : Integer);
|
||||
begin
|
||||
{$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- LineCountChanged AIndex=', AIndex, ' Acount=',ACount]);{$ENDIF}
|
||||
// no need for fix folding => synedit will be called, and scanlines will call fixfolding
|
||||
{TODO: a "need fix folding" flag => to ensure it will be called if synedit doesnt}
|
||||
if (fLockCount > 0) and (AIndex < max(fNeedFixFrom, fNeedFixMinEnd)) then begin
|
||||
|
Loading…
Reference in New Issue
Block a user