diff options
author | Jesse Bounds <jesse@rebounds.net> | 2017-02-20 16:39:23 -0800 |
---|---|---|
committer | Jesse Bounds <jesse@rebounds.net> | 2017-02-23 15:07:43 -0800 |
commit | 59820fb63d9970c1e2cda9cf950b819b79b1e7f7 (patch) | |
tree | 4b8a17e6b22373c16195037a0ea70249e979088b /platform/darwin/src | |
parent | de1913e2234179b4a569444dc4219381694f12fe (diff) | |
download | qtlocation-mapboxgl-59820fb63d9970c1e2cda9cf950b819b79b1e7f7.tar.gz |
[ios, macos] Simplify implementation of layer removal from map view
This reverts a previous change that recreated the pending and raw
layer pointers if an identifier match caused a layer to be removed
but the removed layer was of a different type than the layer triggering
the removal
This refactors the pointer replacement to use a simpler solution that
returns early if the layer does not have a raw pointer loaded in the
mbgl map instance.
Diffstat (limited to 'platform/darwin/src')
-rw-r--r-- | platform/darwin/src/MGLBackgroundStyleLayer.mm | 7 | ||||
-rw-r--r-- | platform/darwin/src/MGLCircleStyleLayer.mm | 8 | ||||
-rw-r--r-- | platform/darwin/src/MGLFillStyleLayer.mm | 8 | ||||
-rw-r--r-- | platform/darwin/src/MGLLineStyleLayer.mm | 8 | ||||
-rw-r--r-- | platform/darwin/src/MGLRasterStyleLayer.mm | 8 | ||||
-rw-r--r-- | platform/darwin/src/MGLStyleLayer.mm.ejs | 11 | ||||
-rw-r--r-- | platform/darwin/src/MGLSymbolStyleLayer.mm | 8 |
7 files changed, 28 insertions, 30 deletions
diff --git a/platform/darwin/src/MGLBackgroundStyleLayer.mm b/platform/darwin/src/MGLBackgroundStyleLayer.mm index f6a6973363..bcad0aa11b 100644 --- a/platform/darwin/src/MGLBackgroundStyleLayer.mm +++ b/platform/darwin/src/MGLBackgroundStyleLayer.mm @@ -62,13 +62,14 @@ - (void)removeFromMapView:(MGLMapView *)mapView { + if (self.rawLayer != mapView.mbglMap->getLayer(self.identifier.UTF8String)) { + return; + } + auto removedLayer = mapView.mbglMap->removeLayer(self.identifier.UTF8String); if (!removedLayer) { return; } - auto originalLayer = std::make_unique<mbgl::style::BackgroundLayer>(self.identifier.UTF8String); - _pendingLayer = std::move(originalLayer); - self.rawLayer = _pendingLayer.get(); mbgl::style::BackgroundLayer *layer = dynamic_cast<mbgl::style::BackgroundLayer *>(removedLayer.get()); if (!layer) { diff --git a/platform/darwin/src/MGLCircleStyleLayer.mm b/platform/darwin/src/MGLCircleStyleLayer.mm index ad087c5d02..808e00bc38 100644 --- a/platform/darwin/src/MGLCircleStyleLayer.mm +++ b/platform/darwin/src/MGLCircleStyleLayer.mm @@ -112,14 +112,14 @@ namespace mbgl { - (void)removeFromMapView:(MGLMapView *)mapView { + if (self.rawLayer != mapView.mbglMap->getLayer(self.identifier.UTF8String)) { + return; + } + auto removedLayer = mapView.mbglMap->removeLayer(self.identifier.UTF8String); if (!removedLayer) { return; } - - auto originalLayer = std::make_unique<mbgl::style::CircleLayer>(self.identifier.UTF8String, self.sourceIdentifier.UTF8String); - _pendingLayer = std::move(originalLayer); - self.rawLayer = _pendingLayer.get(); mbgl::style::CircleLayer *layer = dynamic_cast<mbgl::style::CircleLayer *>(removedLayer.get()); if (!layer) { diff --git a/platform/darwin/src/MGLFillStyleLayer.mm b/platform/darwin/src/MGLFillStyleLayer.mm index ffd55884c4..6716e0efb1 100644 --- a/platform/darwin/src/MGLFillStyleLayer.mm +++ b/platform/darwin/src/MGLFillStyleLayer.mm @@ -107,14 +107,14 @@ namespace mbgl { - (void)removeFromMapView:(MGLMapView *)mapView { + if (self.rawLayer != mapView.mbglMap->getLayer(self.identifier.UTF8String)) { + return; + } + auto removedLayer = mapView.mbglMap->removeLayer(self.identifier.UTF8String); if (!removedLayer) { return; } - - auto originalLayer = std::make_unique<mbgl::style::FillLayer>(self.identifier.UTF8String, self.sourceIdentifier.UTF8String); - _pendingLayer = std::move(originalLayer); - self.rawLayer = _pendingLayer.get(); mbgl::style::FillLayer *layer = dynamic_cast<mbgl::style::FillLayer *>(removedLayer.get()); if (!layer) { diff --git a/platform/darwin/src/MGLLineStyleLayer.mm b/platform/darwin/src/MGLLineStyleLayer.mm index fc220650f4..80b1e907e6 100644 --- a/platform/darwin/src/MGLLineStyleLayer.mm +++ b/platform/darwin/src/MGLLineStyleLayer.mm @@ -119,14 +119,14 @@ namespace mbgl { - (void)removeFromMapView:(MGLMapView *)mapView { + if (self.rawLayer != mapView.mbglMap->getLayer(self.identifier.UTF8String)) { + return; + } + auto removedLayer = mapView.mbglMap->removeLayer(self.identifier.UTF8String); if (!removedLayer) { return; } - - auto originalLayer = std::make_unique<mbgl::style::LineLayer>(self.identifier.UTF8String, self.sourceIdentifier.UTF8String); - _pendingLayer = std::move(originalLayer); - self.rawLayer = _pendingLayer.get(); mbgl::style::LineLayer *layer = dynamic_cast<mbgl::style::LineLayer *>(removedLayer.get()); if (!layer) { diff --git a/platform/darwin/src/MGLRasterStyleLayer.mm b/platform/darwin/src/MGLRasterStyleLayer.mm index 0ddb6baf0e..2108a5a0c8 100644 --- a/platform/darwin/src/MGLRasterStyleLayer.mm +++ b/platform/darwin/src/MGLRasterStyleLayer.mm @@ -69,14 +69,14 @@ - (void)removeFromMapView:(MGLMapView *)mapView { + if (self.rawLayer != mapView.mbglMap->getLayer(self.identifier.UTF8String)) { + return; + } + auto removedLayer = mapView.mbglMap->removeLayer(self.identifier.UTF8String); if (!removedLayer) { return; } - - auto originalLayer = std::make_unique<mbgl::style::RasterLayer>(self.identifier.UTF8String, self.sourceIdentifier.UTF8String); - _pendingLayer = std::move(originalLayer); - self.rawLayer = _pendingLayer.get(); mbgl::style::RasterLayer *layer = dynamic_cast<mbgl::style::RasterLayer *>(removedLayer.get()); if (!layer) { diff --git a/platform/darwin/src/MGLStyleLayer.mm.ejs b/platform/darwin/src/MGLStyleLayer.mm.ejs index 7f44a7b4ae..24aff7fca8 100644 --- a/platform/darwin/src/MGLStyleLayer.mm.ejs +++ b/platform/darwin/src/MGLStyleLayer.mm.ejs @@ -150,17 +150,14 @@ namespace mbgl { - (void)removeFromMapView:(MGLMapView *)mapView { + if (self.rawLayer != mapView.mbglMap->getLayer(self.identifier.UTF8String)) { + return; + } + auto removedLayer = mapView.mbglMap->removeLayer(self.identifier.UTF8String); if (!removedLayer) { return; } -<% if (type == 'background') { -%> - auto originalLayer = std::make_unique<mbgl::style::<%- camelize(type) %>Layer>(self.identifier.UTF8String); -<% } else { -%> - auto originalLayer = std::make_unique<mbgl::style::<%- camelize(type) %>Layer>(self.identifier.UTF8String, self.sourceIdentifier.UTF8String); -<% } -%> - _pendingLayer = std::move(originalLayer); - self.rawLayer = _pendingLayer.get(); mbgl::style::<%- camelize(type) %>Layer *layer = dynamic_cast<mbgl::style::<%- camelize(type) %>Layer *>(removedLayer.get()); if (!layer) { diff --git a/platform/darwin/src/MGLSymbolStyleLayer.mm b/platform/darwin/src/MGLSymbolStyleLayer.mm index ae0ac2d6fa..0b065cd7b9 100644 --- a/platform/darwin/src/MGLSymbolStyleLayer.mm +++ b/platform/darwin/src/MGLSymbolStyleLayer.mm @@ -166,14 +166,14 @@ namespace mbgl { - (void)removeFromMapView:(MGLMapView *)mapView { + if (self.rawLayer != mapView.mbglMap->getLayer(self.identifier.UTF8String)) { + return; + } + auto removedLayer = mapView.mbglMap->removeLayer(self.identifier.UTF8String); if (!removedLayer) { return; } - - auto originalLayer = std::make_unique<mbgl::style::SymbolLayer>(self.identifier.UTF8String, self.sourceIdentifier.UTF8String); - _pendingLayer = std::move(originalLayer); - self.rawLayer = _pendingLayer.get(); mbgl::style::SymbolLayer *layer = dynamic_cast<mbgl::style::SymbolLayer *>(removedLayer.get()); if (!layer) { |