From 5a5ca34b5fcab9266359d3f0885782969f8c058e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 5 Oct 2019 19:22:51 +0200 Subject: Modularize `iced_wgpu` --- wgpu/src/renderer/button.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 wgpu/src/renderer/button.rs (limited to 'wgpu/src/renderer/button.rs') diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/button.rs new file mode 100644 index 00000000..24bc1de6 --- /dev/null +++ b/wgpu/src/renderer/button.rs @@ -0,0 +1,18 @@ +use crate::{Primitive, Renderer}; +use iced_native::{button, Button, Layout, Node, Point, Style}; + +impl button::Renderer for Renderer { + fn node(&self, _button: &Button) -> Node { + Node::new(Style::default()) + } + + fn draw( + &mut self, + _button: &Button, + _layout: Layout<'_>, + _cursor_position: Point, + ) -> Self::Primitive { + // TODO + Primitive::None + } +} -- cgit From 7765e6da50a3448501ee1b639e580c94a4fbda8a Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 6 Oct 2019 19:22:25 +0200 Subject: Draft `Box` primitive --- wgpu/src/renderer/button.rs | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) (limited to 'wgpu/src/renderer/button.rs') diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/button.rs index 24bc1de6..b9dfb9ac 100644 --- a/wgpu/src/renderer/button.rs +++ b/wgpu/src/renderer/button.rs @@ -1,18 +1,40 @@ -use crate::{Primitive, Renderer}; -use iced_native::{button, Button, Layout, Node, Point, Style}; +use crate::{Background, Primitive, Renderer}; +use iced_native::{button, Button, Color, Layout, Length, Node, Point, Style}; impl button::Renderer for Renderer { - fn node(&self, _button: &Button) -> Node { - Node::new(Style::default()) + fn node(&self, button: &Button) -> Node { + let style = Style::default() + .width(button.width) + .min_height(Length::Units(30)) + .min_width(Length::Units(100)) + .align_self(button.align_self); + + Node::new(style) } fn draw( &mut self, - _button: &Button, - _layout: Layout<'_>, + button: &Button, + layout: Layout<'_>, _cursor_position: Point, ) -> Self::Primitive { - // TODO - Primitive::None + Primitive::Group { + primitives: vec![ + Primitive::Box { + bounds: layout.bounds(), + background: Background::Color(Color { + r: 0.0, + b: 1.0, + g: 0.0, + a: 1.0, + }), + }, + Primitive::Text { + content: button.label.clone(), + size: 20.0, + bounds: layout.bounds(), + }, + ], + } } } -- cgit From 70c17b053b10741f6018b2559bb46c5f289cadb9 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 7 Oct 2019 02:17:40 +0200 Subject: Rename `Box` primitive to `Quad` --- wgpu/src/renderer/button.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'wgpu/src/renderer/button.rs') diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/button.rs index b9dfb9ac..fd874832 100644 --- a/wgpu/src/renderer/button.rs +++ b/wgpu/src/renderer/button.rs @@ -20,7 +20,7 @@ impl button::Renderer for Renderer { ) -> Self::Primitive { Primitive::Group { primitives: vec![ - Primitive::Box { + Primitive::Quad { bounds: layout.bounds(), background: Background::Color(Color { r: 0.0, -- cgit From c9510db551893775d3233340dd114d971e24323a Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 7 Oct 2019 03:56:16 +0200 Subject: Render colored quads --- wgpu/src/renderer/button.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'wgpu/src/renderer/button.rs') diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/button.rs index fd874832..f75b44f7 100644 --- a/wgpu/src/renderer/button.rs +++ b/wgpu/src/renderer/button.rs @@ -18,14 +18,16 @@ impl button::Renderer for Renderer { layout: Layout<'_>, _cursor_position: Point, ) -> Self::Primitive { + let bounds = layout.bounds(); + Primitive::Group { primitives: vec![ Primitive::Quad { - bounds: layout.bounds(), + bounds, background: Background::Color(Color { - r: 0.0, - b: 1.0, - g: 0.0, + r: 0.8, + b: 0.8, + g: 0.8, a: 1.0, }), }, -- cgit From 10e10e5e06841574425d2633f1c2916733f7b4ff Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 8 Oct 2019 03:13:41 +0200 Subject: Make `iced_core::Button` customizable Now it supports: - Any kind of content - Custom border radius - Custom background --- wgpu/src/renderer/button.rs | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) (limited to 'wgpu/src/renderer/button.rs') diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/button.rs index f75b44f7..00fcd0eb 100644 --- a/wgpu/src/renderer/button.rs +++ b/wgpu/src/renderer/button.rs @@ -1,22 +1,26 @@ -use crate::{Background, Primitive, Renderer}; -use iced_native::{button, Button, Color, Layout, Length, Node, Point, Style}; +use crate::{Primitive, Renderer}; +use iced_native::{ + button, Align, Background, Button, Color, Layout, Length, Node, Point, + Style, +}; impl button::Renderer for Renderer { - fn node(&self, button: &Button) -> Node { + fn node(&self, button: &Button) -> Node { let style = Style::default() .width(button.width) - .min_height(Length::Units(30)) + .padding(button.padding) .min_width(Length::Units(100)) - .align_self(button.align_self); + .align_self(button.align_self) + .align_items(Align::Stretch); - Node::new(style) + Node::with_children(style, vec![button.content.node(self)]) } fn draw( &mut self, - button: &Button, + button: &Button, layout: Layout<'_>, - _cursor_position: Point, + cursor_position: Point, ) -> Self::Primitive { let bounds = layout.bounds(); @@ -24,18 +28,21 @@ impl button::Renderer for Renderer { primitives: vec![ Primitive::Quad { bounds, - background: Background::Color(Color { - r: 0.8, - b: 0.8, - g: 0.8, - a: 1.0, - }), - }, - Primitive::Text { - content: button.label.clone(), - size: 20.0, - bounds: layout.bounds(), + background: button.background.unwrap_or(Background::Color( + Color { + r: 0.8, + b: 0.8, + g: 0.8, + a: 1.0, + }, + )), + border_radius: button.border_radius, }, + button.content.draw( + self, + layout.children().next().unwrap(), + cursor_position, + ), ], } } -- cgit From 8846a239cf14edd464b1d09f6d6d57ad9b5c9fc7 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 11 Oct 2019 22:15:39 +0200 Subject: Rename `Renderer::Primitive` to `Renderer::Output` --- wgpu/src/renderer/button.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'wgpu/src/renderer/button.rs') diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/button.rs index 00fcd0eb..33789379 100644 --- a/wgpu/src/renderer/button.rs +++ b/wgpu/src/renderer/button.rs @@ -21,7 +21,7 @@ impl button::Renderer for Renderer { button: &Button, layout: Layout<'_>, cursor_position: Point, - ) -> Self::Primitive { + ) -> Self::Output { let bounds = layout.bounds(); Primitive::Group { -- cgit From a031a6f2130b3913a2419e4cea859c22aa388213 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 11 Oct 2019 23:30:53 +0200 Subject: Handle mouse cursor in `iced_wgpu` --- wgpu/src/renderer/button.rs | 55 ++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 23 deletions(-) (limited to 'wgpu/src/renderer/button.rs') diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/button.rs index 33789379..275c870f 100644 --- a/wgpu/src/renderer/button.rs +++ b/wgpu/src/renderer/button.rs @@ -1,7 +1,7 @@ use crate::{Primitive, Renderer}; use iced_native::{ - button, Align, Background, Button, Color, Layout, Length, Node, Point, - Style, + button, Align, Background, Button, Color, Layout, Length, MouseCursor, + Node, Point, Style, }; impl button::Renderer for Renderer { @@ -24,26 +24,35 @@ impl button::Renderer for Renderer { ) -> Self::Output { let bounds = layout.bounds(); - Primitive::Group { - primitives: vec![ - Primitive::Quad { - bounds, - background: button.background.unwrap_or(Background::Color( - Color { - r: 0.8, - b: 0.8, - g: 0.8, - a: 1.0, - }, - )), - border_radius: button.border_radius, - }, - button.content.draw( - self, - layout.children().next().unwrap(), - cursor_position, - ), - ], - } + let (content, _) = button.content.draw( + self, + layout.children().next().unwrap(), + cursor_position, + ); + + ( + Primitive::Group { + primitives: vec![ + Primitive::Quad { + bounds, + background: button.background.unwrap_or( + Background::Color(Color { + r: 0.8, + b: 0.8, + g: 0.8, + a: 1.0, + }), + ), + border_radius: button.border_radius, + }, + content, + ], + }, + if bounds.contains(cursor_position) { + MouseCursor::Pointer + } else { + MouseCursor::OutOfBounds + }, + ) } } -- cgit From e74f1179769cc4dc3e91cb0b5794526b3a8c0dcd Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 12 Oct 2019 02:32:16 +0200 Subject: Add a slight shadow to buttons for feedback --- wgpu/src/renderer/button.rs | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'wgpu/src/renderer/button.rs') diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/button.rs index 275c870f..aa48da93 100644 --- a/wgpu/src/renderer/button.rs +++ b/wgpu/src/renderer/button.rs @@ -1,7 +1,7 @@ use crate::{Primitive, Renderer}; use iced_native::{ button, Align, Background, Button, Color, Layout, Length, MouseCursor, - Node, Point, Style, + Node, Point, Rectangle, Style, }; impl button::Renderer for Renderer { @@ -30,9 +30,35 @@ impl button::Renderer for Renderer { cursor_position, ); + let is_hover = bounds.contains(cursor_position); + + // TODO: Render proper shadows + // TODO: Make hovering and pressed styles configurable + let shadow_offset = if button.state.is_pressed { + 0.0 + } else if is_hover { + 2.0 + } else { + 1.0 + }; + ( Primitive::Group { primitives: vec![ + Primitive::Quad { + bounds: Rectangle { + x: bounds.x + 1.0, + y: bounds.y + shadow_offset, + ..bounds + }, + background: Background::Color(Color { + r: 0.0, + b: 0.0, + g: 0.0, + a: 0.5, + }), + border_radius: button.border_radius, + }, Primitive::Quad { bounds, background: button.background.unwrap_or( @@ -48,7 +74,7 @@ impl button::Renderer for Renderer { content, ], }, - if bounds.contains(cursor_position) { + if is_hover { MouseCursor::Pointer } else { MouseCursor::OutOfBounds -- cgit From a444819799345d12ab74b09fc8c82ba360b9eeeb Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 12 Oct 2019 05:07:29 +0200 Subject: Fix button shadow feedback in `iced_wgpu` --- wgpu/src/renderer/button.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'wgpu/src/renderer/button.rs') diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/button.rs index aa48da93..ad2186d6 100644 --- a/wgpu/src/renderer/button.rs +++ b/wgpu/src/renderer/button.rs @@ -30,14 +30,16 @@ impl button::Renderer for Renderer { cursor_position, ); - let is_hover = bounds.contains(cursor_position); + let is_mouse_over = bounds.contains(cursor_position); // TODO: Render proper shadows // TODO: Make hovering and pressed styles configurable - let shadow_offset = if button.state.is_pressed { - 0.0 - } else if is_hover { - 2.0 + let shadow_offset = if is_mouse_over { + if button.state.is_pressed { + 0.0 + } else { + 2.0 + } } else { 1.0 }; @@ -74,7 +76,7 @@ impl button::Renderer for Renderer { content, ], }, - if is_hover { + if is_mouse_over { MouseCursor::Pointer } else { MouseCursor::OutOfBounds -- cgit