aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/data/color.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/data/color.lux')
-rw-r--r--stdlib/source/lux/data/color.lux220
1 files changed, 110 insertions, 110 deletions
diff --git a/stdlib/source/lux/data/color.lux b/stdlib/source/lux/data/color.lux
index 61ee1249a..17546902a 100644
--- a/stdlib/source/lux/data/color.lux
+++ b/stdlib/source/lux/data/color.lux
@@ -6,7 +6,7 @@
(type opaque)))
(def: rgb Nat +256)
-(def: top Nat (n.dec rgb))
+(def: top Nat (n/dec rgb))
(def: nat-to-frac (-> Nat Frac) (|>. nat-to-int int-to-frac))
(def: frac-to-nat (-> Frac Nat) (|>. frac-to-int int-to-nat))
@@ -15,11 +15,11 @@
(def: scale-down
(-> Nat Frac)
- (|>. nat-to-frac (f./ rgb-factor)))
+ (|>. nat-to-frac (f// rgb-factor)))
(def: scale-up
(-> Frac Nat)
- (|>. (f.* rgb-factor) frac-to-nat))
+ (|>. (f/* rgb-factor) frac-to-nat))
(opaque: #export Color {}
{#red Nat
@@ -28,9 +28,9 @@
(def: #export (color [red green blue])
(-> [Nat Nat Nat] Color)
- (@opaque [(n.% rgb red)
- (n.% rgb green)
- (n.% rgb blue)]))
+ (@opaque [(n/% rgb red)
+ (n/% rgb green)
+ (n/% rgb blue)]))
(def: #export unpack
(-> Color [Nat Nat Nat])
@@ -40,9 +40,9 @@
(def: (= reference sample)
(let [[rr rg rb] (@repr reference)
[sr sg sb] (@repr sample)]
- (and (n.= rr sr)
- (n.= rg sg)
- (n.= rb sb)))))
+ (and (n/= rr sr)
+ (n/= rg sg)
+ (n/= rb sb)))))
)
(def: #export (to-hsl color)
@@ -51,67 +51,67 @@
red (scale-down red)
green (scale-down green)
blue (scale-down blue)
- max ($_ f.max red green blue)
- min ($_ f.min red green blue)
- luminance (|> (f.+ max min) (f./ 2.0))]
- (if (f.= max min)
+ max ($_ f/max red green blue)
+ min ($_ f/min red green blue)
+ luminance (|> (f/+ max min) (f// 2.0))]
+ (if (f/= max min)
## Achromatic
[0.0 0.0 luminance]
## Chromatic
- (let [diff (|> max (f.- min))
+ (let [diff (|> max (f/- min))
saturation (|> diff
- (f./ (if (f.> 0.5 luminance)
- (|> 2.0 (f.- max) (f.- min))
- (|> max (f.+ min)))))
- hue' (cond (f.= red max)
- (|> green (f.- blue) (f./ diff)
- (f.+ (if (f.< blue green) 6.0 0.0)))
+ (f// (if (f/> 0.5 luminance)
+ (|> 2.0 (f/- max) (f/- min))
+ (|> max (f/+ min)))))
+ hue' (cond (f/= red max)
+ (|> green (f/- blue) (f// diff)
+ (f/+ (if (f/< blue green) 6.0 0.0)))
- (f.= green max)
- (|> blue (f.- red) (f./ diff)
- (f.+ 2.0))
+ (f/= green max)
+ (|> blue (f/- red) (f// diff)
+ (f/+ 2.0))
- ## (f.= blue max)
- (|> red (f.- green) (f./ diff)
- (f.+ 4.0)))]
- [(|> hue' (f./ 6.0))
+ ## (f/= blue max)
+ (|> red (f/- green) (f// diff)
+ (f/+ 4.0)))]
+ [(|> hue' (f// 6.0))
saturation
luminance]))))
(def: (hue-to-rgb p q t)
(-> Frac Frac Frac Frac)
- (let [t (cond (f.< 0.0 t) (f.+ 1.0 t)
- (f.> 1.0 t) (f.- 1.0 t)
+ (let [t (cond (f/< 0.0 t) (f/+ 1.0 t)
+ (f/> 1.0 t) (f/- 1.0 t)
## else
t)
- f2/3 (f./ 3.0 2.0)]
- (cond (f.< (f./ 6.0 1.0) t)
- (|> q (f.- p) (f.* 6.0) (f.* t) (f.+ p))
+ f2/3 (f// 3.0 2.0)]
+ (cond (f/< (f// 6.0 1.0) t)
+ (|> q (f/- p) (f/* 6.0) (f/* t) (f/+ p))
- (f.< (f./ 2.0 1.0) t)
+ (f/< (f// 2.0 1.0) t)
q
- (f.< f2/3 t)
- (|> q (f.- p) (f.* (|> f2/3 (f.- t))) (f.* 6.0) (f.+ p))
+ (f/< f2/3 t)
+ (|> q (f/- p) (f/* (|> f2/3 (f/- t))) (f/* 6.0) (f/+ p))
## else
p)))
(def: #export (from-hsl [hue saturation luminance])
(-> [Frac Frac Frac] Color)
- (if (f.= 0.0 saturation)
+ (if (f/= 0.0 saturation)
## Achromatic
(let [intensity (scale-up luminance)]
(color [intensity intensity intensity]))
## Chromatic
- (let [q (if (f.< 0.5 luminance)
- (|> saturation (f.+ 1.0) (f.* luminance))
- (|> luminance (f.+ saturation) (f.- (f.* saturation luminance))))
- p (|> luminance (f.* 2.0) (f.- q))
- third (|> 1.0 (f./ 3.0))]
- (color [(scale-up (|> hue (f.+ third) (hue-to-rgb p q)))
+ (let [q (if (f/< 0.5 luminance)
+ (|> saturation (f/+ 1.0) (f/* luminance))
+ (|> luminance (f/+ saturation) (f/- (f/* saturation luminance))))
+ p (|> luminance (f/* 2.0) (f/- q))
+ third (|> 1.0 (f// 3.0))]
+ (color [(scale-up (|> hue (f/+ third) (hue-to-rgb p q)))
(scale-up (|> hue (hue-to-rgb p q)))
- (scale-up (|> hue (f.- third) (hue-to-rgb p q)))]))))
+ (scale-up (|> hue (f/- third) (hue-to-rgb p q)))]))))
(def: #export (to-hsb color)
(-> Color [Frac Frac Frac])
@@ -119,42 +119,42 @@
red (scale-down red)
green (scale-down green)
blue (scale-down blue)
- max ($_ f.max red green blue)
- min ($_ f.min red green blue)
+ max ($_ f/max red green blue)
+ min ($_ f/min red green blue)
brightness max
- diff (|> max (f.- min))
- saturation (if (f.= 0.0 max)
+ diff (|> max (f/- min))
+ saturation (if (f/= 0.0 max)
0.0
- (|> diff (f./ max)))]
- (if (f.= max min)
+ (|> diff (f// max)))]
+ (if (f/= max min)
## Achromatic
[0.0 saturation brightness]
## Chromatic
- (let [hue (cond (f.= red max)
- (|> green (f.- blue) (f./ diff)
- (f.+ (if (f.< blue green) 6.0 0.0)))
-
- (f.= green max)
- (|> blue (f.- red) (f./ diff)
- (f.+ 2.0))
-
- ## (f.= blue max)
- (|> red (f.- green) (f./ diff)
- (f.+ 4.0)))]
- [(|> hue (f./ 6.0))
+ (let [hue (cond (f/= red max)
+ (|> green (f/- blue) (f// diff)
+ (f/+ (if (f/< blue green) 6.0 0.0)))
+
+ (f/= green max)
+ (|> blue (f/- red) (f// diff)
+ (f/+ 2.0))
+
+ ## (f/= blue max)
+ (|> red (f/- green) (f// diff)
+ (f/+ 4.0)))]
+ [(|> hue (f// 6.0))
saturation
brightness]))))
(def: #export (from-hsb [hue saturation brightness])
(-> [Frac Frac Frac] Color)
- (let [hue (|> hue (f.* 6.0))
+ (let [hue (|> hue (f/* 6.0))
i (math;floor hue)
- f (|> hue (f.- i))
- p (|> 1.0 (f.- saturation) (f.* brightness))
- q (|> 1.0 (f.- (f.* f saturation)) (f.* brightness))
- t (|> 1.0 (f.- (|> 1.0 (f.- f) (f.* saturation))) (f.* brightness))
+ f (|> hue (f/- i))
+ p (|> 1.0 (f/- saturation) (f/* brightness))
+ q (|> 1.0 (f/- (f/* f saturation)) (f/* brightness))
+ t (|> 1.0 (f/- (|> 1.0 (f/- f) (f/* saturation))) (f/* brightness))
v brightness
- mod (|> i (f.% 6.0) frac-to-nat)
+ mod (|> i (f/% 6.0) frac-to-nat)
red (case mod +0 v +1 q +2 p +3 p +4 t +5 v _ (undefined))
green (case mod +0 t +1 v +2 v +3 q +4 p +5 p _ (undefined))
blue (case mod +0 p +1 p +2 t +3 v +4 v +5 q _ (undefined))]
@@ -168,34 +168,34 @@
red (scale-down red)
green (scale-down green)
blue (scale-down blue)
- key (|> 1.0 (f.- ($_ f.max red green blue)))
- f (if (f.< 1.0 key)
- (|> 1.0 (f./ (|> 1.0 (f.- key))))
+ key (|> 1.0 (f/- ($_ f/max red green blue)))
+ f (if (f/< 1.0 key)
+ (|> 1.0 (f// (|> 1.0 (f/- key))))
0.0)
- cyan (|> 1.0 (f.- red) (f.- key) (f.* f))
- magenta (|> 1.0 (f.- green) (f.- key) (f.* f))
- yellow (|> 1.0 (f.- blue) (f.- key) (f.* f))]
+ cyan (|> 1.0 (f/- red) (f/- key) (f/* f))
+ magenta (|> 1.0 (f/- green) (f/- key) (f/* f))
+ yellow (|> 1.0 (f/- blue) (f/- key) (f/* f))]
[cyan magenta yellow key]))
(def: #export (from-cmyk [cyan magenta yellow key])
(-> [Frac Frac Frac Frac] Color)
- (if (f.= 1.0 key)
+ (if (f/= 1.0 key)
(color [+0 +0 +0])
- (let [red (|> (|> 1.0 (f.- cyan))
- (f.* (|> 1.0 (f.- key))))
- green (|> (|> 1.0 (f.- magenta))
- (f.* (|> 1.0 (f.- key))))
- blue (|> (|> 1.0 (f.- yellow))
- (f.* (|> 1.0 (f.- key))))]
+ (let [red (|> (|> 1.0 (f/- cyan))
+ (f/* (|> 1.0 (f/- key))))
+ green (|> (|> 1.0 (f/- magenta))
+ (f/* (|> 1.0 (f/- key))))
+ blue (|> (|> 1.0 (f/- yellow))
+ (f/* (|> 1.0 (f/- key))))]
(color [(scale-up red) (scale-up green) (scale-up blue)]))))
(def: (normalize ratio)
(-> Frac Frac)
- (cond (f.> 1.0 ratio)
- (f.% 1.0 ratio)
+ (cond (f/> 1.0 ratio)
+ (f/% 1.0 ratio)
- (f.< 0.0 ratio)
- (|> 1.0 (f.+ (f.% 1.0 ratio)))
+ (f/< 0.0 ratio)
+ (|> 1.0 (f/+ (f/% 1.0 ratio)))
## else
ratio))
@@ -203,11 +203,11 @@
(def: #export (interpolate ratio end start)
(-> Frac Color Color Color)
(let [dS (normalize ratio)
- dE (|> 1.0 (f.- dS))
+ dE (|> 1.0 (f/- dS))
interpolate' (: (-> Nat Nat Nat)
(function [end start]
- (frac-to-nat (f.+ (f.* dE (nat-to-frac end))
- (f.* dS (nat-to-frac start))))))
+ (frac-to-nat (f/+ (f/* dE (nat-to-frac end))
+ (f/* dS (nat-to-frac start))))))
[redS greenS blueS] (unpack start)
[redE greenE blueE] (unpack end)]
(color [(interpolate' redE redS)
@@ -229,7 +229,7 @@
(def: #export (complement color)
(-> Color Color)
(let [[red green blue] (unpack color)
- adjust (function [value] (|> top (n.- value)))]
+ adjust (function [value] (|> top (n/- value)))]
(;;color [(adjust red)
(adjust green)
(adjust blue)])))
@@ -240,12 +240,12 @@
(let [[hue saturation luminance] (to-hsl color)]
(from-hsl [hue
(|> saturation
- (f.* (|> 1.0 (<op> (normalize ratio))))
- (f.min 1.0))
+ (f/* (|> 1.0 (<op> (normalize ratio))))
+ (f/min 1.0))
luminance])))]
- [saturate f.+]
- [de-saturate f.-]
+ [saturate f/+]
+ [de-saturate f/-]
)
(def: #export (gray-scale color)
@@ -258,12 +258,12 @@
(-> Color [Color Color Color])
(let [[hue saturation luminance] (to-hsl color)]
[color
- (from-hsl [(|> hue (f.+ <1>) normalize) saturation luminance])
- (from-hsl [(|> hue (f.+ <2>) normalize) saturation luminance])]))]
+ (from-hsl [(|> hue (f/+ <1>) normalize) saturation luminance])
+ (from-hsl [(|> hue (f/+ <2>) normalize) saturation luminance])]))]
- [triad (|> 1.0 (f./ 3.0)) (|> 2.0 (f./ 3.0))]
- [clash (|> 1.0 (f./ 4.0)) (|> 3.0 (f./ 4.0))]
- [split-complement (|> 1.0 (f./ 5.0)) (|> 3.0 (f./ 5.0))]
+ [triad (|> 1.0 (f// 3.0)) (|> 2.0 (f// 3.0))]
+ [clash (|> 1.0 (f// 4.0)) (|> 3.0 (f// 4.0))]
+ [split-complement (|> 1.0 (f// 5.0)) (|> 3.0 (f// 5.0))]
)
(do-template [<name> <1> <2> <3>]
@@ -271,36 +271,36 @@
(-> Color [Color Color Color Color])
(let [[hue saturation luminance] (to-hsl color)]
[color
- (from-hsl [(|> hue (f.+ <1>) normalize) saturation luminance])
- (from-hsl [(|> hue (f.+ <2>) normalize) saturation luminance])
- (from-hsl [(|> hue (f.+ <3>) normalize) saturation luminance])]))]
+ (from-hsl [(|> hue (f/+ <1>) normalize) saturation luminance])
+ (from-hsl [(|> hue (f/+ <2>) normalize) saturation luminance])
+ (from-hsl [(|> hue (f/+ <3>) normalize) saturation luminance])]))]
- [square (|> 1.0 (f./ 4.0)) (|> 2.0 (f./ 4.0)) (|> 3.0 (f./ 4.0))]
- [tetradic (|> 2.0 (f./ 12.0)) (|> 6.0 (f./ 12.0)) (|> 8.0 (f./ 12.0))]
+ [square (|> 1.0 (f// 4.0)) (|> 2.0 (f// 4.0)) (|> 3.0 (f// 4.0))]
+ [tetradic (|> 2.0 (f// 12.0)) (|> 6.0 (f// 12.0)) (|> 8.0 (f// 12.0))]
)
(def: #export (analogous results slice color)
(-> Nat Frac Color (List Color))
- (if (n.= +0 results)
+ (if (n/= +0 results)
(list)
(let [[hue saturation luminance] (to-hsl color)
slice (normalize slice)]
(L/map (function [idx]
- (from-hsl [(|> idx nat-to-frac (f.* slice) (f.+ hue) normalize)
+ (from-hsl [(|> idx nat-to-frac (f/* slice) (f/+ hue) normalize)
saturation
luminance]))
- (list;n.range +0 (n.dec results))))))
+ (list;n/range +0 (n/dec results))))))
(def: #export (monochromatic results color)
(-> Nat Color (List Color))
- (if (n.= +0 results)
+ (if (n/= +0 results)
(list)
(let [[hue saturation brightness] (to-hsb color)
- slice (|> 1.0 (f./ (nat-to-frac results)))]
- (|> (list;n.range +0 (n.dec results))
+ slice (|> 1.0 (f// (nat-to-frac results)))]
+ (|> (list;n/range +0 (n/dec results))
(L/map (|>. nat-to-frac
- (f.* slice)
- (f.+ brightness)
+ (f/* slice)
+ (f/+ brightness)
normalize
[hue saturation]
from-hsb))))))