mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 00:45:24 +00:00
[DESK] Find best display settings (#6288)
Based on KRosUser's desk.patch. JIRA issue: CORE-18187, CORE-16878 - Add FindBestElement helper function. - Use FindBestElement to find the best display settings.
This commit is contained in:
parent
267a1c9cda
commit
8d7a8f0ec1
1 changed files with 38 additions and 13 deletions
|
@ -842,6 +842,34 @@ SwitchDisplayMode(HWND hwndDlg, PWSTR DeviceName, PSETTINGS_ENTRY seInit, PSETTI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
PSETTINGS_ENTRY
|
||||||
|
FindBestElement(
|
||||||
|
_In_ PDISPLAY_DEVICE_ENTRY pDevice)
|
||||||
|
{
|
||||||
|
PSETTINGS_ENTRY Request = &pDevice->InitialSettings, BestEntry = NULL, Current;
|
||||||
|
LONG Distance, NearestDistance = MAXLONG;
|
||||||
|
|
||||||
|
/* Find the best entry in the list */
|
||||||
|
for (Current = pDevice->Settings; Current; Current = Current->Flink)
|
||||||
|
{
|
||||||
|
Distance = 0x100000 * labs(Current->dmBitsPerPel - Request->dmBitsPerPel ) +
|
||||||
|
0x100 * labs(Current->dmPelsWidth - Request->dmPelsWidth ) +
|
||||||
|
0x100 * labs(Current->dmPelsHeight - Request->dmPelsHeight ) +
|
||||||
|
labs(Current->dmDisplayFrequency - Request->dmDisplayFrequency);
|
||||||
|
if (Distance == 0)
|
||||||
|
return Current;
|
||||||
|
|
||||||
|
if (Distance < NearestDistance)
|
||||||
|
{
|
||||||
|
BestEntry = Current;
|
||||||
|
NearestDistance = Distance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return BestEntry;
|
||||||
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
ApplyDisplaySettings(HWND hwndDlg, PSETTINGS_DATA pData)
|
ApplyDisplaySettings(HWND hwndDlg, PSETTINGS_DATA pData)
|
||||||
{
|
{
|
||||||
|
@ -866,10 +894,7 @@ ApplyDisplaySettings(HWND hwndDlg, PSETTINGS_DATA pData)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth = pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth;
|
pData->CurrentDisplayDevice->CurrentSettings = FindBestElement(pData->CurrentDisplayDevice);
|
||||||
pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight = pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight;
|
|
||||||
pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel = pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel;
|
|
||||||
pData->CurrentDisplayDevice->CurrentSettings->dmDisplayFrequency = pData->CurrentDisplayDevice->InitialSettings.dmDisplayFrequency;
|
|
||||||
UpdateDisplay(hwndDlg, pData, TRUE);
|
UpdateDisplay(hwndDlg, pData, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -921,16 +946,16 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar
|
||||||
DEVMODE devmode;
|
DEVMODE devmode;
|
||||||
ZeroMemory(&devmode, sizeof(devmode));
|
ZeroMemory(&devmode, sizeof(devmode));
|
||||||
devmode.dmSize = (WORD)sizeof(devmode);
|
devmode.dmSize = (WORD)sizeof(devmode);
|
||||||
if (EnumDisplaySettingsExW(pData->CurrentDisplayDevice->DeviceName, ENUM_CURRENT_SETTINGS, &devmode, 0))
|
if (EnumDisplaySettingsExW(pData->CurrentDisplayDevice->DeviceName,
|
||||||
|
ENUM_CURRENT_SETTINGS, &devmode, 0))
|
||||||
{
|
{
|
||||||
pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth = devmode.dmPelsWidth;
|
PSETTINGS_ENTRY pInitialSettings = &pData->CurrentDisplayDevice->InitialSettings;
|
||||||
pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight = devmode.dmPelsHeight;
|
pInitialSettings->dmPelsWidth = devmode.dmPelsWidth;
|
||||||
pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel = devmode.dmBitsPerPel;
|
pInitialSettings->dmPelsHeight = devmode.dmPelsHeight;
|
||||||
pData->CurrentDisplayDevice->InitialSettings.dmDisplayFrequency = devmode.dmDisplayFrequency;
|
pInitialSettings->dmBitsPerPel = devmode.dmBitsPerPel;
|
||||||
pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth = pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth;
|
pInitialSettings->dmDisplayFrequency = devmode.dmDisplayFrequency;
|
||||||
pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight = pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight;
|
pData->CurrentDisplayDevice->CurrentSettings =
|
||||||
pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel = pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel;
|
FindBestElement(pData->CurrentDisplayDevice);
|
||||||
pData->CurrentDisplayDevice->CurrentSettings->dmDisplayFrequency = pData->CurrentDisplayDevice->InitialSettings.dmDisplayFrequency;
|
|
||||||
UpdateDisplay(hwndDlg, pData, TRUE);
|
UpdateDisplay(hwndDlg, pData, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue