diff --git a/src/d3d9/d3d9_include.h b/src/d3d9/d3d9_include.h index ca174da62..32b36c4de 100644 --- a/src/d3d9/d3d9_include.h +++ b/src/d3d9/d3d9_include.h @@ -36,8 +36,9 @@ #include "../util/util_flags.h" #include "../util/util_likely.h" #include "../util/util_math.h" -#include "../util/util_string.h" +#include "../util/util_monitor.h" #include "../util/util_misc.h" +#include "../util/util_string.h" // Missed definitions in Wine/MinGW. diff --git a/src/d3d9/d3d9_monitor.cpp b/src/d3d9/d3d9_monitor.cpp index e4af614a7..ba7513fa9 100644 --- a/src/d3d9/d3d9_monitor.cpp +++ b/src/d3d9/d3d9_monitor.cpp @@ -60,11 +60,6 @@ namespace dxvk { } - HMONITOR GetDefaultMonitor() { - return ::MonitorFromPoint({ 0, 0 }, MONITOR_DEFAULTTOPRIMARY); - } - - HRESULT SetMonitorDisplayMode( HMONITOR hMonitor, const D3DDISPLAYMODEEX* pMode) { @@ -106,56 +101,4 @@ namespace dxvk { return status == DISP_CHANGE_SUCCESSFUL ? D3D_OK : D3DERR_NOTAVAILABLE; } - - void GetWindowClientSize( - HWND hWnd, - UINT* pWidth, - UINT* pHeight) { - RECT rect = { }; - ::GetClientRect(hWnd, &rect); - - if (pWidth) - *pWidth = rect.right - rect.left; - - if (pHeight) - *pHeight = rect.bottom - rect.top; - } - - - void GetMonitorClientSize( - HMONITOR hMonitor, - UINT* pWidth, - UINT* pHeight) { - ::MONITORINFOEXW monInfo; - monInfo.cbSize = sizeof(monInfo); - - if (!::GetMonitorInfoW(hMonitor, reinterpret_cast(&monInfo))) { - Logger::err("D3D9: Failed to query monitor info"); - return; - } - - auto rect = monInfo.rcMonitor; - - if (pWidth) - *pWidth = rect.right - rect.left; - - if (pHeight) - *pHeight = rect.bottom - rect.top; - } - - - void GetMonitorRect( - HMONITOR hMonitor, - RECT* pRect) { - ::MONITORINFOEXW monInfo; - monInfo.cbSize = sizeof(monInfo); - - if (!::GetMonitorInfoW(hMonitor, reinterpret_cast(&monInfo))) { - Logger::err("D3D9: Failed to query monitor info"); - return; - } - - *pRect = monInfo.rcMonitor; - } - } \ No newline at end of file diff --git a/src/d3d9/d3d9_monitor.h b/src/d3d9/d3d9_monitor.h index 996881dc9..ccb3f5b0a 100644 --- a/src/d3d9/d3d9_monitor.h +++ b/src/d3d9/d3d9_monitor.h @@ -35,8 +35,6 @@ namespace dxvk { D3D9Format BackBufferFormat, BOOL Windowed); - HMONITOR GetDefaultMonitor(); - /** * \brief Sets monitor display mode * @@ -47,39 +45,5 @@ namespace dxvk { HRESULT SetMonitorDisplayMode( HMONITOR hMonitor, const D3DDISPLAYMODEEX* pMode); - - /** - * \brief Queries window client size - * - * \param [in] hWnd Window to query - * \param [out] pWidth Client width - * \param [out] pHeight Client height - */ - void GetWindowClientSize( - HWND hWnd, - UINT* pWidth, - UINT* pHeight); - - /** - * \brief Queries monitor size - * - * \param [in] hMonitor Monitor to query - * \param [out] pWidth Client width - * \param [out] pHeight Client height - */ - void GetMonitorClientSize( - HMONITOR hMonitor, - UINT* pWidth, - UINT* pHeight); - - /** - * \brief Queries monitor rect - * - * \param [in] hMonitor Monitor to query - * \param [out] pRect The rect to return - */ - void GetMonitorRect( - HMONITOR hMonitor, - RECT* pRect); } \ No newline at end of file diff --git a/src/dxgi/dxgi_include.h b/src/dxgi/dxgi_include.h index 7af41b8ad..7c4d302f1 100644 --- a/src/dxgi/dxgi_include.h +++ b/src/dxgi/dxgi_include.h @@ -25,6 +25,7 @@ #include "../util/util_flags.h" #include "../util/util_likely.h" #include "../util/util_math.h" +#include "../util/util_monitor.h" #include "../util/util_string.h" #include diff --git a/src/dxgi/dxgi_monitor.cpp b/src/dxgi/dxgi_monitor.cpp index d5df5041f..836a4cd83 100644 --- a/src/dxgi/dxgi_monitor.cpp +++ b/src/dxgi/dxgi_monitor.cpp @@ -152,19 +152,4 @@ namespace dxvk { return status == DISP_CHANGE_SUCCESSFUL ? S_OK : DXGI_ERROR_NOT_CURRENTLY_AVAILABLE;; } - - void GetWindowClientSize( - HWND hWnd, - UINT* pWidth, - UINT* pHeight) { - RECT rect = { }; - ::GetClientRect(hWnd, &rect); - - if (pWidth) - *pWidth = rect.right - rect.left; - - if (pHeight) - *pHeight = rect.bottom - rect.top; - } - } \ No newline at end of file diff --git a/src/dxgi/dxgi_monitor.h b/src/dxgi/dxgi_monitor.h index ef9d89c93..912b81bef 100644 --- a/src/dxgi/dxgi_monitor.h +++ b/src/dxgi/dxgi_monitor.h @@ -78,17 +78,5 @@ namespace dxvk { HRESULT SetMonitorDisplayMode( HMONITOR hMonitor, const DXGI_MODE_DESC* pMode); - - /** - * \brief Queries window client size - * - * \param [in] hWnd Window to query - * \param [out] pWidth Client width - * \param [out] pHeight Client height - */ - void GetWindowClientSize( - HWND hWnd, - UINT* pWidth, - UINT* pHeight); } \ No newline at end of file diff --git a/src/util/meson.build b/src/util/meson.build index 28f60f789..80fe0be2e 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -4,6 +4,7 @@ util_src = files([ 'util_gdi.cpp', 'util_luid.cpp', 'util_matrix.cpp', + 'util_monitor.cpp', 'com/com_guid.cpp', 'com/com_private_data.cpp', diff --git a/src/util/util_monitor.cpp b/src/util/util_monitor.cpp new file mode 100644 index 000000000..b7769cf25 --- /dev/null +++ b/src/util/util_monitor.cpp @@ -0,0 +1,63 @@ +#include "util_monitor.h" + +#include "./log/log.h" + +namespace dxvk { + + HMONITOR GetDefaultMonitor() { + return ::MonitorFromPoint({ 0, 0 }, MONITOR_DEFAULTTOPRIMARY); + } + + + void GetWindowClientSize( + HWND hWnd, + UINT* pWidth, + UINT* pHeight) { + RECT rect = { }; + ::GetClientRect(hWnd, &rect); + + if (pWidth) + *pWidth = rect.right - rect.left; + + if (pHeight) + *pHeight = rect.bottom - rect.top; + } + + + void GetMonitorClientSize( + HMONITOR hMonitor, + UINT* pWidth, + UINT* pHeight) { + ::MONITORINFOEXW monInfo; + monInfo.cbSize = sizeof(monInfo); + + if (!::GetMonitorInfoW(hMonitor, reinterpret_cast(&monInfo))) { + Logger::err("Failed to query monitor info"); + return; + } + + auto rect = monInfo.rcMonitor; + + if (pWidth) + *pWidth = rect.right - rect.left; + + if (pHeight) + *pHeight = rect.bottom - rect.top; + } + + + void GetMonitorRect( + HMONITOR hMonitor, + RECT* pRect) { + ::MONITORINFOEXW monInfo; + monInfo.cbSize = sizeof(monInfo); + + if (!::GetMonitorInfoW(hMonitor, reinterpret_cast(&monInfo))) { + Logger::err("Failed to query monitor info"); + return; + } + + *pRect = monInfo.rcMonitor; + } + +} diff --git a/src/util/util_monitor.h b/src/util/util_monitor.h new file mode 100644 index 000000000..81d0a5873 --- /dev/null +++ b/src/util/util_monitor.h @@ -0,0 +1,47 @@ +#pragma once + +#include "./com/com_include.h" + +namespace dxvk { + + /** + * \brief Retrieves primary monitor + * \returns The primary monitor + */ + HMONITOR GetDefaultMonitor(); + + /** + * \brief Queries window client size + * + * \param [in] hWnd Window to query + * \param [out] pWidth Client width + * \param [out] pHeight Client height + */ + void GetWindowClientSize( + HWND hWnd, + UINT* pWidth, + UINT* pHeight); + + /** + * \brief Queries monitor size + * + * \param [in] hMonitor Monitor to query + * \param [out] pWidth Client width + * \param [out] pHeight Client height + */ + void GetMonitorClientSize( + HMONITOR hMonitor, + UINT* pWidth, + UINT* pHeight); + + /** + * \brief Queries monitor rect + * + * \param [in] hMonitor Monitor to query + * \param [out] pRect The rect to return + */ + void GetMonitorRect( + HMONITOR hMonitor, + RECT* pRect); + +}