Index: src/lang/english.txt =================================================================== --- src/lang/english.txt (Revision 20202) +++ src/lang/english.txt (Arbeitskopie) @@ -443,6 +443,7 @@ STR_ABOUT_MENU_AI_DEBUG :AI debug STR_ABOUT_MENU_SCREENSHOT :Screenshot (Ctrl+S) STR_ABOUT_MENU_GIANT_SCREENSHOT :Giant screenshot (Ctrl+G) +STR_ABOUT_MENU_PANORAMA_SCREENSHOT :Panorama screenshot (Ctrl+P) STR_ABOUT_MENU_ABOUT_OPENTTD :About 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner ############ range ends here Index: src/screenshot.cpp =================================================================== --- src/screenshot.cpp (Revision 20202) +++ src/screenshot.cpp (Arbeitskopie) @@ -23,6 +23,8 @@ #include "company_func.h" #include "strings_func.h" #include "gui.h" +#include "window_gui.h" +#include "window_func.h" #include "table/strings.h" @@ -624,6 +626,26 @@ return sf->proc(MakeScreenshotName(sf->extension), LargeWorldCallback, &vp, vp.width, vp.height, BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth(), _cur_palette); } +static bool MakePanoramaScreenshot() +{ + Window *w = FindWindowById(WC_MAIN_WINDOW, 0); + ViewPort vp; + const ScreenshotFormat *sf; + + vp.zoom = ZOOM_LVL_WORLD_SCREENSHOT; + vp.left = w->viewport->left; + vp.top = w->viewport->top; + vp.virtual_left = w->viewport->virtual_left; + vp.virtual_top = w->viewport->virtual_top; + vp.virtual_width = w->viewport->virtual_width; + vp.width = vp.virtual_width; + vp.virtual_height = w->viewport->virtual_height; + vp.height = vp.virtual_height; + + sf = _screenshot_formats + _cur_screenshot_format; + return sf->proc(MakeScreenshotName(sf->extension), LargeWorldCallback, &vp, vp.width, vp.height, BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth(), _cur_palette); +} + /** * Make an actual screenshot. * @param t the type of screenshot to make. @@ -655,6 +677,10 @@ ret = MakeWorldScreenshot(); break; + case SC_PANORAMA: + ret = MakePanoramaScreenshot(); + break; + default: NOT_REACHED(); } Index: src/screenshot.h =================================================================== --- src/screenshot.h (Revision 20202) +++ src/screenshot.h (Arbeitskopie) @@ -22,6 +22,7 @@ SC_VIEWPORT, ///< Screenshot of viewport SC_RAW, ///< Raw screenshot from blitter buffer SC_WORLD, ///< World screenshot + SC_PANORAMA, ///< Panorama screenshot }; bool MakeScreenshot(ScreenshotType t, const char *name); Index: src/toolbar_gui.cpp =================================================================== --- src/toolbar_gui.cpp (Revision 20202) +++ src/toolbar_gui.cpp (Arbeitskopie) @@ -758,7 +758,7 @@ static void ToolbarHelpClick(Window *w) { - PopupMainToolbMenu(w, TBN_HELP, STR_ABOUT_MENU_LAND_BLOCK_INFO, _settings_client.gui.newgrf_developer_tools ? 8 : 7); + PopupMainToolbMenu(w, TBN_HELP, STR_ABOUT_MENU_LAND_BLOCK_INFO, _settings_client.gui.newgrf_developer_tools ? 9 : 8); } static void MenuClickSmallScreenshot() @@ -771,16 +771,22 @@ MakeScreenshot(SC_WORLD, NULL); } +static void MenuClickPanoramaScreenshot() +{ + MakeScreenshot(SC_PANORAMA, NULL); +} + static void MenuClickHelp(int index) { switch (index) { - case 0: PlaceLandBlockInfo(); break; - case 2: IConsoleSwitch(); break; - case 3: ShowAIDebugWindow(); break; - case 4: MenuClickSmallScreenshot(); break; - case 5: MenuClickWorldScreenshot(); break; - case 6: ShowAboutWindow(); break; - case 7: ShowSpriteAlignerWindow(); break; + case 0: PlaceLandBlockInfo(); break; + case 2: IConsoleSwitch(); break; + case 3: ShowAIDebugWindow(); break; + case 4: MenuClickSmallScreenshot(); break; + case 5: MenuClickWorldScreenshot(); break; + case 6: MenuClickPanoramaScreenshot(); break; + case 7: ShowAboutWindow(); break; + case 8: ShowSpriteAlignerWindow(); break; } } @@ -1253,6 +1259,7 @@ MTHK_MUSIC, MTHK_SMALL_SCREENSHOT, MTHK_GIANT_SCREENSHOT, + MTHK_PANORAMA_SCREENSHOT, MTHK_CHEATS, MTHK_TERRAFORM, MTHK_EXTRA_VIEWPORT, @@ -1328,6 +1335,7 @@ case MTHK_MUSIC: ShowMusicWindow(); break; case MTHK_SMALL_SCREENSHOT: MenuClickSmallScreenshot(); break; case MTHK_GIANT_SCREENSHOT: MenuClickWorldScreenshot(); break; + case MTHK_PANORAMA_SCREENSHOT: MenuClickPanoramaScreenshot(); break; case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break; case MTHK_TERRAFORM: ShowTerraformToolbar(); break; case MTHK_EXTRA_VIEWPORT: ShowExtraViewPortWindow(); break; @@ -1412,6 +1420,7 @@ Hotkey(WKC_SHIFT | WKC_F12, "music", MTHK_MUSIC), Hotkey(WKC_CTRL | 'S', "small_screenshot", MTHK_SMALL_SCREENSHOT), Hotkey(WKC_CTRL | 'G', "giant_screenshot", MTHK_GIANT_SCREENSHOT), + Hotkey(WKC_CTRL | 'P', "panorama_screenshot", MTHK_PANORAMA_SCREENSHOT), Hotkey(WKC_CTRL | WKC_ALT | 'C', "cheats", MTHK_CHEATS), Hotkey('L', "terraform", MTHK_TERRAFORM), Hotkey('V', "extra_viewport", MTHK_EXTRA_VIEWPORT), @@ -1530,6 +1539,7 @@ MTEHK_LANDINFO, MTEHK_SMALL_SCREENSHOT, MTEHK_GIANT_SCREENSHOT, + MTEHK_PANORAMA_SCREENSHOT, MTEHK_ZOOM_IN, MTEHK_ZOOM_OUT, MTEHK_TERRAFORM, @@ -1624,6 +1634,7 @@ case MTEHK_LANDINFO: PlaceLandBlockInfo(); break; case MTEHK_SMALL_SCREENSHOT: MenuClickSmallScreenshot(); break; case MTEHK_GIANT_SCREENSHOT: MenuClickWorldScreenshot(); break; + case MTEHK_PANORAMA_SCREENSHOT: MenuClickPanoramaScreenshot(); break; case MTEHK_ZOOM_IN: ToolbarZoomInClick(this); break; case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break; case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break; @@ -1700,6 +1711,7 @@ Hotkey(WKC_F12, "train_list", MTEHK_LANDINFO), Hotkey(WKC_CTRL | 'S', "small_screenshot", MTEHK_SMALL_SCREENSHOT), Hotkey(WKC_CTRL | 'G', "giant_screenshot", MTEHK_GIANT_SCREENSHOT), + Hotkey(WKC_CTRL | 'P', "panorama_screenshot", MTEHK_PANORAMA_SCREENSHOT), Hotkey(_maintoolbar_zoomin_keys, "zoomin", MTEHK_ZOOM_IN), Hotkey(_maintoolbar_zoomout_keys, "zoomout", MTEHK_ZOOM_OUT), Hotkey('L', "terraform", MTEHK_TERRAFORM), Index: src/console_cmds.cpp =================================================================== --- src/console_cmds.cpp (Revision 20202) +++ src/console_cmds.cpp (Arbeitskopie) @@ -1210,9 +1210,10 @@ DEF_CONSOLE_CMD(ConScreenShot) { if (argc == 0) { - IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [big | no_con] [file name]'"); - IConsoleHelp("'big' makes a screenshot of the whole map, 'no_con' hides the console to create " - "the screenshot. Screenshots of whole map are always drawn without console"); + IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [big | giant | no_con] [file name]'"); + IConsoleHelp("'big' makes a panorama screenshot of the visible area, 'giant' makes a screenshot of the " + "whole map, 'no_con' hides the console to create the screenshot. 'big' or 'giant' " + "screenshots are always drawn without console"); return true; } @@ -1224,6 +1225,10 @@ if (argc > 1) { if (strcmp(argv[1], "big") == 0) { /* screenshot big [filename] */ + type = SC_PANORAMA; + if (argc > 2) name = argv[2]; + } else if (strcmp(argv[1], "giant") == 0) { + /* screenshot giant [filename] */ type = SC_WORLD; if (argc > 2) name = argv[2]; } else if (strcmp(argv[1], "no_con") == 0) {