From 9633f29a6b220c6f872eb6e9fd46102bcb75e95f Mon Sep 17 00:00:00 2001
From: Ryan Oldenburg <guzba8@gmail.com>
Date: Thu, 3 Dec 2020 20:18:15 -0600
Subject: [PATCH] simpler SetSat

---
 src/pixie/blends.nim | 38 +++-----------------------------------
 1 file changed, 3 insertions(+), 35 deletions(-)

diff --git a/src/pixie/blends.nim b/src/pixie/blends.nim
index 8c6c6de..15a296b 100644
--- a/src/pixie/blends.nim
+++ b/src/pixie/blends.nim
@@ -312,41 +312,9 @@ proc Sat(C: Color): float32 {.inline.} =
   max([C.r, C.g, C.b]) - min([C.r, C.g, C.b])
 
 proc SetSat(C: Color, s: float32): Color {.inline.} =
-  var arr = [(C.r, 0), (C.g, 1), (C.b, 2)]
-  # TODO: Don't rely on sort.
-  arr.sort()
-  var
-    Cmin = arr[0][0]
-    Cmid = arr[1][0]
-    Cmax = arr[2][0]
-  if Cmax > Cmin:
-    Cmid = (((Cmid - Cmin) * s) / (Cmax - Cmin))
-    Cmax = s
-  else:
-    Cmid = 0
-    Cmax = 0
-  Cmin = 0
-
-  if arr[0][1] == 0:
-    result.r = Cmin
-  if arr[1][1] == 0:
-    result.r = Cmid
-  if arr[2][1] == 0:
-    result.r = Cmax
-
-  if arr[0][1] == 1:
-    result.g = Cmin
-  if arr[1][1] == 1:
-    result.g = Cmid
-  if arr[2][1] == 1:
-    result.g = Cmax
-
-  if arr[0][1] == 2:
-    result.b = Cmin
-  if arr[1][1] == 2:
-    result.b = Cmid
-  if arr[2][1] == 2:
-    result.b = Cmax
+  let satC = Sat(C)
+  if satC > 0:
+    result = (C - min([C.r, C.g, C.b])) * s / satC
 
 proc alphaFix(Cb, Cs, mixed: Color): Color {.inline.} =
   let ab = Cb.a