summaryrefslogtreecommitdiff
path: root/src/mbgl/style/expression/util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/expression/util.cpp')
-rw-r--r--src/mbgl/style/expression/util.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/mbgl/style/expression/util.cpp b/src/mbgl/style/expression/util.cpp
new file mode 100644
index 0000000000..ee680dab08
--- /dev/null
+++ b/src/mbgl/style/expression/util.cpp
@@ -0,0 +1,37 @@
+#include <mbgl/style/expression/util.hpp>
+#include <mbgl/style/expression/value.hpp>
+
+namespace mbgl {
+namespace style {
+namespace expression {
+
+std::string stringifyColor(double r, double g, double b, double a) {
+ return stringify(r) + ", " +
+ stringify(g) + ", " +
+ stringify(b) + ", " +
+ stringify(a);
+}
+
+Result<Color> rgba(double r, double g, double b, double a) {
+ if (
+ r < 0 || r > 255 ||
+ g < 0 || g > 255 ||
+ b < 0 || b > 255
+ ) {
+ return EvaluationError {
+ "Invalid rgba value [" + stringifyColor(r, g, b, a) +
+ "]: 'r', 'g', and 'b' must be between 0 and 255."
+ };
+ }
+ if (a < 0 || a > 1) {
+ return EvaluationError {
+ "Invalid rgba value [" + stringifyColor(r, g, b, a) +
+ "]: 'a' must be between 0 and 1."
+ };
+ }
+ return Color(r / 255 * a, g / 255 * a, b / 255 * a, a);
+}
+
+} // namespace expression
+} // namespace style
+} // namespace mbgl