Changeset - r9094:b8b4d5f9a3d8
[Not reviewed]
master
0 9 0
peter1138 - 16 years ago 2008-05-05 11:36:43
peter1138@openttd.org
(svn r12953) -Feature: Open a new viewport when ctrl-clicking on a 'Location' button, a town/station/industry list, or some news items.
9 files changed with 79 insertions and 24 deletions:
0 comments (0 inline, 0 general)
src/depot_gui.cpp
Show inline comments
 
@@ -819,7 +819,13 @@ static void DepotWndProc(Window *w, Wind
 
					}
 
						break;
 

	
 
				case DEPOT_WIDGET_LOCATION: ScrollMainWindowToTile(w->window_number); break;
 
				case DEPOT_WIDGET_LOCATION:
 
					if (_ctrl_pressed) {
 
						ShowExtraViewPortWindow(w->window_number);
 
					} else {
 
						ScrollMainWindowToTile(w->window_number);
 
					}
 
					break;
 

	
 
				case DEPOT_WIDGET_STOP_ALL:
 
				case DEPOT_WIDGET_START_ALL:
src/gui.h
Show inline comments
 
@@ -92,7 +92,7 @@ void ShowEstimatedCostOrIncome(Money cos
 
void ShowErrorMessage(StringID msg_1, StringID msg_2, int x, int y);
 

	
 
void ShowSmallMap();
 
void ShowExtraViewPortWindow();
 
void ShowExtraViewPortWindow(TileIndex tile = INVALID_TILE);
 
void SetVScrollCount(Window *w, int num);
 
void SetVScroll2Count(Window *w, int num);
 
void SetHScrollCount(Window *w, int num);
src/industry_gui.cpp
Show inline comments
 
@@ -568,7 +568,11 @@ static void IndustryViewWndProc(Window *
 
		} break;
 
		case IVW_GOTO:
 
			i = GetIndustry(w->window_number);
 
			ScrollMainWindowToTile(i->xy + TileDiffXY(1, 1));
 
			if (_ctrl_pressed) {
 
				ShowExtraViewPortWindow(i->xy + TileDiffXY(1, 1));
 
			} else {
 
				ScrollMainWindowToTile(i->xy + TileDiffXY(1, 1));
 
			}
 
		} break;
 

	
 
		}
 
@@ -853,7 +857,11 @@ static void IndustryDirectoryWndProc(Win
 
				if (!IsInsideMM(y, 0, w->vscroll.cap)) return;
 
				p = y + w->vscroll.pos;
 
				if (p < _num_industry_sort) {
 
					ScrollMainWindowToTile(_industry_sort[p]->xy);
 
					if (_ctrl_pressed) {
 
						ShowExtraViewPortWindow(_industry_sort[p]->xy);
 
					} else {
 
						ScrollMainWindowToTile(_industry_sort[p]->xy);
 
					}
 
				}
 
			} break;
 
		}
src/news_gui.cpp
Show inline comments
 
@@ -206,8 +206,15 @@ static void NewsWindowProc(Window *w, Wi
 
						Vehicle *v = GetVehicle(ni->data_a);
 
						ScrollMainWindowTo(v->x_pos, v->y_pos);
 
					} else if (ni->flags & NF_TILE) {
 
						if (!ScrollMainWindowToTile(ni->data_a) && ni->data_b != 0) {
 
							ScrollMainWindowToTile(ni->data_b);
 
						if (_ctrl_pressed) {
 
							ShowExtraViewPortWindow(ni->data_a);
 
							if (ni->data_b != 0) {
 
								ShowExtraViewPortWindow(ni->data_b);
 
							}
 
						} else {
 
							if (!ScrollMainWindowToTile(ni->data_a) && ni->data_b != 0) {
 
								ScrollMainWindowToTile(ni->data_b);
 
							}
 
						}
 
					}
 
					break;
src/player_gui.cpp
Show inline comments
 
@@ -1270,7 +1270,11 @@ static void PlayerCompanyWndProc(Window 
 
						w->LowerWidget(PCW_WIDGET_BUILD_VIEW_HQ);
 
						w->InvalidateWidget(PCW_WIDGET_BUILD_VIEW_HQ);
 
					} else {
 
						ScrollMainWindowToTile(tile);
 
						if (_ctrl_pressed) {
 
							ShowExtraViewPortWindow(tile);
 
						} else {
 
							ScrollMainWindowToTile(tile);
 
						}
 
					}
 
					break;
 
				}
src/smallmap_gui.cpp
Show inline comments
 
@@ -1191,25 +1191,30 @@ static const WindowDesc _extra_view_port
 
	ExtraViewPortWndProc
 
};
 

	
 
void ShowExtraViewPortWindow()
 
void ShowExtraViewPortWindow(TileIndex tile)
 
{
 
	Window *w, *v;
 
	int i = 0;
 

	
 
	/* find next free window number for extra viewport */
 
	while (FindWindowById(WC_EXTRA_VIEW_PORT, i) != NULL) i++;
 

	
 
	w = AllocateWindowDescFront(&_extra_view_port_desc, i);
 
	Window *w = AllocateWindowDescFront(&_extra_view_port_desc, i);
 
	if (w != NULL) {
 
		int x, y;
 
		/* the main window with the main view */
 
		v = FindWindowById(WC_MAIN_WINDOW, 0);
 
		Point pt;
 

	
 
		if (tile == INVALID_TILE) {
 
			/* the main window with the main view */
 
			const Window *v = FindWindowById(WC_MAIN_WINDOW, 0);
 

	
 
		/* center on same place as main window (zoom is maximum, no adjustment needed) */
 
		x = WP(v, vp_d).scrollpos_x;
 
		y = WP(v, vp_d).scrollpos_y;
 
		WP(w, vp_d).scrollpos_x = x + (v->viewport->virtual_width  - (w->widget[4].right - w->widget[4].left) - 1) / 2;
 
		WP(w, vp_d).scrollpos_y = y + (v->viewport->virtual_height - (w->widget[4].bottom - w->widget[4].top) - 1) / 2;
 
			/* center on same place as main window (zoom is maximum, no adjustment needed) */
 
			pt.x = WP(v, vp_d).scrollpos_x + v->viewport->virtual_height / 2;
 
			pt.y = WP(v, vp_d).scrollpos_y + v->viewport->virtual_height / 2;
 
		} else {
 
			pt = RemapCoords(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2, TileHeight(tile));
 
		}
 

	
 
		WP(w, vp_d).scrollpos_x = pt.x - ((w->widget[4].right - w->widget[4].left) - 1) / 2;
 
		WP(w, vp_d).scrollpos_y = pt.y - ((w->widget[4].bottom - w->widget[4].top) - 1) / 2;
 
		WP(w, vp_d).dest_scrollpos_x = WP(w, vp_d).scrollpos_x;
 
		WP(w, vp_d).dest_scrollpos_y = WP(w, vp_d).scrollpos_y;
 
	}
src/station_gui.cpp
Show inline comments
 
@@ -422,7 +422,12 @@ static void PlayerStationsWndProc(Window
 
					const Station *st = sl->sort_list[id_v];
 
					/* do not check HasStationInUse - it is slow and may be invalid */
 
					assert(st->owner == owner || (st->owner == OWNER_NONE && !st->IsBuoy()));
 
					ScrollMainWindowToTile(st->xy);
 

	
 
					if (_ctrl_pressed) {
 
						ShowExtraViewPortWindow(st->xy);
 
					} else {
 
						ScrollMainWindowToTile(st->xy);
 
					}
 
					break;
 
				}
 

	
 
@@ -936,7 +941,11 @@ static void StationViewWndProc(Window *w
 
					break;
 

	
 
				case SVW_LOCATION:
 
					ScrollMainWindowToTile(GetStation(w->window_number)->xy);
 
					if (_ctrl_pressed) {
 
						ShowExtraViewPortWindow(GetStation(w->window_number)->xy);
 
					} else {
 
						ScrollMainWindowToTile(GetStation(w->window_number)->xy);
 
					}
 
					break;
 

	
 
				case SVW_RATINGS:
src/subsidy_gui.cpp
Show inline comments
 
@@ -15,6 +15,7 @@
 
#include "date_func.h"
 
#include "viewport_func.h"
 
#include "gfx_func.h"
 
#include "gui.h"
 

	
 
#include "table/strings.h"
 

	
 
@@ -66,7 +67,9 @@ handle_click:
 
		xy = GetIndustry(offs)->xy;
 
	}
 

	
 
	if (!ScrollMainWindowToTile(xy)) {
 
	if (_ctrl_pressed || !ScrollMainWindowToTile(xy)) {
 
		if (_ctrl_pressed) ShowExtraViewPortWindow(xy);
 

	
 
		/* otherwise determine to coordinate for subsidy and scroll to it */
 
		offs = s->to;
 
		if (s->age >= 12) {
 
@@ -76,7 +79,12 @@ handle_click:
 
		} else {
 
			xy = GetIndustry(offs)->xy;
 
		}
 
		ScrollMainWindowToTile(xy);
 

	
 
		if (_ctrl_pressed) {
 
			ShowExtraViewPortWindow(xy);
 
		} else {
 
			ScrollMainWindowToTile(xy);
 
		}
 
	}
 
}
 

	
src/town_gui.cpp
Show inline comments
 
@@ -333,7 +333,11 @@ static void TownViewWndProc(Window *w, W
 
		case WE_CLICK:
 
			switch (e->we.click.widget) {
 
				case TVW_CENTERVIEW: /* scroll to location */
 
					ScrollMainWindowToTile(t->xy);
 
					if (_ctrl_pressed) {
 
						ShowExtraViewPortWindow(t->xy);
 
					} else {
 
						ScrollMainWindowToTile(t->xy);
 
					}
 
					break;
 

	
 
				case TVW_SHOWAUTORITY: /* town authority */
 
@@ -541,7 +545,11 @@ static void TownDirectoryWndProc(Window 
 

	
 
					t = _town_sort[id_v];
 
					assert(t->xy);
 
					ScrollMainWindowToTile(t->xy);
 
					if (_ctrl_pressed) {
 
						ShowExtraViewPortWindow(t->xy);
 
					} else {
 
						ScrollMainWindowToTile(t->xy);
 
					}
 
				} break;
 
			}
 
			break;
0 comments (0 inline, 0 general)