mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +01:00
fix wayland bug (linux)
This commit is contained in:
parent
393627ee39
commit
c8ef48c2c9
30
src/dd.c
30
src/dd.c
@ -1006,13 +1006,31 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!d3d9_active || g_config.nonexclusive) &&
|
if (!d3d9_active || g_config.nonexclusive)
|
||||||
ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
|
|
||||||
{
|
{
|
||||||
g_ddraw->render.run = FALSE;
|
if (ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
|
||||||
g_config.windowed = TRUE;
|
{
|
||||||
g_config.fullscreen = TRUE;
|
g_ddraw->render.run = FALSE;
|
||||||
return dd_SetDisplayMode(dwWidth, dwHeight, dwBPP, dwFlags);
|
g_config.windowed = TRUE;
|
||||||
|
g_config.fullscreen = TRUE;
|
||||||
|
return dd_SetDisplayMode(dwWidth, dwHeight, dwBPP, dwFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Fix wayland bug:
|
||||||
|
ChangeDisplaySettings fails silently - enable borderless mode in case display resolution was not changed
|
||||||
|
*/
|
||||||
|
if (g_ddraw->wine &&
|
||||||
|
(g_ddraw->render.mode.dmPelsWidth != real_GetSystemMetrics(SM_CXSCREEN) ||
|
||||||
|
g_ddraw->render.mode.dmPelsHeight != real_GetSystemMetrics(SM_CYSCREEN)))
|
||||||
|
{
|
||||||
|
ChangeDisplaySettings(NULL, 0);
|
||||||
|
|
||||||
|
g_ddraw->render.run = FALSE;
|
||||||
|
g_config.windowed = TRUE;
|
||||||
|
g_config.fullscreen = TRUE;
|
||||||
|
return dd_SetDisplayMode(dwWidth, dwHeight, dwBPP, dwFlags);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_ddraw->wine)
|
if (g_ddraw->wine)
|
||||||
|
@ -479,6 +479,7 @@ void hook_create(HOOKLIST* hooks, BOOL initial_hook)
|
|||||||
BOOL is_local = _strnicmp(game_dir, mod_dir, strlen(game_dir)) == 0;
|
BOOL is_local = _strnicmp(game_dir, mod_dir, strlen(game_dir)) == 0;
|
||||||
|
|
||||||
if (is_local ||
|
if (is_local ||
|
||||||
|
_strcmpi(mod_filename, "mciavi32") == 0 ||
|
||||||
_strcmpi(mod_filename, "MSVFW32") == 0 ||
|
_strcmpi(mod_filename, "MSVFW32") == 0 ||
|
||||||
_strcmpi(mod_filename, "quartz") == 0 ||
|
_strcmpi(mod_filename, "quartz") == 0 ||
|
||||||
_strcmpi(mod_filename, "winmm") == 0)
|
_strcmpi(mod_filename, "winmm") == 0)
|
||||||
@ -555,6 +556,7 @@ void hook_revert(HOOKLIST* hooks)
|
|||||||
BOOL is_local = _strnicmp(game_dir, mod_dir, strlen(game_dir)) == 0;
|
BOOL is_local = _strnicmp(game_dir, mod_dir, strlen(game_dir)) == 0;
|
||||||
|
|
||||||
if (is_local ||
|
if (is_local ||
|
||||||
|
_strcmpi(mod_filename, "mciavi32") == 0 ||
|
||||||
_strcmpi(mod_filename, "MSVFW32") == 0 ||
|
_strcmpi(mod_filename, "MSVFW32") == 0 ||
|
||||||
_strcmpi(mod_filename, "quartz") == 0 ||
|
_strcmpi(mod_filename, "quartz") == 0 ||
|
||||||
_strcmpi(mod_filename, "winmm") == 0)
|
_strcmpi(mod_filename, "winmm") == 0)
|
||||||
|
@ -472,6 +472,7 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam)
|
|||||||
|
|
||||||
if (g_config.fixchilds == FIX_CHILDS_DETECT_HIDE ||
|
if (g_config.fixchilds == FIX_CHILDS_DETECT_HIDE ||
|
||||||
strcmp(class_name, "VideoRenderer") == 0 ||
|
strcmp(class_name, "VideoRenderer") == 0 ||
|
||||||
|
strcmp(class_name, "MCIAVI") == 0 ||
|
||||||
strcmp(class_name, "AVIWnd32") == 0 ||
|
strcmp(class_name, "AVIWnd32") == 0 ||
|
||||||
strcmp(class_name, "Afx:400000:3") == 0 ||
|
strcmp(class_name, "Afx:400000:3") == 0 ||
|
||||||
strcmp(class_name, "MCIWndClass") == 0)
|
strcmp(class_name, "MCIWndClass") == 0)
|
||||||
|
@ -840,9 +840,26 @@ int WINAPI fake_StretchDIBits(
|
|||||||
UINT iUsage,
|
UINT iUsage,
|
||||||
DWORD rop)
|
DWORD rop)
|
||||||
{
|
{
|
||||||
if (g_ddraw && g_ddraw->hwnd && WindowFromDC(hdc) == g_ddraw->hwnd)
|
HWND hwnd = WindowFromDC(hdc);
|
||||||
|
|
||||||
|
char class_name[MAX_PATH] = { 0 };
|
||||||
|
|
||||||
|
if (g_ddraw && g_ddraw->hwnd && hwnd && hwnd != g_ddraw->hwnd)
|
||||||
{
|
{
|
||||||
if (g_ddraw->primary && (g_ddraw->primary->bpp == 16 || g_ddraw->primary->bpp == 32 || g_ddraw->primary->palette))
|
GetClassNameA(hwnd, class_name, sizeof(class_name) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_ddraw && g_ddraw->hwnd &&
|
||||||
|
(hwnd == g_ddraw->hwnd ||
|
||||||
|
(g_config.fixchilds && IsChild(g_ddraw->hwnd, hwnd) &&
|
||||||
|
(g_config.fixchilds == FIX_CHILDS_DETECT_HIDE ||
|
||||||
|
strcmp(class_name, "MCIAVI") == 0 ||
|
||||||
|
strcmp(class_name, "AVIWnd32") == 0 ||
|
||||||
|
strcmp(class_name, "Afx:400000:3") == 0 ||
|
||||||
|
strcmp(class_name, "VideoRenderer") == 0 ||
|
||||||
|
strcmp(class_name, "MCIWndClass") == 0))))
|
||||||
|
{
|
||||||
|
if (0) // g_ddraw->primary && (g_ddraw->primary->bpp == 16 || g_ddraw->primary->bpp == 32 || g_ddraw->primary->palette))
|
||||||
{
|
{
|
||||||
HDC primary_dc;
|
HDC primary_dc;
|
||||||
dds_GetDC(g_ddraw->primary, &primary_dc);
|
dds_GetDC(g_ddraw->primary, &primary_dc);
|
||||||
@ -870,11 +887,11 @@ int WINAPI fake_StretchDIBits(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (g_ddraw->width > 0)
|
else if (g_ddraw->width > 0 && g_ddraw->render.hdc)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
real_StretchDIBits(
|
real_StretchDIBits(
|
||||||
hdc,
|
g_ddraw->render.hdc,
|
||||||
xDest + g_ddraw->render.viewport.x,
|
xDest + g_ddraw->render.viewport.x,
|
||||||
yDest + g_ddraw->render.viewport.y,
|
yDest + g_ddraw->render.viewport.y,
|
||||||
(int)(DestWidth * g_ddraw->render.scale_w),
|
(int)(DestWidth * g_ddraw->render.scale_w),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user