summaryrefslogtreecommitdiff
path: root/platform/darwin/src/MGLStyle.mm
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src/MGLStyle.mm')
-rw-r--r--platform/darwin/src/MGLStyle.mm41
1 files changed, 21 insertions, 20 deletions
diff --git a/platform/darwin/src/MGLStyle.mm b/platform/darwin/src/MGLStyle.mm
index 83ff73e8f9..b01d9aa513 100644
--- a/platform/darwin/src/MGLStyle.mm
+++ b/platform/darwin/src/MGLStyle.mm
@@ -166,17 +166,21 @@ static NSURL *MGLStyleURL_emerald;
return rawSource ? [self sourceFromMBGLSource:rawSource] : nil;
}
-- (MGLSource *)sourceFromMBGLSource:(mbgl::style::Source *)source {
+- (MGLSource *)sourceFromMBGLSource:(mbgl::style::Source *)rawSource {
+ if (MGLSource *source = rawSource->peer.empty() ? nil : mbgl::any_cast<SourceWrapper>(rawSource->peer).source) {
+ return source;
+ }
+
// TODO: Fill in options specific to the respective source classes
// https://github.com/mapbox/mapbox-gl-native/issues/6584
- if (auto vectorSource = source->as<mbgl::style::VectorSource>()) {
+ if (auto vectorSource = rawSource->as<mbgl::style::VectorSource>()) {
return [[MGLVectorSource alloc] initWithRawSource:vectorSource];
- } else if (auto geoJSONSource = source->as<mbgl::style::GeoJSONSource>()) {
+ } else if (auto geoJSONSource = rawSource->as<mbgl::style::GeoJSONSource>()) {
return [[MGLShapeSource alloc] initWithRawSource:geoJSONSource];
- } else if (auto rasterSource = source->as<mbgl::style::RasterSource>()) {
+ } else if (auto rasterSource = rawSource->as<mbgl::style::RasterSource>()) {
return [[MGLRasterSource alloc] initWithRawSource:rasterSource];
} else {
- return [[MGLSource alloc] initWithRawSource:source];
+ return [[MGLSource alloc] initWithRawSource:rawSource];
}
}
@@ -319,35 +323,32 @@ static NSURL *MGLStyleURL_emerald;
[styleLayer removeFromMapView:self.mapView];
}
-- (MGLStyleLayer *)layerFromMBGLLayer:(mbgl::style::Layer *)mbglLayer
+- (MGLStyleLayer *)layerFromMBGLLayer:(mbgl::style::Layer *)rawLayer
{
- NSParameterAssert(mbglLayer);
+ NSParameterAssert(rawLayer);
- NSString *identifier = @(mbglLayer->getID().c_str());
+ if (MGLStyleLayer *layer = rawLayer->peer.empty() ? nil : mbgl::any_cast<LayerWrapper>(rawLayer->peer).layer) {
+ return layer;
+ }
- if (auto fillLayer = mbglLayer->as<mbgl::style::FillLayer>()) {
+ if (auto fillLayer = rawLayer->as<mbgl::style::FillLayer>()) {
MGLSource *source = [self sourceWithIdentifier:@(fillLayer->getSourceID().c_str())];
return [[MGLFillStyleLayer alloc] initWithRawLayer:fillLayer source:source];
- } else if (auto lineLayer = mbglLayer->as<mbgl::style::LineLayer>()) {
+ } else if (auto lineLayer = rawLayer->as<mbgl::style::LineLayer>()) {
MGLSource *source = [self sourceWithIdentifier:@(lineLayer->getSourceID().c_str())];
return [[MGLLineStyleLayer alloc] initWithRawLayer:lineLayer source:source];
- } else if (auto symbolLayer = mbglLayer->as<mbgl::style::SymbolLayer>()) {
+ } else if (auto symbolLayer = rawLayer->as<mbgl::style::SymbolLayer>()) {
MGLSource *source = [self sourceWithIdentifier:@(symbolLayer->getSourceID().c_str())];
return [[MGLSymbolStyleLayer alloc] initWithRawLayer:symbolLayer source:source];
- } else if (auto rasterLayer = mbglLayer->as<mbgl::style::RasterLayer>()) {
+ } else if (auto rasterLayer = rawLayer->as<mbgl::style::RasterLayer>()) {
MGLSource *source = [self sourceWithIdentifier:@(rasterLayer->getSourceID().c_str())];
return [[MGLRasterStyleLayer alloc] initWithRawLayer:rasterLayer source:source];
- } else if (auto circleLayer = mbglLayer->as<mbgl::style::CircleLayer>()) {
+ } else if (auto circleLayer = rawLayer->as<mbgl::style::CircleLayer>()) {
MGLSource *source = [self sourceWithIdentifier:@(circleLayer->getSourceID().c_str())];
return [[MGLCircleStyleLayer alloc] initWithRawLayer:circleLayer source:source];
- } else if (auto backgroundLayer = mbglLayer->as<mbgl::style::BackgroundLayer>()) {
+ } else if (auto backgroundLayer = rawLayer->as<mbgl::style::BackgroundLayer>()) {
return [[MGLBackgroundStyleLayer alloc] initWithRawLayer:backgroundLayer];
- } else if (auto customLayer = mbglLayer->as<mbgl::style::CustomLayer>()) {
- MGLStyleLayer *styleLayer = self.openGLLayers[identifier];
- if (styleLayer) {
- NSAssert(styleLayer.rawLayer == customLayer, @"%@ wraps a CustomLayer that differs from the one associated with the underlying style.", styleLayer);
- return styleLayer;
- }
+ } else if (auto customLayer = rawLayer->as<mbgl::style::CustomLayer>()) {
return [[MGLOpenGLStyleLayer alloc] initWithRawLayer:customLayer];
} else {
NSAssert(NO, @"Unrecognized layer type");