Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions tests/features/test_resolution.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,29 @@ def test_enumerate_modes_empty():
assert modes == []


def test_enumerate_modes_fractional_refresh_rates():
"""QDC 报告的 59.94 应与 EnumDisplaySettings 的 60 匹配。"""
from ctypes import sizeof

from winrandr.features.resolution import enumerate_modes
from winrandr.win32.structures import DEVMODE

def fake_enum(_name, _i, dm_ptr):
dm_ptr._obj.dmSize = sizeof(DEVMODE)
if _i == 0:
dm_ptr._obj.dmPelsWidth = 1920
dm_ptr._obj.dmPelsHeight = 1080
dm_ptr._obj.dmDisplayFrequency = 60
return 1
return 0 # 无更多模式

with patch("winrandr.features.resolution._EnumDisplaySettings", side_effect=fake_enum):
# cur_refresh=59.94 模拟 QDC 报告分数刷新率
modes = enumerate_modes("DISPLAY1", 1920, 1080, 59.94)
assert len(modes) == 1
assert modes[0].is_current is True


def test_enumerate_modes_skips_invalid():
"""无效尺寸(frequency=0)的 mode 应跳过(覆盖 33->44 分支)。"""
from ctypes import sizeof
Expand Down
2 changes: 1 addition & 1 deletion winrandr/features/resolution.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def enumerate_modes(gdi_name: str, cur_width: int, cur_height: int, cur_refresh:
break
if dm.dmPelsWidth > 0 and dm.dmPelsHeight > 0 and dm.dmDisplayFrequency > 0:
rr = float(dm.dmDisplayFrequency)
is_cur = dm.dmPelsWidth == cur_width and dm.dmPelsHeight == cur_height and abs(rr - cur_refresh) < 0.01
is_cur = dm.dmPelsWidth == cur_width and dm.dmPelsHeight == cur_height and abs(rr - cur_refresh) < 0.5
is_pref = bool(has_reg and dm.dmPelsWidth == reg_dm.dmPelsWidth and dm.dmPelsHeight == reg_dm.dmPelsHeight)
modes.append(
DisplayMode(
Expand Down
Loading