BizHawk/BizHawk.Client.EmuHawk/PresentationPanel.cs

74 lines
2.0 KiB
C#

using System;
using System.Drawing;
using sd=System.Drawing;
using sysdrawingfont=System.Drawing.Font;
using sysdrawing2d=System.Drawing.Drawing2D;
using System.IO;
using System.Threading;
using System.Windows.Forms;
#if WINDOWS
using SlimDX;
#endif
using BizHawk.Client.Common;
using BizHawk.Bizware.BizwareGL;
using OpenTK.Graphics.OpenGL;
namespace BizHawk.Client.EmuHawk
{
/// <summary>
/// Thinly wraps a BizwareGL.GraphicsControl for EmuHawk's needs
/// </summary>
public class PresentationPanel
{
public PresentationPanel()
{
GL = GlobalWin.GL;
GraphicsControl = new GraphicsControl(GL);
GraphicsControl.Dock = DockStyle.Fill;
GraphicsControl.BackColor = Color.Black;
//pass through these events to the form. we might need a more scalable solution for mousedown etc. for zapper and whatnot.
//http://stackoverflow.com/questions/547172/pass-through-mouse-events-to-parent-control (HTTRANSPARENT)
GraphicsControl.MouseDoubleClick += (o, e) => HandleFullscreenToggle(o, e);
GraphicsControl.MouseClick += (o, e) => GlobalWin.MainForm.MainForm_MouseClick(o, e);
}
bool IsDisposed = false;
public void Dispose()
{
if (IsDisposed) return;
IsDisposed = true;
GraphicsControl.Dispose();
}
//graphics resources
IGL GL;
public GraphicsControl GraphicsControl;
public Control Control { get { return GraphicsControl; } }
public static implicit operator Control(PresentationPanel self) { return self.GraphicsControl; }
private void HandleFullscreenToggle(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
//allow suppression of the toggle.. but if shift is pressed, always do the toggle
bool allowSuppress = Control.ModifierKeys != Keys.Shift;
GlobalWin.MainForm.ToggleFullscreen(allowSuppress);
}
}
public bool Resized { get; set; }
public Size NativeSize { get { return GraphicsControl.ClientSize; } }
}
public interface IBlitterFont { }
}