/// <summary>
        /// Draw Timer tick
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DrawTimer_Tick(object sender, EventArgs e)
        {
            // If not floating panel and the panel is active and AutoRefresh is OK
            if (this.DockAreas != DockAreas.Float && DockPanel.ActiveDocument == this)
            {
                int elapsed = Environment.TickCount - Time;

                Time = Environment.TickCount;


                // Stop the drawtimer
                DrawTimer.Stop();

                //Animation.Update(TimeSpan.FromMilliseconds(elapsed));

                Animation.Update(new GameTime(TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero, TimeSpan.FromMilliseconds(elapsed)));

                GlFramesControl.Invalidate();
                GlTilesControl.Invalidate();
                GlPreviewControl.Invalidate();

                // Restart the draw timer
                DrawTimer.Start();
            }
        }
        /// <summary>
        /// OnResize
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void GlTilesControl_Resize(object sender, EventArgs e)
        {
            //if (GlTilesControl.Context == null)
            //    return;

            GlTilesControl.MakeCurrent();
            Display.ViewPort = new Rectangle(new Point(), GlTilesControl.Size);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AnimationForm_Load(object sender, EventArgs e)
        {
            GlTilesControl.MakeCurrent();
            Display.Init();

            GlFramesControl.MakeCurrent();
            Display.Init();

            GlPreviewControl.MakeCurrent();
            Display.Init();

            SpriteBatch = new SpriteBatch();

            // Preload background texture resource
            CheckerBoard = new Texture2D(ResourceManager.GetInternalResource("ArcEngine.Resources.checkerboard.png"));
            CheckerBoard.HorizontalWrap = TextureWrapFilter.Repeat;
            CheckerBoard.VerticalWrap   = TextureWrapFilter.Repeat;


            BuildInterface();

            // Draw timer
            DrawTimer.Start();
        }
        /// <summary>
        /// OnPaint
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void GlTilesControl_Paint(object sender, PaintEventArgs e)
        {
            // Draws all tiles
            GlTilesControl.MakeCurrent();
            Display.ClearBuffers();


            SpriteBatch.Begin();

            // Background texture
            Rectangle dst = new Rectangle(Point.Empty, GlTilesControl.Size);

            SpriteBatch.Draw(CheckerBoard, dst, dst, Color.White);


            if (Animation.TileSet != null)
            {
                // Find the cursor location
                Point mouse = GlTilesControl.PointToClient(Control.MousePosition);


                int       maxheight = 0;
                Rectangle rect      = Rectangle.Empty;
                foreach (int id in Animation.TileSet.Tiles)
                {
                    // Get the display rectangle
                    Tile tile = Animation.TileSet.GetTile(id);
                    if (tile == null)
                    {
                        continue;
                    }
                    rect.Size = tile.Size;

                    // Blit the tile
                    //Animation.TileSet.Draw(id, new Point(rect.X + tile.HotSpot.X, rect.Y + tile.HotSpot.Y));
                    SpriteBatch.DrawTile(Animation.TileSet, id, new Point(rect.X + tile.Pivot.X, rect.Y + tile.Pivot.Y));

                    // Is mouse over or selected tile
                    if (rect.Contains(mouse) || TileID == id)
                    {
                        SpriteBatch.DrawRectangle(rect, Color.White);
                    }

                    // Move right
                    rect.X += tile.Size.Width;


                    // End of line ?
                    if (rect.X + rect.Width > GlTilesControl.Width)
                    {
                        rect.X    = 0;
                        rect.Y   += maxheight + 10;
                        maxheight = 0;
                    }


                    // Get the maximum height
                    maxheight = Math.Max(maxheight, rect.Height);
                }
            }

            SpriteBatch.End();
            GlTilesControl.SwapBuffers();
        }