Merge pull request #1578 from reicast/z/win32-fullscreen

Win32 fullscreen via alt-enter
This commit is contained in:
David Miller 2019-05-01 19:57:54 -04:00 committed by GitHub
commit 446723b147
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 1 deletions

View File

@ -158,6 +158,7 @@ if(${BUILD_COMPILER} EQUAL ${COMPILER_GCC}) # Add Clang if NOT WIN32 *FIXME*
${lzma_SRCS}
${pico_SRCS}
)
add_definitions(-D_7ZIP_ST -DCHD5_LZMA)
endif()
### libosd.cmake ################################################################################
@ -243,7 +244,6 @@ endif()
include_directories ("${reicast_core_path}")
add_definitions(-D_7ZIP_ST -DCHD5_LZMA)

View File

@ -198,6 +198,10 @@ extern f32 mo_wheel_delta;
// Keyboard
static Win32KeyboardDevice keyboard(0);
void ToggleFullscreen();
void UpdateInputState(u32 port)
{
/*
@ -331,6 +335,14 @@ LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
keyboard.keyboard_input(keycode, message == WM_KEYDOWN);
}
break;
case WM_SYSKEYDOWN:
if (wParam == VK_RETURN)
if ((HIWORD(lParam) & KF_ALTDOWN))
ToggleFullscreen();
break;
case WM_CHAR:
keyboard.keyboard_character((char)wParam);
return 0;
@ -388,6 +400,45 @@ void* libPvr_GetRenderSurface()
return GetDC((HWND)window_win);
}
void ToggleFullscreen()
{
static RECT rSaved;
static bool fullscreen=false;
HWND hWnd = (HWND)window_win;
fullscreen = !fullscreen;
if (fullscreen)
{
GetWindowRect(hWnd, &rSaved);
MONITORINFO mi = { sizeof(mi) };
HMONITOR hmon = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
if (GetMonitorInfo(hmon, &mi)) {
SetWindowLongPtr(hWnd, GWL_EXSTYLE, WS_EX_APPWINDOW | WS_EX_TOPMOST);
SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
SetWindowPos(hWnd, HWND_TOPMOST, mi.rcMonitor.left, mi.rcMonitor.top,
mi.rcMonitor.right - mi.rcMonitor.left, mi.rcMonitor.bottom - mi.rcMonitor.top,
SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_ASYNCWINDOWPOS);
}
}
else {
SetWindowLongPtr(hWnd, GWL_EXSTYLE, WS_EX_APPWINDOW | WS_EX_TOPMOST);
SetWindowLongPtr(hWnd, GWL_STYLE, WS_VISIBLE | WS_OVERLAPPEDWINDOW | (window_maximized ? WS_MAXIMIZE : 0));
SetWindowPos(hWnd, NULL, rSaved.left, rSaved.top,
rSaved.right - rSaved.left, rSaved.bottom - rSaved.top,
SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_ASYNCWINDOWPOS|SWP_NOZORDER);
}
}
BOOL CtrlHandler( DWORD fdwCtrlType )
{
switch( fdwCtrlType )