diff options
author | Bernhard Liebl <Bernhard.Liebl@gmx.org> | 2018-01-18 22:03:34 +0100 |
---|---|---|
committer | Bernhard Liebl <Bernhard.Liebl@gmx.org> | 2018-01-18 22:13:00 +0100 |
commit | be5517123101fe669ebfc3d3f16a0431ca2804dd (patch) | |
tree | 6539df7c4a91d1629a90ac2442a50f0eb07f3d66 /core/color.cpp | |
parent | d0d511b0f8d9cb4d48c861b2c097fa15876f432c (diff) | |
download | redot-engine-be5517123101fe669ebfc3d3f16a0431ca2804dd.tar.gz |
Add Color.from_hsv()
Diffstat (limited to 'core/color.cpp')
-rw-r--r-- | core/color.cpp | 49 |
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; |