mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-09 23:50:25 +00:00
ExtraViewportWindow calls IninitializeViewport() with focus as 0, which is ambiguous as focus should be either a TileIndex or a VehicleID. Instead, pass the tile and let InitializeViewport() handle setting all the coordinates.
This commit is contained in:
parent
0a8bcdd344
commit
6c5aeae01b
@ -242,11 +242,22 @@ void InitializeWindowViewport(Window *w, int x, int y,
|
|||||||
veh = Vehicle::Get(vp->follow_vehicle);
|
veh = Vehicle::Get(vp->follow_vehicle);
|
||||||
pt = MapXYZToViewport(vp, veh->x_pos, veh->y_pos, veh->z_pos);
|
pt = MapXYZToViewport(vp, veh->x_pos, veh->y_pos, veh->z_pos);
|
||||||
} else {
|
} else {
|
||||||
x = TileX(std::get<TileIndex>(focus)) * TILE_SIZE;
|
TileIndex tile = std::get<TileIndex>(focus);
|
||||||
y = TileY(std::get<TileIndex>(focus)) * TILE_SIZE;
|
if (tile == INVALID_TILE) {
|
||||||
|
/* No tile? Use center of main viewport. */
|
||||||
|
const Window *mw = GetMainWindow();
|
||||||
|
|
||||||
|
/* center on same place as main window (zoom is maximum, no adjustment needed) */
|
||||||
|
pt.x = mw->viewport->scrollpos_x + mw->viewport->virtual_width / 2;
|
||||||
|
pt.x -= vp->virtual_width / 2;
|
||||||
|
pt.y = mw->viewport->scrollpos_y + mw->viewport->virtual_height / 2;
|
||||||
|
pt.y -= vp->virtual_height / 2;
|
||||||
|
} else {
|
||||||
|
x = TileX(tile) * TILE_SIZE;
|
||||||
|
y = TileY(tile) * TILE_SIZE;
|
||||||
|
pt = MapXYZToViewport(vp, x, y, GetSlopePixelZ(x, y));
|
||||||
|
}
|
||||||
vp->follow_vehicle = INVALID_VEHICLE;
|
vp->follow_vehicle = INVALID_VEHICLE;
|
||||||
pt = MapXYZToViewport(vp, x, y, GetSlopePixelZ(x, y));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vp->scrollpos_x = pt.x;
|
vp->scrollpos_x = pt.x;
|
||||||
|
@ -57,25 +57,8 @@ public:
|
|||||||
this->InitNested(window_number);
|
this->InitNested(window_number);
|
||||||
|
|
||||||
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_EV_VIEWPORT);
|
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_EV_VIEWPORT);
|
||||||
nvp->InitializeViewport(this, 0, ScaleZoomGUI(ZOOM_LVL_VIEWPORT));
|
nvp->InitializeViewport(this, tile, ScaleZoomGUI(ZOOM_LVL_VIEWPORT));
|
||||||
if (_settings_client.gui.zoom_min == viewport->zoom) this->DisableWidget(WID_EV_ZOOM_IN);
|
if (_settings_client.gui.zoom_min == viewport->zoom) this->DisableWidget(WID_EV_ZOOM_IN);
|
||||||
|
|
||||||
Point pt;
|
|
||||||
if (tile == INVALID_TILE) {
|
|
||||||
/* No tile? Use center of main viewport. */
|
|
||||||
const Window *w = GetMainWindow();
|
|
||||||
|
|
||||||
/* center on same place as main window (zoom is maximum, no adjustment needed) */
|
|
||||||
pt.x = w->viewport->scrollpos_x + w->viewport->virtual_width / 2;
|
|
||||||
pt.y = w->viewport->scrollpos_y + w->viewport->virtual_height / 2;
|
|
||||||
} else {
|
|
||||||
pt = RemapCoords(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2, TilePixelHeight(tile));
|
|
||||||
}
|
|
||||||
|
|
||||||
this->viewport->scrollpos_x = pt.x - this->viewport->virtual_width / 2;
|
|
||||||
this->viewport->scrollpos_y = pt.y - this->viewport->virtual_height / 2;
|
|
||||||
this->viewport->dest_scrollpos_x = this->viewport->scrollpos_x;
|
|
||||||
this->viewport->dest_scrollpos_y = this->viewport->scrollpos_y;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetStringParameters(int widget) const override
|
void SetStringParameters(int widget) const override
|
||||||
|
Loading…
Reference in New Issue
Block a user