using System;
using System.Threading;
using System.Windows;
using System.Windows.Threading;
using ANX.Framework;
using ANX.Framework.Graphics;
using ANX.Framework.NonXNA;

// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license

namespace WpfEditor
{
	public partial class MainWindow
	{
		private GraphicsDevice device;
	    private readonly ThreadStart emptyThreadStart;

		public MainWindow()
		{
            //AddInSystemFactory.Instance.SetPreferredSystem(AddInType.RenderSystem, "OpenGL3");
            AddInSystemFactory.Instance.SetPreferredSystem(AddInType.RenderSystem, "DirectX10");

			InitializeComponent();
		    emptyThreadStart = delegate { };
		}

        protected override void OnInitialized(EventArgs e)
        {
            base.OnInitialized(e);

            device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef,
                new PresentationParameters
                {
                    BackBufferWidth = GamePanel.Width,
                    BackBufferHeight = GamePanel.Height,
                    BackBufferFormat = SurfaceFormat.Color,
                    DeviceWindowHandle = new WindowHandle(GamePanel.Handle),
                    PresentationInterval = PresentInterval.Default,
                });
        }

		protected override void OnActivated(EventArgs e)
		{
			base.OnActivated(e);

			while (IsVisible && IsActive)
			{
				if (Application.Current != null)
					Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, emptyThreadStart);

				Tick();
			}
		}

		public void Tick()
		{
			device.Clear(ClearOptions.Target, Color.CornflowerBlue, 0f, 0);

			device.Present();
		}
	}
}