From e8a54aaeed7b3b3b794ec276097eff74982d0cc5 Mon Sep 17 00:00:00 2001 From: goyuken Date: Thu, 20 Dec 2012 21:40:03 +0000 Subject: [PATCH] luaimplementation: input.getmouse(): button fields are now bools. position fields are now in emulated screen coordinates. no, it doesn't quite work right for some cases of window sizing... so don't do that! --- BizHawk.MultiClient/LuaImplementation.cs | 15 ++++++------ BizHawk.MultiClient/RenderPanel.cs | 31 ++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/BizHawk.MultiClient/LuaImplementation.cs b/BizHawk.MultiClient/LuaImplementation.cs index 2d0a1f8106..1dc5f553f5 100644 --- a/BizHawk.MultiClient/LuaImplementation.cs +++ b/BizHawk.MultiClient/LuaImplementation.cs @@ -2530,13 +2530,14 @@ namespace BizHawk.MultiClient public LuaTable input_getmouse() { LuaTable buttons = lua.NewTable(); - buttons["X"] = Control.MousePosition.X; - buttons["Y"] = Control.MousePosition.Y; - buttons[MouseButtons.Left.ToString()] = Control.MouseButtons & MouseButtons.Left; - buttons[MouseButtons.Middle.ToString()] = Control.MouseButtons & MouseButtons.Middle; - buttons[MouseButtons.Right.ToString()] = Control.MouseButtons & MouseButtons.Right; - buttons[MouseButtons.XButton1.ToString()] = Control.MouseButtons & MouseButtons.XButton1; - buttons[MouseButtons.XButton2.ToString()] = Control.MouseButtons & MouseButtons.XButton2; + Point p = Global.RenderPanel.ScreenToScreen(Control.MousePosition); + buttons["X"] = p.X; + buttons["Y"] = p.Y; + buttons[MouseButtons.Left.ToString()] = (Control.MouseButtons & MouseButtons.Left) != 0; + buttons[MouseButtons.Middle.ToString()] = (Control.MouseButtons & MouseButtons.Middle) != 0; + buttons[MouseButtons.Right.ToString()] = (Control.MouseButtons & MouseButtons.Right) != 0; + buttons[MouseButtons.XButton1.ToString()] = (Control.MouseButtons & MouseButtons.XButton1) != 0; + buttons[MouseButtons.XButton2.ToString()] = (Control.MouseButtons & MouseButtons.XButton2) != 0; return buttons; } diff --git a/BizHawk.MultiClient/RenderPanel.cs b/BizHawk.MultiClient/RenderPanel.cs index 76b594867d..dc1fd86aae 100644 --- a/BizHawk.MultiClient/RenderPanel.cs +++ b/BizHawk.MultiClient/RenderPanel.cs @@ -133,6 +133,12 @@ namespace BizHawk.MultiClient void Present(); bool Resized { get; set; } Size NativeSize { get; } + /// + /// convert coordinates + /// + /// desktop coordinates + /// ivideoprovider coordinates + Point ScreenToScreen(Point p); } public class SysdrawingRenderPanel : IRenderer, IBlitter @@ -148,7 +154,7 @@ namespace BizHawk.MultiClient { backingControl.ReleaseCallback = RetainedViewportPanelDisposeCallback; - lock(this) + lock (this) tempBuffer = surfaceSet.AllocateSurface(backingControl.Width, backingControl.Height, false); RenderInternal(surface, false); @@ -176,7 +182,7 @@ namespace BizHawk.MultiClient void IBlitter.Open() { g = Graphics.FromImage(tempBuffer.PeekBitmap()); - ClipBounds = new Rectangle(0, 0, NativeSize.Width, NativeSize.Height); + ClipBounds = new Rectangle(0, 0, NativeSize.Width, NativeSize.Height); } void IBlitter.Close() @@ -227,6 +233,10 @@ namespace BizHawk.MultiClient else g.DrawImage(surface.PeekBitmap(), 0, 0, backingControl.Width, backingControl.Height); } + if (!transparent) + { + lastsize = new Size(surface.Width, surface.Height); + } } public void FastRenderAndPresent(DisplaySurface surface) @@ -252,6 +262,15 @@ namespace BizHawk.MultiClient AlertFont = new sysdrawingfont("Courier", 14, FontStyle.Bold, GraphicsUnit.Pixel); } RetainedViewportPanel backingControl; + + Size lastsize = new Size(256, 192); + public Point ScreenToScreen(Point p) + { + p = backingControl.PointToClient(p); + Point ret = new Point(p.X * lastsize.Width / backingControl.Width, + p.Y * lastsize.Height / backingControl.Height); + return ret; + } } public interface IBlitter @@ -561,6 +580,14 @@ namespace BizHawk.MultiClient } } + public Point ScreenToScreen(Point p) + { + p = backingControl.PointToClient(p); + Point ret = new Point(p.X * Texture.ImageWidth / backingControl.Width, + p.Y * Texture.ImageHeight / backingControl.Height); + return ret; + } + } #endif