1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Drawing; 5 using System.Linq; 6 using System.Text; 7 using System.Threading.Tasks; 8 using System.Windows.Forms; 9 10 namespace Mesen.GUI.Forms 11 { 12 public class frmFullscreenRenderer : BaseInputForm 13 { 14 private const int LeftMouseButtonKeyCode = 0x200; 15 private const int RightMouseButtonKeyCode = 0x201; 16 private const int MiddleMouseButtonKeyCode = 0x202; 17 private bool _closing = false; 18 frmFullscreenRenderer()19 public frmFullscreenRenderer() 20 { 21 this.BackColor = Color.Black; 22 this.Text = "Mesen Fullscreen Window"; 23 this.FormBorderStyle = FormBorderStyle.None; 24 this.WindowState = FormWindowState.Maximized; 25 } 26 OnFormClosing(FormClosingEventArgs e)27 protected override void OnFormClosing(FormClosingEventArgs e) 28 { 29 _closing = true; 30 base.OnFormClosing(e); 31 } 32 OnDeactivate(EventArgs e)33 protected override void OnDeactivate(EventArgs e) 34 { 35 base.OnDeactivate(e); 36 37 if(!_closing) { 38 //Close fullscreen mode if window loses focus 39 this.Close(); 40 } 41 } 42 OnMouseDown(MouseEventArgs e)43 protected override void OnMouseDown(MouseEventArgs e) 44 { 45 base.OnMouseDown(e); 46 CursorManager.CaptureMouse(); 47 SetMouseButtonState(Control.MouseButtons); 48 } 49 OnMouseUp(MouseEventArgs e)50 protected override void OnMouseUp(MouseEventArgs e) 51 { 52 base.OnMouseUp(e); 53 SetMouseButtonState(Control.MouseButtons); 54 } 55 SetMouseButtonState(MouseButtons pressedButtons)56 private void SetMouseButtonState(MouseButtons pressedButtons) 57 { 58 InteropEmu.SetKeyState(LeftMouseButtonKeyCode, pressedButtons.HasFlag(MouseButtons.Left)); 59 InteropEmu.SetKeyState(RightMouseButtonKeyCode, pressedButtons.HasFlag(MouseButtons.Right)); 60 InteropEmu.SetKeyState(MiddleMouseButtonKeyCode, pressedButtons.HasFlag(MouseButtons.Middle)); 61 } 62 OnMouseMove(MouseEventArgs e)63 protected override void OnMouseMove(MouseEventArgs e) 64 { 65 base.OnMouseMove(e); 66 67 InteropEmu.ScreenSize size = InteropEmu.GetScreenSize(false); 68 int leftMargin = (this.Width - size.Width) / 2; 69 int topMargin = (this.Height - size.Height) / 2; 70 71 CursorManager.OnMouseMove(this); 72 73 if(CursorManager.NeedMouseIcon) { 74 this.Cursor = Cursors.Cross; 75 } 76 77 double xPos = (double)(e.X - leftMargin) / size.Width; 78 double yPos = (double)(e.Y - topMargin) / size.Height; 79 80 xPos = Math.Max(0.0, Math.Min(1.0, xPos)); 81 yPos = Math.Max(0.0, Math.Min(1.0, yPos)); 82 83 InteropEmu.SetMousePosition(xPos, yPos); 84 } 85 OnMouseLeave(EventArgs e)86 protected override void OnMouseLeave(EventArgs e) 87 { 88 base.OnMouseLeave(e); 89 90 CursorManager.OnMouseLeave(); 91 InteropEmu.SetMousePosition(-1, -1); 92 } 93 } 94 } 95