mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-01-31 14:52:11 +01:00
[util] Factor out common monitor-related functions
This commit is contained in:
parent
8c68cf1551
commit
66503aeaa0
@ -36,8 +36,9 @@
|
|||||||
#include "../util/util_flags.h"
|
#include "../util/util_flags.h"
|
||||||
#include "../util/util_likely.h"
|
#include "../util/util_likely.h"
|
||||||
#include "../util/util_math.h"
|
#include "../util/util_math.h"
|
||||||
#include "../util/util_string.h"
|
#include "../util/util_monitor.h"
|
||||||
#include "../util/util_misc.h"
|
#include "../util/util_misc.h"
|
||||||
|
#include "../util/util_string.h"
|
||||||
|
|
||||||
// Missed definitions in Wine/MinGW.
|
// Missed definitions in Wine/MinGW.
|
||||||
|
|
||||||
|
@ -60,11 +60,6 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HMONITOR GetDefaultMonitor() {
|
|
||||||
return ::MonitorFromPoint({ 0, 0 }, MONITOR_DEFAULTTOPRIMARY);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
HRESULT SetMonitorDisplayMode(
|
HRESULT SetMonitorDisplayMode(
|
||||||
HMONITOR hMonitor,
|
HMONITOR hMonitor,
|
||||||
const D3DDISPLAYMODEEX* pMode) {
|
const D3DDISPLAYMODEEX* pMode) {
|
||||||
@ -106,56 +101,4 @@ namespace dxvk {
|
|||||||
return status == DISP_CHANGE_SUCCESSFUL ? D3D_OK : D3DERR_NOTAVAILABLE;
|
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<MONITORINFO*>(&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<MONITORINFO*>(&monInfo))) {
|
|
||||||
Logger::err("D3D9: Failed to query monitor info");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
*pRect = monInfo.rcMonitor;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -35,8 +35,6 @@ namespace dxvk {
|
|||||||
D3D9Format BackBufferFormat,
|
D3D9Format BackBufferFormat,
|
||||||
BOOL Windowed);
|
BOOL Windowed);
|
||||||
|
|
||||||
HMONITOR GetDefaultMonitor();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Sets monitor display mode
|
* \brief Sets monitor display mode
|
||||||
*
|
*
|
||||||
@ -48,38 +46,4 @@ namespace dxvk {
|
|||||||
HMONITOR hMonitor,
|
HMONITOR hMonitor,
|
||||||
const D3DDISPLAYMODEEX* pMode);
|
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);
|
|
||||||
|
|
||||||
}
|
}
|
@ -25,6 +25,7 @@
|
|||||||
#include "../util/util_flags.h"
|
#include "../util/util_flags.h"
|
||||||
#include "../util/util_likely.h"
|
#include "../util/util_likely.h"
|
||||||
#include "../util/util_math.h"
|
#include "../util/util_math.h"
|
||||||
|
#include "../util/util_monitor.h"
|
||||||
#include "../util/util_string.h"
|
#include "../util/util_string.h"
|
||||||
|
|
||||||
#include <dxgi1_5.h>
|
#include <dxgi1_5.h>
|
||||||
|
@ -152,19 +152,4 @@ namespace dxvk {
|
|||||||
return status == DISP_CHANGE_SUCCESSFUL ? S_OK : DXGI_ERROR_NOT_CURRENTLY_AVAILABLE;;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -79,16 +79,4 @@ namespace dxvk {
|
|||||||
HMONITOR hMonitor,
|
HMONITOR hMonitor,
|
||||||
const DXGI_MODE_DESC* pMode);
|
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);
|
|
||||||
|
|
||||||
}
|
}
|
@ -4,6 +4,7 @@ util_src = files([
|
|||||||
'util_gdi.cpp',
|
'util_gdi.cpp',
|
||||||
'util_luid.cpp',
|
'util_luid.cpp',
|
||||||
'util_matrix.cpp',
|
'util_matrix.cpp',
|
||||||
|
'util_monitor.cpp',
|
||||||
|
|
||||||
'com/com_guid.cpp',
|
'com/com_guid.cpp',
|
||||||
'com/com_private_data.cpp',
|
'com/com_private_data.cpp',
|
||||||
|
63
src/util/util_monitor.cpp
Normal file
63
src/util/util_monitor.cpp
Normal file
@ -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<MONITORINFO*>(&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<MONITORINFO*>(&monInfo))) {
|
||||||
|
Logger::err("Failed to query monitor info");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pRect = monInfo.rcMonitor;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
47
src/util/util_monitor.h
Normal file
47
src/util/util_monitor.h
Normal file
@ -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);
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user