using System;
using System.Drawing;
using System.Windows.Forms;
namespace LYFZ.OtherExpansion.SkinControl
{
	internal class SkinGifBox : Control
	{
		private Image _image;
		private Rectangle _imageRectangle;
		private EventHandler _eventAnimator;
		private bool _canAnimate;
		private Color _borderColor = Color.Transparent;
		public Image Image
		{
			get
			{
				return this._image;
			}
			set
			{
				this.StopAnimate();
				this._image = value;
				this._imageRectangle = Rectangle.Empty;
				if (value != null)
				{
					this._canAnimate = ImageAnimator.CanAnimate(this._image);
				}
				else
				{
					this._canAnimate = false;
				}
				base.Size = this.Image.Size;
				base.Invalidate(this.ImageRectangle);
				if (!base.DesignMode)
				{
					this.StartAnimate();
				}
			}
		}
		public Color BorderColor
		{
			get
			{
				return this._borderColor;
			}
			set
			{
				this._borderColor = value;
				base.Invalidate();
			}
		}
		private Rectangle ImageRectangle
		{
			get
			{
				if (this._imageRectangle == Rectangle.Empty && this._image != null)
				{
					this._imageRectangle.X = (base.Width - this._image.Width) / 2;
					this._imageRectangle.Y = (base.Height - this._image.Height) / 2;
					this._imageRectangle.Width = this._image.Width;
					this._imageRectangle.Height = this._image.Height;
				}
				return this._imageRectangle;
			}
		}
		private bool CanAnimate
		{
			get
			{
				return this._canAnimate;
			}
		}
		private EventHandler EventAnimator
		{
			get
			{
				if (this._eventAnimator == null)
				{
					this._eventAnimator = delegate(object sender, EventArgs e)
					{
						base.Invalidate(this.ImageRectangle);
					};
				}
				return this._eventAnimator;
			}
		}
		public SkinGifBox()
		{
			base.SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.OptimizedDoubleBuffer, true);
			base.SetStyle(ControlStyles.Opaque, false);
		}
		protected override void OnSizeChanged(EventArgs e)
		{
			this._imageRectangle = Rectangle.Empty;
			base.OnSizeChanged(e);
		}
		protected override void OnPaint(PaintEventArgs e)
		{
			if (this._image != null)
			{
				this.UpdateImage();
				e.Graphics.DrawImage(this._image, this.ImageRectangle, 0, 0, this._image.Width, this._image.Height, GraphicsUnit.Pixel);
			}
			ControlPaint.DrawBorder(e.Graphics, base.ClientRectangle, this._borderColor, ButtonBorderStyle.Solid);
		}
		protected override void Dispose(bool disposing)
		{
			base.Dispose(disposing);
			if (disposing)
			{
				this._eventAnimator = null;
				this._canAnimate = false;
				if (this._image != null)
				{
					this._image = null;
				}
			}
		}
		protected override void OnHandleDestroyed(EventArgs e)
		{
			base.OnHandleDestroyed(e);
			this.StopAnimate();
		}
		private void StartAnimate()
		{
			if (this.CanAnimate)
			{
				ImageAnimator.Animate(this._image, this.EventAnimator);
			}
		}
		private void StopAnimate()
		{
			if (this.CanAnimate)
			{
				ImageAnimator.StopAnimate(this._image, this.EventAnimator);
			}
		}
		private void UpdateImage()
		{
			if (this.CanAnimate)
			{
				ImageAnimator.UpdateFrames(this._image);
			}
		}
	}
}