From e77897d318fce7c7266de144919cff290601ca16 Mon Sep 17 00:00:00 2001 From: lazarus Date: Thu, 19 Sep 2002 20:10:36 +0000 Subject: [PATCH] MG: accelerated designer rubberband drawings git-svn-id: trunk@3365 - --- designer/controlselection.pp | 59 ++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/designer/controlselection.pp b/designer/controlselection.pp index 00f554cf75..d4bd8d8130 100644 --- a/designer/controlselection.pp +++ b/designer/controlselection.pp @@ -1365,7 +1365,6 @@ var begin RestoreBrush:=false; -writeln('TControlSelection.DrawMarkerAt A '); FillRect(ALeft,ATop,ALeft+MarkerSize,ATop+MarkerSize); FillRect(ALeft,ATop+AHeight-MarkerSize,ALeft+MarkerSize,ATop+AHeight); FillRect(ALeft+AWidth-MarkerSize,ATop,ALeft+AWidth,ATop+MarkerSize); @@ -1401,10 +1400,14 @@ begin end; procedure TControlSelection.DrawRubberband(DC: TDesignerDeviceContext); -var Diff: TPoint; +var + Diff: TPoint; procedure DrawInvertFrameRect(x1,y1,x2,y2:integer); var i:integer; + var + OldPenColor: TColor; + RestorePen: boolean; procedure InvertPixel(x,y:integer); //var c:TColor; @@ -1415,35 +1418,47 @@ var Diff: TPoint; DC.Canvas.MoveTo(x-Diff.X,y-Diff.Y); DC.Canvas.LineTo(x-Diff.X+1,y-Diff.Y); end; - - var OldPenColor: TColor; + + procedure DrawRubberLine(StartX, StartY, EndX, EndY: integer); + begin + if not DC.RectVisible(StartX, StartY, EndX, EndY) then exit; + if not RestorePen then begin + DC.Save; + with DC.Canvas do begin + OldPenColor:=Pen.Color; + Pen.Color:=clBlack; + end; + RestorePen:=true; + end; + if StartXx2 then begin i:=x1; x1:=x2; x2:=i; end; if y1>y2 then begin i:=y1; y1:=y2; y2:=i; end; - with DC.Canvas do begin - OldPenColor:=Brush.Color; - Pen.Color:=clBlack; - i:=x1+1; - while i