From 6ac1a5ee606f3cfeef38cb4ec5924e68e8a631e4 Mon Sep 17 00:00:00 2001 From: hecomi Date: Sun, 6 Nov 2016 12:17:29 +0900 Subject: [PATCH] get dpi of monitor and calculate actual size of it. --- .../Scripts/MultipleMonitorCreator.cs | 16 ++++++------- .../Plugins/uDesktopDuplication.dll | Bin 34304 -> 35328 bytes Assets/uDesktopDuplication/Scripts/Lib.cs | 4 ++++ Assets/uDesktopDuplication/Scripts/Monitor.cs | 20 +++++++++++++++++ .../uDesktopDuplication/Monitor.cpp | 15 +++++++++++++ .../uDesktopDuplication/Monitor.h | 3 +++ .../uDesktopDuplication/main.cpp | 21 ++++++++++++++++++ 7 files changed, 70 insertions(+), 9 deletions(-) diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs index c745e8d..e37a5f9 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; public class MultipleMonitorCreator : MonoBehaviour { [SerializeField] GameObject monitorPrefab; - [SerializeField] float width = 0.3f; + [SerializeField] float scale = 1f; [SerializeField] float margin = 1f; private List monitors_ = new List(); @@ -49,19 +49,17 @@ public class MultipleMonitorCreator : MonoBehaviour // Assign monitor var texture = go.GetComponent(); texture.monitorId = i; + var monitor = texture.monitor; // Set width / height - var isHorizontal = texture.monitor.isHorizontal; - var w = isHorizontal ? width : (width * texture.monitor.aspect); - var h = isHorizontal ? width / texture.monitor.aspect : width; - go.transform.localScale = new Vector3(w, go.transform.localScale.y, h); + go.transform.localScale = new Vector3(monitor.widthMeter, go.transform.localScale.y, monitor.heightMeter); // Set parent as this object go.transform.SetParent(transform); // Calc actual size considering mesh size var scaleX = go.GetComponent().sharedMesh.bounds.extents.x * 2f; - totalWidth_ += w * scaleX; + totalWidth_ += monitor.widthMeter * scaleX; } } @@ -71,10 +69,10 @@ public class MultipleMonitorCreator : MonoBehaviour totalWidth_ += margin * (monitors_.Count - 1); var x = -totalWidth_ / 2; foreach (var go in monitors_) { - var texture = go.GetComponent(); + var monitor = go.GetComponent().monitor; var halfScaleX = go.GetComponent().sharedMesh.bounds.extents.x; - var w = texture.monitor.isHorizontal ? width : (width * texture.monitor.aspect); - var halfWidth = w * halfScaleX; + var width = monitor.widthMeter; + var halfWidth = width * halfScaleX; x += halfWidth; go.transform.localPosition = new Vector3(x, 0f, 0f); x += halfWidth + margin; diff --git a/Assets/uDesktopDuplication/Plugins/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/uDesktopDuplication.dll index db746b12534fb64721f139cdeb3cb8d22cb94c29..1fdb19f9db2aedba2b3f0de913e2f7c5e79bdec6 100644 GIT binary patch delta 14594 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 delta 14072 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 +#include #include "Common.h" #include "Cursor.h" #include "MonitorManager.h" @@ -18,6 +19,8 @@ HRESULT Monitor::Initialize(IDXGIOutput* output) monitorInfo_.cbSize = sizeof(MONITORINFOEX); GetMonitorInfo(outputDesc_.Monitor, &monitorInfo_); + GetDpiForMonitor(outputDesc_.Monitor, MDT_RAW_DPI, &dpiX_, &dpiY_); + auto output1 = reinterpret_cast(output); const auto hr = output1->DuplicateOutput(GetDevice(), &deskDupl_); @@ -196,6 +199,18 @@ int Monitor::GetRotation() const } +int Monitor::GetDpiX() const +{ + return static_cast(dpiX_); +} + + +int Monitor::GetDpiY() const +{ + return static_cast(dpiY_); +} + + int Monitor::GetWidth() const { const auto rect = monitorInfo_.rcMonitor; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h index c65e466..a1810b8 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h @@ -41,11 +41,14 @@ public: int GetWidth() const; int GetHeight() const; int GetRotation() const; + int GetDpiX() const; + int GetDpiY() const; IDXGIOutputDuplication* GetDeskDupl(); const std::unique_ptr& GetCursor(); private: int id_ = -1; + UINT dpiX_ = -1, dpiY_ = -1; State state_ = State::NotSet; std::unique_ptr cursor_; IDXGIOutputDuplication* deskDupl_ = nullptr; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp index 26c87a9..4c03f6c 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp @@ -15,6 +15,7 @@ #include "MonitorManager.h" #pragma comment(lib, "dxgi.lib") +#pragma comment(lib, "Shcore.lib") namespace @@ -234,6 +235,26 @@ extern "C" return DXGI_MODE_ROTATION_UNSPECIFIED; } + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetDpiX(int id) + { + if (!g_manager) return -1; + if (auto monitor = g_manager->GetMonitor(id)) + { + return monitor->GetDpiX(); + } + return -1; + } + + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetDpiY(int id) + { + if (!g_manager) return -1; + if (auto monitor = g_manager->GetMonitor(id)) + { + return monitor->GetDpiY(); + } + return -1; + } + UNITY_INTERFACE_EXPORT bool UNITY_INTERFACE_API IsCursorVisible(int id) { if (!g_manager) return false;