From 86d67dc36eb4bca7e26b8492d8d65f65ad5813db Mon Sep 17 00:00:00 2001 From: mattias Date: Thu, 8 Dec 2005 10:17:35 +0000 Subject: [PATCH] reduced synedit overhead changing highlighter line attribute Range git-svn-id: trunk@8273 - --- components/codetools/keywordfunclists.pas | 4 +-- components/synedit/synedit.pp | 36 ++++++++--------------- components/synedit/synedittextbuffer.pp | 9 ++++++ 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/components/codetools/keywordfunclists.pas b/components/codetools/keywordfunclists.pas index 4983fc8c2a..8e0939463e 100644 --- a/components/codetools/keywordfunclists.pas +++ b/components/codetools/keywordfunclists.pas @@ -787,9 +787,9 @@ begin Add('NOT',{$ifdef FPC}@{$endif}AllwaysTrue); Add('OBJECT',{$ifdef FPC}@{$endif}AllwaysTrue); Add('OF',{$ifdef FPC}@{$endif}AllwaysTrue); - Add('OPERATOR',{$ifdef FPC}@{$endif}AllwaysTrue); // not for Delphi + //Add('OPERATOR',{$ifdef FPC}@{$endif}AllwaysTrue); // not for Delphi //Add('ON',{$ifdef FPC}@{$endif}AllwaysTrue); // not for Delphi - Add('OUT',{$ifdef FPC}@{$endif}AllwaysTrue); + //Add('OUT',{$ifdef FPC}@{$endif}AllwaysTrue); // not in MacPas mode Add('OR',{$ifdef FPC}@{$endif}AllwaysTrue); Add('PACKED',{$ifdef FPC}@{$endif}AllwaysTrue); Add('PROCEDURE',{$ifdef FPC}@{$endif}AllwaysTrue); diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index 539d4dd662..c616f5e2b6 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -1442,10 +1442,7 @@ end; procedure TCustomSynEdit.DecPaintLock; var - BB: TPoint; - BE: TPoint; - OrgCaretPos: TPoint; - OldTopLine: LongInt; + LastLineChanged: LongInt; begin if (fPaintLock=1) and HandleAllocated then begin {$IFDEF SYN_LAZARUS} @@ -1454,24 +1451,16 @@ begin if fHighlighterNeedsUpdateStartLine<=Lines.Count then begin if fHighlighterNeedsUpdateEndLine>Lines.Count then fHighlighterNeedsUpdateEndLine:=Lines.Count; + LastLineChanged:=fHighlighterNeedsUpdateEndLine; if Assigned(fHighlighter) then begin - // store current selection detail - BB := BlockBegin; - BE := BlockEnd; - OrgCaretPos := CaretXY; - OldTopLine := TopLine; - // rescan all lines in range fHighlighter.SetRange( TSynEditStringList(Lines).Ranges[fHighlighterNeedsUpdateStartLine-1]); - ScanFrom(fHighlighterNeedsUpdateStartLine-1,fHighlighterNeedsUpdateEndLine-1); - - // restore selection - SetCaretAndSelection(OrgCaretPos, BB, BE); - TopLine:=OldTopLine; + LastLineChanged:=ScanFrom(fHighlighterNeedsUpdateStartLine-1, + fHighlighterNeedsUpdateEndLine-1); + //DebugLn('TCustomSynEdit.DecPaintLock ',dbgs(fHighlighterNeedsUpdateStartLine),'-',dbgs(fHighlighterNeedsUpdateEndLine),' LastLineChanged=',dbgs(LastLineChanged)); end; - InvalidateLines(fHighlighterNeedsUpdateStartLine + 1, - fHighlighterNeedsUpdateEndLine + 1); + InvalidateLines(fHighlighterNeedsUpdateStartLine,LastLineChanged+1); end; fHighlighterNeedsUpdateStartLine:=0; fHighlighterNeedsUpdateEndLine:=0; @@ -3906,6 +3895,7 @@ var ypos : integer; begin CurLine:=-1; + //DebugLn('TCustomSynEdit.PaintTextLines ',DbgSName(Self),' TopLine=',dbgs(TopLine)); colEditorBG := Color; if Assigned(Highlighter) and Assigned(Highlighter.WhitespaceAttribute) then begin @@ -5940,13 +5930,13 @@ procedure TCustomSynEdit.ListPutted(Index: Integer); begin {$IFDEF SYN_LAZARUS} if PaintLock>0 then begin - {if (fHighlighterNeedsUpdateStartLine<1) - or (fHighlighterNeedsUpdateStartLine>Index) then - fHighlighterNeedsUpdateStartLine:=Index; + if (fHighlighterNeedsUpdateStartLine<1) + or (fHighlighterNeedsUpdateStartLine>Index+1) then + fHighlighterNeedsUpdateStartLine:=Index+1; if (fHighlighterNeedsUpdateEndLine<1) - or (fHighlighterNeedsUpdateEndLine= fCount) then ListIndexOutOfBounds(Index); + {$IFDEF SYN_LAZARUS} + if fList^[Index].fObject = AObject then exit; + {$ENDIF} BeginUpdate; fList^[Index].fObject := AObject; EndUpdate; @@ -995,9 +998,15 @@ procedure TSynEditStringList.PutRange(Index: integer; ARange: TSynEditRange); begin if (Index < 0) or (Index >= fCount) then ListIndexOutOfBounds(Index); + {$IFDEF SYN_LAZARUS} + // do not call BeginUpdate/EndUpdate. It would call the too generic OnChange + // events + fList^[Index].fRange := ARange; + {$ELSE} BeginUpdate; fList^[Index].fRange := ARange; EndUpdate; + {$ENDIF} end; procedure TSynEditStringList.SaveToFile(const FileName: string);