Skip to content

Commit d10bd7a

Browse files
committed
Refactor hsluv colour conversions to use helpers, for clarity
1 parent ce01d8d commit d10bd7a

1 file changed

Lines changed: 30 additions & 29 deletions

File tree

lib/glug/hsluv_modifiers.rb

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,64 +7,65 @@ module Chroma
77
# Add hsluv versions of the color functions to chroma
88
class Color
99
def darkenp(amount = 10)
10-
h, s, l = Hsluv.rgb_to_hsluv(rgb.r / 255.0, rgb.g / 255.0, rgb.b / 255.0)
11-
new_l = [l - amount, 0].max
12-
rgb_values = Hsluv.rgb_prepare(Hsluv.hsluv_to_rgb(h, s, new_l))
13-
Chroma.paint("rgb(#{rgb_values[0]}, #{rgb_values[1]}, #{rgb_values[2]})")
10+
h, s, l = to_hsluv
11+
l = [l - amount, 0].max
12+
from_hsluv(h, s, l)
1413
end
1514

1615
def lightenp(amount = 10)
17-
h, s, l = Hsluv.rgb_to_hsluv(rgb.r / 255.0, rgb.g / 255.0, rgb.b / 255.0)
18-
new_l = [l + amount, 100].min
19-
rgb_values = Hsluv.rgb_prepare(Hsluv.hsluv_to_rgb(h, s, new_l))
20-
Chroma.paint("rgb(#{rgb_values[0]}, #{rgb_values[1]}, #{rgb_values[2]})")
16+
h, s, l = to_hsluv
17+
l = [l + amount, 100].min
18+
from_hsluv(h, s, l)
2119
end
2220

2321
def saturatep(amount = 10)
24-
h, s, l = Hsluv.rgb_to_hsluv(rgb.r / 255.0, rgb.g / 255.0, rgb.b / 255.0)
25-
new_s = [s + amount, 100].min
26-
rgb_values = Hsluv.rgb_prepare(Hsluv.hsluv_to_rgb(h, new_s, l))
27-
Chroma.paint("rgb(#{rgb_values[0]}, #{rgb_values[1]}, #{rgb_values[2]})")
22+
h, s, l = to_hsluv
23+
s = [s + amount, 100].min
24+
from_hsluv(h, s, l)
2825
end
2926

3027
def desaturatep(amount = 10)
31-
h, s, l = Hsluv.rgb_to_hsluv(rgb.r / 255.0, rgb.g / 255.0, rgb.b / 255.0)
32-
new_s = [s - amount, 0].max
33-
rgb_values = Hsluv.rgb_prepare(Hsluv.hsluv_to_rgb(h, new_s, l))
34-
Chroma.paint("rgb(#{rgb_values[0]}, #{rgb_values[1]}, #{rgb_values[2]})")
28+
h, s, l = to_hsluv
29+
s = [s - amount, 0].max
30+
from_hsluv(h, s, l)
3531
end
3632

3733
def greyscalep
38-
h, _s, l = Hsluv.rgb_to_hsluv(rgb.r / 255.0, rgb.g / 255.0, rgb.b / 255.0)
39-
rgb_values = Hsluv.rgb_prepare(Hsluv.hsluv_to_rgb(h, 0, l))
40-
Chroma.paint("rgb(#{rgb_values[0]}, #{rgb_values[1]}, #{rgb_values[2]})")
34+
h, _s, l = to_hsluv
35+
from_hsluv(h, 0, l)
4136
end
4237
alias grayscalep greyscalep
4338

4439
def spinp(amount = 0)
45-
h, s, l = Hsluv.rgb_to_hsluv(rgb.r / 255.0, rgb.g / 255.0, rgb.b / 255.0)
46-
new_h = (h + amount) % 360
47-
rgb_values = Hsluv.rgb_prepare(Hsluv.hsluv_to_rgb(new_h, s, l))
48-
Chroma.paint("rgb(#{rgb_values[0]}, #{rgb_values[1]}, #{rgb_values[2]})")
40+
h, s, l = to_hsluv
41+
h = (h + amount) % 360
42+
from_hsluv(h, s, l)
4943
end
5044

5145
def mixp(other, weight = 50)
5246
other = other.paint if other.is_a?(String)
5347
p = weight / 100.0
5448

55-
h1, s1, l1 = Hsluv.rgb_to_hsluv(rgb.r / 255.0, rgb.g / 255.0, rgb.b / 255.0)
56-
h2, s2, l2 = Hsluv.rgb_to_hsluv(other.rgb.r / 255.0, other.rgb.g / 255.0, other.rgb.b / 255.0)
49+
h1, s1, l1 = to_hsluv
50+
h2, s2, l2 = other.to_hsluv
5751

5852
# Interpolate hue on the shortest path around the color wheel
5953
h_diff = h2 - h1
6054
h_diff -= 360 if h_diff > 180
6155
h_diff += 360 if h_diff < -180
62-
new_h = (h1 + h_diff * (1 - p)) % 360
56+
h = (h1 + h_diff * (1 - p)) % 360
57+
s = s1 * p + s2 * (1 - p)
58+
l = l1 * p + l2 * (1 - p)
59+
60+
from_hsluv(h, s, l)
61+
end
6362

64-
new_s = s1 * p + s2 * (1 - p)
65-
new_l = l1 * p + l2 * (1 - p)
63+
def to_hsluv
64+
Hsluv.rgb_to_hsluv(rgb.r / 255.0, rgb.g / 255.0, rgb.b / 255.0)
65+
end
6666

67-
rgb_values = Hsluv.rgb_prepare(Hsluv.hsluv_to_rgb(new_h, new_s, new_l))
67+
def from_hsluv(h, s, l) # rubocop:disable Naming/MethodParameterName
68+
rgb_values = Hsluv.rgb_prepare(Hsluv.hsluv_to_rgb(h, s, l))
6869
Chroma.paint("rgb(#{rgb_values[0]}, #{rgb_values[1]}, #{rgb_values[2]})")
6970
end
7071
end

0 commit comments

Comments
 (0)