mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-22 02:01:55 +07:00
config: Extract appearance and layout
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
|||||||
|
use crate::appearance::{BlockOutFrom, CornerRadius, ShadowRule};
|
||||||
use crate::utils::RegexEq;
|
use crate::utils::RegexEq;
|
||||||
use crate::{BlockOutFrom, CornerRadius, ShadowRule};
|
|
||||||
|
|
||||||
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
|
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
|
||||||
pub struct LayerRule {
|
pub struct LayerRule {
|
||||||
|
|||||||
@@ -0,0 +1,132 @@
|
|||||||
|
use knuffel::errors::DecodeError;
|
||||||
|
use niri_ipc::{ColumnDisplay, SizeChange};
|
||||||
|
|
||||||
|
use crate::appearance::{
|
||||||
|
Border, FocusRing, InsertHint, Shadow, TabIndicator, DEFAULT_BACKGROUND_COLOR,
|
||||||
|
};
|
||||||
|
use crate::{expect_only_children, Color, FloatOrInt};
|
||||||
|
|
||||||
|
#[derive(knuffel::Decode, Debug, Clone, PartialEq)]
|
||||||
|
pub struct Layout {
|
||||||
|
#[knuffel(child, default)]
|
||||||
|
pub focus_ring: FocusRing,
|
||||||
|
#[knuffel(child, default)]
|
||||||
|
pub border: Border,
|
||||||
|
#[knuffel(child, default)]
|
||||||
|
pub shadow: Shadow,
|
||||||
|
#[knuffel(child, default)]
|
||||||
|
pub tab_indicator: TabIndicator,
|
||||||
|
#[knuffel(child, default)]
|
||||||
|
pub insert_hint: InsertHint,
|
||||||
|
#[knuffel(child, unwrap(children), default)]
|
||||||
|
pub preset_column_widths: Vec<PresetSize>,
|
||||||
|
#[knuffel(child)]
|
||||||
|
pub default_column_width: Option<DefaultPresetSize>,
|
||||||
|
#[knuffel(child, unwrap(children), default)]
|
||||||
|
pub preset_window_heights: Vec<PresetSize>,
|
||||||
|
#[knuffel(child, unwrap(argument), default)]
|
||||||
|
pub center_focused_column: CenterFocusedColumn,
|
||||||
|
#[knuffel(child)]
|
||||||
|
pub always_center_single_column: bool,
|
||||||
|
#[knuffel(child)]
|
||||||
|
pub empty_workspace_above_first: bool,
|
||||||
|
#[knuffel(child, unwrap(argument, str), default = Self::default().default_column_display)]
|
||||||
|
pub default_column_display: ColumnDisplay,
|
||||||
|
#[knuffel(child, unwrap(argument), default = Self::default().gaps)]
|
||||||
|
pub gaps: FloatOrInt<0, 65535>,
|
||||||
|
#[knuffel(child, default)]
|
||||||
|
pub struts: Struts,
|
||||||
|
#[knuffel(child, default = DEFAULT_BACKGROUND_COLOR)]
|
||||||
|
pub background_color: Color,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Layout {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
focus_ring: Default::default(),
|
||||||
|
border: Default::default(),
|
||||||
|
shadow: Default::default(),
|
||||||
|
tab_indicator: Default::default(),
|
||||||
|
insert_hint: Default::default(),
|
||||||
|
preset_column_widths: Default::default(),
|
||||||
|
default_column_width: Default::default(),
|
||||||
|
center_focused_column: Default::default(),
|
||||||
|
always_center_single_column: false,
|
||||||
|
empty_workspace_above_first: false,
|
||||||
|
default_column_display: ColumnDisplay::Normal,
|
||||||
|
gaps: FloatOrInt(16.),
|
||||||
|
struts: Default::default(),
|
||||||
|
preset_window_heights: Default::default(),
|
||||||
|
background_color: DEFAULT_BACKGROUND_COLOR,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)]
|
||||||
|
pub enum PresetSize {
|
||||||
|
Proportion(#[knuffel(argument)] f64),
|
||||||
|
Fixed(#[knuffel(argument)] i32),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<PresetSize> for SizeChange {
|
||||||
|
fn from(value: PresetSize) -> Self {
|
||||||
|
match value {
|
||||||
|
PresetSize::Proportion(prop) => SizeChange::SetProportion(prop * 100.),
|
||||||
|
PresetSize::Fixed(fixed) => SizeChange::SetFixed(fixed),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||||
|
pub struct DefaultPresetSize(pub Option<PresetSize>);
|
||||||
|
|
||||||
|
#[derive(knuffel::Decode, Debug, Default, Clone, Copy, PartialEq)]
|
||||||
|
pub struct Struts {
|
||||||
|
#[knuffel(child, unwrap(argument), default)]
|
||||||
|
pub left: FloatOrInt<-65535, 65535>,
|
||||||
|
#[knuffel(child, unwrap(argument), default)]
|
||||||
|
pub right: FloatOrInt<-65535, 65535>,
|
||||||
|
#[knuffel(child, unwrap(argument), default)]
|
||||||
|
pub top: FloatOrInt<-65535, 65535>,
|
||||||
|
#[knuffel(child, unwrap(argument), default)]
|
||||||
|
pub bottom: FloatOrInt<-65535, 65535>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(knuffel::DecodeScalar, Debug, Default, PartialEq, Eq, Clone, Copy)]
|
||||||
|
pub enum CenterFocusedColumn {
|
||||||
|
/// Focusing a column will not center the column.
|
||||||
|
#[default]
|
||||||
|
Never,
|
||||||
|
/// The focused column will always be centered.
|
||||||
|
Always,
|
||||||
|
/// Focusing a column will center it if it doesn't fit on the screen together with the
|
||||||
|
/// previously focused column.
|
||||||
|
OnOverflow,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<S> knuffel::Decode<S> for DefaultPresetSize
|
||||||
|
where
|
||||||
|
S: knuffel::traits::ErrorSpan,
|
||||||
|
{
|
||||||
|
fn decode_node(
|
||||||
|
node: &knuffel::ast::SpannedNode<S>,
|
||||||
|
ctx: &mut knuffel::decode::Context<S>,
|
||||||
|
) -> Result<Self, DecodeError<S>> {
|
||||||
|
expect_only_children(node, ctx);
|
||||||
|
|
||||||
|
let mut children = node.children();
|
||||||
|
|
||||||
|
if let Some(child) = children.next() {
|
||||||
|
if let Some(unwanted_child) = children.next() {
|
||||||
|
ctx.emit_error(DecodeError::unexpected(
|
||||||
|
unwanted_child,
|
||||||
|
"node",
|
||||||
|
"expected no more than one child",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
PresetSize::decode_node(child, ctx).map(Some).map(Self)
|
||||||
|
} else {
|
||||||
|
Ok(Self(None))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
-1259
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,9 @@
|
|||||||
use niri_ipc::ColumnDisplay;
|
use niri_ipc::ColumnDisplay;
|
||||||
|
|
||||||
|
use crate::appearance::{BlockOutFrom, BorderRule, CornerRadius, ShadowRule, TabIndicatorRule};
|
||||||
|
use crate::layout::DefaultPresetSize;
|
||||||
use crate::utils::RegexEq;
|
use crate::utils::RegexEq;
|
||||||
use crate::{
|
use crate::FloatOrInt;
|
||||||
BlockOutFrom, BorderRule, CornerRadius, DefaultPresetSize, FloatOrInt, ShadowRule,
|
|
||||||
TabIndicatorRule,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
|
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
|
||||||
pub struct WindowRule {
|
pub struct WindowRule {
|
||||||
|
|||||||
Reference in New Issue
Block a user