wined3d: Support non-primary outputs in wined3d_output_get_desc().

Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zhiyi Zhang 2020-03-25 17:50:59 +08:00 committed by Alexandre Julliard
parent e3354e44f1
commit d25073a6c8
2 changed files with 22 additions and 22 deletions

View File

@ -916,35 +916,36 @@ HRESULT CDECL wined3d_register_software_device(struct wined3d *wined3d, void *in
return WINED3D_OK;
}
static BOOL CALLBACK enum_monitor_proc(HMONITOR monitor, HDC hdc, RECT *rect, LPARAM lparam)
{
struct wined3d_output_desc *desc = (struct wined3d_output_desc *)lparam;
MONITORINFOEXW monitor_info;
monitor_info.cbSize = sizeof(monitor_info);
if (GetMonitorInfoW(monitor, (MONITORINFO *)&monitor_info) &&
!lstrcmpiW(desc->device_name, monitor_info.szDevice))
{
desc->monitor = monitor;
desc->desktop_rect = monitor_info.rcMonitor;
desc->attached_to_desktop = TRUE;
return FALSE;
}
return TRUE;
}
HRESULT CDECL wined3d_output_get_desc(const struct wined3d_output *output,
struct wined3d_output_desc *desc)
{
enum wined3d_display_rotation rotation;
const struct wined3d_adapter *adapter;
struct wined3d_display_mode mode;
HMONITOR monitor;
HRESULT hr;
TRACE("output %p, desc %p.\n", output, desc);
adapter = output->adapter;
if (!(monitor = MonitorFromPoint(adapter->monitor_position, MONITOR_DEFAULTTOPRIMARY)))
return WINED3DERR_INVALIDCALL;
if (FAILED(hr = wined3d_output_get_display_mode(output, &mode, &rotation)))
return hr;
memset(desc, 0, sizeof(*desc));
desc->ordinal = output->ordinal;
memcpy(desc->device_name, adapter->device_name, sizeof(desc->device_name));
SetRect(&desc->desktop_rect, 0, 0, mode.width, mode.height);
OffsetRect(&desc->desktop_rect, adapter->monitor_position.x, adapter->monitor_position.y);
/* FIXME: We should get this from EnumDisplayDevices() when the adapters
* are created. */
desc->attached_to_desktop = TRUE;
desc->rotation = rotation;
desc->monitor = monitor;
return WINED3D_OK;
lstrcpyW(desc->device_name, output->device_name);
EnumDisplayMonitors(NULL, NULL, enum_monitor_proc, (LPARAM)desc);
return wined3d_output_get_display_mode(output, &mode, &desc->rotation);
}
/* FIXME: GetAdapterModeCount and EnumAdapterModes currently only returns modes

View File

@ -2914,7 +2914,6 @@ struct wined3d_output
struct wined3d_adapter
{
unsigned int ordinal;
POINT monitor_position;
struct wined3d_gl_info gl_info;
struct wined3d_d3d_info d3d_info;