diff --git a/komorebi-bar/src/bar.rs b/komorebi-bar/src/bar.rs index c239b427..efea2a24 100644 --- a/komorebi-bar/src/bar.rs +++ b/komorebi-bar/src/bar.rs @@ -245,8 +245,9 @@ impl Komobar { } // apply rounding to the widgets - if let Some(Grouping::Bar(config) | Grouping::Side(config) | Grouping::Widget(config)) = - &config.grouping + if let Some( + Grouping::Bar(config) | Grouping::Alignment(config) | Grouping::Widget(config), + ) = &config.grouping { if let Some(rounding) = config.rounding { ctx.style_mut(|style| { @@ -282,7 +283,7 @@ impl Komobar { if let WidgetConfig::Komorebi(config) = widget_config { komorebi_widget = Some(Komorebi::from(config)); komorebi_widget_idx = Some(idx); - side = Some(Side::Left); + side = Some(Alignment::Left); } } @@ -290,7 +291,7 @@ impl Komobar { if let WidgetConfig::Komorebi(config) = widget_config { komorebi_widget = Some(Komorebi::from(config)); komorebi_widget_idx = Some(idx); - side = Some(Side::Right); + side = Some(Alignment::Right); } } @@ -324,8 +325,8 @@ impl Komobar { let boxed: Box = Box::new(widget); match side { - Side::Left => left_widgets[idx] = boxed, - Side::Right => right_widgets[idx] = boxed, + Alignment::Left => left_widgets[idx] = boxed, + Alignment::Right => right_widgets[idx] = boxed, } } @@ -475,7 +476,7 @@ impl eframe::App for Komobar { ui.horizontal_centered(|ui| { // Left-aligned widgets layout ui.with_layout(Layout::left_to_right(Align::Center), |ui| { - render_config.grouping.apply_on_side(ui, |ui| { + render_config.grouping.apply_on_alignment(ui, |ui| { for w in &mut self.left_widgets { w.render(ctx, ui, render_config_clone); } @@ -484,7 +485,7 @@ impl eframe::App for Komobar { // Right-aligned widgets layout ui.with_layout(Layout::right_to_left(Align::Center), |ui| { - render_config.grouping.apply_on_side(ui, |ui| { + render_config.grouping.apply_on_alignment(ui, |ui| { for w in &mut self.right_widgets { w.render(ctx, ui, render_config_clone); } @@ -497,7 +498,7 @@ impl eframe::App for Komobar { } #[derive(Copy, Clone)] -enum Side { +enum Alignment { Left, Right, } diff --git a/komorebi-bar/src/battery.rs b/komorebi-bar/src/battery.rs index e7706caa..eb675911 100644 --- a/komorebi-bar/src/battery.rs +++ b/komorebi-bar/src/battery.rs @@ -1,7 +1,6 @@ use crate::config::LabelPrefix; use crate::widget::BarWidget; use crate::widget::RenderConfig; -use crate::WIDGET_SPACING; use eframe::egui::text::LayoutJob; use eframe::egui::Context; use eframe::egui::FontId; @@ -148,7 +147,7 @@ impl BarWidget for Battery { TextFormat::simple(font_id, ctx.style().visuals.text_color()), ); - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { ui.add( Label::new(layout_job) .selectable(false) @@ -156,8 +155,6 @@ impl BarWidget for Battery { ); }); } - - ui.add_space(WIDGET_SPACING); } } } diff --git a/komorebi-bar/src/cpu.rs b/komorebi-bar/src/cpu.rs index 62d509fd..9e3104f3 100644 --- a/komorebi-bar/src/cpu.rs +++ b/komorebi-bar/src/cpu.rs @@ -1,7 +1,6 @@ use crate::config::LabelPrefix; use crate::widget::BarWidget; use crate::widget::RenderConfig; -use crate::WIDGET_SPACING; use eframe::egui::text::LayoutJob; use eframe::egui::Context; use eframe::egui::FontId; @@ -100,7 +99,7 @@ impl BarWidget for Cpu { TextFormat::simple(font_id, ctx.style().visuals.text_color()), ); - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { if ui .add( Label::new(layout_job) @@ -117,8 +116,6 @@ impl BarWidget for Cpu { } }); } - - ui.add_space(WIDGET_SPACING); } } } diff --git a/komorebi-bar/src/date.rs b/komorebi-bar/src/date.rs index e3d73ac7..6aca1b82 100644 --- a/komorebi-bar/src/date.rs +++ b/komorebi-bar/src/date.rs @@ -1,7 +1,6 @@ use crate::config::LabelPrefix; use crate::widget::BarWidget; use crate::widget::RenderConfig; -use crate::WIDGET_SPACING; use eframe::egui::text::LayoutJob; use eframe::egui::Context; use eframe::egui::FontId; @@ -120,7 +119,7 @@ impl BarWidget for Date { TextFormat::simple(font_id, ctx.style().visuals.text_color()), ); - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { if ui .add( Label::new(WidgetText::LayoutJob(layout_job.clone())) @@ -133,8 +132,6 @@ impl BarWidget for Date { } }); } - - ui.add_space(WIDGET_SPACING); } } } diff --git a/komorebi-bar/src/group.rs b/komorebi-bar/src/group.rs index 21c59ff2..e71c927f 100644 --- a/komorebi-bar/src/group.rs +++ b/komorebi-bar/src/group.rs @@ -1,5 +1,6 @@ use crate::config::Color32Ext; use crate::BACKGROUND_COLOR; +use crate::WIDGET_SPACING; use eframe::egui::Color32; use eframe::egui::Frame; use eframe::egui::InnerResponse; @@ -18,10 +19,10 @@ use std::sync::atomic::Ordering; pub enum Grouping { /// No grouping is applied None, - /// Widgets are grouped on the bar + /// Widgets are grouped as a whole Bar(GroupingConfig), - /// Widgets are grouped on each side - Side(GroupingConfig), + /// Widgets are grouped by alignment + Alignment(GroupingConfig), /// Widgets are grouped individually Widget(GroupingConfig), } @@ -33,43 +34,52 @@ impl Grouping { add_contents: impl FnOnce(&mut Ui) -> R, ) -> InnerResponse { match self { - Self::Bar(config) => Self::define_frame(ui, config).show(ui, add_contents), - Self::Side(_) => Self::default_response(ui, add_contents), - Self::Widget(_) => Self::default_response(ui, add_contents), - Self::None => Self::default_response(ui, add_contents), + Self::Bar(config) => Self::define_group(false, ui, add_contents, config), + Self::Alignment(_) => Self::no_group(ui, add_contents), + Self::Widget(_) => Self::no_group(ui, add_contents), + Self::None => Self::no_group(ui, add_contents), } } - pub fn apply_on_side( + pub fn apply_on_alignment( &mut self, ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R, ) -> InnerResponse { match self { - Self::Bar(_) => Self::default_response(ui, add_contents), - Self::Side(config) => Self::define_frame(ui, config).show(ui, add_contents), - Self::Widget(_) => Self::default_response(ui, add_contents), - Self::None => Self::default_response(ui, add_contents), + Self::Bar(_) => Self::no_group(ui, add_contents), + Self::Alignment(config) => Self::define_group(false, ui, add_contents, config), + Self::Widget(_) => Self::no_group(ui, add_contents), + Self::None => Self::no_group(ui, add_contents), } } pub fn apply_on_widget( &mut self, + use_spacing: bool, ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R, ) -> InnerResponse { match self { - Self::Bar(_) => Self::default_response(ui, add_contents), - Self::Side(_) => Self::default_response(ui, add_contents), - Self::Widget(config) => Self::define_frame(ui, config).show(ui, add_contents), - Self::None => Self::default_response(ui, add_contents), + Self::Bar(_) => Self::widget_group(use_spacing, ui, add_contents), + Self::Alignment(_) => Self::widget_group(use_spacing, ui, add_contents), + Self::Widget(config) => Self::define_group(use_spacing, ui, add_contents, config), + Self::None => Self::widget_group(use_spacing, ui, add_contents), } } - fn define_frame(ui: &mut Ui, config: &mut GroupingConfig) -> Frame { + fn define_group( + use_spacing: bool, + ui: &mut Ui, + add_contents: impl FnOnce(&mut Ui) -> R, + config: &mut GroupingConfig, + ) -> InnerResponse { Frame::none() .outer_margin(Margin::same(0.0)) - .inner_margin(Margin::symmetric(3.0, 3.0)) + .inner_margin(match use_spacing { + true => Margin::symmetric(WIDGET_SPACING / 2.0 + 3.0, 3.0), + false => Margin::symmetric(3.0, 3.0), + }) .stroke(ui.style().visuals.widgets.noninteractive.bg_stroke) .rounding(match config.rounding { Some(rounding) => rounding.into(), @@ -92,12 +102,23 @@ impl Grouping { }, None => Shadow::NONE, }) + .show(ui, add_contents) } - fn default_response( + fn widget_group( + use_spacing: bool, ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R, ) -> InnerResponse { + Frame::none() + .inner_margin(match use_spacing { + true => Margin::symmetric(WIDGET_SPACING / 2.0, 0.0), + false => Margin::same(0.0), + }) + .show(ui, add_contents) + } + + fn no_group(ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R) -> InnerResponse { InnerResponse { inner: add_contents(ui), response: ui.response().clone(), diff --git a/komorebi-bar/src/komorebi.rs b/komorebi-bar/src/komorebi.rs index 4b8235ca..2ae698c2 100644 --- a/komorebi-bar/src/komorebi.rs +++ b/komorebi-bar/src/komorebi.rs @@ -4,7 +4,6 @@ use crate::ui::CustomUi; use crate::widget::BarWidget; use crate::widget::RenderConfig; use crate::MAX_LABEL_WIDTH; -use crate::WIDGET_SPACING; use crossbeam_channel::Receiver; use crossbeam_channel::TryRecvError; use eframe::egui::text::LayoutJob; @@ -130,7 +129,7 @@ impl BarWidget for Komorebi { let mut update = None; // NOTE: There should always be at least one workspace. - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(false, ui, |ui| { for (i, (ws, should_show)) in komorebi_notification_state.workspaces.iter().enumerate() { @@ -193,13 +192,11 @@ impl BarWidget for Komorebi { if let Some(update) = update { komorebi_notification_state.selected_workspace = update; } - - ui.add_space(WIDGET_SPACING); } if let Some(layout) = self.layout { if layout.enable { - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { if ui .add( Label::new(komorebi_notification_state.layout.to_string()) @@ -242,8 +239,6 @@ impl BarWidget for Komorebi { } } }); - - ui.add_space(WIDGET_SPACING); } } @@ -252,7 +247,7 @@ impl BarWidget for Komorebi { for (name, location) in configuration_switcher.configurations.iter() { let path = PathBuf::from(location); if path.is_file() { - config.grouping.apply_on_widget(ui,|ui|{ + config.grouping.apply_on_widget(true, ui,|ui|{ if ui .add(Label::new(name).selectable(false).sense(Sense::click())) .clicked() @@ -302,8 +297,6 @@ impl BarWidget for Komorebi { }}); } } - - ui.add_space(WIDGET_SPACING); } } @@ -312,7 +305,7 @@ impl BarWidget for Komorebi { let titles = &komorebi_notification_state.focused_container_information.0; if !titles.is_empty() { - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { let icons = &komorebi_notification_state.focused_container_information.1; let focused_window_idx = komorebi_notification_state.focused_container_information.2; @@ -418,14 +411,10 @@ impl BarWidget for Komorebi { } } } - - ui.add_space(WIDGET_SPACING); } }); } } - - ui.add_space(WIDGET_SPACING); } } } diff --git a/komorebi-bar/src/media.rs b/komorebi-bar/src/media.rs index 91904cec..35651bb5 100644 --- a/komorebi-bar/src/media.rs +++ b/komorebi-bar/src/media.rs @@ -2,7 +2,6 @@ use crate::ui::CustomUi; use crate::widget::BarWidget; use crate::widget::RenderConfig; use crate::MAX_LABEL_WIDTH; -use crate::WIDGET_SPACING; use eframe::egui::text::LayoutJob; use eframe::egui::Context; use eframe::egui::FontId; @@ -103,7 +102,7 @@ impl BarWidget for Media { TextFormat::simple(font_id, ctx.style().visuals.text_color()), ); - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { let available_height = ui.available_height(); let mut custom_ui = CustomUi(ui); @@ -123,8 +122,6 @@ impl BarWidget for Media { self.toggle(); } }); - - ui.add_space(WIDGET_SPACING); } } } diff --git a/komorebi-bar/src/memory.rs b/komorebi-bar/src/memory.rs index bd2f8f88..8feac2f6 100644 --- a/komorebi-bar/src/memory.rs +++ b/komorebi-bar/src/memory.rs @@ -1,7 +1,6 @@ use crate::config::LabelPrefix; use crate::widget::BarWidget; use crate::widget::RenderConfig; -use crate::WIDGET_SPACING; use eframe::egui::text::LayoutJob; use eframe::egui::Context; use eframe::egui::FontId; @@ -103,7 +102,7 @@ impl BarWidget for Memory { TextFormat::simple(font_id, ctx.style().visuals.text_color()), ); - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { if ui .add( Label::new(layout_job) @@ -120,8 +119,6 @@ impl BarWidget for Memory { } }); } - - ui.add_space(WIDGET_SPACING); } } } diff --git a/komorebi-bar/src/network.rs b/komorebi-bar/src/network.rs index 61fa09b9..56ea0e32 100644 --- a/komorebi-bar/src/network.rs +++ b/komorebi-bar/src/network.rs @@ -1,7 +1,6 @@ use crate::config::LabelPrefix; use crate::widget::BarWidget; use crate::widget::RenderConfig; -use crate::WIDGET_SPACING; use eframe::egui::text::LayoutJob; use eframe::egui::Context; use eframe::egui::FontId; @@ -321,22 +320,18 @@ impl BarWidget for Network { fn render(&mut self, ctx: &Context, ui: &mut Ui, mut config: RenderConfig) { if self.show_total_data_transmitted { for output in self.total_data_transmitted() { - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { ui.add(Label::new(output).selectable(false)); }); } - - ui.add_space(WIDGET_SPACING); } if self.show_network_activity { for output in self.network_activity() { - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { ui.add(Label::new(output).selectable(false)); }); } - - ui.add_space(WIDGET_SPACING); } if self.enable { @@ -372,7 +367,7 @@ impl BarWidget for Network { TextFormat::simple(font_id, ctx.style().visuals.text_color()), ); - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { if ui .add( Label::new(layout_job) @@ -387,8 +382,6 @@ impl BarWidget for Network { } }); } - - ui.add_space(WIDGET_SPACING); } } } diff --git a/komorebi-bar/src/storage.rs b/komorebi-bar/src/storage.rs index 20844623..e715f083 100644 --- a/komorebi-bar/src/storage.rs +++ b/komorebi-bar/src/storage.rs @@ -1,7 +1,6 @@ use crate::config::LabelPrefix; use crate::widget::BarWidget; use crate::widget::RenderConfig; -use crate::WIDGET_SPACING; use eframe::egui::text::LayoutJob; use eframe::egui::Context; use eframe::egui::FontId; @@ -108,7 +107,7 @@ impl BarWidget for Storage { TextFormat::simple(font_id.clone(), ctx.style().visuals.text_color()), ); - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { if ui .add( Label::new(layout_job) @@ -129,8 +128,6 @@ impl BarWidget for Storage { } } }); - - ui.add_space(WIDGET_SPACING); } } } diff --git a/komorebi-bar/src/time.rs b/komorebi-bar/src/time.rs index d7aa5029..af07f840 100644 --- a/komorebi-bar/src/time.rs +++ b/komorebi-bar/src/time.rs @@ -1,7 +1,6 @@ use crate::config::LabelPrefix; use crate::widget::BarWidget; use crate::widget::RenderConfig; -use crate::WIDGET_SPACING; use eframe::egui::text::LayoutJob; use eframe::egui::Context; use eframe::egui::FontId; @@ -111,7 +110,7 @@ impl BarWidget for Time { TextFormat::simple(font_id, ctx.style().visuals.text_color()), ); - config.grouping.apply_on_widget(ui, |ui| { + config.grouping.apply_on_widget(true, ui, |ui| { if ui .add( Label::new(layout_job) @@ -124,8 +123,6 @@ impl BarWidget for Time { } }); } - - ui.add_space(WIDGET_SPACING); } } }