From 017947de7f4f146b98855cc27a934a92ebf74a87 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 17 Dec 2023 11:12:49 +0530 Subject: [PATCH] panel kitten: Fix rendering with non-zero margin.padding in kitty.conf Fixes #6923 --- docs/changelog.rst | 2 ++ kittens/panel/main.py | 27 ++++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index cb02b077d..36ac55a41 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -63,6 +63,8 @@ Detailed list of changes - Font fallback: Fix the font used to render a character sometimes dependent on the order in which characters appear on screen (:iss:`6865`) +- panel kitten: Fix rendering with non-zero margin.padding in kitty.conf (:iss:`6923`) + 0.31.0 [2023-11-08] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/kittens/panel/main.py b/kittens/panel/main.py index 032d691dd..39bc8ec62 100644 --- a/kittens/panel/main.py +++ b/kittens/panel/main.py @@ -7,7 +7,7 @@ from typing import Any, Callable, Dict, List, Tuple from kitty.cli import parse_args from kitty.cli_stub import PanelCLIOptions -from kitty.constants import appname, is_macos +from kitty.constants import appname, is_macos, is_wayland from kitty.fast_data_types import make_x11_window_a_dock_window from kitty.os_window_size import WindowSizeData @@ -103,15 +103,36 @@ def setup_x11_window(win_id: int) -> None: def initial_window_size_func(opts: WindowSizeData, cached_values: Dict[str, Any]) -> Callable[[int, int, float, float, float, float], Tuple[int, int]]: from kitty.fast_data_types import glfw_primary_monitor_size + from kitty.typing import EdgeLiteral + + def effective_margin(which: EdgeLiteral) -> float: + ans: float = getattr(opts.single_window_margin_width, which) + if ans < 0: + ans = getattr(opts.window_margin_width, which) + return ans + + def effective_padding(which: EdgeLiteral) -> float: + ans: float = getattr(opts.single_window_padding_width, which) + if ans < 0: + ans = getattr(opts.window_padding_width, which) + return ans def initial_window_size(cell_width: int, cell_height: int, dpi_x: float, dpi_y: float, xscale: float, yscale: float) -> Tuple[int, int]: + if not is_macos and not is_wayland(): + # Not sure what the deal with scaling on X11 is + xscale = yscale = 1 global window_width, window_height monitor_width, monitor_height = glfw_primary_monitor_size() + if args.edge in {'top', 'bottom'}: - window_height = cell_height * args.lines + 1 + spacing = effective_margin('top') + effective_margin('bottom') + spacing += effective_padding('top') + effective_padding('bottom') + window_height = int(cell_height * args.lines / yscale + (dpi_y / 72) * spacing + 1) window_width = monitor_width else: - window_width = cell_width * args.columns + 1 + spacing = effective_margin('left') + effective_margin('right') + spacing += effective_padding('left') + effective_padding('right') + window_width = int(cell_width * args.columns / xscale + (dpi_x / 72) * spacing + 1) window_height = monitor_height return window_width, window_height