diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 026f85b853..b000ae5cc3 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -562,7 +562,7 @@ LinkGraphLegendWindow::LinkGraphLegendWindow(WindowDesc *desc, int window_number * Set the overlay belonging to this menu and import its company/cargo settings. * @param overlay New overlay for this menu. */ -void LinkGraphLegendWindow::SetOverlay(LinkGraphOverlay *overlay) { +void LinkGraphLegendWindow::SetOverlay(std::shared_ptr overlay) { this->overlay = overlay; uint32 companies = this->overlay->GetCompanyMask(); for (uint c = 0; c < MAX_COMPANIES; c++) { diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index ef249b9bfd..2d3c2baaff 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -108,7 +108,7 @@ void ShowLinkGraphLegend(); struct LinkGraphLegendWindow : Window { public: LinkGraphLegendWindow(WindowDesc *desc, int window_number); - void SetOverlay(LinkGraphOverlay *overlay); + void SetOverlay(std::shared_ptr overlay); void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override; void DrawWidget(const Rect &r, int widget) const override; @@ -117,7 +117,7 @@ public: void OnInvalidateData(int data = 0, bool gui_scope = true) override; private: - LinkGraphOverlay *overlay; + std::shared_ptr overlay; void UpdateOverlayCompanies(); void UpdateOverlayCargoes(); diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 05ee75d2f3..bdecd07ba5 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -224,7 +224,7 @@ struct MainWindow : Window NWidgetViewport *nvp = this->GetWidget(WID_M_VIEWPORT); nvp->InitializeViewport(this, TileXY(32, 32), ScaleZoomGUI(ZOOM_LVL_VIEWPORT)); - this->viewport->overlay = new LinkGraphOverlay(this, WID_M_VIEWPORT, 0, 0, 2); + this->viewport->overlay = std::make_shared(this, WID_M_VIEWPORT, 0, 0, 2); this->refresh.SetInterval(LINKGRAPH_DELAY); } diff --git a/src/viewport.cpp b/src/viewport.cpp index dd5e469085..79fc0da175 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -203,10 +203,7 @@ static Point MapXYZToViewport(const Viewport *vp, int x, int y, int z) void DeleteWindowViewport(Window *w) { - if (w->viewport == nullptr) return; - - delete w->viewport->overlay; - free(w->viewport); + delete w->viewport; w->viewport = nullptr; } @@ -227,7 +224,7 @@ void InitializeWindowViewport(Window *w, int x, int y, { assert(w->viewport == nullptr); - ViewportData *vp = CallocT(1); + ViewportData *vp = new ViewportData(); vp->left = x + w->left; vp->top = y + w->top; diff --git a/src/viewport_type.h b/src/viewport_type.h index 5200514403..dc610d1686 100644 --- a/src/viewport_type.h +++ b/src/viewport_type.h @@ -31,7 +31,7 @@ struct Viewport { int virtual_height; ///< height << zoom ZoomLevel zoom; ///< The zoom level of the viewport. - LinkGraphOverlay *overlay; + std::shared_ptr overlay; }; /** Location information about a sign as seen on the viewport */