diff options
Diffstat (limited to 'src/mbgl/style/expression/coalesce.cpp')
-rw-r--r-- | src/mbgl/style/expression/coalesce.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mbgl/style/expression/coalesce.cpp b/src/mbgl/style/expression/coalesce.cpp index 6b43e68ac6..ab30e7a8df 100644 --- a/src/mbgl/style/expression/coalesce.cpp +++ b/src/mbgl/style/expression/coalesce.cpp @@ -8,8 +8,22 @@ namespace expression { EvaluationResult Coalesce::evaluate(const EvaluationContext& params) const { EvaluationResult result = Null; + std::size_t argsCount = args.size(); + optional<Image> requestedImage; for (const auto& arg : args) { + --argsCount; result = arg->evaluate(params); + // We need to keep track of the first requested image in a coalesce statement. + // If coalesce can't find a valid image, we return the first requested image. + if (getType() == type::Image && result) { + const auto image = fromExpressionValue<Image>(*result); + if (image && !image->isAvailable()) { + if (!requestedImage) requestedImage = Image(image->id()); + if (!argsCount) result = *requestedImage; + continue; + } + } + if (!result || *result != Null) break; } return result; |