From a99aa1dd61e15e28d93c0719037b6683f32e310e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez <hector0193@gmail.com> Date: Tue, 26 Nov 2019 15:32:11 +0100 Subject: Fallback to embedded font when system font fails --- wgpu/src/text.rs | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'wgpu/src') diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index bf37abe5..f29440c7 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -11,6 +11,8 @@ pub const BUILTIN_ICONS: iced_native::Font = iced_native::Font::External { pub const CHECKMARK_ICON: char = '\u{F00C}'; +const FALLBACK_FONT: &[u8] = include_bytes!("../fonts/Lato-Regular.ttf"); + #[derive(Debug)] pub struct Pipeline { draw_brush: RefCell<wgpu_glyph::GlyphBrush<'static, ()>>, @@ -26,24 +28,36 @@ impl Pipeline { let default_font = font_source .load(&[font::Family::SansSerif, font::Family::Serif]) - .expect("Find sans-serif or serif font"); + .unwrap_or_else(|_| FALLBACK_FONT.to_vec()); let mono_font = font_source .load(&[font::Family::Monospace]) - .expect("Find monospace font"); + .unwrap_or_else(|_| FALLBACK_FONT.to_vec()); + + let load_glyph_brush = |font: Vec<u8>| { + let builder = + wgpu_glyph::GlyphBrushBuilder::using_fonts_bytes(vec![ + mono_font.clone(), + font.clone(), + ])?; + + Ok(( + builder, + glyph_brush::GlyphBrushBuilder::using_font_bytes(font).build(), + )) + }; + + let (brush_builder, measure_brush) = load_glyph_brush(default_font) + .unwrap_or_else(|_: wgpu_glyph::rusttype::Error| { + log::warn!("System font failed to load. Falling back to embedded font..."); - let draw_brush = - wgpu_glyph::GlyphBrushBuilder::using_fonts_bytes(vec![ - mono_font, - default_font.clone(), - ]) + load_glyph_brush(FALLBACK_FONT.to_vec()).expect("Load fallback font") + }); + + let draw_brush = brush_builder .initial_cache_size((2048, 2048)) .build(device, wgpu::TextureFormat::Bgra8UnormSrgb); - let measure_brush = - glyph_brush::GlyphBrushBuilder::using_font_bytes(default_font) - .build(); - Pipeline { draw_brush: RefCell::new(draw_brush), draw_font_map: RefCell::new(HashMap::new()), -- cgit From 80a8a574712f1652c7311554ad358c5bc15d5515 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez <hector0193@gmail.com> Date: Tue, 26 Nov 2019 15:33:38 +0100 Subject: Stop loading a mono font just for the debug view --- wgpu/src/text.rs | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) (limited to 'wgpu/src') diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index f29440c7..e9a1602f 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -30,15 +30,10 @@ impl Pipeline { .load(&[font::Family::SansSerif, font::Family::Serif]) .unwrap_or_else(|_| FALLBACK_FONT.to_vec()); - let mono_font = font_source - .load(&[font::Family::Monospace]) - .unwrap_or_else(|_| FALLBACK_FONT.to_vec()); - let load_glyph_brush = |font: Vec<u8>| { let builder = wgpu_glyph::GlyphBrushBuilder::using_fonts_bytes(vec![ - mono_font.clone(), - font.clone(), + font.clone() ])?; Ok(( @@ -109,14 +104,7 @@ impl Pipeline { text: content, scale: wgpu_glyph::Scale { x: size, y: size }, bounds: (bounds.width, bounds.height), - - // TODO: This is a bit hacky. We are loading the debug font as the - // first font in the `draw_brush`. The `measure_brush` does not - // contain this, hence we subtract 1. - // - // This should go away once we unify `draw_brush` and - // `measure_brush`. - font_id: wgpu_glyph::FontId(font_id - 1), + font_id: wgpu_glyph::FontId(font_id), ..Default::default() }; @@ -157,7 +145,7 @@ impl Pipeline { pub fn find_font(&self, font: iced_native::Font) -> wgpu_glyph::FontId { match font { - iced_native::Font::Default => wgpu_glyph::FontId(1), + iced_native::Font::Default => wgpu_glyph::FontId(0), iced_native::Font::External { name, bytes } => { if let Some(font_id) = self.draw_font_map.borrow().get(name) { return *font_id; -- cgit From 67570a0a1de7df8d26a2e2a8c7c309f4d4599631 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez <hector0193@gmail.com> Date: Sun, 1 Dec 2019 19:03:05 +0100 Subject: Add `repr(C)` to GPU types --- wgpu/src/image.rs | 2 ++ wgpu/src/quad.rs | 2 ++ 2 files changed, 4 insertions(+) (limited to 'wgpu/src') diff --git a/wgpu/src/image.rs b/wgpu/src/image.rs index 5dc972ac..40d9c318 100644 --- a/wgpu/src/image.rs +++ b/wgpu/src/image.rs @@ -427,6 +427,7 @@ pub struct Image { pub scale: [f32; 2], } +#[repr(C)] #[derive(Clone, Copy)] pub struct Vertex { _position: [f32; 2], @@ -449,6 +450,7 @@ const QUAD_VERTS: [Vertex; 4] = [ }, ]; +#[repr(C)] #[derive(Clone, Copy)] struct Instance { _position: [f32; 2], diff --git a/wgpu/src/quad.rs b/wgpu/src/quad.rs index 3d797758..c292dec3 100644 --- a/wgpu/src/quad.rs +++ b/wgpu/src/quad.rs @@ -248,6 +248,7 @@ impl Pipeline { } } +#[repr(C)] #[derive(Clone, Copy)] pub struct Vertex { _position: [f32; 2], @@ -270,6 +271,7 @@ const QUAD_VERTS: [Vertex; 4] = [ }, ]; +#[repr(C)] #[derive(Debug, Clone, Copy)] pub struct Quad { pub position: [f32; 2], -- cgit From e648de560dd7372626dfce33bf508e9d41da6409 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez <hector0193@gmail.com> Date: Sun, 1 Dec 2019 23:36:29 +0100 Subject: Use `PowerPreference::Default` in `iced_wgpu` --- wgpu/src/renderer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'wgpu/src') diff --git a/wgpu/src/renderer.rs b/wgpu/src/renderer.rs index f27a4b8a..268a3630 100644 --- a/wgpu/src/renderer.rs +++ b/wgpu/src/renderer.rs @@ -49,7 +49,7 @@ impl<'a> Layer<'a> { impl Renderer { fn new() -> Self { let adapter = Adapter::request(&RequestAdapterOptions { - power_preference: PowerPreference::LowPower, + power_preference: PowerPreference::Default, backends: BackendBit::all(), }) .expect("Request adapter"); -- cgit From 5eec3a8867f4fbd54e2e28e5d984c2ca7ec0fea4 Mon Sep 17 00:00:00 2001 From: Friz64 <friz64@arch.localdomain> Date: Mon, 25 Nov 2019 20:27:15 +0100 Subject: First implementation --- wgpu/src/renderer/widget/scrollable.rs | 84 ++++++++++++++++++++++++---------- 1 file changed, 60 insertions(+), 24 deletions(-) (limited to 'wgpu/src') diff --git a/wgpu/src/renderer/widget/scrollable.rs b/wgpu/src/renderer/widget/scrollable.rs index 58dc3df9..d069b799 100644 --- a/wgpu/src/renderer/widget/scrollable.rs +++ b/wgpu/src/renderer/widget/scrollable.rs @@ -1,12 +1,13 @@ use crate::{Primitive, Renderer}; use iced_native::{ - scrollable, Background, MouseCursor, Point, Rectangle, Vector, + scrollable, Background, MouseCursor, Point, Rectangle, ScrollbarGrab, + Vector, }; const SCROLLBAR_WIDTH: u16 = 10; const SCROLLBAR_MARGIN: u16 = 2; -fn scrollbar_bounds(bounds: Rectangle) -> Rectangle { +fn background_bounds(bounds: Rectangle) -> Rectangle { Rectangle { x: bounds.x + bounds.width - f32::from(SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN), @@ -16,15 +17,53 @@ fn scrollbar_bounds(bounds: Rectangle) -> Rectangle { } } +fn scroller_bounds( + bounds: Rectangle, + content_bounds: Rectangle, + background_bounds: Rectangle, + offset: u32, +) -> Rectangle { + let ratio = bounds.height / content_bounds.height; + let scrollbar_height = bounds.height * ratio; + let y_offset = offset as f32 * ratio; + + Rectangle { + x: background_bounds.x + f32::from(SCROLLBAR_MARGIN), + y: background_bounds.y + y_offset, + width: background_bounds.width - f32::from(2 * SCROLLBAR_MARGIN), + height: scrollbar_height, + } +} + impl scrollable::Renderer for Renderer { - fn is_mouse_over_scrollbar( + fn scrollbar_grab( &self, bounds: Rectangle, content_bounds: Rectangle, + offset: u32, cursor_position: Point, - ) -> bool { - content_bounds.height > bounds.height - && scrollbar_bounds(bounds).contains(cursor_position) + ) -> Option<(ScrollbarGrab, Rectangle)> { + let background_bounds = background_bounds(bounds); + if content_bounds.height > bounds.height + && background_bounds.contains(cursor_position) + { + let scroller_bounds = scroller_bounds( + bounds, + content_bounds, + background_bounds, + offset, + ); + + let scrollbar_grab = if scroller_bounds.contains(cursor_position) { + ScrollbarGrab::Scroller + } else { + ScrollbarGrab::Background + }; + + Some((scrollbar_grab, scroller_bounds)) + } else { + None + } } fn draw( @@ -38,7 +77,7 @@ impl scrollable::Renderer for Renderer { (content, mouse_cursor): Self::Output, ) -> Self::Output { let is_content_overflowing = content_bounds.height > bounds.height; - let scrollbar_bounds = scrollbar_bounds(bounds); + let background_bounds = background_bounds(bounds); let clip = Primitive::Clip { bounds, @@ -48,31 +87,28 @@ impl scrollable::Renderer for Renderer { ( if is_content_overflowing - && (is_mouse_over || state.is_scrollbar_grabbed()) + && (is_mouse_over || state.currently_grabbed()) { - let ratio = bounds.height / content_bounds.height; - let scrollbar_height = bounds.height * ratio; - let y_offset = offset as f32 * ratio; - + let scroller_bounds = scroller_bounds( + bounds, + content_bounds, + background_bounds, + offset, + ); let scrollbar = Primitive::Quad { - bounds: Rectangle { - x: scrollbar_bounds.x + f32::from(SCROLLBAR_MARGIN), - y: scrollbar_bounds.y + y_offset, - width: scrollbar_bounds.width - - f32::from(2 * SCROLLBAR_MARGIN), - height: scrollbar_height, - }, + bounds: scroller_bounds, background: Background::Color([0.0, 0.0, 0.0, 0.7].into()), border_radius: 5, }; - if is_mouse_over_scrollbar || state.is_scrollbar_grabbed() { + if is_mouse_over_scrollbar || state.currently_grabbed() { let scrollbar_background = Primitive::Quad { bounds: Rectangle { - x: scrollbar_bounds.x + f32::from(SCROLLBAR_MARGIN), - width: scrollbar_bounds.width + x: background_bounds.x + + f32::from(SCROLLBAR_MARGIN), + width: background_bounds.width - f32::from(2 * SCROLLBAR_MARGIN), - ..scrollbar_bounds + ..background_bounds }, background: Background::Color( [0.0, 0.0, 0.0, 0.3].into(), @@ -91,7 +127,7 @@ impl scrollable::Renderer for Renderer { } else { clip }, - if is_mouse_over_scrollbar || state.is_scrollbar_grabbed() { + if is_mouse_over_scrollbar || state.currently_grabbed() { MouseCursor::Idle } else { mouse_cursor -- cgit From f8fac432c665e57267243a9ee3920208b2724e6e Mon Sep 17 00:00:00 2001 From: Friz64 <friz64mc@gmail.com> Date: Sat, 30 Nov 2019 17:30:42 +0100 Subject: Finalize work --- wgpu/src/renderer/widget/scrollable.rs | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'wgpu/src') diff --git a/wgpu/src/renderer/widget/scrollable.rs b/wgpu/src/renderer/widget/scrollable.rs index d069b799..175fac11 100644 --- a/wgpu/src/renderer/widget/scrollable.rs +++ b/wgpu/src/renderer/widget/scrollable.rs @@ -36,31 +36,35 @@ fn scroller_bounds( } impl scrollable::Renderer for Renderer { - fn scrollbar_grab( + fn scrollbar_bounds( &self, bounds: Rectangle, content_bounds: Rectangle, offset: u32, - cursor_position: Point, - ) -> Option<(ScrollbarGrab, Rectangle)> { + ) -> (Rectangle, Rectangle) { let background_bounds = background_bounds(bounds); + let scroller_bounds = + scroller_bounds(bounds, content_bounds, background_bounds, offset); + + (background_bounds, scroller_bounds) + } + + fn scrollbar_grab( + &self, + bounds: Rectangle, + content_bounds: Rectangle, + background_bounds: Rectangle, + scroller_bounds: Rectangle, + cursor_position: Point, + ) -> Option<ScrollbarGrab> { if content_bounds.height > bounds.height && background_bounds.contains(cursor_position) { - let scroller_bounds = scroller_bounds( - bounds, - content_bounds, - background_bounds, - offset, - ); - - let scrollbar_grab = if scroller_bounds.contains(cursor_position) { + Some(if scroller_bounds.contains(cursor_position) { ScrollbarGrab::Scroller } else { ScrollbarGrab::Background - }; - - Some((scrollbar_grab, scroller_bounds)) + }) } else { None } -- cgit From 6943041e0fad65927a741e316509bf07bdaa2f61 Mon Sep 17 00:00:00 2001 From: Friz64 <friz64mc@gmail.com> Date: Mon, 2 Dec 2019 18:51:34 +0100 Subject: Address suggestions --- wgpu/src/renderer/widget/scrollable.rs | 102 ++++++++++----------------------- 1 file changed, 29 insertions(+), 73 deletions(-) (limited to 'wgpu/src') diff --git a/wgpu/src/renderer/widget/scrollable.rs b/wgpu/src/renderer/widget/scrollable.rs index 175fac11..b83cee1b 100644 --- a/wgpu/src/renderer/widget/scrollable.rs +++ b/wgpu/src/renderer/widget/scrollable.rs @@ -1,72 +1,34 @@ use crate::{Primitive, Renderer}; -use iced_native::{ - scrollable, Background, MouseCursor, Point, Rectangle, ScrollbarGrab, - Vector, -}; +use iced_native::{scrollable, Background, MouseCursor, Rectangle, Vector}; const SCROLLBAR_WIDTH: u16 = 10; const SCROLLBAR_MARGIN: u16 = 2; -fn background_bounds(bounds: Rectangle) -> Rectangle { - Rectangle { - x: bounds.x + bounds.width - - f32::from(SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN), - y: bounds.y, - width: f32::from(SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN), - height: bounds.height, - } -} - -fn scroller_bounds( - bounds: Rectangle, - content_bounds: Rectangle, - background_bounds: Rectangle, - offset: u32, -) -> Rectangle { - let ratio = bounds.height / content_bounds.height; - let scrollbar_height = bounds.height * ratio; - let y_offset = offset as f32 * ratio; - - Rectangle { - x: background_bounds.x + f32::from(SCROLLBAR_MARGIN), - y: background_bounds.y + y_offset, - width: background_bounds.width - f32::from(2 * SCROLLBAR_MARGIN), - height: scrollbar_height, - } -} - impl scrollable::Renderer for Renderer { - fn scrollbar_bounds( - &self, - bounds: Rectangle, - content_bounds: Rectangle, - offset: u32, - ) -> (Rectangle, Rectangle) { - let background_bounds = background_bounds(bounds); - let scroller_bounds = - scroller_bounds(bounds, content_bounds, background_bounds, offset); - - (background_bounds, scroller_bounds) + fn scrollbar_bounds(bounds: Rectangle) -> Rectangle { + Rectangle { + x: bounds.x + bounds.width + - f32::from(SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN), + y: bounds.y, + width: f32::from(SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN), + height: bounds.height, + } } - fn scrollbar_grab( - &self, + fn scroller_bounds( bounds: Rectangle, content_bounds: Rectangle, - background_bounds: Rectangle, - scroller_bounds: Rectangle, - cursor_position: Point, - ) -> Option<ScrollbarGrab> { - if content_bounds.height > bounds.height - && background_bounds.contains(cursor_position) - { - Some(if scroller_bounds.contains(cursor_position) { - ScrollbarGrab::Scroller - } else { - ScrollbarGrab::Background - }) - } else { - None + scrollbar_bounds: Rectangle, + offset: u32, + ) -> Rectangle { + let ratio = bounds.height / content_bounds.height; + let scrollbar_height = bounds.height * ratio; + let y_offset = offset as f32 * ratio; + Rectangle { + x: scrollbar_bounds.x + f32::from(SCROLLBAR_MARGIN), + y: scrollbar_bounds.y + y_offset, + width: scrollbar_bounds.width - f32::from(2 * SCROLLBAR_MARGIN), + height: scrollbar_height, } } @@ -77,11 +39,12 @@ impl scrollable::Renderer for Renderer { content_bounds: Rectangle, is_mouse_over: bool, is_mouse_over_scrollbar: bool, + scrollbar_bounds: Rectangle, + scroller_bounds: Rectangle, offset: u32, (content, mouse_cursor): Self::Output, ) -> Self::Output { let is_content_overflowing = content_bounds.height > bounds.height; - let background_bounds = background_bounds(bounds); let clip = Primitive::Clip { bounds, @@ -91,28 +54,21 @@ impl scrollable::Renderer for Renderer { ( if is_content_overflowing - && (is_mouse_over || state.currently_grabbed()) + && (is_mouse_over || state.is_scroller_grabbed()) { - let scroller_bounds = scroller_bounds( - bounds, - content_bounds, - background_bounds, - offset, - ); let scrollbar = Primitive::Quad { bounds: scroller_bounds, background: Background::Color([0.0, 0.0, 0.0, 0.7].into()), border_radius: 5, }; - if is_mouse_over_scrollbar || state.currently_grabbed() { + if is_mouse_over_scrollbar || state.is_scroller_grabbed() { let scrollbar_background = Primitive::Quad { bounds: Rectangle { - x: background_bounds.x - + f32::from(SCROLLBAR_MARGIN), - width: background_bounds.width + x: scrollbar_bounds.x + f32::from(SCROLLBAR_MARGIN), + width: scrollbar_bounds.width - f32::from(2 * SCROLLBAR_MARGIN), - ..background_bounds + ..scrollbar_bounds }, background: Background::Color( [0.0, 0.0, 0.0, 0.3].into(), @@ -131,7 +87,7 @@ impl scrollable::Renderer for Renderer { } else { clip }, - if is_mouse_over_scrollbar || state.currently_grabbed() { + if is_mouse_over_scrollbar || state.is_scroller_grabbed() { MouseCursor::Idle } else { mouse_cursor -- cgit From 31e3b6fbcb06bd5e1e5773a7c2febd0cb0092819 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez <hector0193@gmail.com> Date: Tue, 3 Dec 2019 06:48:29 +0100 Subject: Unify logic by introducing `scrollable::Scrollbar` --- wgpu/src/renderer/widget/scrollable.rs | 110 ++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 49 deletions(-) (limited to 'wgpu/src') diff --git a/wgpu/src/renderer/widget/scrollable.rs b/wgpu/src/renderer/widget/scrollable.rs index b83cee1b..6ef57185 100644 --- a/wgpu/src/renderer/widget/scrollable.rs +++ b/wgpu/src/renderer/widget/scrollable.rs @@ -5,30 +5,40 @@ const SCROLLBAR_WIDTH: u16 = 10; const SCROLLBAR_MARGIN: u16 = 2; impl scrollable::Renderer for Renderer { - fn scrollbar_bounds(bounds: Rectangle) -> Rectangle { - Rectangle { - x: bounds.x + bounds.width - - f32::from(SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN), - y: bounds.y, - width: f32::from(SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN), - height: bounds.height, - } - } - - fn scroller_bounds( + fn scrollbar( + &self, bounds: Rectangle, content_bounds: Rectangle, - scrollbar_bounds: Rectangle, offset: u32, - ) -> Rectangle { - let ratio = bounds.height / content_bounds.height; - let scrollbar_height = bounds.height * ratio; - let y_offset = offset as f32 * ratio; - Rectangle { - x: scrollbar_bounds.x + f32::from(SCROLLBAR_MARGIN), - y: scrollbar_bounds.y + y_offset, - width: scrollbar_bounds.width - f32::from(2 * SCROLLBAR_MARGIN), - height: scrollbar_height, + ) -> Option<scrollable::Scrollbar> { + if content_bounds.height > bounds.height { + let scrollbar_bounds = Rectangle { + x: bounds.x + bounds.width + - f32::from(SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN), + y: bounds.y, + width: f32::from(SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN), + height: bounds.height, + }; + + let ratio = bounds.height / content_bounds.height; + let scrollbar_height = bounds.height * ratio; + let y_offset = offset as f32 * ratio; + + let scroller_bounds = Rectangle { + x: scrollbar_bounds.x + f32::from(SCROLLBAR_MARGIN), + y: scrollbar_bounds.y + y_offset, + width: scrollbar_bounds.width - f32::from(2 * SCROLLBAR_MARGIN), + height: scrollbar_height, + }; + + Some(scrollable::Scrollbar { + bounds: scrollbar_bounds, + scroller: scrollable::Scroller { + bounds: scroller_bounds, + }, + }) + } else { + None } } @@ -36,16 +46,13 @@ impl scrollable::Renderer for Renderer { &mut self, state: &scrollable::State, bounds: Rectangle, - content_bounds: Rectangle, + _content_bounds: Rectangle, is_mouse_over: bool, is_mouse_over_scrollbar: bool, - scrollbar_bounds: Rectangle, - scroller_bounds: Rectangle, + scrollbar: Option<scrollable::Scrollbar>, offset: u32, (content, mouse_cursor): Self::Output, ) -> Self::Output { - let is_content_overflowing = content_bounds.height > bounds.height; - let clip = Primitive::Clip { bounds, offset: Vector::new(0, offset), @@ -53,36 +60,41 @@ impl scrollable::Renderer for Renderer { }; ( - if is_content_overflowing - && (is_mouse_over || state.is_scroller_grabbed()) - { - let scrollbar = Primitive::Quad { - bounds: scroller_bounds, - background: Background::Color([0.0, 0.0, 0.0, 0.7].into()), - border_radius: 5, - }; - - if is_mouse_over_scrollbar || state.is_scroller_grabbed() { - let scrollbar_background = Primitive::Quad { - bounds: Rectangle { - x: scrollbar_bounds.x + f32::from(SCROLLBAR_MARGIN), - width: scrollbar_bounds.width - - f32::from(2 * SCROLLBAR_MARGIN), - ..scrollbar_bounds - }, + if let Some(scrollbar) = scrollbar { + if is_mouse_over || state.is_scroller_grabbed() { + let scroller = Primitive::Quad { + bounds: scrollbar.scroller.bounds, background: Background::Color( - [0.0, 0.0, 0.0, 0.3].into(), + [0.0, 0.0, 0.0, 0.7].into(), ), border_radius: 5, }; - Primitive::Group { - primitives: vec![clip, scrollbar_background, scrollbar], + if is_mouse_over_scrollbar || state.is_scroller_grabbed() { + let scrollbar = Primitive::Quad { + bounds: Rectangle { + x: scrollbar.bounds.x + + f32::from(SCROLLBAR_MARGIN), + width: scrollbar.bounds.width + - f32::from(2 * SCROLLBAR_MARGIN), + ..scrollbar.bounds + }, + background: Background::Color( + [0.0, 0.0, 0.0, 0.3].into(), + ), + border_radius: 5, + }; + + Primitive::Group { + primitives: vec![clip, scrollbar, scroller], + } + } else { + Primitive::Group { + primitives: vec![clip, scroller], + } } } else { - Primitive::Group { - primitives: vec![clip, scrollbar], - } + clip } } else { clip -- cgit From 0b5409c53d2563825d5f36bcae9700ec8721c34e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez <hector0193@gmail.com> Date: Tue, 3 Dec 2019 07:40:56 +0100 Subject: Fix `TextInput` inner border radius in `iced_wgpu` --- wgpu/src/renderer/widget/text_input.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'wgpu/src') diff --git a/wgpu/src/renderer/widget/text_input.rs b/wgpu/src/renderer/widget/text_input.rs index 9ed3b415..d64fca6d 100644 --- a/wgpu/src/renderer/widget/text_input.rs +++ b/wgpu/src/renderer/widget/text_input.rs @@ -45,7 +45,7 @@ impl text_input::Renderer for Renderer { height: bounds.height - 2.0, }, background: Background::Color(Color::WHITE), - border_radius: 5, + border_radius: 4, }; let size = f32::from(size); -- cgit