virtual void OnClick(Point pt, int widget, int click_count) { switch (widget) { case NTW_CLOSEBOX: NewsWindow::duration = 0; delete this; _forced_news = NULL; break; case NTW_CAPTION: case NTW_VIEWPORT: break; // Ignore clicks default: if (this->ni->reftype1 == NR_VEHICLE) { const Vehicle *v = Vehicle::Get(this->ni->ref1); ScrollMainWindowTo(v->x_pos, v->y_pos, v->z_pos); } else { TileIndex tile1 = GetReferenceTile(this->ni->reftype1, this->ni->ref1); TileIndex tile2 = GetReferenceTile(this->ni->reftype2, this->ni->ref2); if (_ctrl_pressed) { if (tile1 != INVALID_TILE) ShowExtraViewPortWindow(tile1); if (tile2 != INVALID_TILE) ShowExtraViewPortWindow(tile2); } else { if ((tile1 == INVALID_TILE || !ScrollMainWindowToTile(tile1)) && tile2 != INVALID_TILE) { ScrollMainWindowToTile(tile2); } } } break; } }
/** * Show a new Extra Viewport window. * Center it on the tile under the cursor, if the cursor is inside a viewport. * If that fails, center it on main viewport center. */ void ShowExtraViewPortWindowForTileUnderCursor() { /* Use tile under mouse as center for new viewport. * Do this before creating the window, it might appear just below the mouse. */ Point pt = GetTileBelowCursor(); ShowExtraViewPortWindow(pt.x != -1 ? TileVirtXY(pt.x, pt.y) : INVALID_TILE); }