diff options
| author | Polesznyák Márk <contact@pml68.dev> | 2025-12-08 20:39:24 +0100 |
|---|---|---|
| committer | Polesznyák Márk <contact@pml68.dev> | 2025-12-08 20:39:24 +0100 |
| commit | 4321b4bc1f70ba85c683dac09fc2dc90af1da1f3 (patch) | |
| tree | a7824350ec65a293b5ea37459c261143029fd11f | |
| parent | feat(examples): QOL changes (diff) | |
| download | iced_selection-4321b4bc1f70ba85c683dac09fc2dc90af1da1f3.tar.gz | |
chore: update as necessary for upstream iced changes
| -rw-r--r-- | src/markdown.rs | 45 | ||||
| -rw-r--r-- | src/text.rs | 4 | ||||
| -rw-r--r-- | src/text/rich.rs | 9 |
3 files changed, 38 insertions, 20 deletions
diff --git a/src/markdown.rs b/src/markdown.rs index f868f05..bf7ba51 100644 --- a/src/markdown.rs +++ b/src/markdown.rs @@ -1,10 +1,10 @@ //! A custom markdown viewer and its corresponding functions. use iced_widget::graphics::text::Paragraph; use iced_widget::markdown::{ - Catalog, HeadingLevel, Item, Settings, Text, Viewer, view_with, + Bullet, Catalog, HeadingLevel, Item, Settings, Text, Viewer, view_with, }; pub use iced_widget::markdown::{Content, Uri, parse}; -use iced_widget::{column, container, row, scrollable}; +use iced_widget::{checkbox, column, container, row, scrollable}; use crate::core::Font; use crate::core::alignment; @@ -12,6 +12,12 @@ use crate::core::padding; use crate::core::{self, Element, Length, Pixels}; use crate::{rich_text, text}; +fn bullet_items(bullet: &Bullet) -> &[Item] { + match bullet { + Bullet::Point { items } | Bullet::Task { items, .. } => items, + } +} + /// Display a bunch of markdown items. pub fn view<'a, Theme, Renderer>( items: impl IntoIterator<Item = &'a Item>, @@ -91,18 +97,31 @@ where pub fn unordered_list<'a, Message, Theme, Renderer>( viewer: &impl Viewer<'a, Message, Theme, Renderer>, settings: Settings, - items: &'a [Vec<Item>], + bullets: &'a [Bullet], ) -> Element<'a, Message, Theme, Renderer> where Message: 'a, Theme: Catalog + text::Catalog + 'a, Renderer: core::text::Renderer<Paragraph = Paragraph, Font = Font> + 'a, { - column(items.iter().map(|items| { + column(bullets.iter().map(|bullet| { row![ - text("•").size(settings.text_size), + match bullet { + Bullet::Point { .. } => { + text("•").size(settings.text_size).into() + } + Bullet::Task { done, .. } => { + Element::from( + container(checkbox(*done).size(settings.text_size)) + .center_y( + iced_widget::text::LineHeight::default() + .to_absolute(settings.text_size), + ), + ) + } + }, view_with( - items, + bullet_items(bullet), Settings { spacing: settings.spacing * 0.6, ..settings @@ -126,23 +145,25 @@ pub fn ordered_list<'a, Message, Theme, Renderer>( viewer: &impl Viewer<'a, Message, Theme, Renderer>, settings: Settings, start: u64, - items: &'a [Vec<Item>], + bullets: &'a [Bullet], ) -> Element<'a, Message, Theme, Renderer> where Message: 'a, Theme: Catalog + text::Catalog + 'a, Renderer: core::text::Renderer<Paragraph = Paragraph, Font = Font> + 'a, { - let digits = ((start + items.len() as u64).max(1) as f32).log10().ceil(); + let digits = ((start + bullets.len() as u64).max(1) as f32) + .log10() + .ceil(); - column(items.iter().enumerate().map(|(i, items)| { + column(bullets.iter().enumerate().map(|(i, bullet)| { row![ text!("{}.", i as u64 + start) .size(settings.text_size) .align_x(alignment::Horizontal::Right) .width(settings.text_size * ((digits / 2.0).ceil() + 1.0)), view_with( - items, + bullet_items(bullet), Settings { spacing: settings.spacing * 0.6, ..settings @@ -230,7 +251,7 @@ where fn unordered_list( &self, settings: Settings, - items: &'a [Vec<Item>], + items: &'a [Bullet], ) -> Element<'a, Uri, Theme, Renderer> { unordered_list(self, settings, items) } @@ -239,7 +260,7 @@ where &self, settings: Settings, start: u64, - items: &'a [Vec<Item>], + items: &'a [Bullet], ) -> Element<'a, Uri, Theme, Renderer> { ordered_list(self, settings, start, items) } diff --git a/src/text.rs b/src/text.rs index ff5d5a4..e106919 100644 --- a/src/text.rs +++ b/src/text.rs @@ -636,8 +636,8 @@ where let bounds = layout.bounds(); let (rows, mut start, mut end) = state.selection_end_points(); - start = start + core::Vector::new(bounds.x, bounds.y); - end = end + core::Vector::new(bounds.x, bounds.y); + start += core::Vector::new(bounds.x, bounds.y); + end += core::Vector::new(bounds.x, bounds.y); let line_height = self .format diff --git a/src/text/rich.rs b/src/text/rich.rs index 4a7549f..4c6319b 100644 --- a/src/text/rich.rs +++ b/src/text/rich.rs @@ -446,10 +446,7 @@ where span.padding.top, ), bounds.size() - + Size::new( - span.padding.x(), - span.padding.y(), - ), + + Size::new(span.padding.x(), span.padding.y()), ); renderer.fill_quad( @@ -524,8 +521,8 @@ where let bounds = layout.bounds(); let (rows, mut start, mut end) = state.selection_end_points(); - start = start + core::Vector::new(bounds.x, bounds.y); - end = end + core::Vector::new(bounds.x, bounds.y); + start += core::Vector::new(bounds.x, bounds.y); + end += core::Vector::new(bounds.x, bounds.y); let line_height = self .line_height |
