tab indicator: Add gaps-between-tabs

This commit is contained in:
Ivan Molodetskikh
2025-02-07 10:23:56 +03:00
parent c31b58e2c9
commit 0dd8e883b0
3 changed files with 12 additions and 5 deletions
+3
View File
@@ -695,6 +695,8 @@ pub struct TabIndicator {
pub length: TabIndicatorLength,
#[knuffel(child, unwrap(argument), default = Self::default().position)]
pub position: TabIndicatorPosition,
#[knuffel(child, unwrap(argument), default = Self::default().gaps_between_tabs)]
pub gaps_between_tabs: FloatOrInt<0, 65535>,
#[knuffel(child)]
pub active_color: Option<Color>,
#[knuffel(child)]
@@ -717,6 +719,7 @@ impl Default for TabIndicator {
total_proportion: Some(0.5),
},
position: TabIndicatorPosition::Left,
gaps_between_tabs: FloatOrInt(0.),
active_color: None,
inactive_color: None,
active_gradient: None,
+6 -5
View File
@@ -78,6 +78,7 @@ impl TabIndicator {
let width = round(self.config.width.0);
let gap = round(self.config.gap.0);
let gaps_between = round(self.config.gaps_between_tabs.0);
let side = match self.config.position {
TabIndicatorPosition::Left | TabIndicatorPosition::Right => tile_size.h,
@@ -90,11 +91,11 @@ impl TabIndicator {
self.shader_locs.resize_with(count, Default::default);
let pixel = 1. / scale;
let shortest_length = count as f64 * pixel;
let shortest_length = count as f64 * (pixel + gaps_between) - gaps_between;
let length = f64::max(min_length, shortest_length);
let px_per_tab = length / count as f64;
let px_per_tab = (length + gaps_between) / count as f64 - gaps_between;
let px_per_tab = floor_logical_in_physical_max1(scale, px_per_tab);
let floored_length = count as f64 * px_per_tab;
let floored_length = count as f64 * (px_per_tab + gaps_between) - gaps_between;
let mut ones_left = ((length - floored_length) / pixel).max(0.).round() as usize;
let mut shader_loc = Point::from((-gap - width, round((side - length) / 2.)));
@@ -119,10 +120,10 @@ impl TabIndicator {
match self.config.position {
TabIndicatorPosition::Left | TabIndicatorPosition::Right => {
shader_loc.y += px_per_tab
shader_loc.y += px_per_tab + gaps_between
}
TabIndicatorPosition::Top | TabIndicatorPosition::Bottom => {
shader_loc.x += px_per_tab
shader_loc.x += px_per_tab + gaps_between
}
}
+3
View File
@@ -62,6 +62,7 @@ layout {
width 4
length total-proportion=1.0
position "right"
gaps-between-tabs 2
active-color "red"
inactive-color "gray"
// active-gradient from="#80c8ff" to="#bbddff" angle=45
@@ -436,6 +437,8 @@ By default, the tab indicator has length equal to half of the window size, or `l
`position` sets the position of the tab indicator relative to the window.
It can be `left`, `right`, `top`, or `bottom`.
`gaps-between-tabs` controls the gap between individual tabs.
`active-color`, `inactive-color`, `active-gradient`, `inactive-gradient` let you override the colors for the tabs.
They have the same semantics as the border and focus ring colors and gradients.