fix(wallpaper): better flex row item aalgorithm

This commit is contained in:
Michael Aaron Murphy 2023-06-23 20:58:02 +02:00
parent 84f96d3d0e
commit c933f80cde
No known key found for this signature in database
GPG key ID: B2732D4240C9212C
2 changed files with 15 additions and 9 deletions

View file

@ -526,7 +526,6 @@ pub fn settings() -> Section<crate::pages::Message> {
.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<crate::pages::Message> {
cosmic::iced::widget::column(children)
.spacing(22)
.padding(0)
.max_width(683)
.apply(Element::from)
.map(crate::pages::Message::DesktopWallpaper)

View file

@ -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<Message> {
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() {