diff options
Diffstat (limited to 'src/mbgl/style/layout_property.hpp')
-rw-r--r-- | src/mbgl/style/layout_property.hpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/mbgl/style/layout_property.hpp b/src/mbgl/style/layout_property.hpp new file mode 100644 index 0000000000..5f24e5b133 --- /dev/null +++ b/src/mbgl/style/layout_property.hpp @@ -0,0 +1,38 @@ +#ifndef MBGL_LAYOUT_PROPERTY +#define MBGL_LAYOUT_PROPERTY + +#include <mbgl/style/property_parsing.hpp> +#include <mbgl/style/function.hpp> + +#include <rapidjson/document.h> + +namespace mbgl { + +using JSVal = rapidjson::Value; + +template <typename T> +class LayoutProperty { +public: + LayoutProperty(T v) : value(v) {} + + void parse(const char * name, const JSVal& layout) { + if (layout.HasMember(name)) { + parsedValue = detail::parseProperty<Function<T>>(name, layout[name]); + } + } + + void calculate(const StyleCalculationParameters& parameters) { + if (parsedValue) { + value = (*parsedValue).evaluate(parameters); + } + } + + operator T() const { return value; } + + mapbox::util::optional<Function<T>> parsedValue; + T value; +}; + +} + +#endif |