summaryrefslogtreecommitdiffstats
path: root/examples/tour/renderer
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
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.rs (renamed from examples/tour/renderer.rs)20
-rw-r--r--examples/tour/src/iced_ggez/renderer/button.rs (renamed from examples/tour/renderer/button.rs)0
-rw-r--r--examples/tour/src/iced_ggez/renderer/checkbox.rs (renamed from examples/tour/renderer/checkbox.rs)0
-rw-r--r--examples/tour/src/iced_ggez/renderer/debugger.rs (renamed from examples/tour/renderer/debugger.rs)10
-rw-r--r--examples/tour/src/iced_ggez/renderer/image.rs (renamed from examples/tour/renderer/image.rs)45
-rw-r--r--examples/tour/src/iced_ggez/renderer/radio.rs (renamed from examples/tour/renderer/radio.rs)0
-rw-r--r--examples/tour/src/iced_ggez/renderer/slider.rs (renamed from examples/tour/renderer/slider.rs)0
-rw-r--r--examples/tour/src/iced_ggez/renderer/text.rs (renamed from examples/tour/renderer/text.rs)10
8 files changed, 67 insertions, 18 deletions
diff --git a/examples/tour/renderer.rs b/examples/tour/src/iced_ggez/renderer.rs
index 8746dd96..e3181eaa 100644
--- a/examples/tour/renderer.rs
+++ b/examples/tour/src/iced_ggez/renderer.rs
@@ -11,8 +11,11 @@ use ggez::graphics::{
};
use ggez::Context;
+pub use image::Cache;
+
pub struct Renderer<'a> {
pub context: &'a mut Context,
+ pub images: &'a mut image::Cache,
pub sprites: SpriteBatch,
pub spritesheet: Image,
pub font: Font,
@@ -20,14 +23,16 @@ pub struct Renderer<'a> {
debug_mesh: Option<MeshBuilder>,
}
-impl Renderer<'_> {
+impl<'a> Renderer<'a> {
pub fn new(
- context: &mut Context,
+ context: &'a mut Context,
+ images: &'a mut image::Cache,
spritesheet: Image,
font: Font,
- ) -> Renderer {
+ ) -> Renderer<'a> {
Renderer {
context,
+ images,
sprites: SpriteBatch::new(spritesheet.clone()),
spritesheet,
font,
@@ -61,3 +66,12 @@ impl Renderer<'_> {
}
}
}
+
+pub fn into_color(color: iced::Color) -> graphics::Color {
+ graphics::Color {
+ r: color.r,
+ g: color.g,
+ b: color.b,
+ a: color.a,
+ }
+}
diff --git a/examples/tour/renderer/button.rs b/examples/tour/src/iced_ggez/renderer/button.rs
index 486e07ed..486e07ed 100644
--- a/examples/tour/renderer/button.rs
+++ b/examples/tour/src/iced_ggez/renderer/button.rs
diff --git a/examples/tour/renderer/checkbox.rs b/examples/tour/src/iced_ggez/renderer/checkbox.rs
index 20a91be5..20a91be5 100644
--- a/examples/tour/renderer/checkbox.rs
+++ b/examples/tour/src/iced_ggez/renderer/checkbox.rs
diff --git a/examples/tour/renderer/debugger.rs b/examples/tour/src/iced_ggez/renderer/debugger.rs
index 98124795..c6727881 100644
--- a/examples/tour/renderer/debugger.rs
+++ b/examples/tour/src/iced_ggez/renderer/debugger.rs
@@ -1,10 +1,10 @@
-use super::Renderer;
-use ggez::graphics::{Color, DrawMode, MeshBuilder, Rect};
+use super::{into_color, Renderer};
+use ggez::graphics::{DrawMode, MeshBuilder, Rect};
impl iced::renderer::Debugger for Renderer<'_> {
- type Color = Color;
+ type Color = iced::Color;
- fn explain(&mut self, layout: &iced::Layout<'_>, color: Color) {
+ fn explain(&mut self, layout: &iced::Layout<'_>, color: iced::Color) {
let bounds = layout.bounds();
let mut debug_mesh =
@@ -18,7 +18,7 @@ impl iced::renderer::Debugger for Renderer<'_> {
w: bounds.width,
h: bounds.height,
},
- color,
+ into_color(color),
);
self.debug_mesh = Some(debug_mesh);
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(
diff --git a/examples/tour/renderer/radio.rs b/examples/tour/src/iced_ggez/renderer/radio.rs
index 0f7815d6..0f7815d6 100644
--- a/examples/tour/renderer/radio.rs
+++ b/examples/tour/src/iced_ggez/renderer/radio.rs
diff --git a/examples/tour/renderer/slider.rs b/examples/tour/src/iced_ggez/renderer/slider.rs
index 146cee18..146cee18 100644
--- a/examples/tour/renderer/slider.rs
+++ b/examples/tour/src/iced_ggez/renderer/slider.rs
diff --git a/examples/tour/renderer/text.rs b/examples/tour/src/iced_ggez/renderer/text.rs
index ecf1481e..b5010639 100644
--- a/examples/tour/renderer/text.rs
+++ b/examples/tour/src/iced_ggez/renderer/text.rs
@@ -1,11 +1,11 @@
-use super::Renderer;
-use ggez::graphics::{self, mint, Align, Color, Scale, Text, TextFragment};
+use super::{into_color, Renderer};
+use ggez::graphics::{self, mint, Align, Scale, Text, TextFragment};
use iced::text;
use std::cell::RefCell;
use std::f32;
-impl text::Renderer<Color> for Renderer<'_> {
+impl text::Renderer<iced::Color> for Renderer<'_> {
fn node(
&self,
style: iced::Style,
@@ -80,7 +80,7 @@ impl text::Renderer<Color> for Renderer<'_> {
bounds: iced::Rectangle,
content: &str,
size: Option<u16>,
- color: Option<Color>,
+ color: Option<iced::Color>,
horizontal_alignment: text::HorizontalAlignment,
_vertical_alignment: text::VerticalAlignment,
) {
@@ -112,7 +112,7 @@ impl text::Renderer<Color> for Renderer<'_> {
x: bounds.x,
y: bounds.y,
},
- color.or(Some(graphics::BLACK)),
+ color.or(Some(iced::Color::BLACK)).map(into_color),
);
}
}