mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-22 08:18:08 +02:00
Fix tab bar borders not being blanked
This commit is contained in:
@@ -3,12 +3,13 @@
|
|||||||
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
from ctypes import addressof
|
from ctypes import addressof
|
||||||
|
from itertools import chain
|
||||||
from threading import Lock
|
from threading import Lock
|
||||||
|
|
||||||
from .constants import viewport_size, GLfloat, GLint, GLuint
|
from .constants import GLfloat, GLint, GLuint, viewport_size
|
||||||
from .fast_data_types import glUniform3fv, GL_TRIANGLE_FAN, glMultiDrawArrays
|
from .fast_data_types import GL_TRIANGLE_FAN, glMultiDrawArrays, glUniform3fv
|
||||||
from .utils import get_dpi
|
|
||||||
from .shaders import ShaderProgram
|
from .shaders import ShaderProgram
|
||||||
|
from .utils import get_dpi
|
||||||
|
|
||||||
|
|
||||||
def as_color(c):
|
def as_color(c):
|
||||||
@@ -71,9 +72,9 @@ class Borders:
|
|||||||
*as_color(opts.inactive_border_color)
|
*as_color(opts.inactive_border_color)
|
||||||
)
|
)
|
||||||
|
|
||||||
def __call__(self, windows, active_window, current_layout, draw_window_borders=True):
|
def __call__(self, windows, active_window, current_layout, extra_blank_rects, draw_window_borders=True):
|
||||||
rects = []
|
rects = []
|
||||||
for br in current_layout.blank_rects:
|
for br in chain(current_layout.blank_rects, extra_blank_rects):
|
||||||
rects.extend(as_rect(*br))
|
rects.extend(as_rect(*br))
|
||||||
if draw_window_borders and self.border_width > 0:
|
if draw_window_borders and self.border_width > 0:
|
||||||
bw = self.border_width
|
bw = self.border_width
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from .config import build_ansi_color_table
|
|||||||
from .constants import get_boss, appname, shell_path, cell_size, queue_action, viewport_size, WindowGeometry, GLuint
|
from .constants import get_boss, appname, shell_path, cell_size, queue_action, viewport_size, WindowGeometry, GLuint
|
||||||
from .fast_data_types import glfw_post_empty_event, Screen, DECAWM, DATA_CELL_SIZE, ColorProfile
|
from .fast_data_types import glfw_post_empty_event, Screen, DECAWM, DATA_CELL_SIZE, ColorProfile
|
||||||
from .char_grid import calculate_gl_geometry, render_cells
|
from .char_grid import calculate_gl_geometry, render_cells
|
||||||
from .layout import all_layouts
|
from .layout import all_layouts, Rect
|
||||||
from .utils import color_as_int
|
from .utils import color_as_int
|
||||||
from .borders import Borders
|
from .borders import Borders
|
||||||
from .window import Window
|
from .window import Window
|
||||||
@@ -79,7 +79,9 @@ class Tab:
|
|||||||
self.relayout_borders()
|
self.relayout_borders()
|
||||||
|
|
||||||
def relayout_borders(self):
|
def relayout_borders(self):
|
||||||
self.borders(self.windows, self.active_window, self.current_layout, self.current_layout.needs_window_borders and len(self.windows) > 1)
|
tm = get_boss().tab_manager
|
||||||
|
self.borders(self.windows, self.active_window, self.current_layout, tm.blank_rects,
|
||||||
|
self.current_layout.needs_window_borders and len(self.windows) > 1)
|
||||||
|
|
||||||
def next_layout(self):
|
def next_layout(self):
|
||||||
if len(self.opts.enabled_layouts) > 1:
|
if len(self.opts.enabled_layouts) > 1:
|
||||||
@@ -209,6 +211,7 @@ class TabManager:
|
|||||||
self.color_profile.update_ansi_color_table(build_ansi_color_table(opts))
|
self.color_profile.update_ansi_color_table(build_ansi_color_table(opts))
|
||||||
self.default_fg = color_as_int(opts.inactive_tab_foreground)
|
self.default_fg = color_as_int(opts.inactive_tab_foreground)
|
||||||
self.default_bg = color_as_int(opts.inactive_tab_background)
|
self.default_bg = color_as_int(opts.inactive_tab_background)
|
||||||
|
self.tab_bar_blank_rects = ()
|
||||||
|
|
||||||
def as_rgb(x):
|
def as_rgb(x):
|
||||||
return (x << 8) | 2
|
return (x << 8) | 2
|
||||||
@@ -220,10 +223,10 @@ class TabManager:
|
|||||||
self.layout_tab_bar()
|
self.layout_tab_bar()
|
||||||
|
|
||||||
def resize(self, only_tabs=False):
|
def resize(self, only_tabs=False):
|
||||||
for tab in self.tabs:
|
|
||||||
tab.relayout()
|
|
||||||
if not only_tabs:
|
if not only_tabs:
|
||||||
self.layout_tab_bar()
|
self.layout_tab_bar()
|
||||||
|
for tab in self.tabs:
|
||||||
|
tab.relayout()
|
||||||
|
|
||||||
def layout_tab_bar(self):
|
def layout_tab_bar(self):
|
||||||
self.can_render = False
|
self.can_render = False
|
||||||
@@ -236,9 +239,13 @@ class TabManager:
|
|||||||
self.tab_bar_screen = s
|
self.tab_bar_screen = s
|
||||||
self.tabbar_dirty = True
|
self.tabbar_dirty = True
|
||||||
margin = (viewport_size.width - ncells * cell_size.width) // 2
|
margin = (viewport_size.width - ncells * cell_size.width) // 2
|
||||||
self.window_geometry = WindowGeometry(
|
self.window_geometry = g = WindowGeometry(
|
||||||
margin, viewport_size.height - cell_size.height, viewport_size.width - margin, viewport_size.height, s.columns, s.lines)
|
margin, viewport_size.height - cell_size.height, viewport_size.width - margin, viewport_size.height, s.columns, s.lines)
|
||||||
self.screen_geometry = calculate_gl_geometry(self.window_geometry)
|
if margin > 0:
|
||||||
|
self.tab_bar_blank_rects = (Rect(0, g.top, g.left, g.bottom), Rect(g.right - 1, g.top, viewport_size.width, g.bottom))
|
||||||
|
else:
|
||||||
|
self.tab_bar_blank_rects = ()
|
||||||
|
self.screen_geometry = calculate_gl_geometry(g)
|
||||||
self.screen = s
|
self.screen = s
|
||||||
self.can_render = True
|
self.can_render = True
|
||||||
|
|
||||||
@@ -338,6 +345,12 @@ class TabManager:
|
|||||||
queue_action(self.set_active_tab, i)
|
queue_action(self.set_active_tab, i)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@property
|
||||||
|
def blank_rects(self):
|
||||||
|
if len(self.tabs) < 2:
|
||||||
|
return ()
|
||||||
|
return self.tab_bar_blank_rects
|
||||||
|
|
||||||
def render(self, cell_program, sprites):
|
def render(self, cell_program, sprites):
|
||||||
if not self.can_render or len(self.tabs) < 2:
|
if not self.can_render or len(self.tabs) < 2:
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user