aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPolesznyák Márk <contact@pml68.dev>2025-12-08 20:39:24 +0100
committerPolesznyák Márk <contact@pml68.dev>2025-12-08 20:39:24 +0100
commit4321b4bc1f70ba85c683dac09fc2dc90af1da1f3 (patch)
treea7824350ec65a293b5ea37459c261143029fd11f
parentfeat(examples): QOL changes (diff)
downloadiced_selection-4321b4bc1f70ba85c683dac09fc2dc90af1da1f3.tar.gz
chore: update as necessary for upstream iced changes
-rw-r--r--src/markdown.rs45
-rw-r--r--src/text.rs4
-rw-r--r--src/text/rich.rs9
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