diff --git a/src/main_gui.cpp b/src/main_gui.cpp --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -253,11 +253,17 @@ struct MainWindow : Window virtual void OnTick() { - if (--refresh == 0) { - this->viewport->overlay->RebuildCache(); - this->GetWidget(WID_M_VIEWPORT)->SetDirty(this); - this->refresh = LINKGRAPH_REFRESH_PERIOD; + if (--this->refresh > 0) return; + + this->refresh = LINKGRAPH_REFRESH_PERIOD; + + if (this->viewport->overlay->GetCargoMask() == 0 || + this->viewport->overlay->GetCompanyMask() == 0) { + return; } + + this->viewport->overlay->RebuildCache(); + this->GetWidget(WID_M_VIEWPORT)->SetDirty(this); } virtual void OnPaint() diff --git a/src/viewport.cpp b/src/viewport.cpp --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1477,17 +1477,19 @@ void ViewportDoDraw(const ViewPort *vp, dp.height = UnScaleByZoom(dp.height, zoom); _cur_dpi = &dp; - /* translate to window coordinates */ - dp.left = x; - dp.top = y; - - if (vp->overlay != NULL) vp->overlay->Draw(&dp); - - /* translate back to world coordinates */ - dp.left = UnScaleByZoom(_vd.dpi.left, zoom); - dp.top = UnScaleByZoom(_vd.dpi.top, zoom); - - if (_vd.string_sprites_to_draw.Length() != 0) ViewportDrawStrings(zoom, &_vd.string_sprites_to_draw); + if (vp->overlay != NULL && vp->overlay->GetCargoMask() != 0 && vp->overlay->GetCompanyMask() != 0) { + /* translate to window coordinates */ + dp.left = x; + dp.top = y; + vp->overlay->Draw(&dp); + } + + if (_vd.string_sprites_to_draw.Length() != 0) { + /* translate to world coordinates */ + dp.left = UnScaleByZoom(_vd.dpi.left, zoom); + dp.top = UnScaleByZoom(_vd.dpi.top, zoom); + ViewportDrawStrings(zoom, &_vd.string_sprites_to_draw); + } _cur_dpi = old_dpi;