| 142 | } |
| 143 | |
| 144 | Color Color::hsva(float h, float s, float v, float a) { |
| 145 | h = clamp(h, 0.0f, 1.0f); |
| 146 | s = clamp(s, 0.0f, 1.0f); |
| 147 | v = clamp(v, 0.0f, 1.0f); |
| 148 | a = clamp(a, 0.0f, 1.0f); |
| 149 | |
| 150 | Color retColor; |
| 151 | if (s == 0.0f) { |
| 152 | retColor.setRedF(v); |
| 153 | retColor.setGreenF(v); |
| 154 | retColor.setBlueF(v); |
| 155 | retColor.setAlphaF(a); |
| 156 | } else { |
| 157 | float var_h, var_i, var_1, var_2, var_3, var_r, var_g, var_b; |
| 158 | |
| 159 | var_h = h * 6.0f; |
| 160 | if (var_h == 6.0f) |
| 161 | var_h = 0.0f; // H must be < 1 |
| 162 | |
| 163 | var_i = floor(var_h); |
| 164 | |
| 165 | var_1 = v * (1.0f - s); |
| 166 | var_2 = v * (1.0f - s * (var_h - var_i)); |
| 167 | var_3 = v * (1.0f - s * (1.0f - (var_h - var_i))); |
| 168 | |
| 169 | if (var_i == 0) { |
| 170 | var_r = v; |
| 171 | var_g = var_3; |
| 172 | var_b = var_1; |
| 173 | } else if (var_i == 1) { |
| 174 | var_r = var_2; |
| 175 | var_g = v; |
| 176 | var_b = var_1; |
| 177 | } else if (var_i == 2) { |
| 178 | var_r = var_1; |
| 179 | var_g = v; |
| 180 | var_b = var_3; |
| 181 | } else if (var_i == 3) { |
| 182 | var_r = var_1; |
| 183 | var_g = var_2; |
| 184 | var_b = v; |
| 185 | } else if (var_i == 4) { |
| 186 | var_r = var_3; |
| 187 | var_g = var_1; |
| 188 | var_b = v; |
| 189 | } else { |
| 190 | var_r = v; |
| 191 | var_g = var_1; |
| 192 | var_b = var_2; |
| 193 | } |
| 194 | |
| 195 | retColor.setRedF(var_r); |
| 196 | retColor.setGreenF(var_g); |
| 197 | retColor.setBlueF(var_b); |
| 198 | retColor.setAlphaF(a); |
| 199 | } |
| 200 | return retColor; |
| 201 | } |