forked from Mirrorlandia_minetest/irrlicht
CIrrDeviceWin32: drop all video mode code
This commit is contained in:
parent
57a51e7ac4
commit
02b8fc1ab6
@ -935,29 +935,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_ACTIVATE:
|
|
||||||
// we need to take care for screen changes, e.g. Alt-Tab
|
|
||||||
dev = getDeviceFromHWnd(hWnd);
|
|
||||||
if (dev && dev->isFullscreen())
|
|
||||||
{
|
|
||||||
if ((wParam&0xFF)==WA_INACTIVE)
|
|
||||||
{
|
|
||||||
// If losing focus we minimize the app to show other one
|
|
||||||
ShowWindow(hWnd,SW_MINIMIZE);
|
|
||||||
// and switch back to default resolution
|
|
||||||
dev->switchToFullScreen(true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Otherwise we retore the fullscreen Irrlicht app
|
|
||||||
SetForegroundWindow(hWnd);
|
|
||||||
ShowWindow(hWnd, SW_RESTORE);
|
|
||||||
// and set the fullscreen resolution again
|
|
||||||
dev->switchToFullScreen();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_USER:
|
case WM_USER:
|
||||||
event.EventType = irr::EET_USER_EVENT;
|
event.EventType = irr::EET_USER_EVENT;
|
||||||
event.UserEvent.UserData1 = static_cast<size_t>(wParam);
|
event.UserEvent.UserData1 = static_cast<size_t>(wParam);
|
||||||
@ -994,7 +971,7 @@ namespace irr
|
|||||||
|
|
||||||
//! constructor
|
//! constructor
|
||||||
CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
|
CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
|
||||||
: CIrrDeviceStub(params), HWnd(0), ChangedToFullScreen(false), Resized(false),
|
: CIrrDeviceStub(params), HWnd(0), Resized(false),
|
||||||
ExternalWindow(false), Win32CursorControl(0), JoyControl(0)
|
ExternalWindow(false), Win32CursorControl(0), JoyControl(0)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
@ -1010,13 +987,6 @@ CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
|
|||||||
// get handle to exe file
|
// get handle to exe file
|
||||||
HINSTANCE hInstance = GetModuleHandle(0);
|
HINSTANCE hInstance = GetModuleHandle(0);
|
||||||
|
|
||||||
// Store original desktop mode.
|
|
||||||
|
|
||||||
memset(&DesktopMode, 0, sizeof(DesktopMode));
|
|
||||||
DesktopMode.dmSize = sizeof(DesktopMode);
|
|
||||||
|
|
||||||
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &DesktopMode);
|
|
||||||
|
|
||||||
// create the window if we need to and we do not use the null device
|
// create the window if we need to and we do not use the null device
|
||||||
if (!CreationParams.WindowId && CreationParams.DriverType != video::EDT_NULL)
|
if (!CreationParams.WindowId && CreationParams.DriverType != video::EDT_NULL)
|
||||||
{
|
{
|
||||||
@ -1160,8 +1130,6 @@ CIrrDeviceWin32::~CIrrDeviceWin32()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switchToFullScreen(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1443,69 +1411,15 @@ bool CIrrDeviceWin32::isWindowMinimized() const
|
|||||||
|
|
||||||
|
|
||||||
//! switches to fullscreen
|
//! switches to fullscreen
|
||||||
bool CIrrDeviceWin32::switchToFullScreen(bool reset)
|
bool CIrrDeviceWin32::switchToFullScreen()
|
||||||
{
|
{
|
||||||
if (!CreationParams.Fullscreen)
|
if (!CreationParams.Fullscreen)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (reset)
|
// To be filled...
|
||||||
{
|
|
||||||
if (ChangedToFullScreen)
|
|
||||||
{
|
|
||||||
return (ChangeDisplaySettings(&DesktopMode,0)==DISP_CHANGE_SUCCESSFUL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// use default values from current setting
|
|
||||||
|
|
||||||
DEVMODE dm;
|
|
||||||
memset(&dm, 0, sizeof(dm));
|
|
||||||
dm.dmSize = sizeof(dm);
|
|
||||||
|
|
||||||
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);
|
|
||||||
dm.dmPelsWidth = CreationParams.WindowSize.Width;
|
|
||||||
dm.dmPelsHeight = CreationParams.WindowSize.Height;
|
|
||||||
dm.dmBitsPerPel = CreationParams.Bits;
|
|
||||||
dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
|
|
||||||
|
|
||||||
LONG res = ChangeDisplaySettings(&dm, CDS_FULLSCREEN);
|
|
||||||
if (res != DISP_CHANGE_SUCCESSFUL)
|
|
||||||
{ // try again without forcing display frequency
|
|
||||||
dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
|
|
||||||
res = ChangeDisplaySettings(&dm, CDS_FULLSCREEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ret = false;
|
|
||||||
switch(res)
|
|
||||||
{
|
|
||||||
case DISP_CHANGE_SUCCESSFUL:
|
|
||||||
ChangedToFullScreen = true;
|
|
||||||
ret = true;
|
|
||||||
break;
|
|
||||||
case DISP_CHANGE_RESTART:
|
|
||||||
os::Printer::log("Switch to fullscreen: The computer must be restarted in order for the graphics mode to work.", ELL_ERROR);
|
|
||||||
break;
|
|
||||||
case DISP_CHANGE_BADFLAGS:
|
|
||||||
os::Printer::log("Switch to fullscreen: An invalid set of flags was passed in.", ELL_ERROR);
|
|
||||||
break;
|
|
||||||
case DISP_CHANGE_BADPARAM:
|
|
||||||
os::Printer::log("Switch to fullscreen: An invalid parameter was passed in. This can include an invalid flag or combination of flags.", ELL_ERROR);
|
|
||||||
break;
|
|
||||||
case DISP_CHANGE_FAILED:
|
|
||||||
os::Printer::log("Switch to fullscreen: The display driver failed the specified graphics mode.", ELL_ERROR);
|
|
||||||
break;
|
|
||||||
case DISP_CHANGE_BADMODE:
|
|
||||||
os::Printer::log("Switch to fullscreen: The graphics mode is not supported.", ELL_ERROR);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
os::Printer::log("An unknown error occurred while changing to fullscreen.", ELL_ERROR);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//! returns the win32 cursor control
|
//! returns the win32 cursor control
|
||||||
CIrrDeviceWin32::CCursorControl* CIrrDeviceWin32::getWin32CursorControl()
|
CIrrDeviceWin32::CCursorControl* CIrrDeviceWin32::getWin32CursorControl()
|
||||||
@ -1514,33 +1428,6 @@ CIrrDeviceWin32::CCursorControl* CIrrDeviceWin32::getWin32CursorControl()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! \return Returns a pointer to a list with all video modes supported
|
|
||||||
//! by the gfx adapter.
|
|
||||||
video::IVideoModeList* CIrrDeviceWin32::getVideoModeList()
|
|
||||||
{
|
|
||||||
if (!VideoModeList->getVideoModeCount())
|
|
||||||
{
|
|
||||||
// enumerate video modes.
|
|
||||||
DWORD i=0;
|
|
||||||
DEVMODE mode;
|
|
||||||
memset(&mode, 0, sizeof(mode));
|
|
||||||
mode.dmSize = sizeof(mode);
|
|
||||||
|
|
||||||
while (EnumDisplaySettings(NULL, i, &mode))
|
|
||||||
{
|
|
||||||
VideoModeList->addMode(core::dimension2d<u32>(mode.dmPelsWidth, mode.dmPelsHeight),
|
|
||||||
mode.dmBitsPerPel);
|
|
||||||
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &mode))
|
|
||||||
VideoModeList->setDesktop(mode.dmBitsPerPel, core::dimension2d<u32>(mode.dmPelsWidth, mode.dmPelsHeight));
|
|
||||||
}
|
|
||||||
|
|
||||||
return VideoModeList;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
|
typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
|
||||||
// Needed for old windows apis
|
// Needed for old windows apis
|
||||||
// depending on the SDK version and compilers some defines might be available
|
// depending on the SDK version and compilers some defines might be available
|
||||||
|
@ -66,10 +66,6 @@ namespace irr
|
|||||||
//! notifies the device that it should close itself
|
//! notifies the device that it should close itself
|
||||||
virtual void closeDevice() _IRR_OVERRIDE_;
|
virtual void closeDevice() _IRR_OVERRIDE_;
|
||||||
|
|
||||||
//! \return Returns a pointer to a list with all video modes
|
|
||||||
//! supported by the gfx adapter.
|
|
||||||
virtual video::IVideoModeList* getVideoModeList() _IRR_OVERRIDE_;
|
|
||||||
|
|
||||||
//! Notifies the device, that it has been resized
|
//! Notifies the device, that it has been resized
|
||||||
/** Must be publis as it is called from free function (event handler) */
|
/** Must be publis as it is called from free function (event handler) */
|
||||||
void OnResized();
|
void OnResized();
|
||||||
@ -119,7 +115,7 @@ namespace irr
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Switch to fullscreen
|
//! Switch to fullscreen
|
||||||
bool switchToFullScreen(bool reset=false);
|
bool switchToFullScreen();
|
||||||
|
|
||||||
//! Check for and show last Windows API error to help internal debugging.
|
//! Check for and show last Windows API error to help internal debugging.
|
||||||
//! Does call GetLastError and on errors formats the error text and displays it in a messagebox.
|
//! Does call GetLastError and on errors formats the error text and displays it in a messagebox.
|
||||||
@ -432,11 +428,9 @@ namespace irr
|
|||||||
|
|
||||||
HWND HWnd;
|
HWND HWnd;
|
||||||
|
|
||||||
bool ChangedToFullScreen;
|
|
||||||
bool Resized;
|
bool Resized;
|
||||||
bool ExternalWindow;
|
bool ExternalWindow;
|
||||||
CCursorControl* Win32CursorControl;
|
CCursorControl* Win32CursorControl;
|
||||||
DEVMODE DesktopMode;
|
|
||||||
|
|
||||||
SJoystickWin32Control* JoyControl;
|
SJoystickWin32Control* JoyControl;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user