From c883a024ba2a58533fb5bea021fe6b3d2dfb11a2 Mon Sep 17 00:00:00 2001 From: MithicSpirit Date: Tue, 9 May 2023 16:08:02 -0400 Subject: [PATCH] Improve shade character appearance I was really unhappy with the previous checkerboard appearance, so I changed it to supersampled diagonal lines. The fill ratios are still the same, so it should still be compliant with the standard if I understood it correctly. Feel free to revert (or tell me to revert) this commit if you want the previous look. --- kitty/fonts/box_drawing.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/kitty/fonts/box_drawing.py b/kitty/fonts/box_drawing.py index 363ee8de9..a6fa13a60 100644 --- a/kitty/fonts/box_drawing.py +++ b/kitty/fonts/box_drawing.py @@ -613,22 +613,20 @@ def inner_corner(buf: BufType, width: int, height: int, which: str = 'tl', level draw_vline(buf, width, y1, y2, width // 2 + (xd * hgap), level) +@supersampled() def shade(buf: BufType, width: int, height: int, light: bool = False, invert: bool = False) -> None: - square_sz = max(1, width // 12) - number_of_rows = height // square_sz - number_of_cols = width // square_sz - nums = range(square_sz) - - for r in range(number_of_rows): - for c in range(number_of_cols): - if invert ^ ((r % 2 != c % 2) or (light and r % 2 == 1)): - continue - for yr in nums: - y = r * square_sz + yr - offset = width * y - for xc in nums: - x = c * square_sz + xc - buf[offset + x] = 255 + x_size = width / 4 + y_size = height / 8 + pattern_segments = 4 if light else 2 + for y in range(height): + y_segment = y / y_size + offset = y * width + for x in range(width): + segment = x/x_size + y_segment + section = int(segment) % pattern_segments + enabled = section == 1 + if invert ^ enabled: + buf[offset + x] = 255 def quad(buf: BufType, width: int, height: int, x: int = 0, y: int = 0) -> None: