From 03b34931383e701c39c653a7662a616fe21a0947 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 14 Oct 2021 16:07:22 +0700 Subject: Remove trait-specific draw logic in `iced_native` --- graphics/src/widget/canvas.rs | 49 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 25 deletions(-) (limited to 'graphics/src/widget/canvas.rs') diff --git a/graphics/src/widget/canvas.rs b/graphics/src/widget/canvas.rs index 7897c8ec..7bf00ca5 100644 --- a/graphics/src/widget/canvas.rs +++ b/graphics/src/widget/canvas.rs @@ -3,12 +3,10 @@ //! A [`Canvas`] widget can be used to draw different kinds of 2D shapes in a //! [`Frame`]. It can be used for animation, data visualization, game graphics, //! and more! -use crate::{Backend, Defaults, Primitive, Renderer}; +use crate::{Backend, Defaults, Renderer}; use iced_native::layout; -use iced_native::mouse; use iced_native::{ - Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Vector, - Widget, + Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, }; use std::hash::Hash; use std::marker::PhantomData; @@ -190,28 +188,29 @@ where &self, _renderer: &mut Renderer, _defaults: &Defaults, - layout: Layout<'_>, - cursor_position: Point, + _layout: Layout<'_>, + _cursor_position: Point, _viewport: &Rectangle, - ) -> (Primitive, mouse::Interaction) { - let bounds = layout.bounds(); - let translation = Vector::new(bounds.x, bounds.y); - let cursor = Cursor::from_window_position(cursor_position); - - ( - Primitive::Translate { - translation, - content: Box::new(Primitive::Group { - primitives: self - .program - .draw(bounds, cursor) - .into_iter() - .map(Geometry::into_primitive) - .collect(), - }), - }, - self.program.mouse_interaction(bounds, cursor), - ) + ) { + // let bounds = layout.bounds(); + // let translation = Vector::new(bounds.x, bounds.y); + // let cursor = Cursor::from_window_position(cursor_position); + + // ( + // Primitive::Translate { + // translation, + // content: Box::new(Primitive::Group { + // primitives: self + // .program + // .draw(bounds, cursor) + // .into_iter() + // .map(Geometry::into_primitive) + // .collect(), + // }), + // }, + // self.program.mouse_interaction(bounds, cursor), + // ) + // TODO } fn hash_layout(&self, state: &mut Hasher) { -- cgit From edea093350e1b576e2b7db50c525e7fa5c3bea9f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 18 Oct 2021 15:19:04 +0700 Subject: Move `Defaults` from `iced_graphics` to `iced_native` --- graphics/src/widget/canvas.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'graphics/src/widget/canvas.rs') diff --git a/graphics/src/widget/canvas.rs b/graphics/src/widget/canvas.rs index 7bf00ca5..3990c2b9 100644 --- a/graphics/src/widget/canvas.rs +++ b/graphics/src/widget/canvas.rs @@ -3,7 +3,9 @@ //! A [`Canvas`] widget can be used to draw different kinds of 2D shapes in a //! [`Frame`]. It can be used for animation, data visualization, game graphics, //! and more! -use crate::{Backend, Defaults, Renderer}; +use crate::renderer::{self, Renderer}; +use crate::Backend; + use iced_native::layout; use iced_native::{ Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, @@ -187,7 +189,7 @@ where fn draw( &self, _renderer: &mut Renderer, - _defaults: &Defaults, + _style: &renderer::Style, _layout: Layout<'_>, _cursor_position: Point, _viewport: &Rectangle, -- cgit From de728737fd69265f812f717ca70d3e0bd40838e5 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 29 Oct 2021 16:45:47 +0700 Subject: Implement `Widget::draw` for `Canvas` in `iced_graphics` --- graphics/src/widget/canvas.rs | 46 +++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 24 deletions(-) (limited to 'graphics/src/widget/canvas.rs') diff --git a/graphics/src/widget/canvas.rs b/graphics/src/widget/canvas.rs index 3990c2b9..1b0d49d8 100644 --- a/graphics/src/widget/canvas.rs +++ b/graphics/src/widget/canvas.rs @@ -4,11 +4,12 @@ //! [`Frame`]. It can be used for animation, data visualization, game graphics, //! and more! use crate::renderer::{self, Renderer}; -use crate::Backend; +use crate::{Backend, Primitive}; use iced_native::layout; use iced_native::{ - Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, + Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Vector, + Widget, }; use std::hash::Hash; use std::marker::PhantomData; @@ -188,31 +189,28 @@ where fn draw( &self, - _renderer: &mut Renderer, + renderer: &mut Renderer, _style: &renderer::Style, - _layout: Layout<'_>, - _cursor_position: Point, + layout: Layout<'_>, + cursor_position: Point, _viewport: &Rectangle, ) { - // let bounds = layout.bounds(); - // let translation = Vector::new(bounds.x, bounds.y); - // let cursor = Cursor::from_window_position(cursor_position); - - // ( - // Primitive::Translate { - // translation, - // content: Box::new(Primitive::Group { - // primitives: self - // .program - // .draw(bounds, cursor) - // .into_iter() - // .map(Geometry::into_primitive) - // .collect(), - // }), - // }, - // self.program.mouse_interaction(bounds, cursor), - // ) - // TODO + use iced_native::Renderer as _; + + let bounds = layout.bounds(); + let translation = Vector::new(bounds.x, bounds.y); + let cursor = Cursor::from_window_position(cursor_position); + + renderer.with_translation(translation, |renderer| { + renderer.draw_primitive(Primitive::Group { + primitives: self + .program + .draw(bounds, cursor) + .into_iter() + .map(Geometry::into_primitive) + .collect(), + }); + }); } fn hash_layout(&self, state: &mut Hasher) { -- cgit From 0b66095f9ffddad0a6bc6f4e8aa4e2311e89292a Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 29 Oct 2021 16:47:30 +0700 Subject: Implement `Widget::mouse_interaction` for `Canvas` in `iced_graphics` --- graphics/src/widget/canvas.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'graphics/src/widget/canvas.rs') diff --git a/graphics/src/widget/canvas.rs b/graphics/src/widget/canvas.rs index 1b0d49d8..ad9704d0 100644 --- a/graphics/src/widget/canvas.rs +++ b/graphics/src/widget/canvas.rs @@ -7,6 +7,7 @@ use crate::renderer::{self, Renderer}; use crate::{Backend, Primitive}; use iced_native::layout; +use iced_native::mouse; use iced_native::{ Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Vector, Widget, @@ -187,6 +188,18 @@ where event::Status::Ignored } + fn mouse_interaction( + &self, + layout: Layout<'_>, + _viewport: &Rectangle, + cursor_position: Point, + ) -> mouse::Interaction { + let bounds = layout.bounds(); + let cursor = Cursor::from_window_position(cursor_position); + + self.program.mouse_interaction(bounds, cursor) + } + fn draw( &self, renderer: &mut Renderer, -- cgit From 631e95ee0be01dc7f5e5183e1429972aee37787f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 2 Nov 2021 15:03:29 +0700 Subject: Move `viewport` argument to last position in `mouse_interaction` methods This keeps the order of the arguments consistent with `draw`. --- graphics/src/widget/canvas.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'graphics/src/widget/canvas.rs') diff --git a/graphics/src/widget/canvas.rs b/graphics/src/widget/canvas.rs index ad9704d0..639c2a9b 100644 --- a/graphics/src/widget/canvas.rs +++ b/graphics/src/widget/canvas.rs @@ -191,8 +191,8 @@ where fn mouse_interaction( &self, layout: Layout<'_>, - _viewport: &Rectangle, cursor_position: Point, + _viewport: &Rectangle, ) -> mouse::Interaction { let bounds = layout.bounds(); let cursor = Cursor::from_window_position(cursor_position); -- cgit