summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gfx.c11
-rw-r--r--gfx.h1
-rw-r--r--lang/english.txt3
-rw-r--r--settings_gui.c31
-rw-r--r--win32.c3
5 files changed, 37 insertions, 12 deletions
diff --git a/gfx.c b/gfx.c
index 2d0616fb8..bbd760f51 100644
--- a/gfx.c
+++ b/gfx.c
@@ -1928,3 +1928,14 @@ bool ChangeResInGame(int w, int h)
_cur_resolution[1] = h;
return true;
}
+
+void ToggleFullScreen(const bool full_screen)
+{
+ _fullscreen = full_screen;
+ /* use preset resolutions, not _screen.height and _screen.width. On windows for example
+ if Desktop-size is 1280x1024, and gamesize is also 1280x1024, _screen.height will be
+ only 1000 because of possible start-bar. For this reason you cannot switch to
+ fullscreen mode from this resolution. Use of preset resolution will fix this */
+ if (!_video_driver->change_resolution(_cur_resolution[0], _cur_resolution[1]))
+ _fullscreen ^= true; // switching resolution failed, put back full_screen to original status
+}
diff --git a/gfx.h b/gfx.h
index 747fdccd2..bab426944 100644
--- a/gfx.h
+++ b/gfx.h
@@ -78,6 +78,7 @@ void DrawMouseCursor();
void ScreenSizeChanged();
void UndrawMouseCursor();
bool ChangeResInGame(int w, int h);
+void ToggleFullScreen(const bool full_screen);
typedef struct {
int xoffs, yoffs;
diff --git a/lang/english.txt b/lang/english.txt
index 569bb6650..1c5eb1441 100644
--- a/lang/english.txt
+++ b/lang/english.txt
@@ -887,6 +887,9 @@ STR_OPTIONS_LANG :{BLACK}Language
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Select the interface language to use
+STR_OPTIONS_FULLSCREEN :{BLACK}Fullscreen
+STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Check this box to play OpenTTD fullscreen mode
+
STR_OPTIONS_RES :{BLACK}Screen resolution
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}Select the screen resolution to use
diff --git a/settings_gui.c b/settings_gui.c
index 75e141319..ab413a858 100644
--- a/settings_gui.c
+++ b/settings_gui.c
@@ -77,7 +77,10 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e)
i = GetCurRes();
SET_DPARAM16(7, i == _num_resolutions ? STR_RES_OTHER : SPECSTR_RESOLUTION_START + i);
SET_DPARAM16(8, SPECSTR_SCREENSHOT_START + _cur_screenshot_format);
+ (_fullscreen) ? SETBIT(w->click_state, 28) : CLRBIT(w->click_state, 28); // fullscreen button
+
DrawWindowWidgets(w);
+ DrawString(20, 175, STR_OPTIONS_FULLSCREEN, 0); // fullscreen
} break;
case WE_CLICK:
@@ -113,8 +116,12 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e)
// setup resolution dropdown
ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_RESOLUTION_START, _num_resolutions), GetCurRes(), e->click.widget, 0);
return;
- case 30:
- // setup screenshot format dropdown
+ case 28: /* Click fullscreen on/off */
+ (_fullscreen) ? CLRBIT(w->click_state, 28) : SETBIT(w->click_state, 28);
+ ToggleFullScreen(!_fullscreen); // toggle full-screen on/off
+ SetWindowDirty(w);
+ return;
+ case 31: /* Setup screenshot format dropdown */
ShowDropDownMenu(w, BuildDynamicDropdown(SPECSTR_SCREENSHOT_START, _num_screenshot_formats), _cur_screenshot_format, e->click.widget, 0);
return;
@@ -197,7 +204,7 @@ int32 CmdSetTownNameType(int x, int y, uint32 flags, uint32 p1, uint32 p2)
static const Widget _game_options_widgets[] = {
{ WWT_CLOSEBOX, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 14, 11, 369, 0, 13, STR_00B1_GAME_OPTIONS, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_PANEL, 14, 0, 369, 14, 233, 0x0, STR_NULL},
+{ WWT_PANEL, 14, 0, 369, 14, 238, 0x0, STR_NULL},
{ WWT_FRAME, 14, 10, 179, 20, 55, STR_02E0_CURRENCY_UNITS, STR_NULL},
{ WWT_6, 14, 20, 169, 34, 45, STR_02E1, STR_02E2_CURRENCY_UNITS_SELECTION},
{ WWT_CLOSEBOX, 14, 158, 168, 35, 44, STR_0225, STR_02E2_CURRENCY_UNITS_SELECTION},
@@ -214,27 +221,29 @@ static const Widget _game_options_widgets[] = {
{ WWT_6, 14, 20, 169, 118, 129, STR_02F5, STR_02F6_SELECT_INTERVAL_BETWEEN},
{ WWT_CLOSEBOX, 14, 158, 168, 119, 128, STR_0225, STR_02F6_SELECT_INTERVAL_BETWEEN},
-{ WWT_FRAME, 14, 10, 359, 188, 223, STR_02BC_VEHICLE_DESIGN_NAMES, STR_NULL},
-{ WWT_6, 14, 20, 119, 202, 213, STR_02BD, STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION},
-{ WWT_CLOSEBOX, 14, 108, 118, 203, 212, STR_0225, STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION},
-{ WWT_CLOSEBOX, 14, 130, 349, 202, 213, STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK, STR_02C2_SAVE_CUSTOMIZED_VEHICLE},
+{ WWT_FRAME, 14, 10, 359, 194, 228, STR_02BC_VEHICLE_DESIGN_NAMES, STR_NULL},
+{ WWT_6, 14, 20, 119, 207, 218, STR_02BD, STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION},
+{ WWT_CLOSEBOX, 14, 108, 118, 208, 217, STR_0225, STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION},
+{ WWT_CLOSEBOX, 14, 130, 349, 207, 218, STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK, STR_02C2_SAVE_CUSTOMIZED_VEHICLE},
{ WWT_FRAME, 14, 190, 359, 104, 139, STR_OPTIONS_LANG, STR_NULL},
{ WWT_6, 14, 200, 349, 118, 129, STR_OPTIONS_LANG_CBO, STR_OPTIONS_LANG_TIP},
{ WWT_CLOSEBOX, 14, 338, 348, 119, 128, STR_0225, STR_OPTIONS_LANG_TIP},
-{ WWT_FRAME, 14, 10, 179, 146, 181, STR_OPTIONS_RES, STR_NULL},
+
+{ WWT_FRAME, 14, 10, 179, 146, 190, STR_OPTIONS_RES, STR_NULL},
{ WWT_6, 14, 20, 169, 160, 171, STR_OPTIONS_RES_CBO, STR_OPTIONS_RES_TIP},
{ WWT_CLOSEBOX, 14, 158, 168, 161, 170, STR_0225, STR_OPTIONS_RES_TIP},
+{ WWT_TEXTBTN, 14, 149, 169, 176, 184, STR_EMPTY, STR_OPTIONS_FULLSCREEN_TIP},
-{ WWT_FRAME, 14, 190, 359, 146, 181, STR_OPTIONS_SCREENSHOT_FORMAT, STR_NULL},
-{ WWT_6, 14, 200, 349, 160, 171, STR_OPTIONS_SCREENSHOT_FORMAT_CBO, STR_OPTIONS_SCREENSHOT_FORMAT_TIP},
+{ WWT_FRAME, 14, 190, 359, 146, 190, STR_OPTIONS_SCREENSHOT_FORMAT, STR_NULL},
+{ WWT_6, 14, 200, 349, 160, 171, STR_OPTIONS_SCREENSHOT_FORMAT_CBO, STR_OPTIONS_SCREENSHOT_FORMAT_TIP},
{ WWT_CLOSEBOX, 14, 338, 348, 161, 170, STR_0225, STR_OPTIONS_SCREENSHOT_FORMAT_TIP},
{ WIDGETS_END},
};
static const WindowDesc _game_options_desc = {
- WDP_CENTER, WDP_CENTER, 370, 234,
+ WDP_CENTER, WDP_CENTER, 370, 239,
WC_GAME_OPTIONS,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESTORE_DPARAM | WDF_UNCLICK_BUTTONS,
_game_options_widgets,
diff --git a/win32.c b/win32.c
index 52235c94b..91c523cd1 100644
--- a/win32.c
+++ b/win32.c
@@ -498,6 +498,7 @@ static void MakeWindow(bool full_screen)
error("CreateWindow failed");
}
}
+ GameSizeChanged(); // invalidate all windows, force redraw
}
static bool AllocateDibSection(int w, int h)
@@ -727,7 +728,7 @@ static bool Win32GdiChangeRes(int w, int h)
_wnd.width = _wnd.width_org = w;
_wnd.height = _wnd.height_org = h;
- MakeWindow(_wnd.fullscreen);
+ MakeWindow(_fullscreen); // _wnd.fullscreen screws up ingame resolution switching
return true;
}