Mercurial > hg > openttd
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()