summaryrefslogtreecommitdiff
path: root/src/mbgl/programs/symbol_program.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/programs/symbol_program.cpp')
-rw-r--r--src/mbgl/programs/symbol_program.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/mbgl/programs/symbol_program.cpp b/src/mbgl/programs/symbol_program.cpp
index 84a7a53f1d..8df3b4ae3c 100644
--- a/src/mbgl/programs/symbol_program.cpp
+++ b/src/mbgl/programs/symbol_program.cpp
@@ -17,14 +17,20 @@ std::unique_ptr<SymbolSizeBinder> SymbolSizeBinder::create(const float tileZoom,
const style::DataDrivenPropertyValue<float>& sizeProperty,
const float defaultValue) {
return sizeProperty.match(
- [&] (const style::CompositeFunction<float>& function) -> std::unique_ptr<SymbolSizeBinder> {
- return std::make_unique<CompositeFunctionSymbolSizeBinder>(tileZoom, function, defaultValue);
- },
- [&] (const style::SourceFunction<float>& function) {
- return std::make_unique<SourceFunctionSymbolSizeBinder>(tileZoom, function, defaultValue);
+ [&] (const Undefined& value) -> std::unique_ptr<SymbolSizeBinder> {
+ return std::make_unique<ConstantSymbolSizeBinder>(tileZoom, value, defaultValue);
},
- [&] (const auto& value) -> std::unique_ptr<SymbolSizeBinder> {
+ [&] (float value) -> std::unique_ptr<SymbolSizeBinder> {
return std::make_unique<ConstantSymbolSizeBinder>(tileZoom, value, defaultValue);
+ },
+ [&] (const style::PropertyExpression<float>& expression) -> std::unique_ptr<SymbolSizeBinder> {
+ if (expression.isFeatureConstant()) {
+ return std::make_unique<ConstantSymbolSizeBinder>(tileZoom, expression, defaultValue);
+ } else if (expression.isZoomConstant()) {
+ return std::make_unique<SourceFunctionSymbolSizeBinder>(tileZoom, expression, defaultValue);
+ } else {
+ return std::make_unique<CompositeFunctionSymbolSizeBinder>(tileZoom, expression, defaultValue);
+ }
}
);
}