summaryrefslogtreecommitdiffstats
path: root/core/color.cpp
diff options
context:
space:
mode:
authorBernhard Liebl <Bernhard.Liebl@gmx.org>2018-01-18 22:03:34 +0100
committerBernhard Liebl <Bernhard.Liebl@gmx.org>2018-01-18 22:13:00 +0100
commitbe5517123101fe669ebfc3d3f16a0431ca2804dd (patch)
tree6539df7c4a91d1629a90ac2442a50f0eb07f3d66 /core/color.cpp
parentd0d511b0f8d9cb4d48c861b2c097fa15876f432c (diff)
downloadredot-engine-be5517123101fe669ebfc3d3f16a0431ca2804dd.tar.gz
Add Color.from_hsv()
Diffstat (limited to 'core/color.cpp')
-rw-r--r--core/color.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/core/color.cpp b/core/color.cpp
index a0568d26ed..27d8e9b891 100644
--- a/core/color.cpp
+++ b/core/color.cpp
@@ -400,6 +400,55 @@ String Color::to_html(bool p_alpha) const {
return txt;
}
+Color Color::from_hsv(float p_h, float p_s, float p_v, float p_a) {
+
+ const float h_ = p_h / 60.0f;
+ const float c = p_v * p_s;
+ const float x = c * (1.0f - Math::abs(Math::fmod(h_, 2.0f) - 1.0f));
+ float r, g, b;
+
+ switch ((int)h_) {
+ case 0: {
+ r = c;
+ g = x;
+ b = 0;
+ } break;
+ case 1: {
+ r = x;
+ g = c;
+ b = 0;
+ } break;
+ case 2: {
+ r = 0;
+ g = c;
+ b = x;
+ } break;
+ case 3: {
+ r = 0;
+ g = x;
+ b = c;
+ } break;
+ case 4: {
+ r = x;
+ g = 0;
+ b = c;
+ } break;
+ case 5: {
+ r = c;
+ g = 0;
+ b = x;
+ } break;
+ default: {
+ r = 0;
+ g = 0;
+ b = 0;
+ } break;
+ }
+
+ const float m = p_v - c;
+ return Color(m + r, m + g, m + b, p_a);
+}
+
float Color::gray() const {
return (r + g + b) / 3.0;