private void DrawScale(Graphics graphics, Rectangle clipRect, Font font, HeaderFormat headerformat, List <RectangleF> labelRects, List <DateTime> dates)
        {
            TimelinePaintEventArgs e = null;
            DateTime datetime        = dates[0]; // these initialisation values matter

            for (int i = 0; i < labelRects.Count; i++)
            {
                // Give user a chance to format the tickmark that is to be drawn
                // https://blog.nicholasrogoff.com/2012/05/05/c-datetime-tostring-formats-quick-reference/
                datetime = dates[i];
                GetLabel(datetime, out HeaderLabel minor, out HeaderLabel major);
                e = new TimelinePaintEventArgs(graphics, clipRect, control, datetime, new DateTime(), minor, major);
                PaintTimeline?.Invoke(this, e);

                // Draw the label if not already handled by the user
                if (!e.Handled)
                {
                    if (!string.IsNullOrEmpty(minor.Text))
                    {
                        // Draw minor label
                        var textbox = graphics.TextBoxAlign(minor.Text, minor.Format.TextAlign, minor.Format.Font, labelRects[i], minor.Format.Margin);
                        graphics.DrawString(minor.Text, minor.Format.Font, minor.Format.Color, textbox);
                    }

                    if (!string.IsNullOrEmpty(major.Text))
                    {
                        // Draw major label
                        var majorLabelRect = new RectangleF(labelRects[i].X, viewport.Y, control.MajorWidth, control.HeaderOneHeight);
                        var textbox        = graphics.TextBoxAlign(major.Text, major.Format.TextAlign, major.Format.Font, majorLabelRect, major.Format.Margin);
                        graphics.DrawString(major.Text, major.Format.Font, major.Format.Color, textbox);
                        //__DrawMarker(graphics, labelRects[i].X + MinorWidth / 2f, _mViewport.Y + HeaderOneHeight - 2f);
                    }
                }
            }
        }
 protected virtual void OnPaintTimeline(TimelinePaintEventArgs e)
 {
     PaintTimeline?.Invoke(this, e);
 }