mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 14:50:05 +00:00 
			
		
		
		
	Fix boost::containers::stable_vector memory leak in MapWidget by local variable
This commit is contained in:
		
							parent
							
								
									0fff5f9e4d
								
							
						
					
					
						commit
						61ac1e5612
					
				
					 1 changed files with 8 additions and 10 deletions
				
			
		|  | @ -1,3 +1,4 @@ | |||
| #include <ranges> | ||||
| #include <scwx/qt/map/map_widget.hpp> | ||||
| #include <scwx/qt/gl/gl.hpp> | ||||
| #include <scwx/qt/manager/font_manager.hpp> | ||||
|  | @ -204,8 +205,7 @@ public: | |||
|    const std::vector<MapStyle> emptyStyles_ {}; | ||||
|    std::vector<MapStyle>       customStyles_ { | ||||
|       MapStyle {.name_ {"Custom"}, .url_ {}, .drawBelow_ {}}}; | ||||
|    QStringList        styleLayers_; | ||||
|    types::LayerVector customLayers_; | ||||
|    QStringList styleLayers_; | ||||
| 
 | ||||
|    boost::uuids::uuid customStyleUrlChangedCallbackId_ {}; | ||||
|    boost::uuids::uuid customStyleDrawBelowChangedCallbackId_ {}; | ||||
|  | @ -1185,22 +1185,20 @@ void MapWidgetImpl::AddLayers() | |||
|    layerList_.clear(); | ||||
|    genericLayers_.clear(); | ||||
|    placefileLayers_.clear(); | ||||
|    customLayers_.clear(); | ||||
|    customLayers_.shrink_to_fit(); | ||||
| 
 | ||||
|    // Update custom layer list from model
 | ||||
|    customLayers_ = model::LayerModel::Instance()->GetLayers(); | ||||
|    types::LayerVector customLayers = model::LayerModel::Instance()->GetLayers(); | ||||
| 
 | ||||
|    // Start by drawing layers before any style-defined layers
 | ||||
|    std::string before = styleLayers_.front().toStdString(); | ||||
| 
 | ||||
|    // Loop through each custom layer in reverse order
 | ||||
|    for (auto it = customLayers_.crbegin(); it != customLayers_.crend(); ++it) | ||||
|    for (const auto & customLayer : std::ranges::reverse_view(customLayers)) | ||||
|    { | ||||
|       if (it->type_ == types::LayerType::Map) | ||||
|       if (customLayer.type_ == types::LayerType::Map) | ||||
|       { | ||||
|          // Style-defined map layers
 | ||||
|          switch (std::get<types::MapLayer>(it->description_)) | ||||
|          switch (std::get<types::MapLayer>(customLayer.description_)) | ||||
|          { | ||||
|          // Subsequent layers are drawn underneath the map symbology layer
 | ||||
|          case types::MapLayer::MapUnderlay: | ||||
|  | @ -1216,10 +1214,10 @@ void MapWidgetImpl::AddLayers() | |||
|             break; | ||||
|          } | ||||
|       } | ||||
|       else if (it->displayed_[id_]) | ||||
|       else if (customLayer.displayed_[id_]) | ||||
|       { | ||||
|          // If the layer is displayed for the current map, add it
 | ||||
|          AddLayer(it->type_, it->description_, before); | ||||
|          AddLayer(customLayer.type_, customLayer.description_, before); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 AdenKoperczak
						AdenKoperczak