Implement pure version of Svg widget

This commit is contained in:
Héctor Ramón Jiménez 2022-03-22 23:40:08 +07:00
parent 9157f5b9e4
commit ef4c79ea23
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
3 changed files with 70 additions and 0 deletions

View file

@ -9,6 +9,7 @@ pub mod radio;
pub mod rule;
pub mod scrollable;
pub mod slider;
pub mod svg;
pub mod text_input;
pub mod toggler;
pub mod tree;
@ -32,6 +33,7 @@ pub use rule::Rule;
pub use scrollable::Scrollable;
pub use slider::Slider;
pub use space::Space;
pub use svg::Svg;
pub use text::Text;
pub use text_input::TextInput;
pub use toggler::Toggler;

62
pure/src/widget/svg.rs Normal file
View file

@ -0,0 +1,62 @@
use crate::widget::{Tree, Widget};
use crate::Element;
use iced_native::layout::{self, Layout};
use iced_native::renderer;
use iced_native::widget::svg;
use iced_native::{Length, Point, Rectangle};
pub use iced_native::svg::Handle;
pub use svg::Svg;
impl<Message, Renderer> Widget<Message, Renderer> for Svg
where
Renderer: iced_native::svg::Renderer,
{
fn width(&self) -> Length {
<Self as iced_native::Widget<Message, Renderer>>::width(self)
}
fn height(&self) -> Length {
<Self as iced_native::Widget<Message, Renderer>>::height(self)
}
fn layout(
&self,
renderer: &Renderer,
limits: &layout::Limits,
) -> layout::Node {
<Self as iced_native::Widget<Message, Renderer>>::layout(
self, renderer, limits,
)
}
fn draw(
&self,
_tree: &Tree,
renderer: &mut Renderer,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
viewport: &Rectangle,
) {
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
style,
layout,
cursor_position,
viewport,
)
}
}
impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>> for Svg
where
Message: Clone + 'a,
Renderer: iced_native::svg::Renderer + 'a,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)
}
}

View file

@ -151,6 +151,9 @@ pub mod image {
pub type Image = iced_pure::widget::Image<Handle>;
}
#[cfg(feature = "svg")]
pub use iced_pure::widget::svg;
#[cfg(feature = "canvas")]
pub use canvas::Canvas;
@ -159,3 +162,6 @@ pub use qr_code::QRCode;
#[cfg(feature = "image")]
pub use image::Image;
#[cfg(feature = "svg")]
pub use svg::Svg;