Beispiel #1
0
        /// <summary>
        /// Draw hands on the clock
        /// </summary>
        /// <param name="graphics">Graphics context</param>
        public void Draw(IGraphicsService graphics)
        {
            if (graphics == null)
            {
                throw new ArgumentNullException("graphics");
            }

            var now = _dateTimeService.Now;
            var second = (now.Second / 60d);
            var minute = (now.Minute / 60d) + (second / 60d);
            var hourly = (now.Hour / 12d) + (minute / 12d);

            Array.ForEach(new DrawArgs[] {
                new DrawArgs
                {
                    Brush = _secondBrush,
                    Angle = second,
                    Length = Constants.SecondLength,
                    MaxWidthLength = Constants.SecondMaxWidthLength,
                    Width = Constants.SecondWidth
                },
                new DrawArgs
                {
                    Brush = _minuteBrush,
                    Angle = minute,
                    Length = Constants.MinuteLength,
                    MaxWidthLength = Constants.MinuteMaxWidthLength,
                    Width = Constants.MinuteWidth
                },
                new DrawArgs
                {
                    Brush = _hourlyBrush,
                    Angle = hourly,
                    Length = Constants.HourlyLength,
                    MaxWidthLength = Constants.HourlyMaxWidthLength,
                    Width = Constants.HourlyWidth
                }
            }, x =>
                graphics.FillPolygon(x.Brush, new PointF[] {
                    _mathService.GetPoint(x.Angle + Constants.QuarterCircle, Center.CircleSize / 2),
                    _mathService.GetPoint(x.Angle + x.Width, x.Length * x.MaxWidthLength),
                    _mathService.GetPoint(x.Angle, x.Length),
                    _mathService.GetPoint(x.Angle - x.Width, x.Length * x.MaxWidthLength),
                    _mathService.GetPoint(x.Angle - Constants.QuarterCircle, Center.CircleSize / 2)
                })
            );
        }