diff options
author | bptato <nincsnevem662@gmail.com> | 2023-06-09 22:00:08 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2023-06-09 22:00:08 +0200 |
commit | fb36a13cbe53a3b3ea60271b8d04a7c525e9d538 (patch) | |
tree | a5a5263a0a3d769952c7eaceabb1ee91eab2ad7a /src/display | |
parent | 1769bc42e23ab5bddcb8a216f268b821bf364961 (diff) | |
download | chawan-fb36a13cbe53a3b3ea60271b8d04a7c525e9d538.tar.gz |
Fix some type confusion with colors, fix crash in pager
Diffstat (limited to 'src/display')
-rw-r--r-- | src/display/pager.nim | 2 | ||||
-rw-r--r-- | src/display/term.nim | 19 |
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)] |