private void RenderCalendar(PaintEventArgs e) { using (var bitmap = new Bitmap(ClientSize.Width, ClientSize.Height)) { using (var g = Graphics.FromImage(bitmap)) { e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; string monthAsString = _calendarDate.ToString("MMMM"); string yearAsString = _calendarDate.Year.ToString(CultureInfo.InvariantCulture); var heightOfMonthAndYear = (int)g.MeasureString(monthAsString + " " + yearAsString, _dateHeaderFont).Height; int dateHeaderSize = heightOfMonthAndYear + 10; int daySpace = MaxDaySize(g).Height; int effectiveWidth = ClientSize.Width - 2 * MarginSize; int effectiveHeight = ClientSize.Height - (daySpace + dateHeaderSize + MarginSize); var monthInfo = CalculateNumberOfWeeks(_calendarDate.Year, _calendarDate.Month); int cellWidth = effectiveWidth / NumberOfDaysAWeek; int cellHeight = (effectiveHeight - 30) / monthInfo.NumberOfWeeks; int xStart = MarginSize; int yStart = MarginSize + dateHeaderSize + daySpace + 5; _gridYTop = yStart; _gridXLeft = xStart; // Draw grid and dates var dayCount = 0; var thisMonthDayOffset = 0; foreach (var day in monthInfo.Days) { DayRenderer.RenderDay(g, day, xStart, cellWidth, yStart, cellHeight); var dayPoint = new CalendarDayPoint(day.Date, new Rectangle(xStart, yStart, cellWidth, cellHeight)); _calendarDayPoints.Add(dayPoint); if (HighlightCurrentDay & IsToday(_calendarDate, day)) { DayRenderer.HighlightDay(g, xStart, cellWidth, yStart, cellHeight); } // We do the capacity drawing here if (!day.IsRogue && thisMonthDayOffset < monthInfo.DaysInMonth) { var dayCapacity = _capacity[thisMonthDayOffset]; dayPoint.AddDetails(DayRenderer.RenderCapacity(g, dayCapacity, xStart, yStart, cellWidth, cellHeight)); thisMonthDayOffset++; } if (++dayCount % NumberOfDaysAWeek == 0) { xStart = MarginSize; yStart += cellHeight; } else { xStart += cellWidth; } } _gridXLeft = MarginSize; _gridXRight = ClientSize.Width - MarginSize; var endOfGrid = yStart + 2; // Draw day names int xMondayBegin = 0, xSundayEnd = 0; yStart = MarginSize + dateHeaderSize; foreach (var dayName in _dayNames) { var measure = g.MeasureString(dayName, _dayOfWeekFont); var x = (int)(xStart + (cellWidth - measure.Width) / 2); g.DrawString(dayName, _dateHeaderFont, Brushes.Black, x, yStart); if (dayName.Equals("Mon")) { xMondayBegin = x; } else if (dayName.Equals("Sun")) { xSundayEnd = x + (int)measure.Width; } xStart += cellWidth; } // // Draw line // var pen = Pens.LightGray; // yStart = MarginSize + dateHeaderSize + daySpace + 5; // g.DrawLine(pen, xMondayBegin, yStart, xSundayEnd, yStart); // Position header and left/right buttons _btnLeft.Location = new Point(xMondayBegin - (int)(_btnLeft.Width * 0.25), MarginSize); _btnRight.Location = new Point(xSundayEnd - (int)(_btnRight.Width * 0.75), MarginSize); // Draw month var monthAndYear = _calendarDate.ToString("MMMM") + " " + _calendarDate.ToString("yyyy"); var monthAndYearWidth = (int)g.MeasureString(monthAndYear, _dateHeaderFont).Width; g.DrawString(monthAndYear, _dateHeaderFont, Brushes.Black, (ClientSize.Width - monthAndYearWidth) / 2 + 1, MarginSize + 5.5f); // Draw Today button _btnToday.Location = new Point((ClientSize.Width - _btnToday.Width) / 2, endOfGrid); } e.Graphics.DrawImage(bitmap, 0, 0, ClientSize.Width, ClientSize.Height); } }
public override void Leave(Day day) { var renderer = new DayRenderer(day); contentIO.CreateOutputFile(renderer.GetPseudoInputFilePath(), renderer.GetOutputFileContents()); }