From 30f7b619aace98ba6661fd5b3870c3ca98c53ad1 Mon Sep 17 00:00:00 2001 From: Glatzemann Date: Mon, 7 Nov 2011 05:55:03 +0000 Subject: [PATCH] Color: Fixed a small issue with FromNonPremultiplied method Mouse: the WindowHandle is set by the RenderSystem now after creating the render window Mouse: the cursor position is now obtained using win32 to get nice relative client window coordinates Mouse: SetPosition handled using win32 now --- .../Strukturen/ColorTest.cs | 2 +- ANX.Framework.Windows.DX10/WindowsGameHost.cs | 3 +- ANX.Framework/Color.cs | 8 +- ANX.InputSystem.Windows.XInput/Mouse.cs | 94 ++++++++++++++++--- 4 files changed, 90 insertions(+), 17 deletions(-) diff --git a/ANX.Framework.TestCenter/Strukturen/ColorTest.cs b/ANX.Framework.TestCenter/Strukturen/ColorTest.cs index 86920726..67d47a9d 100644 --- a/ANX.Framework.TestCenter/Strukturen/ColorTest.cs +++ b/ANX.Framework.TestCenter/Strukturen/ColorTest.cs @@ -439,7 +439,7 @@ namespace ANX.Framework.TestCenter.Strukturen } [Test] - public void FromNonPremultipliedIntStatic2(float r, float g, float b, float a) + public void FromNonPremultipliedIntStatic2() { XNAColor xna = XNAColor.FromNonPremultiplied(512, 512, 512, 512); ANXColor anx = ANXColor.FromNonPremultiplied(512, 512, 512, 512); diff --git a/ANX.Framework.Windows.DX10/WindowsGameHost.cs b/ANX.Framework.Windows.DX10/WindowsGameHost.cs index ce347253..2d40a828 100644 --- a/ANX.Framework.Windows.DX10/WindowsGameHost.cs +++ b/ANX.Framework.Windows.DX10/WindowsGameHost.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; using ANX.Framework.Windows.DX10; +using ANX.Framework.Input; #endregion // Using Statements @@ -69,7 +70,7 @@ namespace ANX.Framework this.game = game; //this.LockThreadToProcessor(); this.gameWindow = new WindowsGameWindow(); - //Mouse.WindowHandle = this.gameWindow.Handle; + Mouse.WindowHandle = this.gameWindow.Handle; //TouchPanel.WindowHandle = this.gameWindow.Handle; //this.gameWindow.IsMouseVisible = game.IsMouseVisible; this.gameWindow.Activated += new EventHandler(this.GameWindowActivated); diff --git a/ANX.Framework/Color.cs b/ANX.Framework/Color.cs index 5b9a187d..a392fd0b 100644 --- a/ANX.Framework/Color.cs +++ b/ANX.Framework/Color.cs @@ -858,6 +858,10 @@ namespace ANX.Framework { Color color; + r = r * a; + g = g * a; + b = b * a; + if (((((r | g) | b) | a) & -256) != 0) { r = r < 0 ? 0 : (r > 255 ? 255 : r); @@ -866,10 +870,6 @@ namespace ANX.Framework a = a < 0 ? 0 : (a > 255 ? 255 : a); } - r = r * a; - g = g * a; - b = b * a; - color.packedValue = (uint)(((r | g << 8) | b << 16) | a << 24); return color; diff --git a/ANX.InputSystem.Windows.XInput/Mouse.cs b/ANX.InputSystem.Windows.XInput/Mouse.cs index 38a37329..1791ce31 100644 --- a/ANX.InputSystem.Windows.XInput/Mouse.cs +++ b/ANX.InputSystem.Windows.XInput/Mouse.cs @@ -1,29 +1,85 @@ -using System; +#region Using Statements +using System; using System.Collections.Generic; using System.Linq; using System.Text; using ANX.Framework.NonXNA; using ANX.Framework.Input; using SharpDX.DirectInput; -using MouseX = SharpDX.DirectInput.Mouse; +using System.Runtime.InteropServices; +using ANX.Framework; +#endregion // Using Statements + +#region License + +// +// This file is part of the ANX.Framework created by the "ANX.Framework developer group". +// +// This file is released under the Ms-PL license. +// +// +// +// Microsoft Public License (Ms-PL) +// +// This license governs use of the accompanying software. If you use the software, you accept this license. +// If you do not accept the license, do not use the software. +// +// 1.Definitions +// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning +// here as under U.S. copyright law. +// A "contribution" is the original software, or any additions or changes to the software. +// A "contributor" is any person that distributes its contribution under this license. +// "Licensed patents" are a contributor's patent claims that read directly on its contribution. +// +// 2.Grant of Rights +// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations +// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to +// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution +// or any derivative works that you create. +// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in +// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed +// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution +// in the software or derivative works of the contribution in the software. +// +// 3.Conditions and Limitations +// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your +// patent license from such contributor to the software ends automatically. +// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution +// notices that are present in the software. +// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including +// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or +// object code form, you may only do so under a license that complies with this license. +// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, +// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the +// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a +// particular purpose and non-infringement. + +#endregion // License + +using MouseX = SharpDX.DirectInput.Mouse; namespace ANX.InputSystem.Windows.XInput { class Mouse:IMouse { + [DllImport("user32.dll")] + static extern bool GetCursorPos(ref Point lpPoint); + + [DllImport("user32.dll")] + static extern void SetCursorPos(int x, int y); + + [DllImport("user32.dll")] + static extern bool ScreenToClient(IntPtr hWnd, ref Point lpPoint); + private DirectInput directInput; private MouseX mouse; + public IntPtr WindowHandle { - get - { - throw new NotImplementedException(); - } - set - { - throw new NotImplementedException(); - } + get; + set; } public Mouse() @@ -37,6 +93,16 @@ namespace ANX.InputSystem.Windows.XInput public ANX.Framework.Input.MouseState GetState() { var state = this.mouse.GetCurrentState(); + + Point cursorPos = new Point(); + GetCursorPos(ref cursorPos); + if (WindowHandle != IntPtr.Zero) + { + ScreenToClient(WindowHandle, ref cursorPos); + } + state.X = cursorPos.X; + state.Y = cursorPos.Y; + ButtonState left = new ButtonState(); ButtonState middle = new ButtonState(); ButtonState right = new ButtonState(); @@ -52,7 +118,13 @@ namespace ANX.InputSystem.Windows.XInput public void SetPosition(int x, int y) { - throw new NotImplementedException(); + Point currentPosition = new Point(x, y); + GetCursorPos(ref currentPosition); + if (WindowHandle != IntPtr.Zero) + { + ScreenToClient(WindowHandle, ref currentPosition; + } + SetCursorPos(currentPosition.X, currentPosition.Y); } } }