MarqueeLabel.cs
changeset 2 f516c3f656bf
parent 0 f6eca6facd07
child 5 02716ce36263
     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)