Changeset - r1199:9e086dfa1c99
[Not reviewed]
master
0 2 0
dominik - 19 years ago 2005-01-28 09:30:19
dominik@openttd.org
(svn r1703) - Fix: Scrolling with the arrow keys is now smooth and it now also scrolls exactly in tile direction if e.g. up and left are pressed
2 files changed with 33 insertions and 29 deletions:
main_gui.c
28
29
ttd.c
5
0 comments (0 inline, 0 general)
main_gui.c
Show inline comments
 
@@ -2201,7 +2201,7 @@ static void StatusBarWndProc(Window *w, 
 
	}
 
}
 

	
 
static void ScrollMainViewport(int x, int y)
 
void ScrollMainViewport(int x, int y)
 
{
 
	if (_game_mode != GM_MENU) {
 
		Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
 
@@ -2228,6 +2228,33 @@ static WindowDesc _main_status_desc = {
 
	StatusBarWndProc
 
};
 

	
 
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
 
};
 

	
 
void HandleKeyScrolling(void)
 
{
 
	if (_dirkeys) {
 
		int factor = _shift_pressed ? 50 : 10;
 
		ScrollMainViewport(scrollamt[_dirkeys][0] * factor, scrollamt[_dirkeys][1] * factor);
 
	}
 
}
 

	
 
extern void DebugProc(int i);
 

	
 
static void MainWindowWndProc(Window *w, WindowEvent *e) {
 
@@ -2272,34 +2299,6 @@ static void MainWindowWndProc(Window *w,
 
		if (_game_mode == GM_MENU)
 
			break;
 

	
 
		// this is a hack, but this needs to be called at a constant interval and i found
 
		// no other window event that was suited for that purpose.
 
		{
 
			static const int8 scrollamt[16][2] = {
 
				{0,0},
 
				{-1,0},   // 1:left
 
				{0,-1},   // 2:up
 
				{-1,-1}, // 3:left + up
 
				{1,0},    // 4:right
 
				{0,0},     // 5:left + right
 
				{1,-1},  // 6:right + up
 
				{0,0},     // 7:impossible
 
				{0,1},    // 8:down
 
				{-1,1},  // 9:down+left
 
				{0,0},     // 10:impossible
 
				{0,0},     // 11:impossible
 
				{1,1},   // 12:down+right
 
				{0,0},     // 13:impossible
 
				{0,0},     // 14:impossible
 
				{0,0},     // 15:impossible
 
			};
 

	
 
			if (_dirkeys) {
 
				int factor = _shift_pressed ? 50 : 10;
 
				ScrollMainViewport(scrollamt[_dirkeys][0] * factor, scrollamt[_dirkeys][1] * factor);
 
			}
 
		}
 

	
 
		switch(e->keypress.keycode) {
 
		case 'C':
 
		case 'Z': {
ttd.c
Show inline comments
 
@@ -1112,6 +1112,8 @@ static void DoAutosave(void)
 
		ShowErrorMessage(INVALID_STRING_ID, STR_AUTOSAVE_FAILED, 0, 0);
 
}
 

	
 
extern void HandleKeyScrolling(void);
 

	
 
void GameLoop(void)
 
{
 
	int m;
 
@@ -1123,6 +1125,9 @@ void GameLoop(void)
 
		RedrawAutosave();
 
	}
 

	
 
	// handle scrolling of the main window
 
	if (_dirkeys) HandleKeyScrolling();
 

	
 
	// make a screenshot?
 
	if ((m=_make_screenshot) != 0) {
 
		_make_screenshot = 0;
0 comments (0 inline, 0 general)