mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-22 15:11:31 +00:00
[idd] config: retain four-decimal refresh rates
This commit is contained in:
@@ -254,7 +254,7 @@ void CConfigWindow::onModeListSelectChange()
|
||||
auto &mode = (*m_modes)[index];
|
||||
m_modeWidth->setNumericValue(mode.width);
|
||||
m_modeHeight->setNumericValue(mode.height);
|
||||
m_modeRefresh->setValue(LGFormatRefreshRate(mode.refreshMilliHz));
|
||||
m_modeRefresh->setValue(LGFormatRefreshRate(mode.refresh100uHz));
|
||||
m_modePreferred->setChecked(mode.preferred);
|
||||
}
|
||||
EnableWindow(*m_modeUpdate, TRUE);
|
||||
@@ -294,11 +294,11 @@ LRESULT CConfigWindow::onCommand(WORD id, WORD code, HWND hwnd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned refreshMilliHz;
|
||||
unsigned refresh100uHz;
|
||||
if (!LGParseRefreshRate(
|
||||
m_modeRefresh->getValue(), refreshMilliHz))
|
||||
m_modeRefresh->getValue(), refresh100uHz))
|
||||
return 0;
|
||||
mode.refreshMilliHz = refreshMilliHz;
|
||||
mode.refresh100uHz = refresh100uHz;
|
||||
|
||||
m_modeBox->clear();
|
||||
m_modeBox->setSel(updateModeList(index));
|
||||
@@ -325,10 +325,10 @@ LRESULT CConfigWindow::onCommand(WORD id, WORD code, HWND hwnd)
|
||||
}
|
||||
else if (m_defRefresh && hwnd == *m_defRefresh && code == EN_CHANGE && m_defaultRefresh)
|
||||
{
|
||||
unsigned refreshMilliHz;
|
||||
if (!LGParseRefreshRate(m_defRefresh->getValue(), refreshMilliHz))
|
||||
unsigned refresh100uHz;
|
||||
if (!LGParseRefreshRate(m_defRefresh->getValue(), refresh100uHz))
|
||||
return 0;
|
||||
m_defaultRefresh = refreshMilliHz;
|
||||
m_defaultRefresh = refresh100uHz;
|
||||
}
|
||||
else if (m_prefNoGPU && hwnd == *m_prefNoGPU && code == BN_CLICKED && m_noGPU)
|
||||
{
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "CSRWLock.h"
|
||||
#include "CNotifyWindow.h"
|
||||
#include "CRegistrySettings.h"
|
||||
#include "RefreshRate.h"
|
||||
|
||||
#include <setupapi.h>
|
||||
#include <tchar.h>
|
||||
@@ -1011,7 +1012,8 @@ void CPipeClient::HandleSetDisplayMode(const LGPipeMsg& msg)
|
||||
dm.dmPelsWidth = msg.displayMode.width;
|
||||
dm.dmPelsHeight = msg.displayMode.height;
|
||||
dm.dmDisplayFrequency =
|
||||
(msg.displayMode.refreshMilliHz + 500) / 1000;
|
||||
(msg.displayMode.refresh100uHz + LG_REFRESH_RATE_SCALE / 2) /
|
||||
LG_REFRESH_RATE_SCALE;
|
||||
dm.dmFields =
|
||||
DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
#define LGIDD_REGKEY L"SOFTWARE\\LookingGlass\\IDD"
|
||||
|
||||
const DWORD DEFAULT_REFRESH = 120000;
|
||||
const DWORD DEFAULT_REFRESH = 120 * LG_REFRESH_RATE_SCALE;
|
||||
|
||||
CRegistrySettings::CRegistrySettings() : hKey(nullptr) {}
|
||||
|
||||
@@ -65,7 +65,7 @@ static std::basic_string<T> trim(const std::basic_string<T> &s)
|
||||
}
|
||||
|
||||
static std::wregex displayMode(
|
||||
L"(\\d+)x(\\d+)@(\\d+(?:\\.\\d{1,3})?)(\\*)?");
|
||||
L"(\\d+)x(\\d+)@(\\d+(?:\\.\\d{1,4})?)(\\*)?");
|
||||
|
||||
static std::optional<DisplayMode> parseDisplayMode(const std::wstring &str)
|
||||
{
|
||||
@@ -78,7 +78,7 @@ static std::optional<DisplayMode> parseDisplayMode(const std::wstring &str)
|
||||
DisplayMode mode;
|
||||
mode.width = std::stoul(match[1]);
|
||||
mode.height = std::stoul(match[2]);
|
||||
if (!LGParseRefreshRate(match[3], mode.refreshMilliHz))
|
||||
if (!LGParseRefreshRate(match[3], mode.refresh100uHz))
|
||||
return {};
|
||||
mode.preferred = match[4] == L"*";
|
||||
return mode;
|
||||
@@ -87,7 +87,7 @@ static std::optional<DisplayMode> parseDisplayMode(const std::wstring &str)
|
||||
std::vector<DisplayMode> CRegistrySettings::getDefaultModes()
|
||||
{
|
||||
auto defaultRefresh = getDefaultRefresh();
|
||||
const unsigned refreshMilliHz =
|
||||
const unsigned refresh100uHz =
|
||||
defaultRefresh ? *defaultRefresh : DEFAULT_REFRESH;
|
||||
|
||||
std::vector<DisplayMode> result;
|
||||
@@ -96,7 +96,7 @@ std::vector<DisplayMode> CRegistrySettings::getDefaultModes()
|
||||
DisplayMode mode;
|
||||
mode.width = DefaultDisplayModes[i][0];
|
||||
mode.height = DefaultDisplayModes[i][1];
|
||||
mode.refreshMilliHz = refreshMilliHz;
|
||||
mode.refresh100uHz = refresh100uHz;
|
||||
mode.preferred = i == DefaultPreferredDisplayMode;
|
||||
result.emplace_back(mode);
|
||||
}
|
||||
@@ -166,7 +166,7 @@ std::wstring DisplayMode::toString()
|
||||
serialized.push_back('x');
|
||||
serialized.append(std::to_wstring(height));
|
||||
serialized.push_back('@');
|
||||
serialized.append(LGFormatRefreshRate(refreshMilliHz));
|
||||
serialized.append(LGFormatRefreshRate(refresh100uHz));
|
||||
if (preferred)
|
||||
serialized.push_back('*');
|
||||
return serialized;
|
||||
@@ -192,7 +192,7 @@ std::optional<DWORD> CRegistrySettings::getDefaultRefresh()
|
||||
status = RegQueryValueExW(hKey, L"DefaultRefresh", nullptr, &type,
|
||||
(LPBYTE)&refresh, &size);
|
||||
if (status == ERROR_SUCCESS && refresh >= 24 && refresh <= 1000)
|
||||
return refresh * 1000;
|
||||
return refresh * LG_REFRESH_RATE_SCALE;
|
||||
}
|
||||
else if ((type == REG_SZ || type == REG_EXPAND_SZ) && size &&
|
||||
size % sizeof(wchar_t) == 0)
|
||||
@@ -202,9 +202,9 @@ std::optional<DWORD> CRegistrySettings::getDefaultRefresh()
|
||||
(LPBYTE)value.data(), &size);
|
||||
if (status == ERROR_SUCCESS)
|
||||
{
|
||||
unsigned refreshMilliHz;
|
||||
if (LGParseRefreshRate(value.data(), refreshMilliHz))
|
||||
return refreshMilliHz;
|
||||
unsigned refresh100uHz;
|
||||
if (LGParseRefreshRate(value.data(), refresh100uHz))
|
||||
return refresh100uHz;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,9 +212,9 @@ std::optional<DWORD> CRegistrySettings::getDefaultRefresh()
|
||||
return {};
|
||||
}
|
||||
|
||||
LSTATUS CRegistrySettings::setDefaultRefresh(DWORD refreshMilliHz)
|
||||
LSTATUS CRegistrySettings::setDefaultRefresh(DWORD refresh100uHz)
|
||||
{
|
||||
const std::wstring value = LGFormatRefreshRate(refreshMilliHz);
|
||||
const std::wstring value = LGFormatRefreshRate(refresh100uHz);
|
||||
return RegSetValueExW(hKey, L"DefaultRefresh", 0, REG_SZ,
|
||||
(const BYTE *)value.c_str(),
|
||||
(DWORD)((value.size() + 1) * sizeof(wchar_t)));
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
struct DisplayMode {
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
unsigned refreshMilliHz;
|
||||
unsigned refresh100uHz;
|
||||
bool preferred;
|
||||
|
||||
std::wstring toString();
|
||||
@@ -49,7 +49,7 @@ public:
|
||||
LSTATUS setModes(const std::vector<DisplayMode> &modes);
|
||||
|
||||
std::optional<DWORD> getDefaultRefresh();
|
||||
LSTATUS setDefaultRefresh(DWORD refreshMilliHz);
|
||||
LSTATUS setDefaultRefresh(DWORD refresh100uHz);
|
||||
|
||||
std::optional<bool> getNoGPU();
|
||||
LSTATUS setNoGPU(bool noGPU);
|
||||
|
||||
Reference in New Issue
Block a user