summaryrefslogtreecommitdiff
path: root/src/mbgl/style/expression/coalesce.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/expression/coalesce.cpp')
-rw-r--r--src/mbgl/style/expression/coalesce.cpp14
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;