feat: responsive controls and standard button fixes

This commit is contained in:
Michael Aaron Murphy 2024-05-30 17:15:48 +02:00
parent c101089aea
commit cd5a8a701a
No known key found for this signature in database
GPG key ID: B2732D4240C9212C
15 changed files with 146 additions and 149 deletions

View file

@ -1050,19 +1050,10 @@ impl page::Page<crate::pages::Message> for Page {
}
fn header_view(&self) -> Option<Element<'_, crate::pages::Message>> {
let spacing = self.theme_builder.spacing;
let content = row::with_capacity(2)
.spacing(self.theme_builder.spacing.space_xxs)
.push(
button(text(fl!("import")))
.on_press(Message::StartImport)
.padding([spacing.space_xxs, spacing.space_xs]),
)
.push(
button(text(fl!("export")))
.on_press(Message::StartExport)
.padding([spacing.space_xxs, spacing.space_xs]),
)
.push(button::standard(fl!("import")).on_press(Message::StartImport))
.push(button::standard(fl!("export")).on_press(Message::StartExport))
.apply(container)
.width(Length::Fill)
.align_x(alignment::Horizontal::Right)
@ -1560,10 +1551,10 @@ pub fn reset_button() -> Section<crate::pages::Message> {
let spacing = &page.theme_builder.spacing;
let descriptions = &section.descriptions;
if page.can_reset {
cosmic::iced::widget::row![button(text(&*descriptions[0]))
button::standard(&*descriptions[0])
.on_press(Message::Reset)
.padding([spacing.space_xxs, spacing.space_xs])]
.apply(Element::from)
.padding([spacing.space_xxs, spacing.space_xs])
.into()
} else {
horizontal_space(1).apply(Element::from)
}

View file

@ -89,9 +89,8 @@ impl page::Page<crate::pages::Message> for Page {
let content = row::with_capacity(2)
.spacing(spacing.space_xxs)
.push(
button(text(fl!("add-applet")))
.on_press(Message(applets_inner::Message::AddAppletDrawer))
.padding([spacing.space_xxs, spacing.space_xs]),
button::standard(fl!("add-applet"))
.on_press(Message(applets_inner::Message::AddAppletDrawer)),
)
.apply(container)
.width(Length::Fill)

View file

@ -150,7 +150,7 @@ pub(crate) fn enable() -> Section<crate::pages::Message> {
return Element::from(text(fl!("unknown")));
};
settings::view_section(&section.title)
.add(settings::item(
.add(settings::flex_item(
&*descriptions[0],
toggler(
None,

View file

@ -85,7 +85,7 @@ pub fn window_controls() -> Section<crate::pages::Message> {
let descriptions = &section.descriptions;
settings::view_section(&section.title)
.add(settings::item(
.add(settings::flex_item(
&*descriptions[0],
toggler(
None,
@ -93,7 +93,7 @@ pub fn window_controls() -> Section<crate::pages::Message> {
Message::ShowMinimizeButton,
),
))
.add(settings::item(
.add(settings::flex_item(
&*descriptions[1],
toggler(
None,

View file

@ -133,11 +133,7 @@ impl page::Page<crate::pages::Message> for Page {
let spacing = theme.cosmic().spacing;
let content = row::with_capacity(2)
.spacing(spacing.space_xxs)
.push(
button(text(fl!("add-applet")))
.on_press(Message::AddAppletDrawer)
.padding([spacing.space_xxs, spacing.space_xs]),
)
.push(button::standard(fl!("add-applet")).on_press(Message::AddAppletDrawer))
.apply(container)
.width(Length::Fill)
.align_x(alignment::Horizontal::Right)

View file

@ -107,13 +107,13 @@ pub(crate) fn behavior_and_position<
return Element::from(text(fl!("unknown")));
};
settings::view_section(&section.title)
.add(settings::item(
.add(settings::flex_item(
&*descriptions[0],
toggler(None, panel_config.autohide.is_some(), |value| {
Message::AutoHidePanel(value)
}),
))
.add(settings::item(
.add(settings::flex_item(
&*descriptions[1],
dropdown(
page.anchors.as_slice(),
@ -121,7 +121,7 @@ pub(crate) fn behavior_and_position<
Message::PanelAnchor,
),
))
.add(settings::item(
.add(settings::flex_item(
&*descriptions[2],
dropdown(
page.outputs.as_slice(),
@ -161,19 +161,19 @@ pub(crate) fn style<
return Element::from(text(fl!("unknown")));
};
settings::view_section(&section.title)
.add(settings::item(
.add(settings::flex_item(
&*descriptions[0],
toggler(None, panel_config.anchor_gap, |value| {
Message::AnchorGap(value)
}),
))
.add(settings::item(
.add(settings::flex_item(
&*descriptions[1],
toggler(None, panel_config.expand_to_edges, |value| {
Message::ExtendToEdge(value)
}),
))
.add(settings::item(
.add(settings::flex_item(
&*descriptions[2],
dropdown(
inner.backgrounds.as_slice(),
@ -186,7 +186,7 @@ pub(crate) fn style<
Message::Appearance,
),
))
.add(settings::item(
.add(settings::flex_item(
&*descriptions[3],
// TODO custom discrete slider variant
row::with_children(vec![
@ -219,7 +219,7 @@ pub(crate) fn style<
])
.spacing(12),
))
.add(settings::item(
.add(settings::flex_item(
&*descriptions[4],
row::with_children(vec![
text(fl!("number", HashMap::from_iter(vec![("number", 0)]))).into(),
@ -286,7 +286,8 @@ pub(crate) fn add_panel<
.descriptions(vec![fl!("reset-to-default").into()])
.view::<P>(move |_binder, _page, section| {
let descriptions = &section.descriptions;
cosmic::iced::widget::row![button(text(&*descriptions[0])).on_press(Message::FullReset)]
button::standard(&*descriptions[0])
.on_press(Message::FullReset)
.apply(Element::from)
.map(msg_map)
})
@ -305,12 +306,11 @@ pub fn reset_button<
let descriptions = &section.descriptions;
let inner = page.inner();
if inner.system_default == inner.panel_config {
horizontal_space(1).apply(Element::from)
Element::from(horizontal_space(1))
} else {
cosmic::iced::widget::row![
button(text(&*descriptions[0])).on_press(Message::ResetPanel)
]
.apply(Element::from)
button::standard(&*descriptions[0])
.on_press(Message::ResetPanel)
.into()
}
.map(msg_map)
})

View file

@ -1221,7 +1221,7 @@ pub fn settings() -> Section<crate::pages::Message> {
children.push({
let mut column = list_column()
.add(settings::item(
.add(settings::flex_item(
&*WALLPAPER_SAME,
toggler(
None,
@ -1229,10 +1229,10 @@ pub fn settings() -> Section<crate::pages::Message> {
Message::SameWallpaper,
),
))
.add(settings::item(&*WALLPAPER_FIT, wallpaper_fit));
.add(settings::flex_item(&*WALLPAPER_FIT, wallpaper_fit));
if show_slideshow_toggle {
column = column.add(settings::item(
column = column.add(settings::flex_item(
&*WALLPAPER_SLIDE,
toggler(None, slideshow_enabled, Message::Slideshow),
));
@ -1241,7 +1241,7 @@ pub fn settings() -> Section<crate::pages::Message> {
// The rotation frequency dropdown should only be shown when the slideshow is enabled.
if slideshow_enabled {
column
.add(settings::item(
.add(settings::flex_item(
&*WALLPAPER_CHANGE,
dropdown(
&page.rotation_options,

View file

@ -421,7 +421,7 @@ impl Page {
let display_options = active_output.enabled.then(|| {
list_column()
.add(cosmic::widget::settings::item(
.add(cosmic::widget::settings::flex_item(
&*text::DISPLAY_RESOLUTION,
dropdown(
&self.cache.resolutions,
@ -429,7 +429,7 @@ impl Page {
Message::Resolution,
),
))
.add(cosmic::widget::settings::item(
.add(cosmic::widget::settings::flex_item(
&*text::DISPLAY_REFRESH_RATE,
dropdown(
&self.cache.refresh_rates,
@ -437,7 +437,7 @@ impl Page {
Message::RefreshRate,
),
))
.add(cosmic::widget::settings::item(
.add(cosmic::widget::settings::flex_item(
&*text::DISPLAY_SCALE,
dropdown(
&["50%", "75%", "100%", "125%", "150%", "175%", "200%"],
@ -445,7 +445,7 @@ impl Page {
Message::Scale,
),
))
.add(cosmic::widget::settings::item(
.add(cosmic::widget::settings::flex_item(
&*text::ORIENTATION,
dropdown(
&self.cache.orientations,
@ -479,7 +479,7 @@ impl Page {
> 1
|| !active_output.enabled)
.then(|| {
list_column().add(cosmic::widget::settings::item(
list_column().add(cosmic::widget::settings::flex_item(
&*text::DISPLAY_ENABLE,
toggler(None, active_output.enabled, Message::DisplayToggle),
))

View file

@ -216,7 +216,7 @@ fn input_source(
) -> cosmic::Element<Message> {
let expanded = expanded_source_popover.is_some_and(|expanded_id| expanded_id == id);
settings::item(description, popover_button(id, expanded)).into()
settings::flex_item(description, popover_button(id, expanded)).into()
}
pub mod shortcuts;
@ -267,7 +267,7 @@ impl page::Page<crate::pages::Message> for Page {
fn on_enter(
&mut self,
_page: page::Entity,
sender: tokio::sync::mpsc::Sender<crate::pages::Message>,
_sender: tokio::sync::mpsc::Sender<crate::pages::Message>,
) -> Command<crate::pages::Message> {
self.xkb = super::get_config(&self.config, "xkb_config");
match xkb_data::keyboard_layouts() {
@ -657,7 +657,7 @@ fn keyboard_typing_assist() -> Section<crate::pages::Message> {
let theme = cosmic::theme::active();
settings::view_section(&section.title)
.add(settings::item(&*descriptions[0], {
.add(settings::flex_item(&*descriptions[0], {
// Delay
let delay_slider = cosmic::widget::slider(
KB_REPEAT_DELAY_MIN..=KB_REPEAT_DELAY_MAX,
@ -675,7 +675,7 @@ fn keyboard_typing_assist() -> Section<crate::pages::Message> {
.push(delay_slider)
.push(&*descriptions[3])
}))
.add(settings::item(&*descriptions[1], {
.add(settings::flex_item(&*descriptions[1], {
// Repeat rate
let rate_slider = cosmic::widget::slider(
KB_REPEAT_RATE_MIN..=KB_REPEAT_RATE_MAX,

View file

@ -55,13 +55,13 @@ fn mouse() -> Section<crate::pages::Message> {
let theme = cosmic::theme::active();
settings::view_section(&section.title)
.add(settings::item(
.add(settings::flex_item(
&*super::PRIMARY_BUTTON,
cosmic::widget::segmented_control::horizontal(&input.primary_button)
.minimum_button_width(0)
.on_activate(|x| Message::PrimaryButtonSelected(x, false)),
))
.add(settings::item::builder(&*MOUSE_SPEED).control({
.add(settings::item::builder(&*MOUSE_SPEED).flex_control({
let value = (input
.input_default
.acceleration
@ -112,7 +112,7 @@ fn scrolling() -> Section<crate::pages::Message> {
let theme = cosmic::theme::active();
settings::view_section(&section.title)
.add(settings::item(&*super::SCROLLING_SPEED, {
.add(settings::flex_item(&*super::SCROLLING_SPEED, {
let value = input
.input_default
.scroll_config

View file

@ -69,13 +69,13 @@ fn touchpad() -> Section<crate::pages::Message> {
let theme = cosmic::theme::active();
settings::view_section(&section.title)
.add(settings::item(
.add(settings::flex_item(
&*super::PRIMARY_BUTTON,
cosmic::widget::segmented_control::horizontal(&input.touchpad_primary_button)
.minimum_button_width(0)
.on_activate(|x| Message::PrimaryButtonSelected(x, true)),
))
.add(settings::item::builder(&*TOUCHPAD_SPEED).control({
.add(settings::item::builder(&*TOUCHPAD_SPEED).flex_control({
let value = (input
.input_touchpad
.acceleration
@ -277,23 +277,23 @@ fn swiping() -> Section<crate::pages::Message> {
settings::view_section(&*section.title)
.add(
settings::item::builder(&*SWIPING_THREE_FINGER_ANY)
.control(text(&*SWITCH_BETWEEN_WINDOWS)),
.flex_control(text(&*SWITCH_BETWEEN_WINDOWS)),
)
.add(
settings::item::builder(&*SWIPING_FOUR_FINGER_UP)
.control(text(&*SWITCH_TO_PREV_WORKSPACE)),
.flex_control(text(&*SWITCH_TO_PREV_WORKSPACE)),
)
.add(
settings::item::builder(&*SWIPING_FOUR_FINGER_DOWN)
.control(text(&*SWITCH_TO_NEXT_WORKSPACE)),
.flex_control(text(&*SWITCH_TO_NEXT_WORKSPACE)),
)
.add(
settings::item::builder(&*SWIPING_FOUR_FINGER_LEFT)
.control(text(&*OPEN_WORKSPACES_VIEW)),
.flex_control(text(&*OPEN_WORKSPACES_VIEW)),
)
.add(
settings::item::builder(&*SWIPING_FOUR_FINGER_RIGHT)
.control(text(&*OPEN_APPLICATION_LIBRARY)),
.flex_control(text(&*OPEN_APPLICATION_LIBRARY)),
)
.apply(Element::from)
.map(crate::pages::Message::Input)

View file

@ -128,7 +128,7 @@ fn device() -> Section<crate::pages::Message> {
let device_name = settings::item::builder(&*desc[0])
.description(&*desc[1])
.control(hostname_row);
.flex_control(hostname_row);
list_column()
.add(device_name)
@ -151,16 +151,22 @@ fn hardware() -> Section<crate::pages::Message> {
let desc = &section.descriptions;
let mut sections = settings::view_section(&section.title)
.add(settings::item(&*desc[0], text(&page.info.hardware_model)))
.add(settings::item(&*desc[1], text(&page.info.memory)))
.add(settings::item(&*desc[2], text(&page.info.processor)));
.add(settings::flex_item(
&*desc[0],
text(&page.info.hardware_model),
))
.add(settings::flex_item(&*desc[1], text(&page.info.memory)))
.add(settings::flex_item(&*desc[2], text(&page.info.processor)));
for card in &page.info.graphics {
sections = sections.add(settings::item(&*desc[3], text(card.as_str())));
sections = sections.add(settings::flex_item(&*desc[3], text(card.as_str())));
}
sections
.add(settings::item(&*desc[4], text(&page.info.disk_capacity)))
.add(settings::flex_item(
&*desc[4],
text(&page.info.disk_capacity),
))
.into()
})
}
@ -177,13 +183,22 @@ fn os() -> Section<crate::pages::Message> {
.view::<Page>(|_binder, page, section| {
let desc = &section.descriptions;
settings::view_section(&section.title)
.add(settings::item(&*desc[0], text(&page.info.operating_system)))
.add(settings::item(&*desc[1], text(&page.info.os_architecture)))
.add(settings::item(
.add(settings::flex_item(
&*desc[0],
text(&page.info.operating_system),
))
.add(settings::flex_item(
&*desc[1],
text(&page.info.os_architecture),
))
.add(settings::flex_item(
&*desc[2],
text(&page.info.desktop_environment),
))
.add(settings::item(&*desc[3], text(&page.info.windowing_system)))
.add(settings::flex_item(
&*desc[3],
text(&page.info.windowing_system),
))
.into()
})
}

View file

@ -153,7 +153,7 @@ fn format() -> Section<crate::pages::Message> {
)
// First day of week
.add(
settings::item::builder(&*TIME_FORMAT_FIRST).control(dropdown(
settings::item::builder(&*TIME_FORMAT_FIRST).flex_control(dropdown(
&*TIME_FORMAT_WEEKDAYS,
match page.first_day_of_week {
4 => Some(0), // friday