From 85b6a91e5ccca71fd3ac78fbfe3164f0f051a56a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 28 Jan 2020 11:06:16 +0530 Subject: [PATCH] Blank rects for splits layout --- kitty/layout.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/kitty/layout.py b/kitty/layout.py index 9e79b7cfa..0b5b8cf8c 100644 --- a/kitty/layout.py +++ b/kitty/layout.py @@ -1065,6 +1065,24 @@ class Pair: if w is not None: w.set_geometry(id_idx_map[w.id], window_geometry) + def blank_rects_for_window(self, layout_object: Layout, window, left: float, top: float, width: float, height: float): + right = left + width - 1 + bottom = top + height - 1 + g: WindowGeometry = window.geometry + rects: list = layout_object.blank_rects + lt = g.left + if lt > left: + rects.append(Rect(left, top, lt, bottom + 1)) + r = g.right + if r <= right: + rects.append(Rect(r, top, right + 1, bottom + 1)) + t = g.top + if t > top: + rects.append(Rect(left, top, right + 1, t)) + b = g.bottom + if b <= bottom: + rects.append(Rect(left, b, right + 1, bottom + 1)) + def layout_pair(self, left, top, width, height, id_window_map, id_idx_map, layout_object): if self.one is None or self.two is None: q = self.one or self.two @@ -1076,6 +1094,7 @@ class Pair: ystart, ynum = next(layout_object.ylayout(1, top=top, height=height)) geom = window_geometry(xstart, xnum, ystart, ynum) self.apply_window_geometry(q, geom, id_window_map, id_idx_map) + self.blank_rects_for_window(layout_object, id_window_map[q], left, top, width, height) return if self.horizontal: ystart, ynum = next(layout_object.ylayout(1, top=top, height=height)) @@ -1086,11 +1105,13 @@ class Pair: else: xstart, xnum = next(layout_object.xlayout(1, left=left, width=w1)) self.apply_window_geometry(self.one, window_geometry(xstart, xnum, ystart, ynum), id_window_map, id_idx_map) + self.blank_rects_for_window(layout_object, id_window_map[self.one], left, top, w1, height) if isinstance(self.two, Pair): self.two.layout_pair(left + w1, top, w2, height, id_window_map, id_idx_map, layout_object) else: xstart, xnum = next(layout_object.xlayout(1, left=left + w1, width=w2)) self.apply_window_geometry(self.two, window_geometry(xstart, xnum, ystart, ynum), id_window_map, id_idx_map) + self.blank_rects_for_window(layout_object, id_window_map[self.two], left + w1, top, w2, height) else: xstart, xnum = next(layout_object.xlayout(1, left=left, width=width)) h1 = height // 2 @@ -1100,11 +1121,13 @@ class Pair: else: ystart, ynum = next(layout_object.ylayout(1, top=top, height=h1)) self.apply_window_geometry(self.one, window_geometry(xstart, xnum, ystart, ynum), id_window_map, id_idx_map) + self.blank_rects_for_window(layout_object, id_window_map[self.one], left, top, width, h1) if isinstance(self.two, Pair): self.two.layout_pair(left, top + h1, width, h2, id_window_map, id_idx_map, layout_object) else: ystart, ynum = next(layout_object.ylayout(1, top=top + h1, height=h2)) self.apply_window_geometry(self.two, window_geometry(xstart, xnum, ystart, ynum), id_window_map, id_idx_map) + self.blank_rects_for_window(layout_object, id_window_map[self.two], left, top + h1, width, h2) class Splits(Layout):