コード例 #1
0
        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);
            }
        }
コード例 #2
0
        public override void Leave(Day day)
        {
            var renderer = new DayRenderer(day);

            contentIO.CreateOutputFile(renderer.GetPseudoInputFilePath(), renderer.GetOutputFileContents());
        }