Merge remote-tracking branch 'upstream/master'

This commit is contained in:
dP
2025-06-14 17:01:17 +05:00
1132 changed files with 59430 additions and 52889 deletions

View File

@@ -107,45 +107,49 @@ void CcPlaySound_EXPLOSION(Commands, const CommandCost &result, TileIndex tile)
*/
bool DoZoomInOutWindow(ZoomStateChange how, Window *w)
{
Viewport *vp;
assert(w != nullptr);
vp = w->viewport;
switch (how) {
case ZOOM_NONE:
/* On initialisation of the viewport we don't do anything. */
break;
case ZOOM_IN:
if (vp->zoom <= _settings_client.gui.zoom_min) return false;
vp->zoom = (ZoomLevel)((int)vp->zoom - 1);
vp->virtual_width >>= 1;
vp->virtual_height >>= 1;
case ZOOM_IN: {
ViewportData &vp = *w->viewport;
if (vp.zoom <= _settings_client.gui.zoom_min) return false;
--vp.zoom;
vp.virtual_width >>= 1;
vp.virtual_height >>= 1;
w->viewport->scrollpos_x += vp->virtual_width >> 1;
w->viewport->scrollpos_y += vp->virtual_height >> 1;
w->viewport->dest_scrollpos_x = w->viewport->scrollpos_x;
w->viewport->dest_scrollpos_y = w->viewport->scrollpos_y;
vp.scrollpos_x += vp.virtual_width >> 1;
vp.scrollpos_y += vp.virtual_height >> 1;
vp.dest_scrollpos_x = vp.scrollpos_x;
vp.dest_scrollpos_y = vp.scrollpos_y;
break;
case ZOOM_OUT:
if (vp->zoom >= _settings_client.gui.zoom_max) return false;
vp->zoom = (ZoomLevel)((int)vp->zoom + 1);
}
w->viewport->scrollpos_x -= vp->virtual_width >> 1;
w->viewport->scrollpos_y -= vp->virtual_height >> 1;
w->viewport->dest_scrollpos_x = w->viewport->scrollpos_x;
w->viewport->dest_scrollpos_y = w->viewport->scrollpos_y;
case ZOOM_OUT: {
ViewportData &vp = *w->viewport;
if (vp.zoom >= _settings_client.gui.zoom_max) return false;
++vp.zoom;
vp->virtual_width <<= 1;
vp->virtual_height <<= 1;
vp.scrollpos_x -= vp.virtual_width >> 1;
vp.scrollpos_y -= vp.virtual_height >> 1;
vp.dest_scrollpos_x = vp.scrollpos_x;
vp.dest_scrollpos_y = vp.scrollpos_y;
vp.virtual_width <<= 1;
vp.virtual_height <<= 1;
break;
}
}
if (vp != nullptr) { // the vp can be null when how == ZOOM_NONE
vp->virtual_left = w->viewport->scrollpos_x;
vp->virtual_top = w->viewport->scrollpos_y;
UpdateViewportSizeZoom(vp);
if (w->viewport != nullptr) { // the viewport can be null when how == ZOOM_NONE
w->viewport->virtual_left = w->viewport->scrollpos_x;
w->viewport->virtual_top = w->viewport->scrollpos_y;
UpdateViewportSizeZoom(vp);
}
/* Update the windows that have zoom-buttons to perhaps disable their buttons */
w->InvalidateData();
return true;
@@ -156,8 +160,7 @@ void ZoomInOrOutToCursorWindow(bool in, Window *w)
assert(w != nullptr);
if (_game_mode != GM_MENU) {
Viewport *vp = w->viewport;
if ((in && vp->zoom <= _settings_client.gui.zoom_min) || (!in && vp->zoom >= _settings_client.gui.zoom_max)) return;
if ((in && w->viewport->zoom <= _settings_client.gui.zoom_min) || (!in && w->viewport->zoom >= _settings_client.gui.zoom_max)) return;
Point pt = GetTileZoomCenterWindow(in, w);
if (pt.x != -1) {
@@ -172,30 +175,30 @@ void FixTitleGameZoom(int zoom_adjust)
{
if (_game_mode != GM_MENU) return;
Viewport *vp = GetMainWindow()->viewport;
Viewport &vp = *GetMainWindow()->viewport;
/* Adjust the zoom in/out.
* Can't simply add, since operator+ is not defined on the ZoomLevel type. */
vp->zoom = _gui_zoom;
while (zoom_adjust < 0 && vp->zoom != _settings_client.gui.zoom_min) {
vp->zoom--;
vp.zoom = _gui_zoom;
while (zoom_adjust < 0 && vp.zoom != _settings_client.gui.zoom_min) {
vp.zoom--;
zoom_adjust++;
}
while (zoom_adjust > 0 && vp->zoom != _settings_client.gui.zoom_max) {
vp->zoom++;
while (zoom_adjust > 0 && vp.zoom != _settings_client.gui.zoom_max) {
vp.zoom++;
zoom_adjust--;
}
vp->virtual_width = ScaleByZoom(vp->width, vp->zoom);
vp->virtual_height = ScaleByZoom(vp->height, vp->zoom);
UpdateViewportSizeZoom(vp);
vp.virtual_width = ScaleByZoom(vp.width, vp.zoom);
vp.virtual_height = ScaleByZoom(vp.height, vp.zoom);
UpdateViewportSizeZoom(vp);
}
static constexpr NWidgetPart _nested_main_window_widgets[] = {
NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_M_VIEWPORT), SetResize(1, 1),
};
enum {
enum GlobalHotKeys : int32_t {
GHK_QUIT,
GHK_ABANDON,
GHK_CONSOLE,
@@ -230,13 +233,13 @@ struct MainWindow : Window
MainWindow(WindowDesc &desc) : Window(desc)
{
this->InitNested(0);
CLRBITS(this->flags, WF_WHITE_BORDER);
this->flags.Reset(WindowFlag::WhiteBorder);
ResizeWindow(this, _screen.width, _screen.height);
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_M_VIEWPORT);
nvp->InitializeViewport(this, TileXY(32, 32), ScaleZoomGUI(ZOOM_LVL_VIEWPORT));
this->viewport->overlay = std::make_shared<LinkGraphOverlay>(this, WID_M_VIEWPORT, 0, 0, 2);
this->viewport->overlay = std::make_shared<LinkGraphOverlay>(this, WID_M_VIEWPORT, 0, CompanyMask{}, 2);
this->refresh_timeout.Reset();
}
@@ -244,7 +247,7 @@ struct MainWindow : Window
void RefreshLinkGraph()
{
if (this->viewport->overlay->GetCargoMask() == 0 ||
this->viewport->overlay->GetCompanyMask() == 0) {
this->viewport->overlay->GetCompanyMask().None()) {
return;
}
@@ -409,7 +412,7 @@ struct MainWindow : Window
const NetworkClientInfo *cio = NetworkClientInfo::GetByClientID(_network_own_client_id);
if (cio == nullptr) break;
ShowNetworkChatQueryWindow(NetworkClientPreferTeamChat(cio) ? DESTTYPE_TEAM : DESTTYPE_BROADCAST, cio->client_playas);
ShowNetworkChatQueryWindow(NetworkClientPreferTeamChat(cio) ? DESTTYPE_TEAM : DESTTYPE_BROADCAST, cio->client_playas.base());
}
break;
@@ -422,7 +425,7 @@ struct MainWindow : Window
const NetworkClientInfo *cio = NetworkClientInfo::GetByClientID(_network_own_client_id);
if (cio == nullptr) break;
ShowNetworkChatQueryWindow(DESTTYPE_TEAM, cio->client_playas);
ShowNetworkChatQueryWindow(DESTTYPE_TEAM, cio->client_playas.base());
}
break;
@@ -460,7 +463,7 @@ struct MainWindow : Window
bool in = wheel < 0;
/* When following, only change zoom - otherwise zoom to the cursor. */
if (this->viewport->follow_vehicle != INVALID_VEHICLE) {
if (this->viewport->follow_vehicle != VehicleID::Invalid()) {
DoZoomInOutWindow(in ? ZOOM_IN : ZOOM_OUT, this);
} else {
ZoomInOrOutToCursorWindow(in, this);
@@ -553,7 +556,7 @@ struct MainWindow : Window
static WindowDesc _main_window_desc(
WDP_MANUAL, nullptr, 0, 0,
WC_MAIN_WINDOW, WC_NONE,
WDF_NO_CLOSE,
WindowDefaultFlag::NoClose,
_nested_main_window_widgets,
&MainWindow::hotkeys
);