Skip to content

Instantly share code, notes, and snippets.

@AmbroseNTK
Created August 28, 2020 12:52
Show Gist options
  • Save AmbroseNTK/57f30b35bed44028e2e96a9556088f0b to your computer and use it in GitHub Desktop.
Save AmbroseNTK/57f30b35bed44028e2e96a9556088f0b to your computer and use it in GitHub Desktop.
Clock Class
public partial class Clock : UserControl
{
private int clockBorderWidth = 5;
private Color clockBorderColor = Color.Black;
private Color hourNeedleColor = Color.Blue;
private int hourNeedleSize = 70;
private Color minuteNeedleColor = Color.Green;
private Color secondNeedleColor = Color.Red;
private Timer timer;
public Clock()
{
InitializeComponent();
this.DoubleBuffered = true;
timer = new Timer();
timer.Interval = 500;
timer.Tick += Timer_Tick;
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
Invalidate();
}
public int ClockBorderWidth { get => clockBorderWidth; set => clockBorderWidth = value; }
public Color ClockBorderColor { get => clockBorderColor; set => clockBorderColor = value; }
public Color HourNeedleColor { get => hourNeedleColor; set => hourNeedleColor = value; }
public int HourNeedleSize { get => hourNeedleSize; set => hourNeedleSize = value; }
public Color MinuteNeedleColor { get => minuteNeedleColor; set => minuteNeedleColor = value; }
public Color SecondNeedleColor { get => secondNeedleColor; set => secondNeedleColor = value; }
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
int hour = DateTime.Now.Hour;
int minute = DateTime.Now.Minute;
int second = DateTime.Now.Second;
Pen clockPen = new Pen(new SolidBrush(ClockBorderColor),ClockBorderWidth);
Rectangle clockRectangle = new Rectangle(clockBorderWidth, clockBorderWidth, this.Width - 2 * clockBorderWidth, this.Width - 2 * clockBorderWidth);
e.Graphics.DrawEllipse(clockPen, clockRectangle);
e.Graphics.DrawImage(Image.FromFile("clockFace-cropped.jpg"), clockRectangle);
Rectangle hourRectangle = new Rectangle(clockRectangle.X + HourNeedleSize, clockRectangle.Y + HourNeedleSize, clockRectangle.Width - HourNeedleSize*2, clockRectangle.Height - HourNeedleSize*2);
Rectangle minuteRectange = new Rectangle(hourRectangle.X - 50, hourRectangle.Y - 50, hourRectangle.Width + 2 * 50, hourRectangle.Height + 2 * 50);
e.Graphics.FillPie(new SolidBrush(this.minuteNeedleColor), minuteRectange, minute * (360 / 60.0f) + second*0.1f - 90-2.5f, 5f);
e.Graphics.FillPie(new SolidBrush(this.HourNeedleColor), hourRectangle, (hour % 12) * (360 / 12.0f) + minute*(30/60f) - 90-2.5f, 5f);
e.Graphics.FillPie(new SolidBrush(this.secondNeedleColor), minuteRectange, second * (360 / 60.0f) - 90-0.5f, 1.0f);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment