tvplanit: Add base painter ancestor class.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4810 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-06-23 09:37:07 +00:00
parent 10899a4c21
commit ba2e8bce22
4 changed files with 151 additions and 160 deletions

View File

@ -32,7 +32,7 @@ Portions created by TurboPower Software Inc. are Copyright (C) 2002 TurboPower S
Contributor(s): "/> Contributor(s): "/>
<Version Major="1" Release="4"/> <Version Major="1" Release="4"/>
<Files Count="67"> <Files Count="68">
<Item1> <Item1>
<Filename Value="../source/vpalarmdlg.lfm"/> <Filename Value="../source/vpalarmdlg.lfm"/>
<Type Value="LFM"/> <Type Value="LFM"/>
@ -302,6 +302,10 @@ Contributor(s): "/>
<Filename Value="../source/vpmonthviewpainter.pas"/> <Filename Value="../source/vpmonthviewpainter.pas"/>
<UnitName Value="VpMonthViewPainter"/> <UnitName Value="VpMonthViewPainter"/>
</Item67> </Item67>
<Item68>
<Filename Value="../source/vpbasepainter.pas"/>
<UnitName Value="VpBasePainter"/>
</Item68>
</Files> </Files>
<i18n> <i18n>
<EnableI18N Value="True"/> <EnableI18N Value="True"/>

View File

@ -0,0 +1,59 @@
unit VpBasePainter;
interface
uses
Classes, Graphics,
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;
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
{ TBasePainter }
constructor TVpBasePainter.Create(ARenderCanvas: TCanvas);
begin
RenderCanvas := ARenderCanvas;
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;
end.

View File

@ -6,7 +6,7 @@ interface
uses uses
SysUtils, LCLType, LCLIntf, Types, SysUtils, LCLType, LCLIntf, Types,
Classes, Graphics, VpConst, VPBase, VpData, VpDayView; Classes, Graphics, VpConst, VPBase, VpData, VpBasePainter, VpDayView;
type type
{ Defines matrix of event records for managing how events overlap with each other. } { Defines matrix of event records for managing how events overlap with each other. }
@ -21,19 +21,9 @@ type
TVpDvEventArray = array of TVpDvEventRec; TVpDvEventArray = array of TVpDvEventRec;
TVpDayViewPainter = class TVpDayViewPainter = class(TVpBasePainter)
private private
FDayView: TVpDayView; FDayView: TVpDayView;
// Buffered input parameters
FRenderCanvas: TCanvas;
FAngle: TVpRotationAngle;
FScale: Extended;
FRenderDate: TDateTime;
FRenderIn: TRect;
FStartLine: Integer;
FStopLine: Integer;
FUseGran: TVpGranularity;
FDisplayOnly: Boolean;
// local parameters of the old render procedure // local parameters of the old render procedure
TextWidth: Integer; TextWidth: Integer;
ColHeadRect: TRect; ColHeadRect: TRect;
@ -73,12 +63,6 @@ type
RealADEventBkgColor: TColor; RealADEventBkgColor: TColor;
ADEventAttrBkgColor: TColor; ADEventAttrBkgColor: TColor;
ADEventBorderColor: TColor; ADEventBorderColor: TColor;
// Aliases of protected TVpDayview elements
dvActiveEventRec: TRect;
dvColRectArray: TVpColRectArray;
dvEventArray: TVpEventArray;
dvLineMatrix: TVpLineMatrix;
dvInPlaceEditor: TVpDvInPlaceEdit;
// variables from local procedures for better access // variables from local procedures for better access
dvBmpRecurring: TBitmap; dvBmpRecurring: TBitmap;
dvBmpCategory: TBitmap; dvBmpCategory: TBitmap;
@ -93,18 +77,6 @@ type
CustomW: Integer; CustomW: Integer;
CustomH: Integer; CustomH: Integer;
protected
// Buffered input parameters as properties
property Angle: TVpRotationAngle read FAngle;
property DisplayOnly: Boolean read FDisplayOnly;
property RenderCanvas: TCanvas read FRenderCanvas;
property RenderDate: TDateTime read FRenderDate write FRenderDate;
property RenderIn: TRect read FRenderIn;
property Scale: Extended read FScale;
property StartLine: Integer read FStartLine write FStartLine;
property StopLine: Integer read FStopLine;
property UseGran: TVpGranularity read FUseGran;
protected protected
function CountOverlappingEvents(Event: TVpEvent; const EArray: TVpDvEventArray): Integer; function CountOverlappingEvents(Event: TVpEvent; const EArray: TVpDvEventArray): Integer;
procedure CreateBitmaps; procedure CreateBitmaps;
@ -127,7 +99,7 @@ type
constructor Create(ADayView: TVpDayview; ARenderCanvas: TCanvas); constructor Create(ADayView: TVpDayview; ARenderCanvas: TCanvas);
procedure RenderToCanvas(ARenderIn: TRect; AAngle: TVpRotationAngle; procedure RenderToCanvas(ARenderIn: TRect; AAngle: TVpRotationAngle;
AScale: Extended; ARenderDate: TDateTime; AStartLine, AStopLine: Integer; AScale: Extended; ARenderDate: TDateTime; AStartLine, AStopLine: Integer;
AUseGran: TVpGranularity; ADisplayOnly: Boolean); AUseGran: TVpGranularity; ADisplayOnly: Boolean); override;
end; end;
@ -141,13 +113,8 @@ type
constructor TVpDayViewPainter.Create(ADayView: TVpDayView; ARenderCanvas: TCanvas); constructor TVpDayViewPainter.Create(ADayView: TVpDayView; ARenderCanvas: TCanvas);
begin begin
inherited Create(ARenderCanvas);
FDayView := ADayView; FDayView := ADayView;
FRenderCanvas := ARenderCanvas;
dvActiveEventRec := TVpDayViewOpener(FDayView).dvActiveEventRec;
dvColRectArray := TVpDayViewOpener(FDayView).dvColRectArray;
dvEventArray := TVpDayViewOpener(FDayView).dvEventArray;
dvInPlaceEditor := TVpDayViewOpener(FDayView).dvInplaceEditor;
dvLineMatrix := TVpDayViewOpener(FDayView).dvLineMatrix;
end; end;
function TVpDayViewPainter.CountOverlappingEvents(Event: TVpEvent; function TVpDayViewPainter.CountOverlappingEvents(Event: TVpEvent;
@ -388,13 +355,14 @@ begin
EventStr EventStr
); );
dvEventArray[EventCount].Rec := Rect( TVpDayViewOpener(FDayView).dvEventArray[EventCount].Rec := Rect(
ADEventRect.Left, ADEventRect.Left,
ADEventRect.Top - 2, ADEventRect.Top - 2,
ADEventRect.Right - TextMargin, ADEventRect.Right - TextMargin,
ADEventRect.Bottom ADEventRect.Bottom
); );
dvEventArray[EventCount].Event := Event; TVpDayViewOpener(FDayView).dvEventArray[EventCount].Event := Event;
Inc(EventCount); Inc(EventCount);
end; end;
end; { for I2 := 0 to pred(ADEventsList.Count) do ... } end; { for I2 := 0 to pred(ADEventsList.Count) do ... }
@ -455,8 +423,8 @@ begin
CellsRect.Right := CellsRect.Right + ExtraSpace; CellsRect.Right := CellsRect.Right + ExtraSpace;
{ set the ColRectArray } { set the ColRectArray }
dvColRectArray[RealDay].Rec := CellsRect; TVpDayViewOpener(FDayView).dvColRectArray[RealDay].Rec := CellsRect;
dvColRectArray[RealDay].Date := RenderDate + i; TVpDayViewOpener(FDayView).dvColRectArray[RealDay].Date := RenderDate + i;
{ Draw the cells } { Draw the cells }
if Assigned(FDayView.OwnerDrawCells) then begin if Assigned(FDayView.OwnerDrawCells) then begin
@ -503,11 +471,13 @@ begin
TPSLineTo(RenderCanvas, Angle, RenderIn, GutterRect.Right, GutterRect.Bottom); TPSLineTo(RenderCanvas, Angle, RenderIn, GutterRect.Right, GutterRect.Bottom);
for I := 0 to FDayView.LineCount - 1 do begin // wp: was withoug -1 for I := 0 to FDayView.LineCount - 1 do begin // wp: was withoug -1
with TVpDayViewOpener(FDayView) do begin
dvLineMatrix[Col, I].Rec.Left := -1; dvLineMatrix[Col, I].Rec.Left := -1;
dvLineMatrix[Col, I].Rec.Top := -1; dvLineMatrix[Col, I].Rec.Top := -1;
dvLineMatrix[Col, I].Rec.Right := -1; dvLineMatrix[Col, I].Rec.Right := -1;
dvLineMatrix[Col, I].Rec.Bottom := -1; dvLineMatrix[Col, I].Rec.Bottom := -1;
end; end;
end;
SavedFont := TFont.Create; SavedFont := TFont.Create;
SavedFont.Assign(RenderCanvas.Font); SavedFont.Assign(RenderCanvas.Font);
@ -534,7 +504,7 @@ begin
LineRect.Top := Round (R.Top + (i * RealRowHeight)); LineRect.Top := Round (R.Top + (i * RealRowHeight));
LineRect.Bottom := Round (LineRect.Top + (RealRowHeight)); LineRect.Bottom := Round (LineRect.Top + (RealRowHeight));
if I + StartLine < FDayView.LineCount then if I + StartLine < FDayView.LineCount then
dvLineMatrix[Col, I + StartLine].Rec := LineRect; TVpDayViewOpener(FDayView).dvLineMatrix[Col, I + StartLine].Rec := LineRect;
{ color-code cells } { color-code cells }
@ -585,7 +555,7 @@ begin
{ there is an active range defined, so we need to see if } { there is an active range defined, so we need to see if }
{ the current line falls in the active range or not, and } { the current line falls in the active range or not, and }
{ paint it accordingly } { paint it accordingly }
LineStartTime := dvLineMatrix[Col, StartLine + I].Time; LineStartTime := TVpDayViewOpener(FDayView).dvLineMatrix[Col, StartLine + I].Time;
if TimeInRange(LineStartTime, if TimeInRange(LineStartTime,
FDayView.TimeSlotColors.ActiveRange.StartTime, FDayView.TimeSlotColors.ActiveRange.StartTime,
FDayView.TimeSlotColors.ActiveRange.EndTime - (1/MinutesInDay), true) FDayView.TimeSlotColors.ActiveRange.EndTime - (1/MinutesInDay), true)
@ -731,20 +701,6 @@ var
EventArray: TVpDvEventArray; EventArray: TVpDvEventArray;
EventList: TList; EventList: TList;
IconRect: TRect; IconRect: TRect;
{
dvBmpRecurring: TBitmap;
dvBmpCategory: TBitmap;
dvBmpAlarm: TBitmap;
dvBmpCustom: TBitmap;
RecurringW: Integer;
RecurringH: Integer;
CategoryW: Integer;
CategoryH: Integer;
AlarmW: Integer;
AlarmH: Integer;
CustomW: Integer;
CustomH: Integer;
}
{$IFDEF DEBUGDV} {$IFDEF DEBUGDV}
SL : TStringList; SL : TStringList;
{$ENDIF} {$ENDIF}
@ -919,16 +875,17 @@ begin
OldBrush := TBrush.Create; OldBrush := TBrush.Create;
try try
{ get a rectangle of the visible area } { get a rectangle of the visible area }
VisibleRect := dvLineMatrix[Col, StartLine].Rec; VisibleRect := TVpDayViewOpener(FDayView).dvLineMatrix[Col, StartLine].Rec;
VisibleRect.Bottom := FDayView.ClientRect.Bottom; VisibleRect.Bottom := FDayView.ClientRect.Bottom;
STime := dvLineMatrix[0, StartLine].Time; STime := TVpDayViewOpener(FDayView).dvLineMatrix[0, StartLine].Time;
ETime := dvLineMatrix[0, StartLine + RealVisibleLines].Time; ETime := TVpDayViewOpener(FDayView).dvLineMatrix[0, StartLine + RealVisibleLines].Time;
LineDuration := GetLineDuration(FDayView.Granularity); LineDuration := GetLineDuration(FDayView.Granularity);
{ Determine how much time is represented by one pixel. It is the } { Determine how much time is represented by one pixel. It is the }
{ amount of time represented by one line, divided by the height of } { amount of time represented by one line, divided by the height of }
{ a line in pixels. } { a line in pixels. }
with TVpDayViewOpener(FDayView) do
if (dvLineMatrix[Col, StartLine].Rec.Bottom - dvLineMatrix[Col, StartLine].Rec.Top) > 0 then if (dvLineMatrix[Col, StartLine].Rec.Bottom - dvLineMatrix[Col, StartLine].Rec.Top) > 0 then
PixelDuration := (LineDuration / (dvLineMatrix[Col, StartLine].Rec.Bottom - dvLineMatrix[Col, StartLine].Rec.Top)) PixelDuration := (LineDuration / (dvLineMatrix[Col, StartLine].Rec.Bottom - dvLineMatrix[Col, StartLine].Rec.Top))
else else
@ -988,12 +945,12 @@ begin
Continue; Continue;
{ Build the rectangle in which the event will be painted. } { Build the rectangle in which the event will be painted. }
EventRect := dvLineMatrix[Col, EventSLine].Rec; EventRect := TVpDayViewOpener(FDayView).dvLineMatrix[Col, EventSLine].Rec;
if EventRect.Left < VisibleRect.Left then if EventRect.Left < VisibleRect.Left then
EventRect.Left := VisibleRect.Left; EventRect.Left := VisibleRect.Left;
if EventRect.Top < VisibleRect.Top then if EventRect.Top < VisibleRect.Top then
EventRect.Top := VisibleRect.Top; EventRect.Top := VisibleRect.Top;
EventRect.Bottom := dvLineMatrix[Col, EventELine].Rec.Bottom; EventRect.Bottom := TVpDayViewOpener(FDayView).dvLineMatrix[Col, EventELine].Rec.Bottom;
if EventRect.Bottom < VisibleRect.Top then if EventRect.Bottom < VisibleRect.Top then
EventRect.Bottom := VisibleRect.Bottom; EventRect.Bottom := VisibleRect.Bottom;
EventWidth := (VisibleRect.Right - VisibleRect.Left) div EventArray[I].WidthDivisor; EventWidth := (VisibleRect.Right - VisibleRect.Left) div EventArray[I].WidthDivisor;
@ -1028,20 +985,20 @@ begin
if (PixelDuration > 0) and (EventDuration < GetLineDuration(FDayView.Granularity) * EventLineCount) if (PixelDuration > 0) and (EventDuration < GetLineDuration(FDayView.Granularity) * EventLineCount)
then begin then begin
if (EventSLine >= StartLine) and (EventSTime > dvLineMatrix[0, EventSLine].Time) if (EventSLine >= StartLine) and (EventSTime > TVpDayViewOpener(FDayView).dvLineMatrix[0, EventSLine].Time)
then begin then begin
{ Get the start offset in TDateTime format } { Get the start offset in TDateTime format }
StartOffset := EventSTime - dvLineMatrix[0, EventSLine].Time; StartOffset := EventSTime - TVpDayViewOpener(FDayView).dvLineMatrix[0, EventSLine].Time;
{ determine how many pixels to scooch down before painting the event's color code. } { determine how many pixels to scooch down before painting the event's color code. }
StartPixelOffset := trunc(StartOffset / PixelDuration); StartPixelOffset := trunc(StartOffset / PixelDuration);
end; end;
if (EventELine <= StartLine + RealVisibleLines) and if (EventELine <= StartLine + RealVisibleLines) and
(EventETime < dvLineMatrix[0, EventELine + 1].Time ) (EventETime < TVpDayViewOpener(FDayView).dvLineMatrix[0, EventELine + 1].Time)
then begin then begin
{ Get the end offset in TDateTime format } { Get the end offset in TDateTime format }
EndOffset := dvLineMatrix[0, EventELine + 1].Time - EventETime; EndOffset := TVpDayViewOpener(FDayView).dvLineMatrix[0, EventELine + 1].Time - EventETime;
{ determine how many pixels to scooch down before painting the } { determine how many pixels to scooch down before painting the }
{ event's color code. } { event's color code. }
@ -1062,7 +1019,9 @@ begin
RenderCanvas.Brush.Color := WindowColor; RenderCanvas.Brush.Color := WindowColor;
if (dvInPlaceEditor <> nil) and dvInplaceEditor.Visible then begin if (TVpDayViewOpener(FDayView).dvInPlaceEditor <> nil) and
TVpDayViewOpener(FDayView).dvInplaceEditor.Visible then
begin
if FDayView.ActiveEvent = Event then if FDayView.ActiveEvent = Event then
EventIsEditing := True EventIsEditing := True
else else
@ -1103,9 +1062,9 @@ begin
OldBrush.Assign(Canvas.Brush); OldBrush.Assign(Canvas.Brush);
OldFont.Assign(Canvas.Font); OldFont.Assign(Canvas.Font);
} }
OldPen.Assign(FRenderCanvas.Pen); OldPen.Assign(RenderCanvas.Pen);
OldBrush.Assign(FRenderCanvas.Brush); OldBrush.Assign(RenderCanvas.Brush);
OldFont.Assign(FRenderCanvas.Font); OldFont.Assign(RenderCanvas.Font);
if Assigned(FDayView.OnBeforeDrawEvent) and (EventArray[I].Level = 0) then if Assigned(FDayView.OnBeforeDrawEvent) and (EventArray[I].Level = 0) then
FDayView.OnBeforeDrawEvent(Self, Event, FDayView.ActiveEvent = Event, RenderCanvas, EventRect, IconRect) FDayView.OnBeforeDrawEvent(Self, Event, FDayView.ActiveEvent = Event, RenderCanvas, EventRect, IconRect)
else if Assigned(FDayView.OnBeforeDrawEvent) then else if Assigned(FDayView.OnBeforeDrawEvent) then
@ -1230,11 +1189,12 @@ begin
RenderCanvas.Pen.Assign(OldPen); RenderCanvas.Pen.Assign(OldPen);
RenderCanvas.Font.Assign(OldFont); RenderCanvas.Font.Assign(OldFont);
dvEventArray[EventCount].Rec := Rect( TVpDayViewOpener(FDayView).dvEventArray[EventCount].Rec := Rect(
EventRect.Left, EventRect.Top, EventRect.Right, EventRect.Bottom + 1 EventRect.Left, EventRect.Top, EventRect.Right, EventRect.Bottom + 1
); );
dvEventArray[EventCount].IconRect := IconRect; TVpDayViewOpener(FDayView).dvEventArray[EventCount].IconRect := IconRect;
dvEventArray[EventCount].Event := Event; TVpDayViewOpener(FDayView).dvEventArray[EventCount].Event := Event;
Inc(EventCount); Inc(EventCount);
end; end;
@ -1242,13 +1202,17 @@ begin
if Assigned(FDayView.ActiveEvent) then if Assigned(FDayView.ActiveEvent) then
OKToDrawEditFrame := not (FDayView.ActiveEvent.AllDayEvent); OKToDrawEditFrame := not (FDayView.ActiveEvent.AllDayEvent);
if (dvInPlaceEditor <> nil) and dvInplaceEditor.Visible and OKToDrawEditFrame then begin if (TVpDayViewOpener(FDayView).dvInPlaceEditor <> nil) and
TVpDayViewOpener(FDayView).dvInplaceEditor.Visible and
OKToDrawEditFrame then
begin
{ paint extra borders around the editor } { paint extra borders around the editor }
if Assigned(FDayView.DataStore) then if Assigned(FDayView.DataStore) then
RenderCanvas.Brush.Color := FDayView.DataStore.CategoryColorMap.GetColor(FDayView.ActiveEvent.Category); RenderCanvas.Brush.Color := FDayView.DataStore.CategoryColorMap.GetColor(FDayView.ActiveEvent.Category);
RenderCanvas.Pen.Color := clWindowFrame; RenderCanvas.Pen.Color := clWindowFrame;
with TVpDayViewOpener(FDayView) do begin
TPSFillRect(RenderCanvas, Angle, RenderIn, TPSFillRect(RenderCanvas, Angle, RenderIn,
Rect(dvActiveEventRec.Left, dvActiveEventRec.Top - FDayView.GutterWidth, dvActiveEventRec.Right, dvActiveEventRec.Top) Rect(dvActiveEventRec.Left, dvActiveEventRec.Top - GutterWidth, dvActiveEventRec.Right, dvActiveEventRec.Top)
); );
TPSPolyline(RenderCanvas, Angle, RenderIn, [ TPSPolyline(RenderCanvas, Angle, RenderIn, [
Point(dvActiveEventRec.Left, dvActiveEventRec.Top), Point(dvActiveEventRec.Left, dvActiveEventRec.Top),
@ -1269,6 +1233,7 @@ begin
Point(dvActiveEventRec.Right, dvActiveEventRec.Bottom) Point(dvActiveEventRec.Right, dvActiveEventRec.Bottom)
]); ]);
end; end;
end;
{ Clean Up } { Clean Up }
finally finally
@ -1295,7 +1260,7 @@ var
begin begin
if (bmp.Width <> 0) and (bmp.Height <> 0) then if (bmp.Width <> 0) and (bmp.Height <> 0) then
begin begin
FRenderCanvas.CopyRect( // wp: was FDayview.Canvas -- does not look correct... RenderCanvas.CopyRect( // wp: was FDayview.Canvas -- does not look correct...
Rect(AIconRect.Left + 1, AIconRect.Top +1, AIconRect.Left + w + 1, AIconRect.Top + h + 1), Rect(AIconRect.Left + 1, AIconRect.Top +1, AIconRect.Left + w + 1, AIconRect.Top + h + 1),
bmp.Canvas, bmp.Canvas,
Rect(0, 0, bmp.Width, bmp.Height) Rect(0, 0, bmp.Width, bmp.Height)
@ -1345,7 +1310,7 @@ begin
RenderCanvas.Pen.Style := psSolid; RenderCanvas.Pen.Style := psSolid;
RenderCanvas.Pen.Color := RealLineColor; RenderCanvas.Pen.Color := RealLineColor;
LineRect := Rect(R.Left, R.Top, R.Right, R.Top + RealRowHeight); LineRect := Rect(R.Left, R.Top, R.Right, R.Top + RealRowHeight);
Hour := Ord(dvLineMatrix[0, StartLine].Hour); Hour := Ord(TVpDayViewOpener(FDayView).dvLineMatrix[0, StartLine].Hour);
for I := 0 to RealVisibleLines do begin for I := 0 to RealVisibleLines do begin
{ prevent any extranneous drawing below the last hour } { prevent any extranneous drawing below the last hour }
@ -1390,7 +1355,7 @@ begin
Inc(Hour); Inc(Hour);
end else begin end else begin
{ Paint Minute Text} { Paint Minute Text}
if dvLineMatrix[0, StartLine + i].Minute = 0 then begin if TVpDayViewOpener(FDayView).dvLineMatrix[0, StartLine + i].Minute = 0 then begin
RenderCanvas.Font.Assign(FDayView.RowHeadAttributes.MinuteFont); RenderCanvas.Font.Assign(FDayView.RowHeadAttributes.MinuteFont);
TPSTextOut(RenderCanvas, Angle, RenderIn, TPSTextOut(RenderCanvas, Angle, RenderIn,
LineRect.Right - RenderCanvas.TextWidth(MinuteStr) - 7, LineRect.Right - RenderCanvas.TextWidth(MinuteStr) - 7,
@ -1406,7 +1371,7 @@ begin
); );
end; end;
LastHour := Hour; LastHour := Hour;
Hour := Ord(dvLineMatrix[0, StartLine + i + 1].Hour); Hour := Ord(TVpDayViewOpener(FDayView).dvLineMatrix[0, StartLine + i + 1].Hour);
end; end;
TPSMoveTo(RenderCanvas, Angle, RenderIn, LineRect.Right-6, LineRect.Bottom); TPSMoveTo(RenderCanvas, Angle, RenderIn, LineRect.Right-6, LineRect.Bottom);
@ -1555,6 +1520,7 @@ var
I : Integer; I : Integer;
begin begin
EventCount := 0; EventCount := 0;
with TVpDayViewOpener(FDayView) do
for I := 0 to pred(Length(dvEventArray)) do begin for I := 0 to pred(Length(dvEventArray)) do begin
dvEventArray[I].Rec.Left := -1; dvEventArray[I].Rec.Left := -1;
dvEventArray[I].Rec.Top := -1; dvEventArray[I].Rec.Top := -1;
@ -1564,19 +1530,11 @@ begin
end; end;
end; end;
procedure TVpDayviewPainter.RenderToCanvas(ARenderIn: TRect; procedure TVpDayViewPainter.RenderToCanvas(ARenderIn: TRect;
AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime; AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime;
AStartLine, AStopLine: Integer; AUseGran: TVpGranularity; ADisplayOnly: Boolean); AStartLine, AStopLine: Integer; AUseGran: TVpGranularity; ADisplayOnly: Boolean);
begin begin
// Buffer parameters inherited;
FRenderIn := ARenderIn;
FAngle := AAngle;
FScale := AScale;
FRenderDate := ARenderDate;
FStartLine := AStartLine;
FStopLine := AStopLine;
FUseGran := AUseGran;
FDisplayOnly := ADisplayOnly;
// Here begins the original routine... // Here begins the original routine...
if DisplayOnly then begin if DisplayOnly then begin

View File

@ -6,22 +6,12 @@ interface
uses uses
SysUtils, LCLType, LCLIntf, Types, SysUtils, LCLType, LCLIntf, Types,
Classes, Graphics, VpConst, VPBase, VpData, VpWeekView; Classes, Graphics, VpConst, VPBase, VpData, VpBasePainter, VpWeekView;
type type
TVpWeekViewPainter = class TVpWeekViewPainter = class(TVpBasePainter)
private private
FWeekView: TVpWeekView; FWeekView: TVpWeekView;
// Buffered input parameters
FRenderCanvas: TCanvas;
FAngle: TVpRotationAngle;
FScale: Extended;
FRenderDate: TDateTime;
FRenderIn: TRect;
FStartLine: Integer;
FStopLine: Integer;
FUseGran: TVpGranularity;
FDisplayOnly: Boolean;
// local parameters of the old TVpWeekView method // local parameters of the old TVpWeekView method
HeadRect: TRect; HeadRect: TRect;
SaveBrushColor: TColor; SaveBrushColor: TColor;
@ -51,18 +41,6 @@ type
ADEventBackgroundColor: TColor; ADEventBackgroundColor: TColor;
ADEventBorderColor: TColor; ADEventBorderColor: TColor;
protected
// Buffered input parameters as properties
property Angle: TVpRotationAngle read FAngle;
property DisplayOnly: Boolean read FDisplayOnly;
property RenderCanvas: TCanvas read FRenderCanvas;
property RenderDate: TDateTime read FRenderDate write FRenderDate;
property RenderIn: TRect read FRenderIn;
property Scale: Extended read FScale;
property StartLine: Integer read FStartLine write FStartLine;
property StopLine: Integer read FStopLine;
property UseGran: TVpGranularity read FUseGran;
protected protected
procedure Clear; procedure Clear;
function DrawAllDayEvents(ADate: TDateTime; DayRect: TRect; var EAIndex: Integer): Boolean; function DrawAllDayEvents(ADate: TDateTime; DayRect: TRect; var EAIndex: Integer): Boolean;
@ -75,7 +53,7 @@ type
constructor Create(AWeekView: TVpWeekView; ARenderCanvas: TCanvas); constructor Create(AWeekView: TVpWeekView; ARenderCanvas: TCanvas);
procedure RenderToCanvas(ARenderIn: TRect; AAngle: TVpRotationAngle; procedure RenderToCanvas(ARenderIn: TRect; AAngle: TVpRotationAngle;
AScale: Extended; ARenderDate: TDateTime; AStartLine, AStopLine: Integer; AScale: Extended; ARenderDate: TDateTime; AStartLine, AStopLine: Integer;
AUseGran: TVpGranularity; ADisplayOnly: Boolean); AUseGran: TVpGranularity; ADisplayOnly: Boolean); override;
end; end;
@ -90,8 +68,8 @@ type
constructor TVpWeekViewPainter.Create(AWeekView: TVpWeekView; constructor TVpWeekViewPainter.Create(AWeekView: TVpWeekView;
ARenderCanvas: TCanvas); ARenderCanvas: TCanvas);
begin begin
inherited Create(ARenderCanvas);
FWeekView := AWeekView; FWeekView := AWeekView;
FRenderCanvas := ARenderCanvas;
end; end;
procedure TVpWeekViewPainter.Clear; procedure TVpWeekViewPainter.Clear;
@ -601,15 +579,7 @@ procedure TVpWeekViewPainter.RenderToCanvas(ARenderIn: TRect;
AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime; AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime;
AStartLine, AStopLine: Integer; AUseGran: TVpGranularity; ADisplayOnly: Boolean); AStartLine, AStopLine: Integer; AUseGran: TVpGranularity; ADisplayOnly: Boolean);
begin begin
// Buffer parameters inherited;
FRenderIn := ARenderIn;
FAngle := AAngle;
FScale := AScale;
FRenderDate := ARenderDate;
FStartLine := AStartLine;
FStopLine := AStopLine;
FUseGran := AUseGran;
FDisplayOnly := ADisplayOnly;
// Here begins the original routine... // Here begins the original routine...
if DisplayOnly then begin if DisplayOnly then begin