changeset 16312:e19d6bb9ff88 draft

(svn r21020) -Add: Use center of waypoint in waypoint gui, if available.
author alberth <alberth@openttd.org>
date Sat, 23 Oct 2010 20:39:21 +0000
parents 762244da127d
children a09e9e494674
files src/viewport.cpp src/viewport_func.h src/waypoint_gui.cpp
diffstat 3 files changed, 29 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -1887,6 +1887,18 @@
 }
 
 /**
+ * Scrolls the viewport in a window to a given location.
+ * @param tile    Desired tile to center on.
+ * @param w       %Window containing the viewport.
+ * @param instant Jump to the location instead of slowly moving to it.
+ * @return Destination of the viewport was changed (to activate other actions when the viewport is already at the desired position).
+ */
+bool ScrollWindowToTile(TileIndex tile, Window *w, bool instant)
+{
+	return ScrollWindowTo(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, -1, w, instant);
+}
+
+/**
  * Scrolls the viewport of the main window to a given location.
  * @param tile    Desired tile to center on.
  * @param instant Jump to the location instead of slowly moving to it.
--- a/src/viewport_func.h
+++ b/src/viewport_func.h
@@ -64,6 +64,7 @@
 
 void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom);
 
+bool ScrollWindowToTile(TileIndex tile, Window *w, bool instant = false);
 bool ScrollWindowTo(int x, int y, int z, Window *w, bool instant = false);
 
 bool ScrollMainWindowToTile(TileIndex tile, bool instant = false);
--- a/src/waypoint_gui.cpp
+++ b/src/waypoint_gui.cpp
@@ -34,10 +34,20 @@
 	WAYPVW_SHOW_VEHICLES,
 };
 
+/** GUI for accessing waypoints and buoys. */
 struct WaypointWindow : Window {
 private:
-	VehicleType vt;
-	Waypoint *wp;
+	VehicleType vt; ///< Vehicle type using the waypoint.
+	Waypoint *wp;   ///< Waypoint displayed by the window.
+
+	/**
+	 * Get the center tile of the waypoint.
+	 * @return The center tile if the waypoint exists, otherwise the tile with the waypoint name.
+	 */
+	TileIndex GetCenterTile() const
+	{
+		return this->wp->IsInUse() ? this->wp->train_station.GetCenterTile() : this->wp->xy;
+	}
 
 public:
 	WaypointWindow(const WindowDesc *desc, WindowNumber window_number) : Window()
@@ -57,7 +67,7 @@
 		this->flags4 |= WF_DISABLE_VP_SCROLL;
 
 		NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WAYPVW_VIEWPORT);
-		nvp->InitializeViewport(this, this->wp->xy, ZOOM_LVL_MIN);
+		nvp->InitializeViewport(this, this->GetCenterTile(), ZOOM_LVL_MIN);
 
 		this->OnInvalidateData(0);
 	}
@@ -84,9 +94,9 @@
 		switch (widget) {
 			case WAYPVW_CENTERVIEW: // scroll to location
 				if (_ctrl_pressed) {
-					ShowExtraViewPortWindow(this->wp->xy);
+					ShowExtraViewPortWindow(this->GetCenterTile());
 				} else {
-					ScrollMainWindowToTile(this->wp->xy);
+					ScrollMainWindowToTile(this->GetCenterTile());
 				}
 				break;
 
@@ -108,9 +118,7 @@
 		/* Disable the widget for waypoints with no use */
 		this->SetWidgetDisabledState(WAYPVW_SHOW_VEHICLES, !this->wp->IsInUse());
 
-		int x = TileX(this->wp->xy) * TILE_SIZE;
-		int y = TileY(this->wp->xy) * TILE_SIZE;
-		ScrollWindowTo(x, y, -1, this, true);
+		ScrollWindowToTile(this->GetCenterTile(), this, true);
 	}
 
 	virtual void OnResize()