fix(header_bar): increase title portion based on maximum left or right portion

This commit is contained in:
Jeremy Soller 2025-07-24 15:34:56 -06:00
parent 1b988ed1e9
commit 2099dc45cb

View file

@ -7,7 +7,7 @@ use apply::Apply;
use derive_setters::Setters; use derive_setters::Setters;
use iced::Length; use iced::Length;
use iced_core::{Vector, Widget, widget::tree}; use iced_core::{Vector, Widget, widget::tree};
use std::borrow::Cow; use std::{borrow::Cow, cmp};
#[must_use] #[must_use]
pub fn header_bar<'a, Message>() -> HeaderBar<'a, Message> { pub fn header_bar<'a, Message>() -> HeaderBar<'a, Message> {
@ -366,6 +366,7 @@ impl<'a, Message: Clone + 'static> HeaderBar<'a, Message> {
} else { } else {
(portion, portion) (portion, portion)
}; };
let title_portion = cmp::max(left_portion, right_portion) * 2;
// Creates the headerbar widget. // Creates the headerbar widget.
let mut widget = widget::row::with_capacity(3) let mut widget = widget::row::with_capacity(3)
// If elements exist in the start region, append them here. // If elements exist in the start region, append them here.
@ -389,7 +390,7 @@ impl<'a, Message: Clone + 'static> HeaderBar<'a, Message> {
.into(), .into(),
) )
} else if !self.title.is_empty() && !self.is_condensed { } else if !self.title.is_empty() && !self.is_condensed {
Some(self.title_widget()) Some(self.title_widget(title_portion))
} else { } else {
None None
}) })
@ -431,13 +432,13 @@ impl<'a, Message: Clone + 'static> HeaderBar<'a, Message> {
widget.into() widget.into()
} }
fn title_widget(&mut self) -> Element<'a, Message> { fn title_widget(&mut self, title_portion: u16) -> Element<'a, Message> {
let mut title = Cow::default(); let mut title = Cow::default();
std::mem::swap(&mut title, &mut self.title); std::mem::swap(&mut title, &mut self.title);
widget::text::heading(title) widget::text::heading(title)
.apply(widget::container) .apply(widget::container)
.center(Length::Fill) .center(Length::FillPortion(title_portion))
.into() .into()
} }