From 9d0ec2eb7fbc570d44901aa24745b420132b01da Mon Sep 17 00:00:00 2001 From: Graeme Geldenhuys Date: Tue, 9 Aug 2011 21:00:50 +0200 Subject: ide: huge speed improvement in syntax highlighting Getting font resources are very costly. So now we cache the font used for reserved keyword highlighting and simple reuse it, instead of creating and freeing it for each line (like we did up 'till now). This caused a MASSIVE speed increase! :-D --- examples/apps/ide/src/frm_main.pas | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/apps/ide/src/frm_main.pas b/examples/apps/ide/src/frm_main.pas index ccfcebba..2e14e333 100644 --- a/examples/apps/ide/src/frm_main.pas +++ b/examples/apps/ide/src/frm_main.pas @@ -57,6 +57,7 @@ type miRecentProjects: TfpgMenuItem; FRecentFiles: TfpgMRU; FRegex: TRegExpr; + FKeywordFont: TfpgFont; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure btnQuitClicked(Sender: TObject); @@ -633,7 +634,7 @@ procedure TMainForm.TextEditDrawLine(Sender: TObject; ALineText: TfpgString; ALineIndex: Integer; ACanvas: TfpgCanvas; ATextRect: TfpgRect; var AllowSelfDraw: Boolean); var - oldfont, newfont: TfpgFont; + oldfont: TfpgFont; s: TfpgString; // copy of ALineText we work with i, j, c: integer; // i = position of reserved word; c = last character pos iLength: integer; // length of reserved word @@ -657,8 +658,9 @@ begin lOffset := 0; { syntax highlighting for: keywords } - newfont := fpgGetFont(edt.FontDesc + ':bold'); - ACanvas.Font := newfont; + if not Assigned(FKeywordFont) then + FKeywordFont := fpgGetFont(edt.FontDesc + ':bold'); + ACanvas.Font := FKeywordFont; FRegex.Expression := cKeywords; FRegex.ModifierI := True; if FRegex.Exec(ALineText) then @@ -710,7 +712,6 @@ begin end; ACanvas.Font := oldfont; - newfont.Free; // writeln('------'); end; @@ -760,6 +761,7 @@ end; destructor TMainForm.Destroy; begin FRegex.Free; + FKeywordFont.Free; inherited Destroy; end; -- cgit v1.2.3-70-g09d2