From c933f80cde3c7946aed77810064a5f8c46e21764 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Fri, 23 Jun 2023 20:58:02 +0200 Subject: [PATCH] fix(wallpaper): better flex row item aalgorithm --- app/src/pages/desktop/wallpaper/mod.rs | 2 -- app/src/pages/desktop/wallpaper/widgets.rs | 22 +++++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/src/pages/desktop/wallpaper/mod.rs b/app/src/pages/desktop/wallpaper/mod.rs index f960b1b..855b25c 100644 --- a/app/src/pages/desktop/wallpaper/mod.rs +++ b/app/src/pages/desktop/wallpaper/mod.rs @@ -526,7 +526,6 @@ pub fn settings() -> Section { .width(Length::Fill) .height(Length::Fill) .apply(cosmic::iced::widget::container) - .width(Length::Fill) .height(Length::Fixed(32.0)) .into() } else { @@ -597,7 +596,6 @@ pub fn settings() -> Section { cosmic::iced::widget::column(children) .spacing(22) - .padding(0) .max_width(683) .apply(Element::from) .map(crate::pages::Message::DesktopWallpaper) diff --git a/app/src/pages/desktop/wallpaper/widgets.rs b/app/src/pages/desktop/wallpaper/widgets.rs index a867a1a..1e980ff 100644 --- a/app/src/pages/desktop/wallpaper/widgets.rs +++ b/app/src/pages/desktop/wallpaper/widgets.rs @@ -70,9 +70,8 @@ pub fn color_image( /// Color selection list pub fn color_select_options() -> Element<'static, Message> { cosmic::iced::widget::responsive(|size| { - let items_per_row = ((size.width / (COLOR_WIDTH + ROW_SPACING) as f32).floor() as usize) - .max(1) - .min(8); + let items_per_row = + flex_row_items(size.width, COLOR_WIDTH as f32, ROW_SPACING as f32, 8) as usize; let mut color_column = Vec::with_capacity(wallpaper::DEFAULT_COLORS.len() / items_per_row); let mut colors = wallpaper::DEFAULT_COLORS.iter(); @@ -100,16 +99,25 @@ pub fn color_select_options() -> Element<'static, Message> { .into() } +fn flex_row_items(available: f32, item_width: f32, spacing: f32, max_items: u32) -> u32 { + let mut items = 2; + + while items <= max_items && available >= (item_width + spacing) * items as f32 - spacing { + items += 1; + } + + items - 1 +} + /// Background selection list pub fn wallpaper_select_options(page: &super::Page) -> Element { cosmic::iced::widget::responsive(|size| { - let items_per_row = ((size.width / (WALLPAPER_WIDTH + ROW_SPACING as f32)).floor() - as usize) - .max(1) - .min(4); + let items_per_row = + flex_row_items(size.width, WALLPAPER_WIDTH, ROW_SPACING as f32, 4) as usize; let mut image_column = Vec::with_capacity(page.selection.selection_handles.len() / items_per_row); + let mut image_handles = page.selection.selection_handles.iter(); while let Some((id, handle)) = image_handles.next() {