/// <summary> /// Draws the days. /// </summary> /// <param name="days">a sorted list of days to draw</param> private void RenderDays(IEnumerable <DayInfo> days) { foreach (DayInfo day in days) { RectangleF dayRect = day.Bounds; var headerBorderPath = new PathEx(); var borderPath = new PathEx(); { // create day-box area borderPath.AddLines( new PointF[] { new PointF(dayRect.X, dayRect.Y), new PointF(dayRect.X + dayRect.Width, dayRect.Y), new PointF(dayRect.X + dayRect.Width, dayRect.Y + dayRect.Height), new PointF(dayRect.X, dayRect.Y + dayRect.Height), }); borderPath.CloseAllFigures(); //Fix for case 44962 headerBorderPath.AddLines( new PointF[] { new PointF(dayRect.X, dayRect.Y), new PointF(dayRect.X + dayRect.Width, dayRect.Y), new PointF(dayRect.X + dayRect.Width, dayRect.Y + day.HeaderSize.Height), new PointF(dayRect.X, dayRect.Y + day.HeaderSize.Height), }); headerBorderPath.CloseAllFigures(); // fill day-box area using (BrushEx brush = Canvas.CreateSolidBrush(CalendarData.GetDayBackcolor(day.DayKind))) { Canvas.DrawAndFillPath(null, brush, borderPath); Canvas.DrawAndFillPath(null, brush, headerBorderPath); } // draw the day label TextStyle fontStyle = CalendarData.GetDayFontStyle(day.DayKind); var font = fontStyle.CreateFontInfo(); using (BrushEx brush = Canvas.CreateSolidBrush(fontStyle.FontColor)) { float borderWidth = CalendarData.GetDayBorderStyle(day.DayKind).LineWidth.ToTwips() / 2; RectangleF dayLabelRect = new RectangleF( dayRect.X + borderWidth, dayRect.Top + borderWidth, day.Bounds.Width - 2 * borderWidth, day.HeaderSize.Height - 2 * borderWidth); // HACK: we should consider the issue with drawing string later. the issue comes about in the designer when caledar has small width to fit titles. --SergeyP Canvas.PushState(); Canvas.DrawString(day.Label, font, brush, dayLabelRect, ToEx(CalendarData.GetDayStringFormat(day.DayKind))); Canvas.PopState(); } // draw borders using (PenEx pen = LineStyle.CreatePen(Canvas, CalendarData.GetDayBorderStyle(day.DayKind))) { Canvas.DrawAndFillPath(pen, null, borderPath); Canvas.DrawAndFillPath(pen, null, headerBorderPath); } } } }