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/qr_code.rs | 97 +++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 48 deletions(-) (limited to 'graphics/src/widget/qr_code.rs') diff --git a/graphics/src/widget/qr_code.rs b/graphics/src/widget/qr_code.rs index b3a01dd7..a809d99f 100644 --- a/graphics/src/widget/qr_code.rs +++ b/graphics/src/widget/qr_code.rs @@ -1,10 +1,10 @@ //! Encode and display information in a QR code. use crate::canvas; -use crate::{Backend, Defaults, Primitive, Renderer, Vector}; +use crate::{Backend, Defaults, Renderer}; use iced_native::{ - layout, mouse, Color, Element, Hasher, Layout, Length, Point, Rectangle, - Size, Widget, + layout, Color, Element, Hasher, Layout, Length, Point, Rectangle, Size, + Widget, }; use thiserror::Error; @@ -82,53 +82,54 @@ where &self, _renderer: &mut Renderer, _defaults: &Defaults, - layout: Layout<'_>, + _layout: Layout<'_>, _cursor_position: Point, _viewport: &Rectangle, - ) -> (Primitive, mouse::Interaction) { - let bounds = layout.bounds(); - let side_length = self.state.width + 2 * QUIET_ZONE; - - // Reuse cache if possible - let geometry = self.state.cache.draw(bounds.size(), |frame| { - // Scale units to cell size - frame.scale(f32::from(self.cell_size)); - - // Draw background - frame.fill_rectangle( - Point::ORIGIN, - Size::new(side_length as f32, side_length as f32), - self.light, - ); - - // Avoid drawing on the quiet zone - frame.translate(Vector::new(QUIET_ZONE as f32, QUIET_ZONE as f32)); - - // Draw contents - self.state - .contents - .iter() - .enumerate() - .filter(|(_, value)| **value == qrcode::Color::Dark) - .for_each(|(index, _)| { - let row = index / self.state.width; - let column = index % self.state.width; - - frame.fill_rectangle( - Point::new(column as f32, row as f32), - Size::UNIT, - self.dark, - ); - }); - }); - - ( - Primitive::Translate { - translation: Vector::new(bounds.x, bounds.y), - content: Box::new(geometry.into_primitive()), - }, - mouse::Interaction::default(), - ) + ) { + // let bounds = layout.bounds(); + // let side_length = self.state.width + 2 * QUIET_ZONE; + + // // Reuse cache if possible + // let geometry = self.state.cache.draw(bounds.size(), |frame| { + // // Scale units to cell size + // frame.scale(f32::from(self.cell_size)); + + // // Draw background + // frame.fill_rectangle( + // Point::ORIGIN, + // Size::new(side_length as f32, side_length as f32), + // self.light, + // ); + + // // Avoid drawing on the quiet zone + // frame.translate(Vector::new(QUIET_ZONE as f32, QUIET_ZONE as f32)); + + // // Draw contents + // self.state + // .contents + // .iter() + // .enumerate() + // .filter(|(_, value)| **value == qrcode::Color::Dark) + // .for_each(|(index, _)| { + // let row = index / self.state.width; + // let column = index % self.state.width; + + // frame.fill_rectangle( + // Point::new(column as f32, row as f32), + // Size::UNIT, + // self.dark, + // ); + // }); + // }); + + // ( + // Primitive::Translate { + // translation: Vector::new(bounds.x, bounds.y), + // content: Box::new(geometry.into_primitive()), + // }, + // mouse::Interaction::default(), + // ) + // TODO } } -- 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/qr_code.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'graphics/src/widget/qr_code.rs') diff --git a/graphics/src/widget/qr_code.rs b/graphics/src/widget/qr_code.rs index a809d99f..364b636b 100644 --- a/graphics/src/widget/qr_code.rs +++ b/graphics/src/widget/qr_code.rs @@ -1,10 +1,11 @@ //! Encode and display information in a QR code. use crate::canvas; -use crate::{Backend, Defaults, Renderer}; +use crate::renderer::{self, Renderer}; +use crate::Backend; +use iced_native::layout; use iced_native::{ - layout, Color, Element, Hasher, Layout, Length, Point, Rectangle, Size, - Widget, + Color, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, }; use thiserror::Error; @@ -81,7 +82,7 @@ where fn draw( &self, _renderer: &mut Renderer, - _defaults: &Defaults, + _style: &renderer::Style, _layout: Layout<'_>, _cursor_position: Point, _viewport: &Rectangle, -- cgit From 77bab6beeecb148225ee6081e087aa30c0e80c26 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 30 Oct 2021 20:38:12 +0700 Subject: Implement `Widget::draw` for `QRCode` in `iced_graphics` --- graphics/src/widget/qr_code.rs | 94 +++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 47 deletions(-) (limited to 'graphics/src/widget/qr_code.rs') diff --git a/graphics/src/widget/qr_code.rs b/graphics/src/widget/qr_code.rs index 364b636b..285b8622 100644 --- a/graphics/src/widget/qr_code.rs +++ b/graphics/src/widget/qr_code.rs @@ -5,7 +5,8 @@ use crate::Backend; use iced_native::layout; use iced_native::{ - Color, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, + Color, Element, Hasher, Layout, Length, Point, Rectangle, Size, Vector, + Widget, }; use thiserror::Error; @@ -81,56 +82,55 @@ where fn draw( &self, - _renderer: &mut Renderer, + renderer: &mut Renderer, _style: &renderer::Style, - _layout: Layout<'_>, + layout: Layout<'_>, _cursor_position: Point, _viewport: &Rectangle, ) { - // let bounds = layout.bounds(); - // let side_length = self.state.width + 2 * QUIET_ZONE; - - // // Reuse cache if possible - // let geometry = self.state.cache.draw(bounds.size(), |frame| { - // // Scale units to cell size - // frame.scale(f32::from(self.cell_size)); - - // // Draw background - // frame.fill_rectangle( - // Point::ORIGIN, - // Size::new(side_length as f32, side_length as f32), - // self.light, - // ); - - // // Avoid drawing on the quiet zone - // frame.translate(Vector::new(QUIET_ZONE as f32, QUIET_ZONE as f32)); - - // // Draw contents - // self.state - // .contents - // .iter() - // .enumerate() - // .filter(|(_, value)| **value == qrcode::Color::Dark) - // .for_each(|(index, _)| { - // let row = index / self.state.width; - // let column = index % self.state.width; - - // frame.fill_rectangle( - // Point::new(column as f32, row as f32), - // Size::UNIT, - // self.dark, - // ); - // }); - // }); - - // ( - // Primitive::Translate { - // translation: Vector::new(bounds.x, bounds.y), - // content: Box::new(geometry.into_primitive()), - // }, - // mouse::Interaction::default(), - // ) - // TODO + use iced_native::Renderer as _; + + let bounds = layout.bounds(); + let side_length = self.state.width + 2 * QUIET_ZONE; + + // Reuse cache if possible + let geometry = self.state.cache.draw(bounds.size(), |frame| { + // Scale units to cell size + frame.scale(f32::from(self.cell_size)); + + // Draw background + frame.fill_rectangle( + Point::ORIGIN, + Size::new(side_length as f32, side_length as f32), + self.light, + ); + + // Avoid drawing on the quiet zone + frame.translate(Vector::new(QUIET_ZONE as f32, QUIET_ZONE as f32)); + + // Draw contents + self.state + .contents + .iter() + .enumerate() + .filter(|(_, value)| **value == qrcode::Color::Dark) + .for_each(|(index, _)| { + let row = index / self.state.width; + let column = index % self.state.width; + + frame.fill_rectangle( + Point::new(column as f32, row as f32), + Size::UNIT, + self.dark, + ); + }); + }); + + let translation = Vector::new(bounds.x, bounds.y); + + renderer.with_translation(translation, |renderer| { + renderer.draw_primitive(geometry.into_primitive()); + }); } } -- cgit