Implement Widget::draw for custom_widget example

This commit is contained in:
Héctor Ramón Jiménez 2021-10-18 15:49:28 +07:00
parent 945f69e567
commit 95acc1deb8
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
2 changed files with 19 additions and 22 deletions

View file

@ -8,4 +8,3 @@ publish = false
[dependencies] [dependencies]
iced = { path = "../.." } iced = { path = "../.." }
iced_native = { path = "../../native" } iced_native = { path = "../../native" }
iced_graphics = { path = "../../graphics" }

View file

@ -9,10 +9,11 @@ mod circle {
// Of course, you can choose to make the implementation renderer-agnostic, // Of course, you can choose to make the implementation renderer-agnostic,
// if you wish to, by creating your own `Renderer` trait, which could be // if you wish to, by creating your own `Renderer` trait, which could be
// implemented by `iced_wgpu` and other renderers. // implemented by `iced_wgpu` and other renderers.
use iced_graphics::renderer::{self, Renderer}; use iced_native::layout::{self, Layout};
use iced_graphics::Backend; use iced_native::renderer;
use iced_native::{ use iced_native::{
layout, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, Background, Color, Element, Hasher, Length, Point, Rectangle, Size,
Widget,
}; };
pub struct Circle { pub struct Circle {
@ -25,9 +26,9 @@ mod circle {
} }
} }
impl<Message, B> Widget<Message, Renderer<B>> for Circle impl<Message, Renderer> Widget<Message, Renderer> for Circle
where where
B: Backend, Renderer: renderer::Renderer,
{ {
fn width(&self) -> Length { fn width(&self) -> Length {
Length::Shrink Length::Shrink
@ -39,7 +40,7 @@ mod circle {
fn layout( fn layout(
&self, &self,
_renderer: &Renderer<B>, _renderer: &Renderer,
_limits: &layout::Limits, _limits: &layout::Limits,
) -> layout::Node { ) -> layout::Node {
layout::Node::new(Size::new(self.radius * 2.0, self.radius * 2.0)) layout::Node::new(Size::new(self.radius * 2.0, self.radius * 2.0))
@ -53,30 +54,27 @@ mod circle {
fn draw( fn draw(
&self, &self,
_renderer: &mut Renderer<B>, renderer: &mut Renderer,
_style: &renderer::Style, _style: &renderer::Style,
_layout: Layout<'_>, layout: Layout<'_>,
_cursor_position: Point, _cursor_position: Point,
_viewport: &Rectangle, _viewport: &Rectangle,
) { ) {
// ( renderer.fill_rectangle(renderer::Quad {
// Primitive::Quad { bounds: layout.bounds(),
// bounds: layout.bounds(), background: Background::Color(Color::BLACK),
// background: Background::Color(Color::BLACK), border_radius: self.radius,
// border_radius: self.radius, border_width: 0.0,
// border_width: 0.0, border_color: Color::TRANSPARENT,
// border_color: Color::TRANSPARENT, });
// },
// mouse::Interaction::default(),
// )
} }
} }
impl<'a, Message, B> Into<Element<'a, Message, Renderer<B>>> for Circle impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>> for Circle
where where
B: Backend, Renderer: renderer::Renderer,
{ {
fn into(self) -> Element<'a, Message, Renderer<B>> { fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self) Element::new(self)
} }
} }