about summary refs log tree commit diff stats
path: root/src/display
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2023-06-09 22:00:08 +0200
committerbptato <nincsnevem662@gmail.com>2023-06-09 22:00:08 +0200
commitfb36a13cbe53a3b3ea60271b8d04a7c525e9d538 (patch)
treea5a5263a0a3d769952c7eaceabb1ee91eab2ad7a /src/display
parent1769bc42e23ab5bddcb8a216f268b821bf364961 (diff)
downloadchawan-fb36a13cbe53a3b3ea60271b8d04a7c525e9d538.tar.gz
Fix some type confusion with colors, fix crash in pager
Diffstat (limited to 'src/display')
-rw-r--r--src/display/pager.nim2
-rw-r--r--src/display/term.nim19
2 files changed, 12 insertions, 9 deletions
diff --git a/src/display/pager.nim b/src/display/pager.nim
index 6db13fac..adfe2f87 100644
--- a/src/display/pager.nim
+++ b/src/display/pager.nim
@@ -263,7 +263,7 @@ proc writeStatusMessage(pager: Pager, str: string,
   var i = start
   let e = min(start + maxwidth, pager.statusgrid.width)
   if i >= e:
-    return e
+    return i
   for r in str.runes:
     let pi = i
     i += r.twidth(i)
diff --git a/src/display/term.nim b/src/display/term.nim
index 51ed21eb..fa3c5e7f 100644
--- a/src/display/term.nim
+++ b/src/display/term.nim
@@ -211,13 +211,16 @@ proc getRGB(a: CellColor, bg: bool): RGBColor =
 
 # Use euclidian distance to quantize RGB colors.
 proc approximateANSIColor(rgb: RGBColor, exclude = -1): int =
-  var a = 0
+  var a = 0u16
   var n = -1
   for i in 0 .. ANSIColorMap.high:
     if i == exclude: continue
     let color = ANSIColorMap[i]
     if color == rgb: return i
-    let b = (color.r - rgb.r) ^  2 + (color.g - rgb.b) ^ 2 + (color.g - rgb.g) ^ 2
+    let x = uint16(color.r - rgb.r) ^ 2
+    let y = uint16(color.g - rgb.b) ^ 2
+    let z = uint16(color.g - rgb.g) ^ 2
+    let b = x + y + z
     if n == -1 or b < a:
       n = i
       a = b
@@ -228,14 +231,14 @@ proc correctContrast(bgcolor, fgcolor: CellColor, contrast: int): CellColor =
   let cfgcolor = fgcolor
   let bgcolor = getRGB(bgcolor, true)
   let fgcolor = getRGB(fgcolor, false)
-  let bgY = bgcolor.Y
-  let fgY = fgcolor.Y
+  let bgY = int(bgcolor.Y)
+  let fgY = int(fgcolor.Y)
   let diff = abs(bgY - fgY)
   if diff < contrast:
-    let newrgb = if bgY > contrast:
-      YUV(bgY - contrast, fgcolor.U, fgcolor.V)
-    else:
-      YUV(bgY + contrast, fgcolor.U, fgcolor.V)
+    let neg = max(bgY - contrast, 0)
+    let pos = min(bgY + contrast, 255)
+    let condiff = if abs(bgY - neg) < abs(bgY - pos): pos else: neg
+    let newrgb = YUV(cast[uint8](condiff), fgcolor.U, fgcolor.V)
     if cfgcolor.rgb:
       return newrgb.cellColor()
     return ColorsANSIFg[approximateANSIColor(newrgb)]