Unify web and ggez tour examples 🎉

This commit is contained in:
Héctor Ramón Jiménez 2019-09-19 15:01:12 +02:00
parent dd093c79d7
commit f9de39ddaa
40 changed files with 166 additions and 669 deletions

19
src/color.rs Normal file
View file

@ -0,0 +1,19 @@
/// A color in the sRGB color space.
#[derive(Debug, Clone, Copy, PartialEq)]
#[allow(missing_docs)]
pub struct Color {
pub r: f32,
pub g: f32,
pub b: f32,
pub a: f32,
}
impl Color {
/// The black color.
pub const BLACK: Color = Color {
r: 0.0,
g: 0.0,
b: 0.0,
a: 1.0,
};
}

View file

@ -223,7 +223,10 @@ impl<'a, Message, Renderer> Element<'a, Message, Renderer> {
}
}
pub(crate) fn compute_layout(&self, renderer: &Renderer) -> result::Layout {
pub(crate) fn compute_layout(
&self,
renderer: &mut Renderer,
) -> result::Layout {
let node = self.widget.node(renderer);
node.0.compute_layout(geometry::Size::undefined()).unwrap()
@ -264,7 +267,7 @@ impl<'a, A, B, Renderer> Widget<B, Renderer> for Map<'a, A, B, Renderer>
where
A: Copy,
{
fn node(&self, renderer: &Renderer) -> Node {
fn node(&self, renderer: &mut Renderer) -> Node {
self.widget.node(renderer)
}
@ -337,7 +340,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
where
Renderer: renderer::Debugger,
{
fn node(&self, renderer: &Renderer) -> Node {
fn node(&self, renderer: &mut Renderer) -> Node {
self.element.widget.node(renderer)
}

View file

@ -200,6 +200,7 @@ pub mod input;
pub mod renderer;
pub mod widget;
mod color;
mod element;
mod event;
mod hasher;
@ -215,6 +216,7 @@ mod vector;
#[doc(no_inline)]
pub use stretch::{geometry::Size, number::Number};
pub use color::Color;
pub use element::Element;
pub use event::Event;
pub use hasher::Hasher;

View file

@ -69,7 +69,7 @@ impl<'a, Message, Renderer> UserInterface<'a, Message, Renderer> {
/// let user_interface = UserInterface::build(
/// counter.view(),
/// cache,
/// &renderer,
/// &mut renderer,
/// );
///
/// // Update and draw the user interface here...
@ -82,7 +82,7 @@ impl<'a, Message, Renderer> UserInterface<'a, Message, Renderer> {
pub fn build<E: Into<Element<'a, Message, Renderer>>>(
root: E,
cache: Cache,
renderer: &Renderer,
renderer: &mut Renderer,
) -> Self {
let root = root.into();
@ -153,7 +153,7 @@ impl<'a, Message, Renderer> UserInterface<'a, Message, Renderer> {
/// let mut user_interface = UserInterface::build(
/// counter.view(),
/// cache,
/// &renderer,
/// &mut renderer,
/// );
///
/// // Update the user interface
@ -236,7 +236,7 @@ impl<'a, Message, Renderer> UserInterface<'a, Message, Renderer> {
/// let mut user_interface = UserInterface::build(
/// counter.view(),
/// cache,
/// &renderer,
/// &mut renderer,
/// );
///
/// let messages = user_interface.update(events.drain(..));
@ -302,7 +302,7 @@ impl Cache {
Cache {
hash: hasher.finish(),
layout: root.compute_layout(&()),
layout: root.compute_layout(&mut ()),
cursor_position: Point::new(0.0, 0.0),
}
}

View file

@ -59,7 +59,7 @@ pub trait Widget<Message, Renderer>: std::fmt::Debug {
/// [`Node`]: ../struct.Node.html
/// [`Widget`]: trait.Widget.html
/// [`Layout`]: ../struct.Layout.html
fn node(&self, renderer: &Renderer) -> Node;
fn node(&self, renderer: &mut Renderer) -> Node;
/// Draws the [`Widget`] using the associated `Renderer`.
///

View file

@ -133,7 +133,7 @@ where
Renderer: self::Renderer,
Message: Copy + std::fmt::Debug,
{
fn node(&self, _renderer: &Renderer) -> Node {
fn node(&self, _renderer: &mut Renderer) -> Node {
Node::new(self.style.height(50))
}

View file

@ -98,7 +98,7 @@ where
Color: 'static + Copy + std::fmt::Debug,
Renderer: self::Renderer + text::Renderer<Color>,
{
fn node(&self, renderer: &Renderer) -> Node {
fn node(&self, renderer: &mut Renderer) -> Node {
Row::<(), Renderer>::new()
.spacing(15)
.align_items(Align::Center)

View file

@ -136,7 +136,7 @@ impl<'a, Message, Renderer> Column<'a, Message, Renderer> {
impl<'a, Message, Renderer> Widget<Message, Renderer>
for Column<'a, Message, Renderer>
{
fn node(&self, renderer: &Renderer) -> Node {
fn node(&self, renderer: &mut Renderer) -> Node {
let mut children: Vec<Node> = self
.children
.iter()

View file

@ -99,7 +99,7 @@ where
Renderer: self::Renderer<I>,
I: Clone,
{
fn node(&self, renderer: &Renderer) -> Node {
fn node(&self, renderer: &mut Renderer) -> Node {
renderer.node(
self.style,
&self.image,
@ -144,7 +144,7 @@ pub trait Renderer<I> {
/// [`Style`]: ../../struct.Style.html
/// [`Image`]: struct.Image.html
fn node(
&self,
&mut self,
style: Style,
image: &I,
width: Option<u16>,

View file

@ -111,7 +111,7 @@ where
Renderer: self::Renderer + text::Renderer<Color>,
Message: Copy + std::fmt::Debug,
{
fn node(&self, renderer: &Renderer) -> Node {
fn node(&self, renderer: &mut Renderer) -> Node {
Row::<(), Renderer>::new()
.spacing(15)
.align_items(Align::Center)

View file

@ -133,7 +133,7 @@ impl<'a, Message, Renderer> Row<'a, Message, Renderer> {
impl<'a, Message, Renderer> Widget<Message, Renderer>
for Row<'a, Message, Renderer>
{
fn node(&self, renderer: &Renderer) -> Node {
fn node(&self, renderer: &mut Renderer) -> Node {
let mut children: Vec<Node> = self
.children
.iter()

View file

@ -107,7 +107,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer> for Slider<'a, Message>
where
Renderer: self::Renderer,
{
fn node(&self, _renderer: &Renderer) -> Node {
fn node(&self, _renderer: &mut Renderer) -> Node {
Node::new(self.style.height(25))
}

View file

@ -113,7 +113,7 @@ where
Color: Copy + std::fmt::Debug,
Renderer: self::Renderer<Color>,
{
fn node(&self, renderer: &Renderer) -> Node {
fn node(&self, renderer: &mut Renderer) -> Node {
renderer.node(self.style, &self.content, self.size)
}