summaryrefslogtreecommitdiffstats
path: root/graphics/src/widget/canvas.rs
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/src/widget/canvas.rs')
-rw-r--r--graphics/src/widget/canvas.rs48
1 files changed, 30 insertions, 18 deletions
diff --git a/graphics/src/widget/canvas.rs b/graphics/src/widget/canvas.rs
index 7897c8ec..639c2a9b 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, Primitive, Renderer};
+use crate::renderer::{self, Renderer};
+use crate::{Backend, Primitive};
+
use iced_native::layout;
use iced_native::mouse;
use iced_native::{
@@ -186,32 +188,42 @@ where
event::Status::Ignored
}
+ fn mouse_interaction(
+ &self,
+ layout: Layout<'_>,
+ cursor_position: Point,
+ _viewport: &Rectangle,
+ ) -> 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<B>,
- _defaults: &Defaults,
+ renderer: &mut Renderer<B>,
+ _style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
_viewport: &Rectangle,
- ) -> (Primitive, mouse::Interaction) {
+ ) {
+ 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);
- (
- 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),
- )
+ 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) {