1.1 --- a/MarqueeLabel.cs Sat Jun 14 15:05:04 2014 +0200
1.2 +++ b/MarqueeLabel.cs Mon Jun 16 12:18:46 2014 +0200
1.3 @@ -13,9 +13,7 @@
1.4 {
1.5 class MarqueeLabel : Label
1.6 {
1.7 - private int CurrentPosition { get; set; }
1.8 - private Timer Timer { get; set; }
1.9 -
1.10 + private bool iOwnTimer;
1.11
1.12 [Category("Behavior")]
1.13 [Description("How fast is our text scrolling, in pixels per second.")]
1.14 @@ -23,35 +21,61 @@
1.15 [Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
1.16 public int PixelsPerSecond { get; set; }
1.17
1.18 + [Category("Behavior")]
1.19 + [Description("Use an internal or an external timer.")]
1.20 + [DefaultValue(true)]
1.21 + [Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
1.22 + public bool OwnTimer
1.23 + {
1.24 + get
1.25 + {
1.26 + return iOwnTimer;
1.27 + }
1.28 + set
1.29 + {
1.30 + iOwnTimer = value;
1.31 +
1.32 + if (iOwnTimer)
1.33 + {
1.34 + Timer = new Timer();
1.35 + Timer.Interval = 10;
1.36 + Timer.Tick += new EventHandler(Timer_Tick);
1.37 + Timer.Start();
1.38 + }
1.39 + else
1.40 + {
1.41 + if (Timer != null)
1.42 + Timer.Dispose();
1.43 + Timer = null;
1.44 + }
1.45 +
1.46 + }
1.47 + }
1.48 +
1.49 + private int CurrentPosition { get; set; }
1.50 + private Timer Timer { get; set; }
1.51 private DateTime LastTickTime { get; set; }
1.52 private double PixelsLeft { get; set; }
1.53 //DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
1.54 -//DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
1.55 -//Console.WriteLine(b.Subtract(a).TotalMinutes);
1.56 + //DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
1.57 + //Console.WriteLine(b.Subtract(a).TotalMinutes);
1.58
1.59 public MarqueeLabel()
1.60 {
1.61 UseCompatibleTextRendering = true;
1.62 - Timer = new Timer();
1.63 - Timer.Interval = 10;
1.64 - Timer.Tick += new EventHandler(Timer_Tick);
1.65 - Timer.Start();
1.66 //PixelsPerSecond = 32;
1.67 LastTickTime = DateTime.Now;
1.68 PixelsLeft = 0;
1.69 }
1.70
1.71 - void Timer_Tick(object sender, EventArgs e)
1.72 + public void UpdateAnimation(DateTime aLastTickTime, DateTime aNewTickTime)
1.73 {
1.74 while (CurrentPosition > Width)
1.75 {
1.76 CurrentPosition = -Width;
1.77 }
1.78
1.79 - DateTime NewTickTime=DateTime.Now;
1.80 - PixelsLeft += NewTickTime.Subtract(LastTickTime).TotalSeconds * PixelsPerSecond;
1.81 - LastTickTime = NewTickTime;
1.82 - //offset += PixelsLeft;
1.83 + PixelsLeft += aNewTickTime.Subtract(aLastTickTime).TotalSeconds * PixelsPerSecond;
1.84
1.85 //Keep track of our pixels left over
1.86 //PixelsLeft = offset - Math.Truncate(offset);
1.87 @@ -84,9 +108,15 @@
1.88 {
1.89 Invalidate();
1.90 }
1.91 + }
1.92
1.93 -
1.94 -
1.95 + void Timer_Tick(object sender, EventArgs e)
1.96 + {
1.97 + DateTime NewTickTime = DateTime.Now;
1.98 + //
1.99 + UpdateAnimation(LastTickTime, NewTickTime);
1.100 + //
1.101 + LastTickTime = NewTickTime;
1.102 }
1.103
1.104 protected override void OnPaint(PaintEventArgs e)