summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-10-30 20:38:12 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-10-30 20:38:12 +0700
commit77bab6beeecb148225ee6081e087aa30c0e80c26 (patch)
treeb4e50368fae1d8227f66a1b6c6ff5eb87ac0e57e /graphics
parent0b66095f9ffddad0a6bc6f4e8aa4e2311e89292a (diff)
downloadiced-77bab6beeecb148225ee6081e087aa30c0e80c26.tar.gz
iced-77bab6beeecb148225ee6081e087aa30c0e80c26.tar.bz2
iced-77bab6beeecb148225ee6081e087aa30c0e80c26.zip
Implement `Widget::draw` for `QRCode` in `iced_graphics`
Diffstat (limited to 'graphics')
-rw-r--r--graphics/src/widget/qr_code.rs94
1 files changed, 47 insertions, 47 deletions
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<B>,
+ renderer: &mut Renderer<B>,
_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());
+ });
}
}