diff options
| author | 2024-07-18 22:39:49 +0200 | |
|---|---|---|
| committer | 2024-07-18 22:39:49 +0200 | |
| commit | 23ad15391c88f562c90f4344d3949f76b6f9caf9 (patch) | |
| tree | 883f5752e3cfe516ee22048015e9255b502bb04e /core/src/widget | |
| parent | 616689ca54942a13aac3615e571ae995ad4571b6 (diff) | |
| parent | 06acb740fba1889c6a9fb48dfa3ae3aaac1df3ab (diff) | |
| download | iced-23ad15391c88f562c90f4344d3949f76b6f9caf9.tar.gz iced-23ad15391c88f562c90f4344d3949f76b6f9caf9.tar.bz2 iced-23ad15391c88f562c90f4344d3949f76b6f9caf9.zip | |
Merge pull request #2508 from iced-rs/feature/rich-text
`rich_text` and `markdown` widgets
Diffstat (limited to 'core/src/widget')
| -rw-r--r-- | core/src/widget/text.rs | 98 | 
1 files changed, 10 insertions, 88 deletions
| diff --git a/core/src/widget/text.rs b/core/src/widget/text.rs index 91c9893d..d0ecd27b 100644 --- a/core/src/widget/text.rs +++ b/core/src/widget/text.rs @@ -3,15 +3,14 @@ use crate::alignment;  use crate::layout;  use crate::mouse;  use crate::renderer; -use crate::text::{self, Paragraph}; +use crate::text; +use crate::text::paragraph::{self, Paragraph};  use crate::widget::tree::{self, Tree};  use crate::{      Color, Element, Layout, Length, Pixels, Point, Rectangle, Size, Theme,      Widget,  }; -use std::borrow::Cow; -  pub use text::{LineHeight, Shaping};  /// A paragraph of text. @@ -21,7 +20,7 @@ where      Theme: Catalog,      Renderer: text::Renderer,  { -    fragment: Fragment<'a>, +    fragment: text::Fragment<'a>,      size: Option<Pixels>,      line_height: LineHeight,      width: Length, @@ -39,7 +38,7 @@ where      Renderer: text::Renderer,  {      /// Create a new fragment of [`Text`] with the given contents. -    pub fn new(fragment: impl IntoFragment<'a>) -> Self { +    pub fn new(fragment: impl text::IntoFragment<'a>) -> Self {          Text {              fragment: fragment.into_fragment(),              size: None, @@ -155,7 +154,7 @@ where  /// The internal state of a [`Text`] widget.  #[derive(Debug, Default)] -pub struct State<P: Paragraph>(P); +pub struct State<P: Paragraph>(paragraph::Plain<P>);  impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>      for Text<'a, Theme, Renderer> @@ -168,7 +167,9 @@ where      }      fn state(&self) -> tree::State { -        tree::State::new(State(Renderer::Paragraph::default())) +        tree::State::new(State::<Renderer::Paragraph>( +            paragraph::Plain::default(), +        ))      }      fn size(&self) -> Size<Length> { @@ -213,7 +214,7 @@ where          let state = tree.state.downcast_ref::<State<Renderer::Paragraph>>();          let style = theme.style(&self.class); -        draw(renderer, defaults, layout, state, style, viewport); +        draw(renderer, defaults, layout, state.0.raw(), style, viewport);      }  } @@ -272,13 +273,12 @@ pub fn draw<Renderer>(      renderer: &mut Renderer,      style: &renderer::Style,      layout: Layout<'_>, -    state: &State<Renderer::Paragraph>, +    paragraph: &Renderer::Paragraph,      appearance: Style,      viewport: &Rectangle,  ) where      Renderer: text::Renderer,  { -    let State(ref paragraph) = state;      let bounds = layout.bounds();      let x = match paragraph.horizontal_alignment() { @@ -412,81 +412,3 @@ pub fn danger(theme: &Theme) -> Style {          color: Some(theme.palette().danger),      }  } - -/// A fragment of [`Text`]. -/// -/// This is just an alias to a string that may be either -/// borrowed or owned. -pub type Fragment<'a> = Cow<'a, str>; - -/// A trait for converting a value to some text [`Fragment`]. -pub trait IntoFragment<'a> { -    /// Converts the value to some text [`Fragment`]. -    fn into_fragment(self) -> Fragment<'a>; -} - -impl<'a> IntoFragment<'a> for Fragment<'a> { -    fn into_fragment(self) -> Fragment<'a> { -        self -    } -} - -impl<'a, 'b> IntoFragment<'a> for &'a Fragment<'b> { -    fn into_fragment(self) -> Fragment<'a> { -        Fragment::Borrowed(self) -    } -} - -impl<'a> IntoFragment<'a> for &'a str { -    fn into_fragment(self) -> Fragment<'a> { -        Fragment::Borrowed(self) -    } -} - -impl<'a> IntoFragment<'a> for &'a String { -    fn into_fragment(self) -> Fragment<'a> { -        Fragment::Borrowed(self.as_str()) -    } -} - -impl<'a> IntoFragment<'a> for String { -    fn into_fragment(self) -> Fragment<'a> { -        Fragment::Owned(self) -    } -} - -macro_rules! into_fragment { -    ($type:ty) => { -        impl<'a> IntoFragment<'a> for $type { -            fn into_fragment(self) -> Fragment<'a> { -                Fragment::Owned(self.to_string()) -            } -        } - -        impl<'a> IntoFragment<'a> for &$type { -            fn into_fragment(self) -> Fragment<'a> { -                Fragment::Owned(self.to_string()) -            } -        } -    }; -} - -into_fragment!(char); -into_fragment!(bool); - -into_fragment!(u8); -into_fragment!(u16); -into_fragment!(u32); -into_fragment!(u64); -into_fragment!(u128); -into_fragment!(usize); - -into_fragment!(i8); -into_fragment!(i16); -into_fragment!(i32); -into_fragment!(i64); -into_fragment!(i128); -into_fragment!(isize); - -into_fragment!(f32); -into_fragment!(f64); | 
