diff options
author | belugas <belugas@openttd.org> | 2008-01-01 14:20:48 +0000 |
---|---|---|
committer | belugas <belugas@openttd.org> | 2008-01-01 14:20:48 +0000 |
commit | 3dd61f423ad6c79f319388625f2223d0e46a2f16 (patch) | |
tree | 4649001ed8ff619fb2275a558ad17a1e8a942a9c /src | |
parent | a8611311ac842618f0be9e20b8339e7adbf86738 (diff) | |
download | openttd-3dd61f423ad6c79f319388625f2223d0e46a2f16.tar.xz |
(svn r11734) -Change: Allow ToggleFullScreen to return the result of the operation' attempt. Previously, only visual clues were available.
-Fix[FS#1519]: When you can not use this resolution at full screen, now you'll know that it failed.
As for the reason it did not work, each computer/OS has its reason.
Diffstat (limited to 'src')
-rw-r--r-- | src/gfx.cpp | 5 | ||||
-rw-r--r-- | src/gfx_func.h | 2 | ||||
-rw-r--r-- | src/lang/english.txt | 1 | ||||
-rw-r--r-- | src/settings_gui.cpp | 7 | ||||
-rw-r--r-- | src/video/cocoa/cocoa_v.h | 2 | ||||
-rw-r--r-- | src/video/cocoa/cocoa_v.mm | 3 | ||||
-rw-r--r-- | src/video/dedicated_v.cpp | 2 | ||||
-rw-r--r-- | src/video/dedicated_v.h | 2 | ||||
-rw-r--r-- | src/video/null_v.cpp | 2 | ||||
-rw-r--r-- | src/video/null_v.h | 2 | ||||
-rw-r--r-- | src/video/sdl_v.cpp | 4 | ||||
-rw-r--r-- | src/video/sdl_v.h | 2 | ||||
-rw-r--r-- | src/video/video_driver.hpp | 2 | ||||
-rw-r--r-- | src/video/win32_v.cpp | 15 | ||||
-rw-r--r-- | src/video/win32_v.h | 2 |
15 files changed, 30 insertions, 23 deletions
diff --git a/src/gfx.cpp b/src/gfx.cpp index b198c2e11..8a18d95c8 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1275,12 +1275,13 @@ bool ChangeResInGame(int width, int height) return (_screen.width == width && _screen.height == height) || _video_driver->ChangeResolution(width, height); } -void ToggleFullScreen(bool fs) +bool ToggleFullScreen(bool fs) { - _video_driver->ToggleFullscreen(fs); + bool result = _video_driver->ToggleFullscreen(fs); if (_fullscreen != fs && _num_resolutions == 0) { DEBUG(driver, 0, "Could not find a suitable fullscreen resolution"); } + return result; } static int CDECL compare_res(const void *pa, const void *pb) diff --git a/src/gfx_func.h b/src/gfx_func.h index 837be1e0c..0103e7044 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -151,7 +151,7 @@ void ScreenSizeChanged(); void UndrawMouseCursor(); bool ChangeResInGame(int w, int h); void SortResolutions(int count); -void ToggleFullScreen(bool fs); +bool ToggleFullScreen(bool fs); /* gfx.cpp */ #define ASCII_LETTERSTART 32 diff --git a/src/lang/english.txt b/src/lang/english.txt index 981487faa..4dd7840ad 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -941,6 +941,7 @@ STR_OPTIONS_LANG_TIP :{BLACK}Select t STR_OPTIONS_FULLSCREEN :{BLACK}Fullscreen STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Check this box to play OpenTTD fullscreen mode +STR_FULLSCREEN_FAILED :{WHITE}Fullscreen mode failed STR_OPTIONS_RES :{BLACK}Screen resolution STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING} diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 3dc5a4226..ea686f9ef 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -201,8 +201,11 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e) ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), 27, 0, 0); return; case 28: /* Click fullscreen on/off */ - w->SetWidgetLoweredState(28, !_fullscreen); - ToggleFullScreen(!_fullscreen); // toggle full-screen on/off + /* try to toggle full-screen on/off */ + if (!ToggleFullScreen(!_fullscreen)) { + ShowErrorMessage(INVALID_STRING_ID, STR_FULLSCREEN_FAILED, 0, 0); + } + w->SetWidgetLoweredState(28, _fullscreen); SetWindowDirty(w); return; case 30: case 31: /* Setup screenshot format dropdown */ diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 3a7276bb2..10c408f0a 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -19,7 +19,7 @@ public: /* virtual */ bool ChangeResolution(int w, int h); - /* virtual */ void ToggleFullscreen(bool fullscreen); + /* virtual */ bool ToggleFullscreen(bool fullscreen); }; class FVideoDriver_Cocoa: public VideoDriverFactory<FVideoDriver_Cocoa> { diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 3ca9f8113..2a5eea7be 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -361,7 +361,7 @@ bool VideoDriver_Cocoa::ChangeResolution(int w, int h) return ret; } -void VideoDriver_Cocoa::ToggleFullscreen(bool full_screen) +bool VideoDriver_Cocoa::ToggleFullscreen(bool full_screen) { bool oldfs; @@ -386,6 +386,7 @@ void VideoDriver_Cocoa::ToggleFullscreen(bool full_screen) QZ_GameSizeChanged(); QZ_UpdateVideoModes(); + return _cocoa_subdriver->IsFullscreen() == full_screen; } diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index 7ca1db6ea..97b53e87f 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -168,7 +168,7 @@ void VideoDriver_Dedicated::Stop() void VideoDriver_Dedicated::MakeDirty(int left, int top, int width, int height) {} bool VideoDriver_Dedicated::ChangeResolution(int w, int h) { return false; } -void VideoDriver_Dedicated::ToggleFullscreen(bool fs) {} +bool VideoDriver_Dedicated::ToggleFullscreen(bool fs) { return false; } #if defined(UNIX) || defined(__OS2__) || defined(PSP) static bool InputWaiting() diff --git a/src/video/dedicated_v.h b/src/video/dedicated_v.h index a2de1c275..0ade00f92 100644 --- a/src/video/dedicated_v.h +++ b/src/video/dedicated_v.h @@ -17,7 +17,7 @@ public: /* virtual */ bool ChangeResolution(int w, int h); - /* virtual */ void ToggleFullscreen(bool fullscreen); + /* virtual */ bool ToggleFullscreen(bool fullscreen); }; class FVideoDriver_Dedicated: public VideoDriverFactory<FVideoDriver_Dedicated> { diff --git a/src/video/null_v.cpp b/src/video/null_v.cpp index 7d2fa512d..f1942a8ae 100644 --- a/src/video/null_v.cpp +++ b/src/video/null_v.cpp @@ -38,4 +38,4 @@ void VideoDriver_Null::MainLoop() bool VideoDriver_Null::ChangeResolution(int w, int h) { return false; } -void VideoDriver_Null::ToggleFullscreen(bool fs) {} +bool VideoDriver_Null::ToggleFullscreen(bool fs) { return false; } diff --git a/src/video/null_v.h b/src/video/null_v.h index d2e8b4b18..e32a88536 100644 --- a/src/video/null_v.h +++ b/src/video/null_v.h @@ -20,7 +20,7 @@ public: /* virtual */ bool ChangeResolution(int w, int h); - /* virtual */ void ToggleFullscreen(bool fullscreen); + /* virtual */ bool ToggleFullscreen(bool fullscreen); }; class FVideoDriver_Null: public VideoDriverFactory<FVideoDriver_Null> { diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 4461fbf32..cf0e9971d 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -521,14 +521,16 @@ bool VideoDriver_SDL::ChangeResolution(int w, int h) return CreateMainSurface(w, h); } -void VideoDriver_SDL::ToggleFullscreen(bool fullscreen) +bool VideoDriver_SDL::ToggleFullscreen(bool fullscreen) { _fullscreen = fullscreen; GetVideoModes(); // get the list of available video modes if (_num_resolutions == 0 || !this->ChangeResolution(_cur_resolution[0], _cur_resolution[1])) { // switching resolution failed, put back full_screen to original status _fullscreen ^= true; + return false; } + return true; } #endif /* WITH_SDL */ diff --git a/src/video/sdl_v.h b/src/video/sdl_v.h index fdfded49c..ab56f99c3 100644 --- a/src/video/sdl_v.h +++ b/src/video/sdl_v.h @@ -17,7 +17,7 @@ public: /* virtual */ bool ChangeResolution(int w, int h); - /* virtual */ void ToggleFullscreen(bool fullscreen); + /* virtual */ bool ToggleFullscreen(bool fullscreen); }; class FVideoDriver_SDL: public VideoDriverFactory<FVideoDriver_SDL> { diff --git a/src/video/video_driver.hpp b/src/video/video_driver.hpp index 048c233b9..423ab92e1 100644 --- a/src/video/video_driver.hpp +++ b/src/video/video_driver.hpp @@ -13,7 +13,7 @@ public: virtual bool ChangeResolution(int w, int h) = 0; - virtual void ToggleFullscreen(bool fullscreen) = 0; + virtual bool ToggleFullscreen(bool fullscreen) = 0; }; class VideoDriverFactoryBase: public DriverFactoryBase { diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 5fb4a4c60..ceac2b3b6 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -210,7 +210,7 @@ static void CALLBACK TrackMouseTimerProc(HWND hwnd, UINT msg, UINT event, DWORD } } -static void MakeWindow(bool full_screen) +static bool MakeWindow(bool full_screen) { _fullscreen = full_screen; @@ -242,8 +242,8 @@ static void MakeWindow(bool full_screen) settings.dmDisplayFrequency = _display_hz; if (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { - MakeWindow(false); - return; + MakeWindow(false); // don't care about the result + return false; // the request failed } } else if (_wnd.fullscreen) { // restore display? @@ -291,6 +291,7 @@ static void MakeWindow(bool full_screen) } } GameSizeChanged(); // invalidate all windows, force redraw + return true; // the request succedded } static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) @@ -895,12 +896,10 @@ bool VideoDriver_Win32::ChangeResolution(int w, int h) _wnd.width = _wnd.width_org = w; _wnd.height = _wnd.height_org = h; - MakeWindow(_fullscreen); // _wnd.fullscreen screws up ingame resolution switching - - return true; + return MakeWindow(_fullscreen); // _wnd.fullscreen screws up ingame resolution switching } -void VideoDriver_Win32::ToggleFullscreen(bool full_screen) +bool VideoDriver_Win32::ToggleFullscreen(bool full_screen) { - MakeWindow(full_screen); + return MakeWindow(full_screen); } diff --git a/src/video/win32_v.h b/src/video/win32_v.h index 11ee523ef..223772d75 100644 --- a/src/video/win32_v.h +++ b/src/video/win32_v.h @@ -17,7 +17,7 @@ public: /* virtual */ bool ChangeResolution(int w, int h); - /* virtual */ void ToggleFullscreen(bool fullscreen); + /* virtual */ bool ToggleFullscreen(bool fullscreen); }; class FVideoDriver_Win32: public VideoDriverFactory<FVideoDriver_Win32> { |