diff options
author | Darkvater <darkvater@openttd.org> | 2005-02-22 14:52:20 +0000 |
---|---|---|
committer | Darkvater <darkvater@openttd.org> | 2005-02-22 14:52:20 +0000 |
commit | 7746c4722b1be63eae53fe50be754b1ec0be8565 (patch) | |
tree | b49fb9bb8df94481ce40ba392c0f8fb12a775bec /ttd.c | |
parent | aa55bc1559a4261380055cd21f94817f7defaf18 (diff) | |
download | openttd-7746c4722b1be63eae53fe50be754b1ec0be8565.tar.xz |
(svn r1901) - Fix: unwanted behaviour of the savegame dialog, as well as a bug with a sloppy termination of a string. When any editbox is open, scrolling is disabled. If any new types of editboxes come up, please use SET/CLRBIT of _no_scroll with its unique identifier (ttd.h)
Diffstat (limited to 'ttd.c')
-rw-r--r-- | ttd.c | 38 |
1 files changed, 37 insertions, 1 deletions
@@ -1036,7 +1036,43 @@ static void DoAutosave(void) ShowErrorMessage(INVALID_STRING_ID, STR_AUTOSAVE_FAILED, 0, 0); } -extern void HandleKeyScrolling(void); +static void ScrollMainViewport(int x, int y) +{ + if (_game_mode != GM_MENU) { + Window *w = FindWindowById(WC_MAIN_WINDOW, 0); + assert(w); + + WP(w,vp_d).scrollpos_x += x << w->viewport->zoom; + WP(w,vp_d).scrollpos_y += y << w->viewport->zoom; + } +} + +static const int8 scrollamt[16][2] = { + { 0, 0}, + {-2, 0}, // 1:left + { 0,-2}, // 2:up + {-2,-1}, // 3:left + up + { 2, 0}, // 4:right + { 0, 0}, // 5:left + right + { 2,-1}, // 6:right + up + { 0,-2}, // 7:left + right + up = up + { 0 ,2}, // 8:down + {-2 ,1}, // 9:down+left + { 0, 0}, // 10:impossible + {-2, 0}, // 11:left + up + down = left + { 2, 1}, // 12:down+right + { 0, 2}, // 13:left + right + down = down + { 0,-2}, // 14:left + right + up = up + { 0, 0}, // 15:impossible +}; + +static void HandleKeyScrolling(void) +{ + if (_dirkeys && !_no_scroll) { + int factor = _shift_pressed ? 50 : 10; + ScrollMainViewport(scrollamt[_dirkeys][0] * factor, scrollamt[_dirkeys][1] * factor); + } +} void GameLoop(void) { |