Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -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
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user