summaryrefslogtreecommitdiffstats
path: root/examples/tour/renderer/image.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-09-19 15:01:12 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-09-19 15:01:12 +0200
commitf9de39ddaa3020a9585b1648afb0ead45dfd7aa9 (patch)
tree04289787e353b4b059354d22ce53f2b79464431c /examples/tour/renderer/image.rs
parentdd093c79d7da84675be648c7df2ebfc85b5039f2 (diff)
downloadiced-f9de39ddaa3020a9585b1648afb0ead45dfd7aa9.tar.gz
iced-f9de39ddaa3020a9585b1648afb0ead45dfd7aa9.tar.bz2
iced-f9de39ddaa3020a9585b1648afb0ead45dfd7aa9.zip
Unify `web` and `ggez` tour examples :tada:
Diffstat (limited to '')
-rw-r--r--examples/tour/src/iced_ggez/renderer/image.rs (renamed from examples/tour/renderer/image.rs)45
1 files changed, 40 insertions, 5 deletions
diff --git a/examples/tour/renderer/image.rs b/examples/tour/src/iced_ggez/renderer/image.rs
index c3ead5c9..17c6a56e 100644
--- a/examples/tour/renderer/image.rs
+++ b/examples/tour/src/iced_ggez/renderer/image.rs
@@ -3,15 +3,48 @@ use super::Renderer;
use ggez::{graphics, nalgebra};
use iced::image;
-impl image::Renderer<graphics::Image> for Renderer<'_> {
+pub struct Cache {
+ images: std::collections::HashMap<String, graphics::Image>,
+}
+
+impl Cache {
+ pub fn new() -> Self {
+ Self {
+ images: std::collections::HashMap::new(),
+ }
+ }
+
+ fn get<'a>(
+ &mut self,
+ name: &'a str,
+ context: &mut ggez::Context,
+ ) -> graphics::Image {
+ if let Some(image) = self.images.get(name) {
+ return image.clone();
+ }
+
+ let mut image = graphics::Image::new(context, &format!("/{}", name))
+ .expect("Load ferris image");
+
+ image.set_filter(graphics::FilterMode::Linear);
+
+ self.images.insert(name.to_string(), image.clone());
+
+ image
+ }
+}
+
+impl<'a> image::Renderer<&'a str> for Renderer<'_> {
fn node(
- &self,
+ &mut self,
style: iced::Style,
- image: &graphics::Image,
+ name: &&'a str,
width: Option<u16>,
height: Option<u16>,
_source: Option<iced::Rectangle<u16>>,
) -> iced::Node {
+ let image = self.images.get(name, self.context);
+
let aspect_ratio = image.width() as f32 / image.height() as f32;
let style = match (width, height) {
@@ -30,15 +63,17 @@ impl image::Renderer<graphics::Image> for Renderer<'_> {
fn draw(
&mut self,
- image: &graphics::Image,
+ name: &&'a str,
bounds: iced::Rectangle,
_source: Option<iced::Rectangle<u16>>,
) {
+ let image = self.images.get(name, self.context);
+
// We should probably use batches to draw images efficiently and keep
// draw side-effect free, but this is good enough for the example.
graphics::draw(
self.context,
- image,
+ &image,
graphics::DrawParam::new()
.dest(nalgebra::Point2::new(bounds.x, bounds.y))
.scale(nalgebra::Vector2::new(