From 1008ec2031ab5c9f9ee9cec48883eaeabb904fb4 Mon Sep 17 00:00:00 2001 From: Csaba Date: Fri, 8 Nov 2024 17:11:43 +0100 Subject: [PATCH] rounding from settings, and apply_on_side --- komorebi-bar/src/bar.rs | 38 +++++++++++++++---------------- komorebi-bar/src/group.rs | 47 +++++++++++++++++++++++++++++++-------- 2 files changed, 56 insertions(+), 29 deletions(-) diff --git a/komorebi-bar/src/bar.rs b/komorebi-bar/src/bar.rs index f4211579..d096bbbf 100644 --- a/komorebi-bar/src/bar.rs +++ b/komorebi-bar/src/bar.rs @@ -2,9 +2,7 @@ use crate::config::KomobarConfig; use crate::config::KomobarTheme; use crate::config::Position; use crate::config::PositionConfig; -use crate::group::BorderRadius; use crate::group::Grouping; -use crate::group::GroupingConfig; use crate::komorebi::Komorebi; use crate::komorebi::KomorebiNotificationState; use crate::process_hwnd; @@ -45,7 +43,7 @@ use std::sync::Arc; pub struct Komobar { pub config: Arc, - pub render_config: RenderConfig, + pub render_config: Rc>, pub komorebi_notification_state: Option>>, pub left_widgets: Vec>, pub right_widgets: Vec>, @@ -320,20 +318,12 @@ impl Komobar { ) -> Self { let mut komobar = Self { config: config.clone(), - render_config: RenderConfig { + render_config: Rc::new(RefCell::new(RenderConfig { grouping: match config.grouping { - // TESTING - None => Grouping::Widget(GroupingConfig { - rounding: Some(BorderRadius { - nw: 15.0, - ne: 15.0, - sw: 15.0, - se: 15.0, - }), - }), + None => Grouping::None, Some(grouping) => grouping, }, - }, + })), komorebi_notification_state: None, left_widgets: vec![], right_widgets: vec![], @@ -452,18 +442,26 @@ impl eframe::App for Komobar { Frame::none().fill(*self.bg_color.borrow()) }; + // NOTE: is there a better way? + let mut render_config = self.render_config.borrow_mut(); + let render_config_clone = render_config.clone(); + CentralPanel::default().frame(frame).show(ctx, |ui| { ui.horizontal_centered(|ui| { ui.with_layout(Layout::left_to_right(Align::Center), |ui| { - for w in &mut self.left_widgets { - w.render(ctx, ui, self.render_config); - } + render_config.grouping.apply_on_side(ui, |ui| { + for w in &mut self.left_widgets { + w.render(ctx, ui, render_config_clone); + } + }); }); ui.with_layout(Layout::right_to_left(Align::Center), |ui| { - for w in &mut self.right_widgets { - w.render(ctx, ui, self.render_config); - } + render_config.grouping.apply_on_side(ui, |ui| { + for w in &mut self.right_widgets { + w.render(ctx, ui, render_config_clone); + } + }); }) }) }); diff --git a/komorebi-bar/src/group.rs b/komorebi-bar/src/group.rs index cee7abf6..01ec25ca 100644 --- a/komorebi-bar/src/group.rs +++ b/komorebi-bar/src/group.rs @@ -1,3 +1,4 @@ +//use eframe::egui::Color32; use eframe::egui::Frame; use eframe::egui::InnerResponse; use eframe::egui::Margin; @@ -28,21 +29,49 @@ impl Grouping { inner: add_contents(ui), response: ui.response().clone(), }, - Self::Widget(_config) => { - Frame::none() - //.fill(Color32::from_black_alpha(255u8)) - .outer_margin(Margin::symmetric(0.0, 0.0)) - .inner_margin(Margin::symmetric(7.0, 2.0)) - .rounding(Rounding::same(15.0)) - .stroke(ui.style().visuals.widgets.noninteractive.bg_stroke) - .show(ui, add_contents) - } + Self::Widget(config) => Frame::none() + //.fill(Color32::from_black_alpha(255u8)) + .outer_margin(Margin::symmetric(0.0, 0.0)) + .inner_margin(Margin::symmetric(7.0, 2.0)) + .rounding(match config.rounding { + None => Rounding::same(15.0), + Some(rounding) => rounding.into(), + }) + .stroke(ui.style().visuals.widgets.noninteractive.bg_stroke) + .show(ui, add_contents), Self::Side(_config) => InnerResponse { inner: add_contents(ui), response: ui.response().clone(), }, } } + + pub fn apply_on_side( + &mut self, + ui: &mut Ui, + add_contents: impl FnOnce(&mut Ui) -> R, + ) -> InnerResponse { + match self { + Self::None => InnerResponse { + inner: add_contents(ui), + response: ui.response().clone(), + }, + Self::Widget(_config) => InnerResponse { + inner: add_contents(ui), + response: ui.response().clone(), + }, + Self::Side(config) => Frame::none() + //.fill(Color32::from_black_alpha(255u8)) + .outer_margin(Margin::symmetric(0.0, 0.0)) + .inner_margin(Margin::symmetric(7.0, 2.0)) + .rounding(match config.rounding { + None => Rounding::same(15.0), + Some(rounding) => rounding.into(), + }) + .stroke(ui.style().visuals.widgets.noninteractive.bg_stroke) + .show(ui, add_contents), + } + } } #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema)]