diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2018-03-22 16:44:12 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-22 16:44:12 -0700 |
commit | 9499a2bda7eed68f8a11cdecce0130b1be2054a4 (patch) | |
tree | bf26cc0af726388039a1d6de12cc3a091a2ec175 /include/mbgl | |
parent | 1d29f82c1b636166053874323ee04ade5b243275 (diff) | |
download | qtlocation-mapboxgl-9499a2bda7eed68f8a11cdecce0130b1be2054a4.tar.gz |
[core] Don't resolve tokens after evaluating a text-field or icon-image expression (#11509)
Diffstat (limited to 'include/mbgl')
-rw-r--r-- | include/mbgl/style/data_driven_property_value.hpp | 9 | ||||
-rw-r--r-- | include/mbgl/style/function/camera_function.hpp | 11 | ||||
-rw-r--r-- | include/mbgl/style/function/composite_function.hpp | 13 | ||||
-rw-r--r-- | include/mbgl/style/function/source_function.hpp | 15 |
4 files changed, 26 insertions, 22 deletions
diff --git a/include/mbgl/style/data_driven_property_value.hpp b/include/mbgl/style/data_driven_property_value.hpp index 5d7c596363..0a1fce29c7 100644 --- a/include/mbgl/style/data_driven_property_value.hpp +++ b/include/mbgl/style/data_driven_property_value.hpp @@ -50,6 +50,15 @@ public: return !value.template is<CameraFunction<T>>() && !value.template is<CompositeFunction<T>>(); } + bool isExpression() const { + return value.match( + [] (const Undefined&) { return false; }, + [] (const T&) { return false; }, + [] (const CameraFunction<T>& fn) { return fn.isExpression; }, + [] (const SourceFunction<T>& fn) { return fn.isExpression; }, + [] (const CompositeFunction<T>& fn) { return fn.isExpression; }); + } + template <class... Ts> auto match(Ts&&... ts) const { return value.match(std::forward<Ts>(ts)...); diff --git a/include/mbgl/style/function/camera_function.hpp b/include/mbgl/style/function/camera_function.hpp index 1da5d2c601..97ba633e44 100644 --- a/include/mbgl/style/function/camera_function.hpp +++ b/include/mbgl/style/function/camera_function.hpp @@ -27,15 +27,16 @@ public: IntervalStops<T>>>; CameraFunction(std::unique_ptr<expression::Expression> expression_) - : expression(std::move(expression_)), + : isExpression(true), + expression(std::move(expression_)), zoomCurve(expression::findZoomCurveChecked(expression.get())) { assert(!expression::isZoomConstant(*expression)); assert(expression::isFeatureConstant(*expression)); } - CameraFunction(Stops stops_) - : stops(std::move(stops_)), + CameraFunction(const Stops& stops) + : isExpression(false), expression(stops.match([&] (const auto& s) { return expression::Convert::toExpression(s); })), @@ -76,12 +77,10 @@ public: } bool useIntegerZoom = false; + bool isExpression; const expression::Expression& getExpression() const { return *expression; } - // retained for compatibility with pre-expression function API - Stops stops; - private: std::shared_ptr<expression::Expression> expression; const variant<const expression::InterpolateBase*, const expression::Step*> zoomCurve; diff --git a/include/mbgl/style/function/composite_function.hpp b/include/mbgl/style/function/composite_function.hpp index f391b101ae..614c345c25 100644 --- a/include/mbgl/style/function/composite_function.hpp +++ b/include/mbgl/style/function/composite_function.hpp @@ -51,16 +51,16 @@ public: CompositeCategoricalStops<T>>>; CompositeFunction(std::unique_ptr<expression::Expression> expression_) - : expression(std::move(expression_)), + : isExpression(true), + expression(std::move(expression_)), zoomCurve(expression::findZoomCurveChecked(expression.get())) { assert(!expression::isZoomConstant(*expression)); assert(!expression::isFeatureConstant(*expression)); } - CompositeFunction(std::string property_, Stops stops_, optional<T> defaultValue_ = {}) - : property(std::move(property_)), - stops(std::move(stops_)), + CompositeFunction(const std::string& property, const Stops& stops, optional<T> defaultValue_ = {}) + : isExpression(false), defaultValue(std::move(defaultValue_)), expression(stops.match([&] (const auto& s) { return expression::Convert::toExpression(property, s); @@ -113,12 +113,11 @@ public: const expression::Expression& getExpression() const { return *expression; } - std::string property; - Stops stops; - optional<T> defaultValue; bool useIntegerZoom = false; + bool isExpression; private: + optional<T> defaultValue; std::shared_ptr<expression::Expression> expression; const variant<const expression::InterpolateBase*, const expression::Step*> zoomCurve; }; diff --git a/include/mbgl/style/function/source_function.hpp b/include/mbgl/style/function/source_function.hpp index d3caa90ee5..5b51d0bf81 100644 --- a/include/mbgl/style/function/source_function.hpp +++ b/include/mbgl/style/function/source_function.hpp @@ -30,15 +30,15 @@ public: IdentityStops<T>>>; SourceFunction(std::unique_ptr<expression::Expression> expression_) - : expression(std::move(expression_)) + : isExpression(true), + expression(std::move(expression_)) { assert(expression::isZoomConstant(*expression)); assert(!expression::isFeatureConstant(*expression)); } - SourceFunction(std::string property_, Stops stops_, optional<T> defaultValue_ = {}) - : property(std::move(property_)), - stops(std::move(stops_)), + SourceFunction(const std::string& property, const Stops& stops, optional<T> defaultValue_ = {}) + : isExpression(false), defaultValue(std::move(defaultValue_)), expression(stops.match([&] (const IdentityStops<T>&) { return expression::Convert::fromIdentityFunction(expression::valueTypeToExpressionType<T>(), property); @@ -67,15 +67,12 @@ public: } bool useIntegerZoom = false; + bool isExpression; const expression::Expression& getExpression() const { return *expression; } - // retained for compatibility with pre-expression function API - std::string property; - Stops stops; - optional<T> defaultValue; - private: + optional<T> defaultValue; std::shared_ptr<expression::Expression> expression; }; |