aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/data/color/hsb.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/library/lux/data/color/hsb.lux52
1 files changed, 29 insertions, 23 deletions
diff --git a/stdlib/source/library/lux/data/color/hsb.lux b/stdlib/source/library/lux/data/color/hsb.lux
index ede1ffd08..5e7216de0 100644
--- a/stdlib/source/library/lux/data/color/hsb.lux
+++ b/stdlib/source/library/lux/data/color/hsb.lux
@@ -92,7 +92,7 @@
(def up
(-> Frac
Nat)
- (|>> (f.* rgb_factor) f.int .nat))
+ (|>> (f.* rgb_factor) f.round f.int .nat))
(def .public (of_rgb it)
(-> RGB
@@ -101,30 +101,36 @@
green (..down (the rgb.#green it))
blue (..down (the rgb.#blue it))
- max (all f.max red green blue)
- min (all f.min red green blue)
+ brightness (all f.max red green blue)
+ range (all f.min red green blue)
- brightness max
- diff (|> max (f.- min))
- saturation (if (f.= +0.0 max)
+ chroma (|> brightness (f.- range))
+ saturation (if (f.= +0.0 brightness)
+0.0
- (|> diff (f./ max)))]
+ (|> chroma (f./ brightness)))]
(nominal.abstraction
- [#hue (if (f.= max min)
- ... Achromatic
- +0.0
- ... Chromatic
- (cond (f.= max red)
- (|> green (f.- blue) (f./ diff)
- (f.+ (if (f.< blue green) +6.0 +0.0)))
-
- (f.= max green)
- (|> blue (f.- red) (f./ diff)
- (f.+ +2.0))
-
- ... (f.= max blue)
- (|> red (f.- green) (f./ diff)
- (f.+ +4.0))))
+ [#hue (cond (f.= +0.0 chroma)
+ ... Achromatic
+ +0.0
+ ... Chromatic
+ (and (f.= brightness red)
+ (not (f.= red blue)))
+ (|> green (f.- blue)
+ (f./ chroma)
+ (f.+ +0.0)
+ (f./ +6.0))
+
+ (f.= brightness green)
+ (|> blue (f.- red)
+ (f./ chroma)
+ (f.+ +2.0)
+ (f./ +6.0))
+
+ ... (f.= brightness blue)
+ (|> red (f.- green)
+ (f./ chroma)
+ (f.+ +4.0)
+ (f./ +6.0)))
#saturation saturation
#brightness brightness])))
@@ -140,7 +146,7 @@
t (|> +1.0 (f.- (|> +1.0 (f.- f) (f.* saturation))) (f.* brightness))
v brightness
mod (|> i (f.% +6.0) f.int .nat)
-
+
red (when mod 0 v 1 q 2 p 3 p 4 t 5 v _ (undefined))
green (when mod 0 t 1 v 2 v 3 q 4 p 5 p _ (undefined))
blue (when mod 0 p 1 p 2 t 3 v 4 v 5 q _ (undefined))]