diff --git a/Assets/uDesktopDuplication/Examples/Scripts/Loupe.cs b/Assets/uDesktopDuplication/Examples/Scripts/Loupe.cs index 0c1cca7..5b4eac8 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/Loupe.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/Loupe.cs @@ -20,15 +20,19 @@ public class Loupe : MonoBehaviour uddTexture_.monitorId = uDesktopDuplication.Manager.cursorMonitorId; // To get other monitor textures, set dirty flag. - foreach (var monitor in uDesktopDuplication.Manager.monitors) { - monitor.CreateTexture(); - monitor.shouldBeUpdated = true; + foreach (var target in uDesktopDuplication.Manager.monitors) { + target.CreateTexture(); + target.shouldBeUpdated = true; } - var x = (float)uddTexture_.monitor.cursorX / uddTexture_.monitor.width; - var y = (float)uddTexture_.monitor.cursorY / uddTexture_.monitor.height; + var monitor = uddTexture_.monitor; + var cursorX = monitor.isCursorVisible ? monitor.cursorX : monitor.systemCursorX; + var cursorY = monitor.isCursorVisible ? monitor.cursorY : monitor.systemCursorY; + + var x = (float)cursorX / monitor.width; + var y = (float)cursorY / monitor.height; var w = 1f / zoom; - var h = w / aspect * uddTexture_.monitor.aspect; + var h = w / aspect * monitor.aspect; x = Mathf.Clamp(x - w / 2, 0f, 1f - w); y = Mathf.Clamp(y - h / 2, 0f, 1f - h); uddTexture_.clipPos = new Vector2(x, y); diff --git a/Assets/uDesktopDuplication/Scripts/Monitor.cs b/Assets/uDesktopDuplication/Scripts/Monitor.cs index 920feb8..c8ef34b 100644 --- a/Assets/uDesktopDuplication/Scripts/Monitor.cs +++ b/Assets/uDesktopDuplication/Scripts/Monitor.cs @@ -1,4 +1,5 @@ using UnityEngine; +using System.Runtime.InteropServices; namespace uDesktopDuplication { @@ -157,6 +158,24 @@ public class Monitor get { return Lib.GetCursorY(id); } } + public int systemCursorX + { + get + { + var p = Utility.GetCursorPos(); + return p.x - left; + } + } + + public int systemCursorY + { + get + { + var p = Utility.GetCursorPos(); + return p.y - top; + } + } + public int cursorShapeWidth { get { return Lib.GetCursorShapeWidth(id); } diff --git a/Assets/uDesktopDuplication/Scripts/Utility.cs b/Assets/uDesktopDuplication/Scripts/Utility.cs new file mode 100644 index 0000000..b11ebb4 --- /dev/null +++ b/Assets/uDesktopDuplication/Scripts/Utility.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using System.Runtime.InteropServices; + +namespace uDesktopDuplication +{ + +public struct MousePoint +{ + public int x; + public int y; +} + +public static class Utility +{ + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetCursorPos(out MousePoint point); + + public static MousePoint GetCursorPos() + { + MousePoint p; + if (!GetCursorPos(out p)) { + p.x = -1; + p.y = -1; + } + return p; + } +} + +} \ No newline at end of file diff --git a/Assets/uDesktopDuplication/Scripts/Utility.cs.meta b/Assets/uDesktopDuplication/Scripts/Utility.cs.meta new file mode 100644 index 0000000..bb62220 --- /dev/null +++ b/Assets/uDesktopDuplication/Scripts/Utility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6c7e8da181b03ce4fb343ffa33cbb929 +timeCreated: 1478934399 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: