From 99e1a8a3df1a08464d8529b6988c1665b87c7c8b Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Mon, 29 Oct 2018 14:29:16 +0200 Subject: Remove style::Layer::is()/as() --- include/mbgl/style/layer.hpp | 25 ---- include/mbgl/style/layers/background_layer.hpp | 5 - include/mbgl/style/layers/circle_layer.hpp | 5 - include/mbgl/style/layers/fill_extrusion_layer.hpp | 5 - include/mbgl/style/layers/fill_layer.hpp | 5 - include/mbgl/style/layers/heatmap_layer.hpp | 5 - include/mbgl/style/layers/hillshade_layer.hpp | 5 - include/mbgl/style/layers/layer.hpp.ejs | 5 - include/mbgl/style/layers/line_layer.hpp | 5 - include/mbgl/style/layers/raster_layer.hpp | 5 - include/mbgl/style/layers/symbol_layer.hpp | 5 - .../android/src/style/layers/background_layer.cpp | 22 +-- platform/android/src/style/layers/circle_layer.cpp | 58 ++++---- .../src/style/layers/fill_extrusion_layer.cpp | 42 +++--- platform/android/src/style/layers/fill_layer.cpp | 38 ++--- .../android/src/style/layers/heatmap_layer.cpp | 28 ++-- .../android/src/style/layers/hillshade_layer.cpp | 32 +++-- platform/android/src/style/layers/layer.cpp.ejs | 14 +- platform/android/src/style/layers/layer.hpp | 3 +- platform/android/src/style/layers/layers.cpp | 4 +- platform/android/src/style/layers/line_layer.cpp | 70 +++++----- platform/android/src/style/layers/raster_layer.cpp | 44 +++--- platform/android/src/style/layers/symbol_layer.cpp | 154 +++++++++++---------- platform/darwin/src/MGLStyle.mm | 48 +++---- .../darwin/test/MGLBackgroundStyleLayerTests.mm | 4 +- platform/darwin/test/MGLCircleStyleLayerTests.mm | 4 +- .../darwin/test/MGLFillExtrusionStyleLayerTests.mm | 4 +- platform/darwin/test/MGLFillStyleLayerTests.mm | 4 +- platform/darwin/test/MGLHeatmapColorTests.mm | 2 +- platform/darwin/test/MGLHeatmapStyleLayerTests.mm | 4 +- .../darwin/test/MGLHillshadeStyleLayerTests.mm | 4 +- platform/darwin/test/MGLLineStyleLayerTests.mm | 4 +- platform/darwin/test/MGLRasterStyleLayerTests.mm | 4 +- platform/darwin/test/MGLStyleLayerTests.mm.ejs | 4 +- platform/darwin/test/MGLSymbolStyleLayerTests.mm | 4 +- src/mbgl/annotation/fill_annotation_impl.cpp | 3 +- src/mbgl/annotation/line_annotation_impl.cpp | 3 +- src/mbgl/style/layers/custom_layer.cpp | 5 - test/gl/context.test.cpp | 4 +- test/renderer/group_by_layout.test.cpp | 10 +- test/style/conversion/layer.test.cpp | 6 +- test/style/style_layer.test.cpp | 10 +- 42 files changed, 341 insertions(+), 374 deletions(-) diff --git a/include/mbgl/style/layer.hpp b/include/mbgl/style/layer.hpp index dd8f1a1e0e..5f12115f87 100644 --- a/include/mbgl/style/layer.hpp +++ b/include/mbgl/style/layer.hpp @@ -15,16 +15,6 @@ namespace mbgl { namespace style { -class FillLayer; -class LineLayer; -class CircleLayer; -class SymbolLayer; -class RasterLayer; -class HillshadeLayer; -class BackgroundLayer; -class CustomLayer; -class FillExtrusionLayer; -class HeatmapLayer; class LayerObserver; class Filter; @@ -51,21 +41,6 @@ public: virtual ~Layer(); - // Check whether this layer is of the given subtype. - template - bool is() const; - - // Dynamically cast this layer to the given subtype. - template - T* as() { - return is() ? reinterpret_cast(this) : nullptr; - } - - template - const T* as() const { - return is() ? reinterpret_cast(this) : nullptr; - } - LayerType getType() const; std::string getID() const; // Source diff --git a/include/mbgl/style/layers/background_layer.hpp b/include/mbgl/style/layers/background_layer.hpp index 7d7753cbff..6739973e53 100644 --- a/include/mbgl/style/layers/background_layer.hpp +++ b/include/mbgl/style/layers/background_layer.hpp @@ -56,10 +56,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is() const { - return getType() == LayerType::Background; -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layers/circle_layer.hpp b/include/mbgl/style/layers/circle_layer.hpp index 909412dbab..e0a121e2dc 100644 --- a/include/mbgl/style/layers/circle_layer.hpp +++ b/include/mbgl/style/layers/circle_layer.hpp @@ -104,10 +104,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is() const { - return getType() == LayerType::Circle; -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layers/fill_extrusion_layer.hpp b/include/mbgl/style/layers/fill_extrusion_layer.hpp index 8798738d90..ed1cbb924b 100644 --- a/include/mbgl/style/layers/fill_extrusion_layer.hpp +++ b/include/mbgl/style/layers/fill_extrusion_layer.hpp @@ -80,10 +80,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is() const { - return getType() == LayerType::FillExtrusion; -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layers/fill_layer.hpp b/include/mbgl/style/layers/fill_layer.hpp index 033b451abc..b265bf5d06 100644 --- a/include/mbgl/style/layers/fill_layer.hpp +++ b/include/mbgl/style/layers/fill_layer.hpp @@ -80,10 +80,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is() const { - return getType() == LayerType::Fill; -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layers/heatmap_layer.hpp b/include/mbgl/style/layers/heatmap_layer.hpp index 2315eac3f2..5069eef165 100644 --- a/include/mbgl/style/layers/heatmap_layer.hpp +++ b/include/mbgl/style/layers/heatmap_layer.hpp @@ -69,10 +69,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is() const { - return getType() == LayerType::Heatmap; -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layers/hillshade_layer.hpp b/include/mbgl/style/layers/hillshade_layer.hpp index 4c18b5ed89..5c2b4276c3 100644 --- a/include/mbgl/style/layers/hillshade_layer.hpp +++ b/include/mbgl/style/layers/hillshade_layer.hpp @@ -74,10 +74,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is() const { - return getType() == LayerType::Hillshade; -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layers/layer.hpp.ejs b/include/mbgl/style/layers/layer.hpp.ejs index f6dd08000a..a5d4be14e6 100644 --- a/include/mbgl/style/layers/layer.hpp.ejs +++ b/include/mbgl/style/layers/layer.hpp.ejs @@ -72,10 +72,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is<<%- camelize(type) %>Layer>() const { - return getType() == LayerType::<%- camelize(type) %>; -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layers/line_layer.hpp b/include/mbgl/style/layers/line_layer.hpp index 0e1d026e74..487fef5837 100644 --- a/include/mbgl/style/layers/line_layer.hpp +++ b/include/mbgl/style/layers/line_layer.hpp @@ -125,10 +125,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is() const { - return getType() == LayerType::Line; -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layers/raster_layer.hpp b/include/mbgl/style/layers/raster_layer.hpp index 2d10d65914..a31a362f49 100644 --- a/include/mbgl/style/layers/raster_layer.hpp +++ b/include/mbgl/style/layers/raster_layer.hpp @@ -86,10 +86,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is() const { - return getType() == LayerType::Raster; -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layers/symbol_layer.hpp b/include/mbgl/style/layers/symbol_layer.hpp index b75a943be0..39852aa715 100644 --- a/include/mbgl/style/layers/symbol_layer.hpp +++ b/include/mbgl/style/layers/symbol_layer.hpp @@ -274,10 +274,5 @@ protected: Mutable mutableBaseImpl() const final; }; -template <> -inline bool Layer::is() const { - return getType() == LayerType::Symbol; -} - } // namespace style } // namespace mbgl diff --git a/platform/android/src/style/layers/background_layer.cpp b/platform/android/src/style/layers/background_layer.cpp index c806e8471f..45ec9380d0 100644 --- a/platform/android/src/style/layers/background_layer.cpp +++ b/platform/android/src/style/layers/background_layer.cpp @@ -10,6 +10,10 @@ namespace mbgl { namespace android { + inline mbgl::style::BackgroundLayer& toBackgroundLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -37,12 +41,12 @@ namespace android { jni::Local> BackgroundLayer::getBackgroundColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->BackgroundLayer::getBackgroundColor())); + return std::move(*convert>>(env, toBackgroundLayer(layer).getBackgroundColor())); } jni::Local> BackgroundLayer::getBackgroundColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->BackgroundLayer::getBackgroundColorTransition(); + mbgl::style::TransitionOptions options = toBackgroundLayer(layer).getBackgroundColorTransition(); return std::move(*convert>>(env, options)); } @@ -50,17 +54,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->BackgroundLayer::setBackgroundColorTransition(options); + toBackgroundLayer(layer).setBackgroundColorTransition(options); } jni::Local> BackgroundLayer::getBackgroundPattern(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->BackgroundLayer::getBackgroundPattern())); + return std::move(*convert>>(env, toBackgroundLayer(layer).getBackgroundPattern())); } jni::Local> BackgroundLayer::getBackgroundPatternTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->BackgroundLayer::getBackgroundPatternTransition(); + mbgl::style::TransitionOptions options = toBackgroundLayer(layer).getBackgroundPatternTransition(); return std::move(*convert>>(env, options)); } @@ -68,17 +72,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->BackgroundLayer::setBackgroundPatternTransition(options); + toBackgroundLayer(layer).setBackgroundPatternTransition(options); } jni::Local> BackgroundLayer::getBackgroundOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->BackgroundLayer::getBackgroundOpacity())); + return std::move(*convert>>(env, toBackgroundLayer(layer).getBackgroundOpacity())); } jni::Local> BackgroundLayer::getBackgroundOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->BackgroundLayer::getBackgroundOpacityTransition(); + mbgl::style::TransitionOptions options = toBackgroundLayer(layer).getBackgroundOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -86,7 +90,7 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->BackgroundLayer::setBackgroundOpacityTransition(options); + toBackgroundLayer(layer).setBackgroundOpacityTransition(options); } diff --git a/platform/android/src/style/layers/circle_layer.cpp b/platform/android/src/style/layers/circle_layer.cpp index 9ec48d7b18..1b5b7649f0 100644 --- a/platform/android/src/style/layers/circle_layer.cpp +++ b/platform/android/src/style/layers/circle_layer.cpp @@ -10,6 +10,10 @@ namespace mbgl { namespace android { + inline mbgl::style::CircleLayer& toCircleLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -37,12 +41,12 @@ namespace android { jni::Local> CircleLayer::getCircleRadius(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCircleRadius())); + return std::move(*convert>>(env, toCircleLayer(layer).getCircleRadius())); } jni::Local> CircleLayer::getCircleRadiusTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->CircleLayer::getCircleRadiusTransition(); + mbgl::style::TransitionOptions options = toCircleLayer(layer).getCircleRadiusTransition(); return std::move(*convert>>(env, options)); } @@ -50,17 +54,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->CircleLayer::setCircleRadiusTransition(options); + toCircleLayer(layer).setCircleRadiusTransition(options); } jni::Local> CircleLayer::getCircleColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCircleColor())); + return std::move(*convert>>(env, toCircleLayer(layer).getCircleColor())); } jni::Local> CircleLayer::getCircleColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->CircleLayer::getCircleColorTransition(); + mbgl::style::TransitionOptions options = toCircleLayer(layer).getCircleColorTransition(); return std::move(*convert>>(env, options)); } @@ -68,17 +72,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->CircleLayer::setCircleColorTransition(options); + toCircleLayer(layer).setCircleColorTransition(options); } jni::Local> CircleLayer::getCircleBlur(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCircleBlur())); + return std::move(*convert>>(env, toCircleLayer(layer).getCircleBlur())); } jni::Local> CircleLayer::getCircleBlurTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->CircleLayer::getCircleBlurTransition(); + mbgl::style::TransitionOptions options = toCircleLayer(layer).getCircleBlurTransition(); return std::move(*convert>>(env, options)); } @@ -86,17 +90,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->CircleLayer::setCircleBlurTransition(options); + toCircleLayer(layer).setCircleBlurTransition(options); } jni::Local> CircleLayer::getCircleOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCircleOpacity())); + return std::move(*convert>>(env, toCircleLayer(layer).getCircleOpacity())); } jni::Local> CircleLayer::getCircleOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->CircleLayer::getCircleOpacityTransition(); + mbgl::style::TransitionOptions options = toCircleLayer(layer).getCircleOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -104,17 +108,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->CircleLayer::setCircleOpacityTransition(options); + toCircleLayer(layer).setCircleOpacityTransition(options); } jni::Local> CircleLayer::getCircleTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCircleTranslate())); + return std::move(*convert>>(env, toCircleLayer(layer).getCircleTranslate())); } jni::Local> CircleLayer::getCircleTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->CircleLayer::getCircleTranslateTransition(); + mbgl::style::TransitionOptions options = toCircleLayer(layer).getCircleTranslateTransition(); return std::move(*convert>>(env, options)); } @@ -122,32 +126,32 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->CircleLayer::setCircleTranslateTransition(options); + toCircleLayer(layer).setCircleTranslateTransition(options); } jni::Local> CircleLayer::getCircleTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCircleTranslateAnchor())); + return std::move(*convert>>(env, toCircleLayer(layer).getCircleTranslateAnchor())); } jni::Local> CircleLayer::getCirclePitchScale(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCirclePitchScale())); + return std::move(*convert>>(env, toCircleLayer(layer).getCirclePitchScale())); } jni::Local> CircleLayer::getCirclePitchAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCirclePitchAlignment())); + return std::move(*convert>>(env, toCircleLayer(layer).getCirclePitchAlignment())); } jni::Local> CircleLayer::getCircleStrokeWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCircleStrokeWidth())); + return std::move(*convert>>(env, toCircleLayer(layer).getCircleStrokeWidth())); } jni::Local> CircleLayer::getCircleStrokeWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->CircleLayer::getCircleStrokeWidthTransition(); + mbgl::style::TransitionOptions options = toCircleLayer(layer).getCircleStrokeWidthTransition(); return std::move(*convert>>(env, options)); } @@ -155,17 +159,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->CircleLayer::setCircleStrokeWidthTransition(options); + toCircleLayer(layer).setCircleStrokeWidthTransition(options); } jni::Local> CircleLayer::getCircleStrokeColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCircleStrokeColor())); + return std::move(*convert>>(env, toCircleLayer(layer).getCircleStrokeColor())); } jni::Local> CircleLayer::getCircleStrokeColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->CircleLayer::getCircleStrokeColorTransition(); + mbgl::style::TransitionOptions options = toCircleLayer(layer).getCircleStrokeColorTransition(); return std::move(*convert>>(env, options)); } @@ -173,17 +177,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->CircleLayer::setCircleStrokeColorTransition(options); + toCircleLayer(layer).setCircleStrokeColorTransition(options); } jni::Local> CircleLayer::getCircleStrokeOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->CircleLayer::getCircleStrokeOpacity())); + return std::move(*convert>>(env, toCircleLayer(layer).getCircleStrokeOpacity())); } jni::Local> CircleLayer::getCircleStrokeOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->CircleLayer::getCircleStrokeOpacityTransition(); + mbgl::style::TransitionOptions options = toCircleLayer(layer).getCircleStrokeOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -191,7 +195,7 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->CircleLayer::setCircleStrokeOpacityTransition(options); + toCircleLayer(layer).setCircleStrokeOpacityTransition(options); } diff --git a/platform/android/src/style/layers/fill_extrusion_layer.cpp b/platform/android/src/style/layers/fill_extrusion_layer.cpp index cf53e774a5..b047f08dc0 100644 --- a/platform/android/src/style/layers/fill_extrusion_layer.cpp +++ b/platform/android/src/style/layers/fill_extrusion_layer.cpp @@ -10,6 +10,10 @@ namespace mbgl { namespace android { + inline mbgl::style::FillExtrusionLayer& toFillExtrusionLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -37,12 +41,12 @@ namespace android { jni::Local> FillExtrusionLayer::getFillExtrusionOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillExtrusionLayer::getFillExtrusionOpacity())); + return std::move(*convert>>(env, toFillExtrusionLayer(layer).getFillExtrusionOpacity())); } jni::Local> FillExtrusionLayer::getFillExtrusionOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillExtrusionLayer::getFillExtrusionOpacityTransition(); + mbgl::style::TransitionOptions options = toFillExtrusionLayer(layer).getFillExtrusionOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -50,17 +54,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillExtrusionLayer::setFillExtrusionOpacityTransition(options); + toFillExtrusionLayer(layer).setFillExtrusionOpacityTransition(options); } jni::Local> FillExtrusionLayer::getFillExtrusionColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillExtrusionLayer::getFillExtrusionColor())); + return std::move(*convert>>(env, toFillExtrusionLayer(layer).getFillExtrusionColor())); } jni::Local> FillExtrusionLayer::getFillExtrusionColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillExtrusionLayer::getFillExtrusionColorTransition(); + mbgl::style::TransitionOptions options = toFillExtrusionLayer(layer).getFillExtrusionColorTransition(); return std::move(*convert>>(env, options)); } @@ -68,17 +72,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillExtrusionLayer::setFillExtrusionColorTransition(options); + toFillExtrusionLayer(layer).setFillExtrusionColorTransition(options); } jni::Local> FillExtrusionLayer::getFillExtrusionTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillExtrusionLayer::getFillExtrusionTranslate())); + return std::move(*convert>>(env, toFillExtrusionLayer(layer).getFillExtrusionTranslate())); } jni::Local> FillExtrusionLayer::getFillExtrusionTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillExtrusionLayer::getFillExtrusionTranslateTransition(); + mbgl::style::TransitionOptions options = toFillExtrusionLayer(layer).getFillExtrusionTranslateTransition(); return std::move(*convert>>(env, options)); } @@ -86,22 +90,22 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillExtrusionLayer::setFillExtrusionTranslateTransition(options); + toFillExtrusionLayer(layer).setFillExtrusionTranslateTransition(options); } jni::Local> FillExtrusionLayer::getFillExtrusionTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillExtrusionLayer::getFillExtrusionTranslateAnchor())); + return std::move(*convert>>(env, toFillExtrusionLayer(layer).getFillExtrusionTranslateAnchor())); } jni::Local> FillExtrusionLayer::getFillExtrusionPattern(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillExtrusionLayer::getFillExtrusionPattern())); + return std::move(*convert>>(env, toFillExtrusionLayer(layer).getFillExtrusionPattern())); } jni::Local> FillExtrusionLayer::getFillExtrusionPatternTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillExtrusionLayer::getFillExtrusionPatternTransition(); + mbgl::style::TransitionOptions options = toFillExtrusionLayer(layer).getFillExtrusionPatternTransition(); return std::move(*convert>>(env, options)); } @@ -109,17 +113,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillExtrusionLayer::setFillExtrusionPatternTransition(options); + toFillExtrusionLayer(layer).setFillExtrusionPatternTransition(options); } jni::Local> FillExtrusionLayer::getFillExtrusionHeight(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillExtrusionLayer::getFillExtrusionHeight())); + return std::move(*convert>>(env, toFillExtrusionLayer(layer).getFillExtrusionHeight())); } jni::Local> FillExtrusionLayer::getFillExtrusionHeightTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillExtrusionLayer::getFillExtrusionHeightTransition(); + mbgl::style::TransitionOptions options = toFillExtrusionLayer(layer).getFillExtrusionHeightTransition(); return std::move(*convert>>(env, options)); } @@ -127,17 +131,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillExtrusionLayer::setFillExtrusionHeightTransition(options); + toFillExtrusionLayer(layer).setFillExtrusionHeightTransition(options); } jni::Local> FillExtrusionLayer::getFillExtrusionBase(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillExtrusionLayer::getFillExtrusionBase())); + return std::move(*convert>>(env, toFillExtrusionLayer(layer).getFillExtrusionBase())); } jni::Local> FillExtrusionLayer::getFillExtrusionBaseTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillExtrusionLayer::getFillExtrusionBaseTransition(); + mbgl::style::TransitionOptions options = toFillExtrusionLayer(layer).getFillExtrusionBaseTransition(); return std::move(*convert>>(env, options)); } @@ -145,7 +149,7 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillExtrusionLayer::setFillExtrusionBaseTransition(options); + toFillExtrusionLayer(layer).setFillExtrusionBaseTransition(options); } diff --git a/platform/android/src/style/layers/fill_layer.cpp b/platform/android/src/style/layers/fill_layer.cpp index 555f8eb3cd..411895488f 100644 --- a/platform/android/src/style/layers/fill_layer.cpp +++ b/platform/android/src/style/layers/fill_layer.cpp @@ -10,6 +10,10 @@ namespace mbgl { namespace android { + inline mbgl::style::FillLayer& toFillLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -37,17 +41,17 @@ namespace android { jni::Local> FillLayer::getFillAntialias(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillLayer::getFillAntialias())); + return std::move(*convert>>(env, toFillLayer(layer).getFillAntialias())); } jni::Local> FillLayer::getFillOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillLayer::getFillOpacity())); + return std::move(*convert>>(env, toFillLayer(layer).getFillOpacity())); } jni::Local> FillLayer::getFillOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillLayer::getFillOpacityTransition(); + mbgl::style::TransitionOptions options = toFillLayer(layer).getFillOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -55,17 +59,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillLayer::setFillOpacityTransition(options); + toFillLayer(layer).setFillOpacityTransition(options); } jni::Local> FillLayer::getFillColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillLayer::getFillColor())); + return std::move(*convert>>(env, toFillLayer(layer).getFillColor())); } jni::Local> FillLayer::getFillColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillLayer::getFillColorTransition(); + mbgl::style::TransitionOptions options = toFillLayer(layer).getFillColorTransition(); return std::move(*convert>>(env, options)); } @@ -73,17 +77,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillLayer::setFillColorTransition(options); + toFillLayer(layer).setFillColorTransition(options); } jni::Local> FillLayer::getFillOutlineColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillLayer::getFillOutlineColor())); + return std::move(*convert>>(env, toFillLayer(layer).getFillOutlineColor())); } jni::Local> FillLayer::getFillOutlineColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillLayer::getFillOutlineColorTransition(); + mbgl::style::TransitionOptions options = toFillLayer(layer).getFillOutlineColorTransition(); return std::move(*convert>>(env, options)); } @@ -91,17 +95,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillLayer::setFillOutlineColorTransition(options); + toFillLayer(layer).setFillOutlineColorTransition(options); } jni::Local> FillLayer::getFillTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillLayer::getFillTranslate())); + return std::move(*convert>>(env, toFillLayer(layer).getFillTranslate())); } jni::Local> FillLayer::getFillTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillLayer::getFillTranslateTransition(); + mbgl::style::TransitionOptions options = toFillLayer(layer).getFillTranslateTransition(); return std::move(*convert>>(env, options)); } @@ -109,22 +113,22 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillLayer::setFillTranslateTransition(options); + toFillLayer(layer).setFillTranslateTransition(options); } jni::Local> FillLayer::getFillTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillLayer::getFillTranslateAnchor())); + return std::move(*convert>>(env, toFillLayer(layer).getFillTranslateAnchor())); } jni::Local> FillLayer::getFillPattern(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->FillLayer::getFillPattern())); + return std::move(*convert>>(env, toFillLayer(layer).getFillPattern())); } jni::Local> FillLayer::getFillPatternTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->FillLayer::getFillPatternTransition(); + mbgl::style::TransitionOptions options = toFillLayer(layer).getFillPatternTransition(); return std::move(*convert>>(env, options)); } @@ -132,7 +136,7 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->FillLayer::setFillPatternTransition(options); + toFillLayer(layer).setFillPatternTransition(options); } diff --git a/platform/android/src/style/layers/heatmap_layer.cpp b/platform/android/src/style/layers/heatmap_layer.cpp index b72b372929..5a0114d52a 100644 --- a/platform/android/src/style/layers/heatmap_layer.cpp +++ b/platform/android/src/style/layers/heatmap_layer.cpp @@ -10,6 +10,10 @@ namespace mbgl { namespace android { + inline mbgl::style::HeatmapLayer& toHeatmapLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -37,12 +41,12 @@ namespace android { jni::Local> HeatmapLayer::getHeatmapRadius(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HeatmapLayer::getHeatmapRadius())); + return std::move(*convert>>(env, toHeatmapLayer(layer).getHeatmapRadius())); } jni::Local> HeatmapLayer::getHeatmapRadiusTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->HeatmapLayer::getHeatmapRadiusTransition(); + mbgl::style::TransitionOptions options = toHeatmapLayer(layer).getHeatmapRadiusTransition(); return std::move(*convert>>(env, options)); } @@ -50,22 +54,22 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->HeatmapLayer::setHeatmapRadiusTransition(options); + toHeatmapLayer(layer).setHeatmapRadiusTransition(options); } jni::Local> HeatmapLayer::getHeatmapWeight(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HeatmapLayer::getHeatmapWeight())); + return std::move(*convert>>(env, toHeatmapLayer(layer).getHeatmapWeight())); } jni::Local> HeatmapLayer::getHeatmapIntensity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HeatmapLayer::getHeatmapIntensity())); + return std::move(*convert>>(env, toHeatmapLayer(layer).getHeatmapIntensity())); } jni::Local> HeatmapLayer::getHeatmapIntensityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->HeatmapLayer::getHeatmapIntensityTransition(); + mbgl::style::TransitionOptions options = toHeatmapLayer(layer).getHeatmapIntensityTransition(); return std::move(*convert>>(env, options)); } @@ -73,26 +77,26 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->HeatmapLayer::setHeatmapIntensityTransition(options); + toHeatmapLayer(layer).setHeatmapIntensityTransition(options); } jni::Local> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - auto propertyValue = layer.as()->HeatmapLayer::getHeatmapColor(); + auto propertyValue = toHeatmapLayer(layer).getHeatmapColor(); if (propertyValue.isUndefined()) { - propertyValue = layer.as()->HeatmapLayer::getDefaultHeatmapColor(); + propertyValue = toHeatmapLayer(layer).getDefaultHeatmapColor(); } return std::move(*convert>>(env, propertyValue)); } jni::Local> HeatmapLayer::getHeatmapOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HeatmapLayer::getHeatmapOpacity())); + return std::move(*convert>>(env, toHeatmapLayer(layer).getHeatmapOpacity())); } jni::Local> HeatmapLayer::getHeatmapOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->HeatmapLayer::getHeatmapOpacityTransition(); + mbgl::style::TransitionOptions options = toHeatmapLayer(layer).getHeatmapOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -100,7 +104,7 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->HeatmapLayer::setHeatmapOpacityTransition(options); + toHeatmapLayer(layer).setHeatmapOpacityTransition(options); } diff --git a/platform/android/src/style/layers/hillshade_layer.cpp b/platform/android/src/style/layers/hillshade_layer.cpp index 5cd6162575..3f3c8e311a 100644 --- a/platform/android/src/style/layers/hillshade_layer.cpp +++ b/platform/android/src/style/layers/hillshade_layer.cpp @@ -10,6 +10,10 @@ namespace mbgl { namespace android { + inline mbgl::style::HillshadeLayer& toHillshadeLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -37,22 +41,22 @@ namespace android { jni::Local> HillshadeLayer::getHillshadeIlluminationDirection(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HillshadeLayer::getHillshadeIlluminationDirection())); + return std::move(*convert>>(env, toHillshadeLayer(layer).getHillshadeIlluminationDirection())); } jni::Local> HillshadeLayer::getHillshadeIlluminationAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HillshadeLayer::getHillshadeIlluminationAnchor())); + return std::move(*convert>>(env, toHillshadeLayer(layer).getHillshadeIlluminationAnchor())); } jni::Local> HillshadeLayer::getHillshadeExaggeration(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HillshadeLayer::getHillshadeExaggeration())); + return std::move(*convert>>(env, toHillshadeLayer(layer).getHillshadeExaggeration())); } jni::Local> HillshadeLayer::getHillshadeExaggerationTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->HillshadeLayer::getHillshadeExaggerationTransition(); + mbgl::style::TransitionOptions options = toHillshadeLayer(layer).getHillshadeExaggerationTransition(); return std::move(*convert>>(env, options)); } @@ -60,17 +64,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->HillshadeLayer::setHillshadeExaggerationTransition(options); + toHillshadeLayer(layer).setHillshadeExaggerationTransition(options); } jni::Local> HillshadeLayer::getHillshadeShadowColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HillshadeLayer::getHillshadeShadowColor())); + return std::move(*convert>>(env, toHillshadeLayer(layer).getHillshadeShadowColor())); } jni::Local> HillshadeLayer::getHillshadeShadowColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->HillshadeLayer::getHillshadeShadowColorTransition(); + mbgl::style::TransitionOptions options = toHillshadeLayer(layer).getHillshadeShadowColorTransition(); return std::move(*convert>>(env, options)); } @@ -78,17 +82,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->HillshadeLayer::setHillshadeShadowColorTransition(options); + toHillshadeLayer(layer).setHillshadeShadowColorTransition(options); } jni::Local> HillshadeLayer::getHillshadeHighlightColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HillshadeLayer::getHillshadeHighlightColor())); + return std::move(*convert>>(env, toHillshadeLayer(layer).getHillshadeHighlightColor())); } jni::Local> HillshadeLayer::getHillshadeHighlightColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->HillshadeLayer::getHillshadeHighlightColorTransition(); + mbgl::style::TransitionOptions options = toHillshadeLayer(layer).getHillshadeHighlightColorTransition(); return std::move(*convert>>(env, options)); } @@ -96,17 +100,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->HillshadeLayer::setHillshadeHighlightColorTransition(options); + toHillshadeLayer(layer).setHillshadeHighlightColorTransition(options); } jni::Local> HillshadeLayer::getHillshadeAccentColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->HillshadeLayer::getHillshadeAccentColor())); + return std::move(*convert>>(env, toHillshadeLayer(layer).getHillshadeAccentColor())); } jni::Local> HillshadeLayer::getHillshadeAccentColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->HillshadeLayer::getHillshadeAccentColorTransition(); + mbgl::style::TransitionOptions options = toHillshadeLayer(layer).getHillshadeAccentColorTransition(); return std::move(*convert>>(env, options)); } @@ -114,7 +118,7 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->HillshadeLayer::setHillshadeAccentColorTransition(options); + toHillshadeLayer(layer).setHillshadeAccentColorTransition(options); } diff --git a/platform/android/src/style/layers/layer.cpp.ejs b/platform/android/src/style/layers/layer.cpp.ejs index 875bc88bc0..5fd8537c5a 100644 --- a/platform/android/src/style/layers/layer.cpp.ejs +++ b/platform/android/src/style/layers/layer.cpp.ejs @@ -14,6 +14,10 @@ namespace mbgl { namespace android { + inline mbgl::style::<%- camelize(type) %>Layer& to<%- camelize(type) %>Layer(mbgl::style::Layer& layer) { + return static_castLayer&>(layer); + } + <% if (type === 'background') { -%> /** * Creates an owning peer object (for layers not attached to the map) from the JVM side @@ -51,15 +55,15 @@ namespace android { <% if (property.name != 'heatmap-color') { -%> jni::Local> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.asLayer>()-><%- camelize(type) %>Layer::get<%- camelize(property.name) %>())); + return std::move(*convert>>(env, to<%- camelize(type) %>Layer(layer).get<%- camelize(property.name) %>())); } <% } else { -%> jni::Local> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - auto propertyValue = layer.as()->HeatmapLayer::getHeatmapColor(); + auto propertyValue = to<%- camelize(type) %>Layer(layer).getHeatmapColor(); if (propertyValue.isUndefined()) { - propertyValue = layer.as()->HeatmapLayer::getDefaultHeatmapColor(); + propertyValue = to<%- camelize(type) %>Layer(layer).getDefaultHeatmapColor(); } return std::move(*convert>>(env, propertyValue)); } @@ -68,7 +72,7 @@ namespace android { <% if (property.transition) { -%> jni::Local> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>Transition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.asLayer>()-><%- camelize(type) %>Layer::get<%- camelize(property.name) %>Transition(); + mbgl::style::TransitionOptions options = to<%- camelize(type) %>Layer(layer).get<%- camelize(property.name) %>Transition(); return std::move(*convert>>(env, options)); } @@ -76,7 +80,7 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.asLayer>()-><%- camelize(type) %>Layer::set<%- camelize(property.name) %>Transition(options); + to<%- camelize(type) %>Layer(layer).set<%- camelize(property.name) %>Transition(options); } <% } -%> diff --git a/platform/android/src/style/layers/layer.hpp b/platform/android/src/style/layers/layer.hpp index cee1b5a64e..ab3b1d339d 100644 --- a/platform/android/src/style/layers/layer.hpp +++ b/platform/android/src/style/layers/layer.hpp @@ -10,6 +10,8 @@ #include namespace mbgl { + + namespace android { class Layer : private mbgl::util::noncopyable { @@ -91,7 +93,6 @@ protected: // Map is set when the layer is retrieved or after adding to the map mbgl::Map* map; - }; } // namespace android diff --git a/platform/android/src/style/layers/layers.cpp b/platform/android/src/style/layers/layers.cpp index c0a3acdf42..da870aa0e3 100644 --- a/platform/android/src/style/layers/layers.cpp +++ b/platform/android/src/style/layers/layers.cpp @@ -31,12 +31,12 @@ namespace android { template inline std::unique_ptr to(std::unique_ptr layer) { - return std::unique_ptr(layer.release()->as()); + return std::unique_ptr(static_cast(layer.release())); } template inline T& to(style::Layer& layer) { - return *layer.as(); + return static_cast(layer); } template diff --git a/platform/android/src/style/layers/line_layer.cpp b/platform/android/src/style/layers/line_layer.cpp index 376e4aafc0..28a6c54749 100644 --- a/platform/android/src/style/layers/line_layer.cpp +++ b/platform/android/src/style/layers/line_layer.cpp @@ -10,6 +10,10 @@ namespace mbgl { namespace android { + inline mbgl::style::LineLayer& toLineLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -37,32 +41,32 @@ namespace android { jni::Local> LineLayer::getLineCap(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineCap())); + return std::move(*convert>>(env, toLineLayer(layer).getLineCap())); } jni::Local> LineLayer::getLineJoin(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineJoin())); + return std::move(*convert>>(env, toLineLayer(layer).getLineJoin())); } jni::Local> LineLayer::getLineMiterLimit(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineMiterLimit())); + return std::move(*convert>>(env, toLineLayer(layer).getLineMiterLimit())); } jni::Local> LineLayer::getLineRoundLimit(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineRoundLimit())); + return std::move(*convert>>(env, toLineLayer(layer).getLineRoundLimit())); } jni::Local> LineLayer::getLineOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineOpacity())); + return std::move(*convert>>(env, toLineLayer(layer).getLineOpacity())); } jni::Local> LineLayer::getLineOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->LineLayer::getLineOpacityTransition(); + mbgl::style::TransitionOptions options = toLineLayer(layer).getLineOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -70,17 +74,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->LineLayer::setLineOpacityTransition(options); + toLineLayer(layer).setLineOpacityTransition(options); } jni::Local> LineLayer::getLineColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineColor())); + return std::move(*convert>>(env, toLineLayer(layer).getLineColor())); } jni::Local> LineLayer::getLineColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->LineLayer::getLineColorTransition(); + mbgl::style::TransitionOptions options = toLineLayer(layer).getLineColorTransition(); return std::move(*convert>>(env, options)); } @@ -88,17 +92,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->LineLayer::setLineColorTransition(options); + toLineLayer(layer).setLineColorTransition(options); } jni::Local> LineLayer::getLineTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineTranslate())); + return std::move(*convert>>(env, toLineLayer(layer).getLineTranslate())); } jni::Local> LineLayer::getLineTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->LineLayer::getLineTranslateTransition(); + mbgl::style::TransitionOptions options = toLineLayer(layer).getLineTranslateTransition(); return std::move(*convert>>(env, options)); } @@ -106,22 +110,22 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->LineLayer::setLineTranslateTransition(options); + toLineLayer(layer).setLineTranslateTransition(options); } jni::Local> LineLayer::getLineTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineTranslateAnchor())); + return std::move(*convert>>(env, toLineLayer(layer).getLineTranslateAnchor())); } jni::Local> LineLayer::getLineWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineWidth())); + return std::move(*convert>>(env, toLineLayer(layer).getLineWidth())); } jni::Local> LineLayer::getLineWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->LineLayer::getLineWidthTransition(); + mbgl::style::TransitionOptions options = toLineLayer(layer).getLineWidthTransition(); return std::move(*convert>>(env, options)); } @@ -129,17 +133,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->LineLayer::setLineWidthTransition(options); + toLineLayer(layer).setLineWidthTransition(options); } jni::Local> LineLayer::getLineGapWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineGapWidth())); + return std::move(*convert>>(env, toLineLayer(layer).getLineGapWidth())); } jni::Local> LineLayer::getLineGapWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->LineLayer::getLineGapWidthTransition(); + mbgl::style::TransitionOptions options = toLineLayer(layer).getLineGapWidthTransition(); return std::move(*convert>>(env, options)); } @@ -147,17 +151,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->LineLayer::setLineGapWidthTransition(options); + toLineLayer(layer).setLineGapWidthTransition(options); } jni::Local> LineLayer::getLineOffset(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineOffset())); + return std::move(*convert>>(env, toLineLayer(layer).getLineOffset())); } jni::Local> LineLayer::getLineOffsetTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->LineLayer::getLineOffsetTransition(); + mbgl::style::TransitionOptions options = toLineLayer(layer).getLineOffsetTransition(); return std::move(*convert>>(env, options)); } @@ -165,17 +169,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->LineLayer::setLineOffsetTransition(options); + toLineLayer(layer).setLineOffsetTransition(options); } jni::Local> LineLayer::getLineBlur(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineBlur())); + return std::move(*convert>>(env, toLineLayer(layer).getLineBlur())); } jni::Local> LineLayer::getLineBlurTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->LineLayer::getLineBlurTransition(); + mbgl::style::TransitionOptions options = toLineLayer(layer).getLineBlurTransition(); return std::move(*convert>>(env, options)); } @@ -183,17 +187,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->LineLayer::setLineBlurTransition(options); + toLineLayer(layer).setLineBlurTransition(options); } jni::Local> LineLayer::getLineDasharray(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineDasharray())); + return std::move(*convert>>(env, toLineLayer(layer).getLineDasharray())); } jni::Local> LineLayer::getLineDasharrayTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->LineLayer::getLineDasharrayTransition(); + mbgl::style::TransitionOptions options = toLineLayer(layer).getLineDasharrayTransition(); return std::move(*convert>>(env, options)); } @@ -201,17 +205,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->LineLayer::setLineDasharrayTransition(options); + toLineLayer(layer).setLineDasharrayTransition(options); } jni::Local> LineLayer::getLinePattern(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLinePattern())); + return std::move(*convert>>(env, toLineLayer(layer).getLinePattern())); } jni::Local> LineLayer::getLinePatternTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->LineLayer::getLinePatternTransition(); + mbgl::style::TransitionOptions options = toLineLayer(layer).getLinePatternTransition(); return std::move(*convert>>(env, options)); } @@ -219,12 +223,12 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->LineLayer::setLinePatternTransition(options); + toLineLayer(layer).setLinePatternTransition(options); } jni::Local> LineLayer::getLineGradient(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->LineLayer::getLineGradient())); + return std::move(*convert>>(env, toLineLayer(layer).getLineGradient())); } diff --git a/platform/android/src/style/layers/raster_layer.cpp b/platform/android/src/style/layers/raster_layer.cpp index 5a3579bc37..5acbb8fe89 100644 --- a/platform/android/src/style/layers/raster_layer.cpp +++ b/platform/android/src/style/layers/raster_layer.cpp @@ -10,6 +10,10 @@ namespace mbgl { namespace android { + inline mbgl::style::RasterLayer& toRasterLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -37,12 +41,12 @@ namespace android { jni::Local> RasterLayer::getRasterOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->RasterLayer::getRasterOpacity())); + return std::move(*convert>>(env, toRasterLayer(layer).getRasterOpacity())); } jni::Local> RasterLayer::getRasterOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->RasterLayer::getRasterOpacityTransition(); + mbgl::style::TransitionOptions options = toRasterLayer(layer).getRasterOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -50,17 +54,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->RasterLayer::setRasterOpacityTransition(options); + toRasterLayer(layer).setRasterOpacityTransition(options); } jni::Local> RasterLayer::getRasterHueRotate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->RasterLayer::getRasterHueRotate())); + return std::move(*convert>>(env, toRasterLayer(layer).getRasterHueRotate())); } jni::Local> RasterLayer::getRasterHueRotateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->RasterLayer::getRasterHueRotateTransition(); + mbgl::style::TransitionOptions options = toRasterLayer(layer).getRasterHueRotateTransition(); return std::move(*convert>>(env, options)); } @@ -68,17 +72,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->RasterLayer::setRasterHueRotateTransition(options); + toRasterLayer(layer).setRasterHueRotateTransition(options); } jni::Local> RasterLayer::getRasterBrightnessMin(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->RasterLayer::getRasterBrightnessMin())); + return std::move(*convert>>(env, toRasterLayer(layer).getRasterBrightnessMin())); } jni::Local> RasterLayer::getRasterBrightnessMinTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->RasterLayer::getRasterBrightnessMinTransition(); + mbgl::style::TransitionOptions options = toRasterLayer(layer).getRasterBrightnessMinTransition(); return std::move(*convert>>(env, options)); } @@ -86,17 +90,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->RasterLayer::setRasterBrightnessMinTransition(options); + toRasterLayer(layer).setRasterBrightnessMinTransition(options); } jni::Local> RasterLayer::getRasterBrightnessMax(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->RasterLayer::getRasterBrightnessMax())); + return std::move(*convert>>(env, toRasterLayer(layer).getRasterBrightnessMax())); } jni::Local> RasterLayer::getRasterBrightnessMaxTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->RasterLayer::getRasterBrightnessMaxTransition(); + mbgl::style::TransitionOptions options = toRasterLayer(layer).getRasterBrightnessMaxTransition(); return std::move(*convert>>(env, options)); } @@ -104,17 +108,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->RasterLayer::setRasterBrightnessMaxTransition(options); + toRasterLayer(layer).setRasterBrightnessMaxTransition(options); } jni::Local> RasterLayer::getRasterSaturation(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->RasterLayer::getRasterSaturation())); + return std::move(*convert>>(env, toRasterLayer(layer).getRasterSaturation())); } jni::Local> RasterLayer::getRasterSaturationTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->RasterLayer::getRasterSaturationTransition(); + mbgl::style::TransitionOptions options = toRasterLayer(layer).getRasterSaturationTransition(); return std::move(*convert>>(env, options)); } @@ -122,17 +126,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->RasterLayer::setRasterSaturationTransition(options); + toRasterLayer(layer).setRasterSaturationTransition(options); } jni::Local> RasterLayer::getRasterContrast(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->RasterLayer::getRasterContrast())); + return std::move(*convert>>(env, toRasterLayer(layer).getRasterContrast())); } jni::Local> RasterLayer::getRasterContrastTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->RasterLayer::getRasterContrastTransition(); + mbgl::style::TransitionOptions options = toRasterLayer(layer).getRasterContrastTransition(); return std::move(*convert>>(env, options)); } @@ -140,17 +144,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->RasterLayer::setRasterContrastTransition(options); + toRasterLayer(layer).setRasterContrastTransition(options); } jni::Local> RasterLayer::getRasterResampling(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->RasterLayer::getRasterResampling())); + return std::move(*convert>>(env, toRasterLayer(layer).getRasterResampling())); } jni::Local> RasterLayer::getRasterFadeDuration(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->RasterLayer::getRasterFadeDuration())); + return std::move(*convert>>(env, toRasterLayer(layer).getRasterFadeDuration())); } diff --git a/platform/android/src/style/layers/symbol_layer.cpp b/platform/android/src/style/layers/symbol_layer.cpp index f1c77c61a9..27896208a7 100644 --- a/platform/android/src/style/layers/symbol_layer.cpp +++ b/platform/android/src/style/layers/symbol_layer.cpp @@ -10,6 +10,10 @@ namespace mbgl { namespace android { + inline mbgl::style::SymbolLayer& toSymbolLayer(mbgl::style::Layer& layer) { + return static_cast(layer); + } + /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ @@ -37,197 +41,197 @@ namespace android { jni::Local> SymbolLayer::getSymbolPlacement(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getSymbolPlacement())); + return std::move(*convert>>(env, toSymbolLayer(layer).getSymbolPlacement())); } jni::Local> SymbolLayer::getSymbolSpacing(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getSymbolSpacing())); + return std::move(*convert>>(env, toSymbolLayer(layer).getSymbolSpacing())); } jni::Local> SymbolLayer::getSymbolAvoidEdges(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getSymbolAvoidEdges())); + return std::move(*convert>>(env, toSymbolLayer(layer).getSymbolAvoidEdges())); } jni::Local> SymbolLayer::getSymbolZOrder(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getSymbolZOrder())); + return std::move(*convert>>(env, toSymbolLayer(layer).getSymbolZOrder())); } jni::Local> SymbolLayer::getIconAllowOverlap(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconAllowOverlap())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconAllowOverlap())); } jni::Local> SymbolLayer::getIconIgnorePlacement(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconIgnorePlacement())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconIgnorePlacement())); } jni::Local> SymbolLayer::getIconOptional(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconOptional())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconOptional())); } jni::Local> SymbolLayer::getIconRotationAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconRotationAlignment())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconRotationAlignment())); } jni::Local> SymbolLayer::getIconSize(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconSize())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconSize())); } jni::Local> SymbolLayer::getIconTextFit(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconTextFit())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconTextFit())); } jni::Local> SymbolLayer::getIconTextFitPadding(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconTextFitPadding())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconTextFitPadding())); } jni::Local> SymbolLayer::getIconImage(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconImage())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconImage())); } jni::Local> SymbolLayer::getIconRotate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconRotate())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconRotate())); } jni::Local> SymbolLayer::getIconPadding(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconPadding())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconPadding())); } jni::Local> SymbolLayer::getIconKeepUpright(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconKeepUpright())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconKeepUpright())); } jni::Local> SymbolLayer::getIconOffset(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconOffset())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconOffset())); } jni::Local> SymbolLayer::getIconAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconAnchor())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconAnchor())); } jni::Local> SymbolLayer::getIconPitchAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconPitchAlignment())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconPitchAlignment())); } jni::Local> SymbolLayer::getTextPitchAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextPitchAlignment())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextPitchAlignment())); } jni::Local> SymbolLayer::getTextRotationAlignment(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextRotationAlignment())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextRotationAlignment())); } jni::Local> SymbolLayer::getTextField(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextField())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextField())); } jni::Local> SymbolLayer::getTextFont(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextFont())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextFont())); } jni::Local> SymbolLayer::getTextSize(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextSize())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextSize())); } jni::Local> SymbolLayer::getTextMaxWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextMaxWidth())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextMaxWidth())); } jni::Local> SymbolLayer::getTextLineHeight(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextLineHeight())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextLineHeight())); } jni::Local> SymbolLayer::getTextLetterSpacing(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextLetterSpacing())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextLetterSpacing())); } jni::Local> SymbolLayer::getTextJustify(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextJustify())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextJustify())); } jni::Local> SymbolLayer::getTextAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextAnchor())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextAnchor())); } jni::Local> SymbolLayer::getTextMaxAngle(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextMaxAngle())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextMaxAngle())); } jni::Local> SymbolLayer::getTextRotate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextRotate())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextRotate())); } jni::Local> SymbolLayer::getTextPadding(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextPadding())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextPadding())); } jni::Local> SymbolLayer::getTextKeepUpright(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextKeepUpright())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextKeepUpright())); } jni::Local> SymbolLayer::getTextTransform(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextTransform())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextTransform())); } jni::Local> SymbolLayer::getTextOffset(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextOffset())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextOffset())); } jni::Local> SymbolLayer::getTextAllowOverlap(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextAllowOverlap())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextAllowOverlap())); } jni::Local> SymbolLayer::getTextIgnorePlacement(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextIgnorePlacement())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextIgnorePlacement())); } jni::Local> SymbolLayer::getTextOptional(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextOptional())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextOptional())); } jni::Local> SymbolLayer::getIconOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconOpacity())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconOpacity())); } jni::Local> SymbolLayer::getIconOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getIconOpacityTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getIconOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -235,17 +239,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setIconOpacityTransition(options); + toSymbolLayer(layer).setIconOpacityTransition(options); } jni::Local> SymbolLayer::getIconColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconColor())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconColor())); } jni::Local> SymbolLayer::getIconColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getIconColorTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getIconColorTransition(); return std::move(*convert>>(env, options)); } @@ -253,17 +257,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setIconColorTransition(options); + toSymbolLayer(layer).setIconColorTransition(options); } jni::Local> SymbolLayer::getIconHaloColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconHaloColor())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconHaloColor())); } jni::Local> SymbolLayer::getIconHaloColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getIconHaloColorTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getIconHaloColorTransition(); return std::move(*convert>>(env, options)); } @@ -271,17 +275,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setIconHaloColorTransition(options); + toSymbolLayer(layer).setIconHaloColorTransition(options); } jni::Local> SymbolLayer::getIconHaloWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconHaloWidth())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconHaloWidth())); } jni::Local> SymbolLayer::getIconHaloWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getIconHaloWidthTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getIconHaloWidthTransition(); return std::move(*convert>>(env, options)); } @@ -289,17 +293,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setIconHaloWidthTransition(options); + toSymbolLayer(layer).setIconHaloWidthTransition(options); } jni::Local> SymbolLayer::getIconHaloBlur(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconHaloBlur())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconHaloBlur())); } jni::Local> SymbolLayer::getIconHaloBlurTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getIconHaloBlurTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getIconHaloBlurTransition(); return std::move(*convert>>(env, options)); } @@ -307,17 +311,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setIconHaloBlurTransition(options); + toSymbolLayer(layer).setIconHaloBlurTransition(options); } jni::Local> SymbolLayer::getIconTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconTranslate())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconTranslate())); } jni::Local> SymbolLayer::getIconTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getIconTranslateTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getIconTranslateTransition(); return std::move(*convert>>(env, options)); } @@ -325,22 +329,22 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setIconTranslateTransition(options); + toSymbolLayer(layer).setIconTranslateTransition(options); } jni::Local> SymbolLayer::getIconTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getIconTranslateAnchor())); + return std::move(*convert>>(env, toSymbolLayer(layer).getIconTranslateAnchor())); } jni::Local> SymbolLayer::getTextOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextOpacity())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextOpacity())); } jni::Local> SymbolLayer::getTextOpacityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getTextOpacityTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getTextOpacityTransition(); return std::move(*convert>>(env, options)); } @@ -348,17 +352,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setTextOpacityTransition(options); + toSymbolLayer(layer).setTextOpacityTransition(options); } jni::Local> SymbolLayer::getTextColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextColor())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextColor())); } jni::Local> SymbolLayer::getTextColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getTextColorTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getTextColorTransition(); return std::move(*convert>>(env, options)); } @@ -366,17 +370,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setTextColorTransition(options); + toSymbolLayer(layer).setTextColorTransition(options); } jni::Local> SymbolLayer::getTextHaloColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextHaloColor())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextHaloColor())); } jni::Local> SymbolLayer::getTextHaloColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getTextHaloColorTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getTextHaloColorTransition(); return std::move(*convert>>(env, options)); } @@ -384,17 +388,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setTextHaloColorTransition(options); + toSymbolLayer(layer).setTextHaloColorTransition(options); } jni::Local> SymbolLayer::getTextHaloWidth(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextHaloWidth())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextHaloWidth())); } jni::Local> SymbolLayer::getTextHaloWidthTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getTextHaloWidthTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getTextHaloWidthTransition(); return std::move(*convert>>(env, options)); } @@ -402,17 +406,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setTextHaloWidthTransition(options); + toSymbolLayer(layer).setTextHaloWidthTransition(options); } jni::Local> SymbolLayer::getTextHaloBlur(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextHaloBlur())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextHaloBlur())); } jni::Local> SymbolLayer::getTextHaloBlurTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getTextHaloBlurTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getTextHaloBlurTransition(); return std::move(*convert>>(env, options)); } @@ -420,17 +424,17 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setTextHaloBlurTransition(options); + toSymbolLayer(layer).setTextHaloBlurTransition(options); } jni::Local> SymbolLayer::getTextTranslate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextTranslate())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextTranslate())); } jni::Local> SymbolLayer::getTextTranslateTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - mbgl::style::TransitionOptions options = layer.as()->SymbolLayer::getTextTranslateTransition(); + mbgl::style::TransitionOptions options = toSymbolLayer(layer).getTextTranslateTransition(); return std::move(*convert>>(env, options)); } @@ -438,12 +442,12 @@ namespace android { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); - layer.as()->SymbolLayer::setTextTranslateTransition(options); + toSymbolLayer(layer).setTextTranslateTransition(options); } jni::Local> SymbolLayer::getTextTranslateAnchor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; - return std::move(*convert>>(env, layer.as()->SymbolLayer::getTextTranslateAnchor())); + return std::move(*convert>>(env, toSymbolLayer(layer).getTextTranslateAnchor())); } diff --git a/platform/darwin/src/MGLStyle.mm b/platform/darwin/src/MGLStyle.mm index 88499cf9bb..7d79a06fb1 100644 --- a/platform/darwin/src/MGLStyle.mm +++ b/platform/darwin/src/MGLStyle.mm @@ -350,30 +350,30 @@ static_assert(6 == mbgl::util::default_styles::numOrderedStyles, if (MGLStyleLayer *layer = rawLayer->peer.has_value() ? rawLayer->peer.get().layer : nil) { return layer; } - - if (auto fillLayer = rawLayer->as()) { - return [[MGLFillStyleLayer alloc] initWithRawLayer:fillLayer]; - } else if (auto fillExtrusionLayer = rawLayer->as()) { - return [[MGLFillExtrusionStyleLayer alloc] initWithRawLayer:fillExtrusionLayer]; - } else if (auto lineLayer = rawLayer->as()) { - return [[MGLLineStyleLayer alloc] initWithRawLayer:lineLayer]; - } else if (auto symbolLayer = rawLayer->as()) { - return [[MGLSymbolStyleLayer alloc] initWithRawLayer:symbolLayer]; - } else if (auto rasterLayer = rawLayer->as()) { - return [[MGLRasterStyleLayer alloc] initWithRawLayer:rasterLayer]; - } else if (auto heatmapLayer = rawLayer->as()) { - return [[MGLHeatmapStyleLayer alloc] initWithRawLayer:heatmapLayer]; - } else if (auto hillshadeLayer = rawLayer->as()) { - return [[MGLHillshadeStyleLayer alloc] initWithRawLayer:hillshadeLayer]; - } else if (auto circleLayer = rawLayer->as()) { - return [[MGLCircleStyleLayer alloc] initWithRawLayer:circleLayer]; - } else if (auto backgroundLayer = rawLayer->as()) { - return [[MGLBackgroundStyleLayer alloc] initWithRawLayer:backgroundLayer]; - } else if (auto customLayer = rawLayer->as()) { - return [[MGLOpenGLStyleLayer alloc] initWithRawLayer:customLayer]; - } else { - NSAssert(NO, @"Unrecognized layer type"); - return nil; + switch (rawLayer->getType()) { + case mbgl::style::LayerType::Fill: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + case mbgl::style::LayerType::FillExtrusion: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + case mbgl::style::LayerType::Line: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + case mbgl::style::LayerType::Symbol: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + case mbgl::style::LayerType::Raster: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + case mbgl::style::LayerType::Heatmap: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + case mbgl::style::LayerType::Hillshade: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + case mbgl::style::LayerType::Circle: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + case mbgl::style::LayerType::Background: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + case mbgl::style::LayerType::Custom: + return [[MGLFillStyleLayer alloc] initWithRawLayer:static_cast(rawLayer)]; + default: + NSAssert(NO, @"Unrecognized layer type"); + return nil;; } } diff --git a/platform/darwin/test/MGLBackgroundStyleLayerTests.mm b/platform/darwin/test/MGLBackgroundStyleLayerTests.mm index afd066df82..d76cd8cd6d 100644 --- a/platform/darwin/test/MGLBackgroundStyleLayerTests.mm +++ b/platform/darwin/test/MGLBackgroundStyleLayerTests.mm @@ -22,8 +22,8 @@ - (void)testProperties { MGLBackgroundStyleLayer *layer = [[MGLBackgroundStyleLayer alloc] initWithIdentifier:@"layerID"]; XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->is()); - auto rawLayer = layer.rawLayer->as(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::Background); + auto rawLayer = static_cast(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/platform/darwin/test/MGLCircleStyleLayerTests.mm b/platform/darwin/test/MGLCircleStyleLayerTests.mm index 853ec67968..213416109c 100644 --- a/platform/darwin/test/MGLCircleStyleLayerTests.mm +++ b/platform/darwin/test/MGLCircleStyleLayerTests.mm @@ -43,8 +43,8 @@ MGLCircleStyleLayer *layer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->is()); - auto rawLayer = layer.rawLayer->as(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::Circle); + auto rawLayer = static_cast(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm b/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm index eddf82eec8..7c4e147026 100644 --- a/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm +++ b/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm @@ -43,8 +43,8 @@ MGLFillExtrusionStyleLayer *layer = [[MGLFillExtrusionStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->is()); - auto rawLayer = layer.rawLayer->as(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::FillExtrusion); + auto rawLayer = static_cast(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/platform/darwin/test/MGLFillStyleLayerTests.mm b/platform/darwin/test/MGLFillStyleLayerTests.mm index bae8779309..b8c39918c5 100644 --- a/platform/darwin/test/MGLFillStyleLayerTests.mm +++ b/platform/darwin/test/MGLFillStyleLayerTests.mm @@ -43,8 +43,8 @@ MGLFillStyleLayer *layer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->is()); - auto rawLayer = layer.rawLayer->as(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::Fill); + auto rawLayer = static_cast(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/platform/darwin/test/MGLHeatmapColorTests.mm b/platform/darwin/test/MGLHeatmapColorTests.mm index bed777ae05..19f9b4e86e 100644 --- a/platform/darwin/test/MGLHeatmapColorTests.mm +++ b/platform/darwin/test/MGLHeatmapColorTests.mm @@ -15,7 +15,7 @@ MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; MGLHeatmapStyleLayer *layer = [[MGLHeatmapStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - auto rawLayer = layer.rawLayer->as(); + auto rawLayer = static_cast(layer.rawLayer); XCTAssertTrue(rawLayer->getHeatmapColor().isUndefined(), @"heatmap-color should be unset initially."); diff --git a/platform/darwin/test/MGLHeatmapStyleLayerTests.mm b/platform/darwin/test/MGLHeatmapStyleLayerTests.mm index 76a2b0c87e..bde8a5b1c8 100644 --- a/platform/darwin/test/MGLHeatmapStyleLayerTests.mm +++ b/platform/darwin/test/MGLHeatmapStyleLayerTests.mm @@ -43,8 +43,8 @@ MGLHeatmapStyleLayer *layer = [[MGLHeatmapStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->is()); - auto rawLayer = layer.rawLayer->as(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::Heatmap); + auto rawLayer = static_cast(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/platform/darwin/test/MGLHillshadeStyleLayerTests.mm b/platform/darwin/test/MGLHillshadeStyleLayerTests.mm index 2e8795759f..5c8a45beab 100644 --- a/platform/darwin/test/MGLHillshadeStyleLayerTests.mm +++ b/platform/darwin/test/MGLHillshadeStyleLayerTests.mm @@ -25,8 +25,8 @@ MGLHillshadeStyleLayer *layer = [[MGLHillshadeStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->is()); - auto rawLayer = layer.rawLayer->as(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::Hillshade); + auto rawLayer = static_cast(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/platform/darwin/test/MGLLineStyleLayerTests.mm b/platform/darwin/test/MGLLineStyleLayerTests.mm index 7289debb94..c8868635ef 100644 --- a/platform/darwin/test/MGLLineStyleLayerTests.mm +++ b/platform/darwin/test/MGLLineStyleLayerTests.mm @@ -43,8 +43,8 @@ MGLLineStyleLayer *layer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->is()); - auto rawLayer = layer.rawLayer->as(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::Line); + auto rawLayer = static_cast(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/platform/darwin/test/MGLRasterStyleLayerTests.mm b/platform/darwin/test/MGLRasterStyleLayerTests.mm index 9325bb48f5..f0ce055b3a 100644 --- a/platform/darwin/test/MGLRasterStyleLayerTests.mm +++ b/platform/darwin/test/MGLRasterStyleLayerTests.mm @@ -25,8 +25,8 @@ MGLRasterStyleLayer *layer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->is()); - auto rawLayer = layer.rawLayer->as(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::Raster); + auto rawLayer = static_cast(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/platform/darwin/test/MGLStyleLayerTests.mm.ejs b/platform/darwin/test/MGLStyleLayerTests.mm.ejs index c97813eca2..68d61072f8 100644 --- a/platform/darwin/test/MGLStyleLayerTests.mm.ejs +++ b/platform/darwin/test/MGLStyleLayerTests.mm.ejs @@ -54,8 +54,8 @@ MGL<%- camelize(type) %>StyleLayer *layer = [[MGL<%- camelize(type) %>StyleLayer alloc] initWithIdentifier:@"layerID" source:source]; <% } -%> XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->isLayer>()); - auto rawLayer = layer.rawLayer->asLayer>(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::<%- camelize(type) %>); + auto rawLayer = static_castLayer*>(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/platform/darwin/test/MGLSymbolStyleLayerTests.mm b/platform/darwin/test/MGLSymbolStyleLayerTests.mm index 42430940cd..daf63355e6 100644 --- a/platform/darwin/test/MGLSymbolStyleLayerTests.mm +++ b/platform/darwin/test/MGLSymbolStyleLayerTests.mm @@ -43,8 +43,8 @@ MGLSymbolStyleLayer *layer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertTrue(layer.rawLayer->is()); - auto rawLayer = layer.rawLayer->as(); + XCTAssertEqual(layer.rawLayer->getType(), mbgl::style::LayerType::Symbol); + auto rawLayer = static_cast(layer.rawLayer); MGLTransition transitionTest = MGLTransitionMake(5, 4); diff --git a/src/mbgl/annotation/fill_annotation_impl.cpp b/src/mbgl/annotation/fill_annotation_impl.cpp index 9d3e12e004..7ac1932f32 100644 --- a/src/mbgl/annotation/fill_annotation_impl.cpp +++ b/src/mbgl/annotation/fill_annotation_impl.cpp @@ -21,7 +21,8 @@ void FillAnnotationImpl::updateStyle(Style::Impl& style) const { layer = style.addLayer(std::move(newLayer), AnnotationManager::PointLayerID); } - auto* fillLayer = layer->as(); + assert(layer->getType() == LayerType::Fill); + auto* fillLayer = static_cast(layer); fillLayer->setFillOpacity(annotation.opacity); fillLayer->setFillColor(annotation.color); fillLayer->setFillOutlineColor(annotation.outlineColor); diff --git a/src/mbgl/annotation/line_annotation_impl.cpp b/src/mbgl/annotation/line_annotation_impl.cpp index 74fec49af8..b4dc10049f 100644 --- a/src/mbgl/annotation/line_annotation_impl.cpp +++ b/src/mbgl/annotation/line_annotation_impl.cpp @@ -22,7 +22,8 @@ void LineAnnotationImpl::updateStyle(Style::Impl& style) const { layer = style.addLayer(std::move(newLayer), AnnotationManager::PointLayerID); } - auto* lineLayer = layer->as(); + assert(layer->getType() == LayerType::Line); + LineLayer* lineLayer = static_cast(layer); lineLayer->setLineOpacity(annotation.opacity); lineLayer->setLineWidth(annotation.width); lineLayer->setLineColor(annotation.color); diff --git a/src/mbgl/style/layers/custom_layer.cpp b/src/mbgl/style/layers/custom_layer.cpp index a31586f708..90b97104a0 100644 --- a/src/mbgl/style/layers/custom_layer.cpp +++ b/src/mbgl/style/layers/custom_layer.cpp @@ -39,10 +39,5 @@ Mutable CustomLayer::mutableBaseImpl() const { return staticMutableCast(mutableImpl()); } -template <> -bool Layer::is() const { - return getType() == LayerType::Custom; -} - } // namespace style } // namespace mbgl diff --git a/test/gl/context.test.cpp b/test/gl/context.test.cpp index 179ce5de53..2561c84591 100644 --- a/test/gl/context.test.cpp +++ b/test/gl/context.test.cpp @@ -94,7 +94,9 @@ TEST(GLContextMode, Shared) { map.setLatLngZoom({ 37.8, -122.5 }, 10); // Set transparent background layer. - map.getStyle().getLayer("background")->as()->setBackgroundColor( { { 1.0f, 0.0f, 0.0f, 0.5f } } ); + auto layer = map.getStyle().getLayer("background"); + ASSERT_EQ(LayerType::Background, layer->getType()); + static_cast(layer)->setBackgroundColor( { { 1.0f, 0.0f, 0.0f, 0.5f } } ); { // Custom rendering outside of GL Native render loop. diff --git a/test/renderer/group_by_layout.test.cpp b/test/renderer/group_by_layout.test.cpp index 8d0b432481..a72ec43cb9 100644 --- a/test/renderer/group_by_layout.test.cpp +++ b/test/renderer/group_by_layout.test.cpp @@ -40,18 +40,20 @@ TEST(GroupByLayout, UnrelatedType) { TEST(GroupByLayout, UnrelatedFilter) { using namespace mbgl::style::expression::dsl; std::vector> layers; - layers.push_back(std::make_unique("a", "source")); + auto lineLayer = std::make_unique("a", "source"); + lineLayer->setFilter(Filter(get("property"))); + layers.push_back(std::move(lineLayer)); layers.push_back(std::make_unique("b", "source")); - layers[0]->as()->setFilter(Filter(get("property"))); auto result = groupByLayout(toRenderLayers(layers)); ASSERT_EQ(2u, result.size()); } TEST(GroupByLayout, UnrelatedLayout) { std::vector> layers; - layers.push_back(std::make_unique("a", "source")); + auto lineLayer = std::make_unique("a", "source"); + lineLayer->setLineCap(LineCapType::Square); + layers.push_back(std::move(lineLayer)); layers.push_back(std::make_unique("b", "source")); - layers[0]->as()->setLineCap(LineCapType::Square); auto result = groupByLayout(toRenderLayers(layers)); ASSERT_EQ(2u, result.size()); } diff --git a/test/style/conversion/layer.test.cpp b/test/style/conversion/layer.test.cpp index 33cd329999..18754a09fb 100644 --- a/test/style/conversion/layer.test.cpp +++ b/test/style/conversion/layer.test.cpp @@ -25,9 +25,9 @@ TEST(StyleConversion, LayerTransition) { } } })JSON"); - - ASSERT_EQ(400ms, *layer->as()->impl().paint + ASSERT_EQ(LayerType::Background, layer->getType()); + ASSERT_EQ(400ms, *static_cast(layer.get())->impl().paint .get().options.duration); - ASSERT_EQ(500ms, *layer->as()->impl().paint + ASSERT_EQ(500ms, *static_cast(layer.get())->impl().paint .get().options.delay); } diff --git a/test/style/style_layer.test.cpp b/test/style/style_layer.test.cpp index 61516a2de9..5ea16b7422 100644 --- a/test/style/style_layer.test.cpp +++ b/test/style/style_layer.test.cpp @@ -54,7 +54,7 @@ const auto duration = 1.0f; TEST(Layer, BackgroundProperties) { auto layer = std::make_unique("background"); - EXPECT_TRUE(layer->is()); + ASSERT_EQ(LayerType::Background, layer->getType()); // Paint properties @@ -70,7 +70,7 @@ TEST(Layer, BackgroundProperties) { TEST(Layer, CircleProperties) { auto layer = std::make_unique("circle", "source"); - EXPECT_TRUE(layer->is()); + ASSERT_EQ(LayerType::Circle, layer->getType()); // Paint properties @@ -95,7 +95,7 @@ TEST(Layer, CircleProperties) { TEST(Layer, FillProperties) { auto layer = std::make_unique("fill", "source"); - EXPECT_TRUE(layer->is()); + ASSERT_EQ(LayerType::Fill, layer->getType()); // Paint properties @@ -123,7 +123,7 @@ TEST(Layer, FillProperties) { TEST(Layer, LineProperties) { auto layer = std::make_unique("line", "source"); - EXPECT_TRUE(layer->is()); + ASSERT_EQ(LayerType::Line, layer->getType()); // Layout properties @@ -174,7 +174,7 @@ TEST(Layer, LineProperties) { TEST(Layer, RasterProperties) { auto layer = std::make_unique("raster", "source"); - EXPECT_TRUE(layer->is()); + ASSERT_EQ(LayerType::Raster, layer->getType()); // Paint properties -- cgit v1.2.1