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