diff options
author | Jesse Bounds <jesse@rebounds.net> | 2016-11-14 15:50:33 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-14 15:50:33 -0800 |
commit | 1c9d314236736bf47e33fb95d2b457a5650fc519 (patch) | |
tree | 48b610e5bc18be13de161707488d1cb43b950c9d /platform/darwin/src/MGLStyleLayer.mm.ejs | |
parent | 56c2272b7dc261f988c70e0f8cb90ff853932011 (diff) | |
download | qtlocation-mapboxgl-1c9d314236736bf47e33fb95d2b457a5650fc519.tar.gz |
[ios, macos] Take back source and layer ownership on removal (#7048)
If a source or layer is removed from the style, recapture the
unique pointer ownership. This makes it safe to add back sources
and layers after they have been removed.
Diffstat (limited to 'platform/darwin/src/MGLStyleLayer.mm.ejs')
-rw-r--r-- | platform/darwin/src/MGLStyleLayer.mm.ejs | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/platform/darwin/src/MGLStyleLayer.mm.ejs b/platform/darwin/src/MGLStyleLayer.mm.ejs index 48d013d482..d366a1955b 100644 --- a/platform/darwin/src/MGLStyleLayer.mm.ejs +++ b/platform/darwin/src/MGLStyleLayer.mm.ejs @@ -73,6 +73,31 @@ } <% } -%> + +#pragma mark - Adding to and removing from a map view + +- (void)addToMapView:(MGLMapView *)mapView +{ + [self addToMapView:mapView belowLayer:nil]; +} + +- (void)addToMapView:(MGLMapView *)mapView belowLayer:(MGLStyleLayer *)otherLayer +{ + if (otherLayer) { + const mbgl::optional<std::string> belowLayerId{otherLayer.identifier.UTF8String}; + mapView.mbglMap->addLayer(std::move(_pendingLayer), belowLayerId); + } else { + mapView.mbglMap->addLayer(std::move(_pendingLayer)); + } +} + +- (void)removeFromMapView:(MGLMapView *)mapView +{ + auto removedLayer = mapView.mbglMap->removeLayer(self.identifier.UTF8String); + _pendingLayer = std::move(reinterpret_cast<std::unique_ptr<mbgl::style::<%- camelize(type) %>Layer> &>(removedLayer)); + self.rawLayer = _pendingLayer.get(); +} + <% if (layoutProperties.length) { -%> #pragma mark - Accessing the Layout Attributes @@ -106,21 +131,4 @@ <% } -%> <% } -%> -#pragma mark - Add style layer to map - -- (void)addToMapView:(MGLMapView *)mapView -{ - [self addToMapView:mapView belowLayer:nil]; -} - -- (void)addToMapView:(MGLMapView *)mapView belowLayer:(MGLStyleLayer *)otherLayer -{ - if (otherLayer) { - const mbgl::optional<std::string> belowLayerId{otherLayer.identifier.UTF8String}; - mapView.mbglMap->addLayer(std::move(_pendingLayer), belowLayerId); - } else { - mapView.mbglMap->addLayer(std::move(_pendingLayer)); - } -} - @end |