@@ -29,26 +29,29 @@ def initialize
2929 end
3030
3131 def convert ( dest , hue , saturation , lightness , alpha )
32- scaled_hue = ( ( hue . nil? ? 0 : hue ) / 360.0 ) % 1
33- scaled_saturation = ( saturation . nil? ? 0 : saturation ) / 100.0
34- scaled_lightness = ( lightness . nil? ? 0 : lightness ) / 100.0
32+ missing_lightness = lightness . nil?
33+ missing_chroma = saturation . nil?
34+ missing_hue = hue . nil?
3535
36- m2 = if scaled_lightness <= 0.5
37- scaled_lightness * ( scaled_saturation + 1 )
38- else
39- scaled_lightness + scaled_saturation - ( scaled_lightness * scaled_saturation )
40- end
41- m1 = ( scaled_lightness * 2 ) - m2
36+ hue = ( ( hue . nil? ? 0 : hue ) % 360 ) / 30.0
37+ saturation = ( saturation . nil? ? 0 : saturation ) / 100.0
38+ lightness = ( lightness . nil? ? 0 : lightness ) / 100.0
39+
40+ a = saturation * [ lightness , 1 - lightness ] . min
41+ f = lambda do |n |
42+ k = ( n + hue ) % 12
43+ lightness - ( a * [ -1 , [ k - 3 , 9 - k , 1 ] . min ] . max )
44+ end
4245
4346 SRGB . convert (
4447 dest ,
45- Utils . hue_to_rgb ( m1 , m2 , scaled_hue + ( 1 / 3.0 ) ) ,
46- Utils . hue_to_rgb ( m1 , m2 , scaled_hue ) ,
47- Utils . hue_to_rgb ( m1 , m2 , scaled_hue - ( 1 / 3.0 ) ) ,
48+ f . call ( 0 ) ,
49+ f . call ( 8 ) ,
50+ f . call ( 4 ) ,
4851 alpha ,
49- missing_lightness : lightness . nil? ,
50- missing_chroma : saturation . nil? ,
51- missing_hue : hue . nil?
52+ missing_lightness :,
53+ missing_chroma :,
54+ missing_hue :
5255 )
5356 end
5457 end
0 commit comments