tvplanit: Fix some painting glitches in DayView.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4877 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-07-01 10:04:08 +00:00
parent a9cc270101
commit cd128df0b6

View File

@ -427,6 +427,8 @@ begin
if StartLine < 0 then if StartLine < 0 then
StartLine := FDayView.TopLine; StartLine := FDayView.TopLine;
dec(R.Top);
{ Set GutterRect size } { Set GutterRect size }
GutterRect.Left := R.Left; GutterRect.Left := R.Left;
GutterRect.Top := R.Top; GutterRect.Top := R.Top;
@ -443,7 +445,7 @@ begin
TPSMoveTo(RenderCanvas, Angle, RenderIn, GutterRect.Right, GutterRect.Top); TPSMoveTo(RenderCanvas, Angle, RenderIn, GutterRect.Right, GutterRect.Top);
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 without -1
with TVpDayViewOpener(FDayView) do begin 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;
@ -575,15 +577,20 @@ var
StrHt: Integer; StrHt: Integer;
TextRect: TRect; TextRect: TRect;
X, Y: Integer; X, Y: Integer;
tmpRect: TRect;
begin begin
SaveFont := TFont.Create; SaveFont := TFont.Create;
try try
SaveFont.Assign(RenderCanvas.Font); SaveFont.Assign(RenderCanvas.Font);
{ Draw Column Header } { Draw Column Header }
RenderCanvas.Font.Assign(FDayView.HeadAttributes.Font); RenderCanvas.Font.Assign(FDayView.HeadAttributes.Font);
RenderCanvas.Brush.Color := RealHeadAttrColor; RenderCanvas.Brush.Color := RealHeadAttrColor;
RenderCanvas.Pen.Style := psClear; RenderCanvas.Pen.Style := psClear;
TPSRectangle(RenderCanvas, Angle, RenderIn, R); tmpRect := R;
InflateRect(tmpRect, 1, 1);
inc(tmpRect.Left);
TPSRectangle(RenderCanvas, Angle, RenderIn, tmpRect);
RenderCanvas.Pen.Style := psSolid; RenderCanvas.Pen.Style := psSolid;
{ Size text rect } { Size text rect }
@ -617,39 +624,36 @@ begin
Y := TextRect.Top + TextMargin; Y := TextRect.Top + TextMargin;
TPSTextOut(RenderCanvas, Angle, RenderIn, X, Y, FDayView.DataStore.Resource.Description); TPSTextOut(RenderCanvas, Angle, RenderIn, X, Y, FDayView.DataStore.Resource.Description);
end; end;
{ center and write the date string } { center the date string }
X := TextRect.Left + (TextRect.Right - TextRect.Left) div 2 - DateStrLen div 2; X := TextRect.Left + (TextRect.Right - TextRect.Left) div 2 - DateStrLen div 2;
Y := TextRect.Top + (TextMargin * 2) + StrHt; Y := TextRect.Top + (TextMargin * 2) + StrHt;
TPSTextOut(RenderCanvas, Angle, RenderIn, X, Y, DateStr);
end else begin end else begin
{ center and write the date string } { center the date string }
Y := TextRect.Top + TextMargin; Y := TextRect.Top + TextMargin;
X := TextRect.Left + (TextRect.Right - TextRect.Left) div 2 - DateStrLen div 2; X := TextRect.Left + (TextRect.Right - TextRect.Left) div 2 - DateStrLen div 2;
TPSTextOut(RenderCanvas, Angle, RenderIn, X, Y, DateStr);
end; end;
{ Write the date string }
TPSTextOut(RenderCanvas, Angle, RenderIn, X, Y, DateStr);
{Draw Column Head Borders } {Draw Column Head Borders }
if FDayView.DrawingStyle = dsFlat then begin if FDayView.DrawingStyle = dsFlat then begin
// bottom
RenderCanvas.Pen.Color := BevelShadow; RenderCanvas.Pen.Color := BevelShadow;
{bottom}
TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Right, R.Bottom); TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Right, R.Bottom);
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Left - 1, R.Bottom); TPSLineTo(RenderCanvas, Angle, RenderIn, R.Left - 1, R.Bottom);
{right side} // right side
TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Right, R.Bottom - 4); TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Right, R.Bottom);
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Right, R.Top + 3); RenderCanvas.Pen.Color := RealHeadAttrColor;
RenderCanvas.Pen.Color := BevelHighlight; TPSLineTo(RenderCanvas, Angle, RenderIn, R.Right, R.Bottom - 4);
{left side} RenderCanvas.Pen.Color := BevelShadow;
TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Left, R.Bottom - 4); TPSLineTo(RenderCanvas, Angle, RenderIn, R.Right, R.Top + 2);
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Left, R.Top + 3); RenderCanvas.Pen.Color := RealHeadAttrColor;
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Right, R.Top);
end end
else else
if FDayView.DrawingStyle = ds3d then begin if FDayView.DrawingStyle = ds3d then begin
DrawBevelRect( R := TPSRotateRectangle(Angle, RenderIn, R);
RenderCanvas, DrawBevelRect(RenderCanvas, R, BevelHighlight, BevelDarkShadow);
TPSRotateRectangle(Angle, RenderIn, Rect (R.Left, R.Top, R.Right, R.Bottom)),
BevelHighlight,
BevelDarkShadow
);
end; end;
RenderCanvas.Font.Assign(SaveFont); RenderCanvas.Font.Assign(SaveFont);
finally finally
@ -1117,28 +1121,26 @@ begin
RenderCanvas.Brush.Color := RealHeadAttrColor; RenderCanvas.Brush.Color := RealHeadAttrColor;
TPSFillRect(RenderCanvas, Angle, RenderIn, R); TPSFillRect(RenderCanvas, Angle, RenderIn, R);
if FDayView.DrawingStyle = ds3d then if FDayView.DrawingStyle = ds3d then begin
R := Rect(R.Left + 1, R.Top + 2, R.Right - 2, R.Bottom - 2);
DrawBevelRect( DrawBevelRect(
RenderCanvas, RenderCanvas,
TPSRotateRectangle(Angle, RenderIn, Rect( TPSRotateRectangle(Angle, RenderIn, R),
R.Left + 1,
R.Top + 2,
R.Right - 2,
R.Bottom - 2
)),
BevelHighlight, BevelHighlight,
BevelShadow BevelShadow
) )
else begin end else
begin
RenderCanvas.Pen.Color := BevelShadow; RenderCanvas.Pen.Color := BevelShadow;
TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Right - 2, R.Bottom - 2); TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Right - 6, R.Bottom - 2);
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Left, R.Bottom - 2); TPSLineTo(RenderCanvas, Angle, RenderIn, R.Left + 3, R.Bottom - 2);
TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Right - 2, R.Top + 6);
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Right - 2, R.Bottom - 5);
{
RenderCanvas.Pen.Color := BevelHighlight; RenderCanvas.Pen.Color := BevelHighlight;
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Left, R.Top); TPSLineTo(RenderCanvas, Angle, RenderIn, R.Left, R.Top);
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Right - 2, R.Top); TPSLineTo(RenderCanvas, Angle, RenderIn, R.Right - 2, R.Top);
RenderCanvas.Pen.Color := BevelShadow; }
TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Right - 2, R.Top + 6);
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Right - 2, R.Bottom - 5);
end; end;
end; end;
@ -1171,19 +1173,11 @@ begin
DrawMe := False DrawMe := False
end; end;
if DrawMe then begin if DrawMe then begin
{ Draw Column Header } { Calculate Column Header rectangle }
ColHeadRect := Rect(RPos, RealTop + 2, RPos + DayWidth - 1, RealTop + RealColHeadHeight); ColHeadRect := Rect(RPos, RealTop + 2, RPos + DayWidth - 1, RealTop + RealColHeadHeight);
if (i = RealNumDays - 1) and (ExtraSpace > 0) then if (i = RealNumDays - 1) and (ExtraSpace > 0) then
ColHeadRect.Right := ColHeadRect.Right + ExtraSpace; ColHeadRect.Right := ColHeadRect.Right + ExtraSpace;
if Assigned(FDayView.OwnerDrawColHeader) then begin
Drawn := false;
FDayView.OwnerDrawColHeader(self, RenderCanvas, ColHeadRect, Drawn);
if not Drawn then
DrawColHeader(ColHeadRect, RenderDate + i, RealDay);
end else
DrawColHeader(ColHeadRect, RenderDate + i, RealDay);
{ Calculate the column rect for this day } { Calculate the column rect for this day }
RenderCanvas.Font.Assign(FDayView.Font); RenderCanvas.Font.Assign(FDayView.Font);
CellsRect := Rect(RPos, ADEventsRect.Bottom + 1, RPos + DayWidth, RealBottom - 2); CellsRect := Rect(RPos, ADEventsRect.Bottom + 1, RPos + DayWidth, RealBottom - 2);
@ -1205,6 +1199,15 @@ begin
{ Draw the regular events } { Draw the regular events }
DrawEvents(RenderDate + i, RealDay); DrawEvents(RenderDate + i, RealDay);
{ Draw the column header }
if Assigned(FDayView.OwnerDrawColHeader) then begin
Drawn := false;
FDayView.OwnerDrawColHeader(self, RenderCanvas, ColHeadRect, Drawn);
if not Drawn then
DrawColHeader(ColHeadRect, RenderDate + i, RealDay);
end else
DrawColHeader(ColHeadRect, RenderDate + i, RealDay);
Inc(RPos, DayWidth); Inc(RPos, DayWidth);
Inc(RealDay); Inc(RealDay);
end; end;
@ -1308,15 +1311,21 @@ begin
{ Draw Row Header Borders } { Draw Row Header Borders }
if FDayView.DrawingStyle = dsFlat then begin if FDayView.DrawingStyle = dsFlat then begin
DrawBevelRect(RenderCanvas, TPSRotateRectangle (Angle, RenderIn, RenderCanvas.Pen.Color := BevelShadow;
TPSMoveTo(RenderCanvas, Angle, RenderIn, R.Right - 1, R.Top);
TPSLineTo(RenderCanvas, Angle, RenderIn, R.Right - 1, R.Bottom - 2);
{
DrawBevelRect(RenderCanvas, TPSRotateRectangle(Angle, RenderIn,
Rect(R.Left - 1, R.Top, R.Right - 1, R.Bottom - 2)), Rect(R.Left - 1, R.Top, R.Right - 1, R.Bottom - 2)),
BevelHighlight, clRed, //BevelHighlight,
BevelShadow clBlue //BevelShadow
); );
}
end end
else if FDayView.DrawingStyle = ds3d then begin else
if FDayView.DrawingStyle = ds3d then begin
DrawBevelRect(RenderCanvas, DrawBevelRect(RenderCanvas,
TPSRotateRectangle (Angle, RenderIn, Rect(R.Left + 1, R.Top, R.Right - 1, R.Bottom - 3)), TPSRotateRectangle(Angle, RenderIn, Rect(R.Left + 1, R.Top, R.Right - 1, R.Bottom - 3)),
BevelHighlight, BevelHighlight,
BevelDarkShadow BevelDarkShadow
); );
@ -1573,10 +1582,8 @@ begin
{ Draw borders } { Draw borders }
tmpRect := Rect(RealLeft, RealTop, RealRight-1, RealBottom-1); tmpRect := Rect(RealLeft, RealTop, RealRight-1, RealBottom-1);
if FDayView.DrawingStyle = dsFlat then begin if FDayView.DrawingStyle = dsFlat then begin
{ Draw an outer and inner bevel } { Draw an outer and inner bevel - NO: no 3d effects in flat style! }
DrawBevelRect(RenderCanvas, TPSRotateRectangle(Angle, RenderIn, tmpRect), BevelShadow, BevelHighlight); DrawBevelRect(RenderCanvas, TPSRotateRectangle(Angle, RenderIn, tmpRect), BevelShadow, BevelShadow);
InflateRect(tmpRect, -1, -1);
DrawBevelRect(RenderCanvas, TPSRotateRectangle(Angle, RenderIn, tmpRect), BevelHighlight, BevelShadow);
end else end else
if FDayView.DrawingStyle = ds3d then begin if FDayView.DrawingStyle = ds3d then begin
{ Draw a 3d bevel } { Draw a 3d bevel }