Skip to content

Commit ead8668

Browse files
squelartsvgeesus
authored andcommitted
[css-color-4] w3c#10695 Fix rgbToHwb to use subset of rgbToHsl that only computes the hue
Tests related to out-of-gamut relative colors [css-color-5] already implicitly match the corrected behavior.
1 parent eed623f commit ead8668

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

css-color-4/rgbToHwb.js

+34-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,43 @@
1+
/**
2+
* @param {number} red - Red component 0..1
3+
* @param {number} green - Green component 0..1
4+
* @param {number} blue - Blue component 0..1
5+
* @return {number} Hue as degrees 0..360
6+
*/
7+
function rgbToHue(red, green, blue) {
8+
// Similar to rgbToHsl, except that saturation and lightness are not calculated, and
9+
// potential negative saturation is ignored.
10+
let max = Math.max(red, green, blue);
11+
let min = Math.min(red, green, blue);
12+
let hue = NaN;
13+
let d = max - min;
14+
15+
if (d !== 0) {
16+
switch (max) {
17+
case red: hue = (green - blue) / d + (green < blue ? 6 : 0); break;
18+
case green: hue = (blue - red) / d + 2; break;
19+
case blue: hue = (red - green) / d + 4;
20+
}
21+
22+
hue *= 60;
23+
}
24+
25+
if (hue >= 360) {
26+
hue -= 360;
27+
}
28+
29+
return hue;
30+
}
31+
132
/**
233
* @param {number} red - Red component 0..1
334
* @param {number} green - Green component 0..1
435
* @param {number} blue - Blue component 0..1
536
* @return {number[]} Array of HWB values: Hue as degrees 0..360, Whiteness and Blackness in reference range [0,100]
637
*/
738
function rgbToHwb(red, green, blue) {
8-
var hsl = rgbToHsl(red, green, blue);
39+
var hue = rgbToHue(red, green, blue);
940
var white = Math.min(red, green, blue);
1041
var black = 1 - Math.max(red, green, blue);
11-
return([hsl[0], white*100, black*100]);
12-
}
42+
return([hue, white*100, black*100]);
43+
}

0 commit comments

Comments
 (0)