Files
lazarus-ccr/components/tvplanit/source/vpbasepainter.pas

128 lines
3.2 KiB
ObjectPascal
Raw Normal View History

unit VpBasePainter;
interface
uses
Classes, Graphics, LCLType,
VPBase;
type
{ TVpBasePainter }
TVpBasePainter = class
protected
// Buffered input parameters
RenderCanvas: TCanvas;
Angle: TVpRotationAngle;
Scale: Extended;
RenderDate: TDateTime;
RenderIn: TRect;
StartLine: Integer;
StopLine: Integer;
UseGran: TVpGranularity;
DisplayOnly: Boolean;
protected
// Shared local variables of all the old painting routines
Rgn: HRGN;
RealWidth: Integer;
RealHeight: Integer;
RealLeft: Integer;
RealRight: Integer;
RealTop: Integer;
RealBottom: Integer;
SaveBrushColor: TColor;
SavePenStyle: TPenStyle;
SavePenColor: TColor;
procedure DrawDotDotDot(ARect: TRect; AColor: TColor);
procedure InitPenBrush; virtual;
procedure SavePenBrush; virtual;
procedure RestorePenBrush; virtual;
procedure SetMeasurements; virtual;
public
constructor Create(ARenderCanvas: TCanvas);
procedure RenderToCanvas(ARenderIn: TRect; AAngle: TVpRotationAngle;
AScale: Extended; ARenderDate: TDateTime; AStartLine, AStopLine: Integer;
AGranularity: TVpGranularity; ADisplayOnly: Boolean); virtual;
end;
implementation
uses
LCLIntf,
VpCanvasUtils;
{ TBasePainter }
constructor TVpBasePainter.Create(ARenderCanvas: TCanvas);
begin
RenderCanvas := ARenderCanvas;
end;
procedure TVpBasePainter.DrawDotDotDot(ARect: TRect; AColor: TColor);
var
R: TRect;
begin
RenderCanvas.Brush.Color := AColor;
{ draw dot dot dot }
R := Rect(ARect.Right, ARect.Bottom, ARect.Right + 3, ARect.Bottom + 3);
OffsetRect(R, -20, -7);
TPSFillRect(RenderCanvas, Angle, RenderIn, R);
OffsetRect(R, 7, 0);
TPSFillRect(RenderCanvas, Angle, RenderIn, R);
OffsetRect(R, 7, 0);
TPSFillRect(RenderCanvas, Angle, RenderIn, R);
end;
procedure TVpBasePainter.InitPenBrush;
begin
RenderCanvas.Pen.Style := psSolid;
RenderCanvas.Pen.Width := 1;
RenderCanvas.Pen.Mode := pmCopy;
RenderCanvas.Brush.Style := bsSolid;
end;
procedure TVpBasePainter.RenderToCanvas(ARenderIn: TRect;
AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime;
AStartLine, AStopLine: Integer; AGranularity: TVpGranularity;
ADisplayOnly: Boolean);
begin
// Buffer parameters
RenderIn := ARenderIn;
Angle := AAngle;
Scale := AScale;
RenderDate := ARenderDate;
StartLine := AStartLine;
StopLine := AStopLine;
UseGran := AGranularity;
DisplayOnly := ADisplayOnly;
// call the old RenderToCanvas method here...
end;
procedure TVpBasePainter.RestorePenBrush;
begin
RenderCanvas.Pen.Style := SavePenStyle;
RenderCanvas.Brush.Color := SaveBrushColor;
RenderCanvas.Pen.Color := SavePenColor;
end;
procedure TVpBasePainter.SavePenBrush;
begin
SavePenStyle := RenderCanvas.Pen.Style;
SaveBrushColor := RenderCanvas.Brush.Color;
SavePenColor := RenderCanvas.Pen.Color;
end;
procedure TVpBasePainter.SetMeasurements;
begin
RealWidth := TPSViewportWidth(Angle, RenderIn);
RealHeight := TPSViewportHeight(Angle, RenderIn);
RealLeft := TPSViewportLeft(Angle, RenderIn);
RealRight := TPSViewportRight(Angle, RenderIn);
RealTop := TPSViewportTop(Angle, RenderIn);
RealBottom := TPSViewportBottom(Angle, RenderIn);
end;
end.