improv: reduce padding when condensed

This commit is contained in:
Michael Aaron Murphy 2024-06-12 12:52:52 +02:00 committed by Michael Murphy
parent 1cbd563d64
commit dec705e0fe
6 changed files with 87 additions and 85 deletions

View file

@ -314,7 +314,7 @@ impl cosmic::Application for SettingsApp {
crate::pages::Message::DesktopWallpaper(message) => { crate::pages::Message::DesktopWallpaper(message) => {
if let Some(page) = self.pages.page_mut::<desktop::wallpaper::Page>() { if let Some(page) = self.pages.page_mut::<desktop::wallpaper::Page>() {
return page.update(message).map(cosmic::app::Message::App); return page.update(message).map(Into::into);
} }
} }
@ -324,19 +324,19 @@ impl cosmic::Application for SettingsApp {
crate::pages::Message::Displays(message) => { crate::pages::Message::Displays(message) => {
if let Some(page) = self.pages.page_mut::<display::Page>() { if let Some(page) = self.pages.page_mut::<display::Page>() {
return page.update(message).map(cosmic::app::Message::App); return page.update(message).map(Into::into);
} }
} }
crate::pages::Message::Keyboard(message) => { crate::pages::Message::Keyboard(message) => {
if let Some(page) = self.pages.page_mut::<input::keyboard::Page>() { if let Some(page) = self.pages.page_mut::<input::keyboard::Page>() {
return page.update(message).map(cosmic::app::Message::App); return page.update(message).map(Into::into);
} }
} }
crate::pages::Message::Input(message) => { crate::pages::Message::Input(message) => {
if let Some(page) = self.pages.page_mut::<input::Page>() { if let Some(page) = self.pages.page_mut::<input::Page>() {
return page.update(message).map(cosmic::app::Message::App); return page.update(message).map(Into::into);
} }
} }
@ -354,7 +354,7 @@ impl cosmic::Application for SettingsApp {
crate::pages::Message::PanelApplet(message) => { crate::pages::Message::PanelApplet(message) => {
if let Some(page) = self.pages.page_mut::<applets_inner::Page>() { if let Some(page) = self.pages.page_mut::<applets_inner::Page>() {
return page.update(message).map(cosmic::app::Message::App); return page.update(message).map(Into::into);
} }
} }
@ -364,18 +364,18 @@ impl cosmic::Application for SettingsApp {
crate::pages::Message::DockApplet(message) => { crate::pages::Message::DockApplet(message) => {
if let Some(page) = self.pages.page_mut::<dock::applets::Page>() { if let Some(page) = self.pages.page_mut::<dock::applets::Page>() {
return page.update(message).map(cosmic::app::Message::App); return page.update(message).map(Into::into);
} }
} }
crate::pages::Message::Appearance(message) => { crate::pages::Message::Appearance(message) => {
if let Some(page) = self.pages.page_mut::<appearance::Page>() { if let Some(page) = self.pages.page_mut::<appearance::Page>() {
return page.update(message).map(cosmic::app::Message::App); return page.update(message).map(Into::into);
} }
} }
crate::pages::Message::Power(message) => { crate::pages::Message::Power(message) => {
page::update!(self.pages, message, power::Page) page::update!(self.pages, message, power::Page);
} }
}, },
@ -389,7 +389,7 @@ impl cosmic::Application for SettingsApp {
if let Some(page) = self.pages.page_mut::<applets_inner::Page>() { if let Some(page) = self.pages.page_mut::<applets_inner::Page>() {
return page return page
.update(applets_inner::Message::PanelConfig(config)) .update(applets_inner::Message::PanelConfig(config))
.map(cosmic::app::Message::App); .map(Into::into);
} }
} }
@ -421,7 +421,7 @@ impl cosmic::Application for SettingsApp {
if let Some(page) = self.pages.page_mut::<applets_inner::Page>() { if let Some(page) = self.pages.page_mut::<applets_inner::Page>() {
return page return page
.update(applets_inner::Message::Applets(info_list)) .update(applets_inner::Message::Applets(info_list))
.map(cosmic::app::Message::App); .map(Into::into);
} }
} }
@ -554,9 +554,7 @@ impl SettingsApp {
let current_page = self.active_page; let current_page = self.active_page;
self.active_page = page; self.active_page = page;
let mut leave_command = iced::Command::none() let mut leave_command = iced::Command::none();
.map(Message::PageMessage)
.map(cosmic::app::Message::App);
if current_page != page { if current_page != page {
leave_command = self leave_command = self
@ -564,7 +562,7 @@ impl SettingsApp {
.on_leave(current_page) .on_leave(current_page)
.unwrap_or(iced::Command::none()) .unwrap_or(iced::Command::none())
.map(Message::PageMessage) .map(Message::PageMessage)
.map(cosmic::app::Message::App); .map(Into::into);
self.config.active_page = Box::from(&*self.pages.info[page].id); self.config.active_page = Box::from(&*self.pages.info[page].id);
self.config self.config
.set_active_page(Box::from(&*self.pages.info[page].id)); .set_active_page(Box::from(&*self.pages.info[page].id));
@ -583,13 +581,12 @@ impl SettingsApp {
.pages .pages
.on_enter(page, sender) .on_enter(page, sender)
.map(Message::PageMessage) .map(Message::PageMessage)
.map(cosmic::app::Message::App); .map(Into::into);
Command::batch(vec![ Command::batch(vec![
leave_command, leave_command,
page_command, page_command,
cosmic::command::future(async { Message::SetWindowTitle }) cosmic::command::future(async { Message::SetWindowTitle }),
.map(cosmic::app::Message::App),
]) ])
} }
@ -681,7 +678,7 @@ impl SettingsApp {
} }
} }
settings::view_column(column_widgets).into() settings::view_column(column_widgets).padding(0).into()
} }
fn search_changed(&mut self, phrase: String) { fn search_changed(&mut self, phrase: String) {
@ -746,28 +743,37 @@ impl SettingsApp {
} }
} }
settings::view_column(sections).into() settings::view_column(sections).padding(0).into()
} }
/// Displays the sub-pages view of a page. /// Displays the sub-pages view of a page.
fn sub_page_view(&self, sub_pages: &[page::Entity]) -> cosmic::Element<Message> { fn sub_page_view(&self, sub_pages: &[page::Entity]) -> cosmic::Element<Message> {
let theme = cosmic::theme::active(); let theme = cosmic::theme::active();
let mut page_list =
column::with_capacity(sub_pages.len()).spacing(theme.cosmic().space_s());
for entity in sub_pages.iter().copied() { let page_list = sub_pages
let sub_page = &self.pages.info[entity]; .iter()
page_list = page_list.push(crate::widget::page_list_item( .copied()
sub_page.title.as_str(), .fold(
sub_page.description.as_str(), column::with_capacity(sub_pages.len()),
&sub_page.icon_name, |page_list, entity| {
entity, let sub_page = &self.pages.info[entity];
));
} page_list.push(crate::widget::page_list_item(
sub_page.title.as_str(),
sub_page.description.as_str(),
&sub_page.icon_name,
entity,
))
},
)
.spacing(theme.cosmic().space_s())
.padding(0)
.apply(cosmic::Element::from)
.map(Message::Page);
column::with_capacity(2) column::with_capacity(2)
.push(page_title(&self.pages.info[self.active_page])) .push(page_title(&self.pages.info[self.active_page]))
.push(Element::from(page_list).map(Message::Page)) .push(page_list)
.spacing(theme.cosmic().space_m()) .spacing(theme.cosmic().space_m())
.padding(0) .padding(0)
.into() .into()

View file

@ -86,32 +86,29 @@ pub fn color_image<'a, M: 'a>(
} }
/// Color selection list /// Color selection list
///
/// Begin with removable custom colors, and chain with non-removable default colors.
#[must_use] #[must_use]
pub fn color_select_options( pub fn color_select_options(
context: &super::Context, context: &super::Context,
selected: Option<&wallpaper::Color>, selected: Option<&wallpaper::Color>,
) -> Element<'static, Message> { ) -> Element<'static, Message> {
let mut vec = Vec::with_capacity(wallpaper::DEFAULT_COLORS.len()); flex_select_row(
context
// Place removable custom colors first .custom_colors
for color in context.custom_colors.iter().rev() { .iter()
vec.push(color_button( .rev()
color.clone(), .map(|color| (color, true))
true, .chain(wallpaper::DEFAULT_COLORS.iter().map(|color| (color, false)))
selected.map_or(false, |selection| selection == color), .map(|(color, removable)| {
)); color_button(
} color.clone(),
removable,
// Then non-removable default colors selected.map_or(false, |selection| selection == color),
for color in wallpaper::DEFAULT_COLORS { )
vec.push(color_button( })
color.clone(), .collect::<Vec<_>>(),
false, )
selected.map_or(false, |selection| selection == color),
));
}
flex_select_row(vec)
} }
/// Background selection list /// Background selection list

View file

@ -5,7 +5,7 @@ use cosmic::{
iced::{self, Length}, iced::{self, Length},
iced_core::Border, iced_core::Border,
iced_style, theme, iced_style, theme,
widget::{self, button, container, icon, radio, row, settings}, widget::{self, button, container, icon, radio, row, settings, ListColumn},
Apply, Command, Element, Apply, Command, Element,
}; };
use cosmic_comp_config::XkbConfig; use cosmic_comp_config::XkbConfig;
@ -220,8 +220,6 @@ fn input_source(
settings::flex_item(description, popover_button(id, expanded)).into() settings::flex_item(description, popover_button(id, expanded)).into()
} }
pub mod shortcuts;
fn special_char_radio_row<'a>( fn special_char_radio_row<'a>(
desc: &'a str, desc: &'a str,
value: Option<&'static str>, value: Option<&'static str>,
@ -526,11 +524,13 @@ impl Page {
// TODO description, layout default // TODO description, layout default
let mut list = cosmic::widget::list_column(); let mut list =
list = list.add(special_char_radio_row("None", None, current)); cosmic::widget::list_column().add(special_char_radio_row("None", None, current));
for (desc, id) in options {
list = list.add(special_char_radio_row(desc, Some(id), current)); list = options
} .iter()
.map(|(desc, id)| special_char_radio_row(desc, Some(id), current))
.fold(list, ListColumn::add);
cosmic::widget::container(list).padding(24).into() cosmic::widget::container(list).padding(24).into()
} }

View file

@ -26,6 +26,7 @@ pub enum Message {
DockApplet(desktop::dock::applets::Message), DockApplet(desktop::dock::applets::Message),
External { id: String, message: Vec<u8> }, External { id: String, message: Vec<u8> },
Keyboard(input::keyboard::Message), Keyboard(input::keyboard::Message),
KeyboardShortcuts(input::keyboard::shortcuts::Message),
Input(input::Message), Input(input::Message),
Page(Entity), Page(Entity),
Panel(desktop::panel::Message), Panel(desktop::panel::Message),

View file

@ -67,27 +67,24 @@ fn profiles() -> Section<crate::pages::Message> {
let current_profile = runtime.block_on(b.get_current_power_profile()); let current_profile = runtime.block_on(b.get_current_power_profile());
let mut widgets = Vec::new(); section = profiles
.into_iter()
.map(|profile| {
let selected = if current_profile == profile {
Some(true)
} else {
None
};
for profile in profiles { let widget = widget::Radio::new("", true, selected, |_| {
let selected = if current_profile == profile { Message::PowerProfileChange(profile.clone())
Some(true) });
} else {
None
};
let widget = widget::Radio::new("", true, selected, |_| { settings::item::builder(profile.title())
Message::PowerProfileChange(profile.clone()) .description(profile.description())
}); .control(widget)
let item = settings::item::builder(profile.title()) })
.description(profile.description()) .fold(section, settings::Section::add);
.control(widget);
widgets.push(item);
}
for item in widgets {
section = section.add(item);
}
} else { } else {
let item = widget::text::body(fl!("power-mode", "nobackend")); let item = widget::text::body(fl!("power-mode", "nobackend"));
section = section.add(item); section = section.add(item);

View file

@ -150,7 +150,7 @@ fn hardware() -> Section<crate::pages::Message> {
.view::<Page>(move |_binder, page, section| { .view::<Page>(move |_binder, page, section| {
let desc = &section.descriptions; let desc = &section.descriptions;
let mut sections = settings::view_section(&section.title) let sections = settings::view_section(&section.title)
.add(settings::flex_item( .add(settings::flex_item(
&*desc[model], &*desc[model],
text(&page.info.hardware_model), text(&page.info.hardware_model),
@ -161,11 +161,12 @@ fn hardware() -> Section<crate::pages::Message> {
text(&page.info.processor), text(&page.info.processor),
)); ));
for card in &page.info.graphics { page.info
sections = sections.add(settings::flex_item(&*desc[graphics], text(card.as_str()))); .graphics
} .iter()
.fold(sections, |sections, card| {
sections sections.add(settings::flex_item(&*desc[graphics], text(card.as_str())))
})
.add(settings::flex_item( .add(settings::flex_item(
&*desc[disk_capacity], &*desc[disk_capacity],
text(&page.info.disk_capacity), text(&page.info.disk_capacity),