From 469b048de953da13f99b0483bf54d67ea35a17e8 Mon Sep 17 00:00:00 2001 From: Imbris Date: Sat, 31 Oct 2020 04:52:38 -0400 Subject: [PATCH] Update iced --- Cargo.lock | 87 +++++++++---------- Cargo.toml | 2 +- voxygen/Cargo.toml | 10 +-- .../renderer/widget/aspect_ratio_container.rs | 3 +- .../renderer/widget/background_container.rs | 7 +- voxygen/src/ui/ice/renderer/widget/button.rs | 1 + voxygen/src/ui/ice/renderer/widget/column.rs | 5 +- .../src/ui/ice/renderer/widget/container.rs | 3 +- voxygen/src/ui/ice/renderer/widget/overlay.rs | 5 +- voxygen/src/ui/ice/renderer/widget/row.rs | 5 +- .../src/ui/ice/renderer/widget/scrollable.rs | 48 +++++----- voxygen/src/ui/ice/renderer/widget/stack.rs | 5 +- voxygen/src/ui/ice/renderer/widget/tooltip.rs | 5 +- .../ui/ice/widget/aspect_ratio_container.rs | 3 + .../src/ui/ice/widget/background_container.rs | 8 +- voxygen/src/ui/ice/widget/compound_graphic.rs | 8 +- voxygen/src/ui/ice/widget/fill_text.rs | 4 +- voxygen/src/ui/ice/widget/image.rs | 4 +- voxygen/src/ui/ice/widget/mouse_detector.rs | 1 + voxygen/src/ui/ice/widget/overlay.rs | 3 + voxygen/src/ui/ice/widget/stack.rs | 7 +- voxygen/src/ui/ice/widget/tooltip.rs | 14 ++- 22 files changed, 139 insertions(+), 99 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2316f712f2..2405bc9387 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -612,21 +612,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "cocoa" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c49e86fc36d5704151f5996b7b3795385f50ce09e3be0f47a0cfde869681cf8" -dependencies = [ - "bitflags", - "block", - "core-foundation 0.7.0", - "core-graphics 0.19.2", - "foreign-types", - "libc", - "objc", -] - [[package]] name = "cocoa" version = "0.23.0" @@ -1869,14 +1854,14 @@ dependencies = [ [[package]] name = "glutin" -version = "0.24.1" -source = "git+https://github.com/rust-windowing/glutin.git?rev=63a1ea7d6e64c5112418cab9f21cd409f0afd7c2#63a1ea7d6e64c5112418cab9f21cd409f0afd7c2" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bae26a39a728b003e9fad473ea89527de0de050143b4df866f18bb154bc86e" dependencies = [ "android_glue", "cgl", - "cocoa 0.20.2", - "core-foundation 0.7.0", - "core-graphics 0.19.2", + "cocoa", + "core-foundation 0.9.1", "glutin_egl_sys", "glutin_emscripten_sys", "glutin_gles2_sys", @@ -1887,8 +1872,8 @@ dependencies = [ "log", "objc", "osmesa-sys", - "parking_lot 0.10.2", - "wayland-client 0.27.0", + "parking_lot 0.11.0", + "wayland-client 0.28.1", "wayland-egl", "winapi 0.3.9", "winit", @@ -1897,7 +1882,8 @@ dependencies = [ [[package]] name = "glutin_egl_sys" version = "0.1.5" -source = "git+https://github.com/rust-windowing/glutin.git?rev=63a1ea7d6e64c5112418cab9f21cd409f0afd7c2#63a1ea7d6e64c5112418cab9f21cd409f0afd7c2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" dependencies = [ "gl_generator", "winapi 0.3.9", @@ -1906,12 +1892,14 @@ dependencies = [ [[package]] name = "glutin_emscripten_sys" version = "0.1.1" -source = "git+https://github.com/rust-windowing/glutin.git?rev=63a1ea7d6e64c5112418cab9f21cd409f0afd7c2#63a1ea7d6e64c5112418cab9f21cd409f0afd7c2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" [[package]] name = "glutin_gles2_sys" version = "0.1.5" -source = "git+https://github.com/rust-windowing/glutin.git?rev=63a1ea7d6e64c5112418cab9f21cd409f0afd7c2#63a1ea7d6e64c5112418cab9f21cd409f0afd7c2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" dependencies = [ "gl_generator", "objc", @@ -1920,7 +1908,8 @@ dependencies = [ [[package]] name = "glutin_glx_sys" version = "0.1.7" -source = "git+https://github.com/rust-windowing/glutin.git?rev=63a1ea7d6e64c5112418cab9f21cd409f0afd7c2#63a1ea7d6e64c5112418cab9f21cd409f0afd7c2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351" dependencies = [ "gl_generator", "x11-dl", @@ -1929,7 +1918,8 @@ dependencies = [ [[package]] name = "glutin_wgl_sys" version = "0.1.5" -source = "git+https://github.com/rust-windowing/glutin.git?rev=63a1ea7d6e64c5112418cab9f21cd409f0afd7c2#63a1ea7d6e64c5112418cab9f21cd409f0afd7c2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" dependencies = [ "gl_generator", ] @@ -2158,12 +2148,12 @@ dependencies = [ [[package]] name = "iced_core" version = "0.2.1" -source = "git+https://github.com/hecrj/iced?rev=4f2962d#4f2962d73f3bdeeca8a11817e404c45e91e2c2cc" +source = "git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3" [[package]] name = "iced_futures" version = "0.1.2" -source = "git+https://github.com/hecrj/iced?rev=4f2962d#4f2962d73f3bdeeca8a11817e404c45e91e2c2cc" +source = "git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3" dependencies = [ "futures 0.3.5", "log", @@ -2173,7 +2163,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.1.0" -source = "git+https://github.com/hecrj/iced?rev=4f2962d#4f2962d73f3bdeeca8a11817e404c45e91e2c2cc" +source = "git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3" dependencies = [ "bytemuck", "glam", @@ -2186,7 +2176,7 @@ dependencies = [ [[package]] name = "iced_native" version = "0.2.2" -source = "git+https://github.com/hecrj/iced?rev=4f2962d#4f2962d73f3bdeeca8a11817e404c45e91e2c2cc" +source = "git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3" dependencies = [ "iced_core", "iced_futures", @@ -2198,7 +2188,7 @@ dependencies = [ [[package]] name = "iced_style" version = "0.1.0" -source = "git+https://github.com/hecrj/iced?rev=4f2962d#4f2962d73f3bdeeca8a11817e404c45e91e2c2cc" +source = "git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3" dependencies = [ "iced_core", ] @@ -2206,7 +2196,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.1.1" -source = "git+https://github.com/hecrj/iced?rev=4f2962d#4f2962d73f3bdeeca8a11817e404c45e91e2c2cc" +source = "git+https://github.com/hecrj/iced?rev=f464316#f46431600cb61d4e83e0ded1ca79525478436be3" dependencies = [ "iced_futures", "iced_graphics", @@ -3146,9 +3136,9 @@ dependencies = [ [[package]] name = "old_school_gfx_glutin_ext" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0557cea37cc48d238c938ded2873a6cc772704ee1eb01e832b43c2dd99624bc" +checksum = "97d3bf7a77b32b947b6eaa3bc3671d50a74cd9aafdbbd4f9a4feb03ed3a0ee94" dependencies = [ "gfx_core", "gfx_device_gl", @@ -4246,10 +4236,8 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562da6f2f0836e144f2e92118b35add58368280556af94f399666ebfd7d1e731" dependencies = [ - "andrew", "bitflags", "byteorder", - "calloop", "dlib", "lazy_static", "log", @@ -4266,8 +4254,10 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ec5c077def8af49f9b5aeeb5fcf8079c638c6615c3a8f9305e2dea601de57f7" dependencies = [ + "andrew", "bitflags", "byteorder", + "calloop", "dlib", "lazy_static", "log", @@ -5560,12 +5550,12 @@ dependencies = [ [[package]] name = "wayland-egl" -version = "0.27.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "123b47be6f258fffd854f016e8e7397adb8c04d984fcf308dce13714ae2231ae" +checksum = "e7ca6190c84bcdc58beccc619bf4866709db32d653255e89da38867f97f90d61" dependencies = [ - "wayland-client 0.27.0", - "wayland-sys 0.27.0", + "wayland-client 0.28.1", + "wayland-sys 0.28.1", ] [[package]] @@ -5743,11 +5733,11 @@ dependencies = [ [[package]] name = "winit" -version = "0.22.2" -source = "git+https://gitlab.com/veloren/winit.git?branch=macos-test-rebased#5efbaa7e4644c627201a9c4d24217f448795ce0f" +version = "0.23.0" +source = "git+https://gitlab.com/veloren/winit.git?branch=macos-test-spiffed#7c8c5f21384c898f50d37298d229093549b08803" dependencies = [ "bitflags", - "cocoa 0.23.0", + "cocoa", "core-foundation 0.9.1", "core-graphics 0.22.1", "core-video-sys", @@ -5766,8 +5756,8 @@ dependencies = [ "percent-encoding 2.1.0", "raw-window-handle", "serde", - "smithay-client-toolkit 0.11.0", - "wayland-client 0.27.0", + "smithay-client-toolkit 0.12.0", + "wayland-client 0.28.1", "winapi 0.3.9", "x11-dl", ] @@ -5848,3 +5838,8 @@ name = "xml-rs" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a" + +[[patch.unused]] +name = "glutin" +version = "0.24.1" +source = "git+https://github.com/rust-windowing/glutin.git?rev=63a1ea7d6e64c5112418cab9f21cd409f0afd7c2#63a1ea7d6e64c5112418cab9f21cd409f0afd7c2" diff --git a/Cargo.toml b/Cargo.toml index b3ba2382e9..b58a64ead1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,6 +79,6 @@ debug = 1 [patch.crates-io] # cpal conflict fix isn't released yet -winit = { git = "https://gitlab.com/veloren/winit.git", branch = "macos-test-rebased" } +winit = { git = "https://gitlab.com/veloren/winit.git", branch = "macos-test-spiffed" } glutin = {git = "https://github.com/rust-windowing/glutin.git", rev="63a1ea7d6e64c5112418cab9f21cd409f0afd7c2"} vek = { git = "https://gitlab.com/veloren/vek.git", branch = "fix_intrinsics" } diff --git a/voxygen/Cargo.toml b/voxygen/Cargo.toml index 3a0bf5d634..57ac5addc4 100644 --- a/voxygen/Cargo.toml +++ b/voxygen/Cargo.toml @@ -27,16 +27,16 @@ anim = {package = "veloren-voxygen-anim", path = "src/anim", default-features = gfx = "0.18.2" gfx_device_gl = {version = "0.16.2", optional = true} gfx_gl = {version = "0.6.1", optional = true} -glutin = {git = "https://github.com/rust-windowing/glutin.git", rev="63a1ea7d6e64c5112418cab9f21cd409f0afd7c2"} -old_school_gfx_glutin_ext = "0.24" -winit = {version = "0.22.2", features = ["serde"]} +glutin = "0.25.1" +old_school_gfx_glutin_ext = "0.25" +winit = {version = "0.23.0", features = ["serde"]} # Ui conrod_core = {git = "https://gitlab.com/veloren/conrod.git", branch="copypasta_0.7"} conrod_winit = {git = "https://gitlab.com/veloren/conrod.git", branch="copypasta_0.7"} euc = {git = "https://github.com/zesterer/euc.git"} -iced = {package = "iced_native", git = "https://github.com/hecrj/iced", rev = "4f2962d"} -iced_winit = {git = "https://github.com/hecrj/iced", rev = "4f2962d"} +iced = {package = "iced_native", git = "https://github.com/hecrj/iced", rev = "f464316"} +iced_winit = {git = "https://github.com/hecrj/iced", rev = "f464316"} window_clipboard = "0.1.1" glyph_brush = "0.7.0" diff --git a/voxygen/src/ui/ice/renderer/widget/aspect_ratio_container.rs b/voxygen/src/ui/ice/renderer/widget/aspect_ratio_container.rs index 6732f73adc..3a07c909df 100644 --- a/voxygen/src/ui/ice/renderer/widget/aspect_ratio_container.rs +++ b/voxygen/src/ui/ice/renderer/widget/aspect_ratio_container.rs @@ -15,11 +15,12 @@ impl aspect_ratio_container::Renderer for IcedRenderer { defaults: &Self::Defaults, _bounds: Rectangle, cursor_position: Point, + viewport: &Rectangle, //style: &Self::Style, content: &Element<'_, M, Self>, content_layout: Layout<'_>, ) -> Self::Output { // TODO: stlying to add a background image and such - content.draw(self, defaults, content_layout, cursor_position) + content.draw(self, defaults, content_layout, cursor_position, viewport) } } diff --git a/voxygen/src/ui/ice/renderer/widget/background_container.rs b/voxygen/src/ui/ice/renderer/widget/background_container.rs index 8ddfa0e26b..eadda89bd8 100644 --- a/voxygen/src/ui/ice/renderer/widget/background_container.rs +++ b/voxygen/src/ui/ice/renderer/widget/background_container.rs @@ -1,5 +1,5 @@ use super::super::{super::widget::background_container, IcedRenderer, Primitive}; -use iced::{Element, Layout, Point}; +use iced::{Element, Layout, Point, Rectangle}; impl background_container::Renderer for IcedRenderer { fn draw( @@ -7,6 +7,7 @@ impl background_container::Renderer for IcedRenderer { defaults: &Self::Defaults, background: &B, background_layout: Layout<'_>, + viewport: &Rectangle, content: &Element<'_, M, Self>, content_layout: Layout<'_>, cursor_position: Point, @@ -15,10 +16,10 @@ impl background_container::Renderer for IcedRenderer { B: background_container::Background, { let back_primitive = background - .draw(self, defaults, background_layout, cursor_position) + .draw(self, defaults, background_layout, cursor_position, viewport) .0; let (content_primitive, mouse_interaction) = - content.draw(self, defaults, content_layout, cursor_position); + content.draw(self, defaults, content_layout, cursor_position, viewport); ( Primitive::Group { primitives: vec![back_primitive, content_primitive], diff --git a/voxygen/src/ui/ice/renderer/widget/button.rs b/voxygen/src/ui/ice/renderer/widget/button.rs index 5f9c17c783..a0e6399297 100644 --- a/voxygen/src/ui/ice/renderer/widget/button.rs +++ b/voxygen/src/ui/ice/renderer/widget/button.rs @@ -37,6 +37,7 @@ impl button::Renderer for IcedRenderer { &Defaults { text_color }, content_layout, cursor_position, + &bounds, ); let primitive = if let Some((handle, color)) = maybe_image { diff --git a/voxygen/src/ui/ice/renderer/widget/column.rs b/voxygen/src/ui/ice/renderer/widget/column.rs index 7dbbbde20f..b55840e9f0 100644 --- a/voxygen/src/ui/ice/renderer/widget/column.rs +++ b/voxygen/src/ui/ice/renderer/widget/column.rs @@ -1,5 +1,5 @@ use super::super::{IcedRenderer, Primitive}; -use iced::{column, mouse, Element, Layout, Point}; +use iced::{column, mouse, Element, Layout, Point, Rectangle}; impl column::Renderer for IcedRenderer { fn draw( @@ -8,6 +8,7 @@ impl column::Renderer for IcedRenderer { content: &[Element<'_, M, Self>], layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> Self::Output { let mut mouse_interaction = mouse::Interaction::default(); @@ -18,7 +19,7 @@ impl column::Renderer for IcedRenderer { .zip(layout.children()) .map(|(child, layout)| { let (primitive, new_mouse_interaction) = - child.draw(self, defaults, layout, cursor_position); + child.draw(self, defaults, layout, cursor_position, viewport); if new_mouse_interaction > mouse_interaction { mouse_interaction = new_mouse_interaction; diff --git a/voxygen/src/ui/ice/renderer/widget/container.rs b/voxygen/src/ui/ice/renderer/widget/container.rs index a15436e160..9d8398421c 100644 --- a/voxygen/src/ui/ice/renderer/widget/container.rs +++ b/voxygen/src/ui/ice/renderer/widget/container.rs @@ -15,12 +15,13 @@ impl container::Renderer for IcedRenderer { defaults: &Self::Defaults, bounds: Rectangle, cursor_position: Point, + viewport: &Rectangle, style_sheet: &Self::Style, content: &Element<'_, M, Self>, content_layout: Layout<'_>, ) -> Self::Output { let (content, mouse_interaction) = - content.draw(self, defaults, content_layout, cursor_position); + content.draw(self, defaults, content_layout, cursor_position, viewport); let prim = match style_sheet { Self::Style::Image(handle, color) => { diff --git a/voxygen/src/ui/ice/renderer/widget/overlay.rs b/voxygen/src/ui/ice/renderer/widget/overlay.rs index 7a602917ec..9447396b28 100644 --- a/voxygen/src/ui/ice/renderer/widget/overlay.rs +++ b/voxygen/src/ui/ice/renderer/widget/overlay.rs @@ -7,16 +7,17 @@ impl overlay::Renderer for IcedRenderer { defaults: &Self::Defaults, _bounds: Rectangle, cursor_position: Point, + viewport: &Rectangle, over: &Element<'_, M, Self>, over_layout: Layout<'_>, under: &Element<'_, M, Self>, under_layout: Layout<'_>, ) -> Self::Output { let (under, under_mouse_interaction) = - under.draw(self, defaults, under_layout, cursor_position); + under.draw(self, defaults, under_layout, cursor_position, viewport); let (over, over_mouse_interaction) = - over.draw(self, defaults, over_layout, cursor_position); + over.draw(self, defaults, over_layout, cursor_position, viewport); // TODO: this isn't perfect but should be obselete when iced gets layer support let mouse_interaction = if over_mouse_interaction == Interaction::Idle { diff --git a/voxygen/src/ui/ice/renderer/widget/row.rs b/voxygen/src/ui/ice/renderer/widget/row.rs index 3de2f1ea26..634c81d0ae 100644 --- a/voxygen/src/ui/ice/renderer/widget/row.rs +++ b/voxygen/src/ui/ice/renderer/widget/row.rs @@ -1,5 +1,5 @@ use super::super::{IcedRenderer, Primitive}; -use iced::{mouse, row, Element, Layout, Point}; +use iced::{mouse, row, Element, Layout, Point, Rectangle}; impl row::Renderer for IcedRenderer { fn draw( @@ -8,6 +8,7 @@ impl row::Renderer for IcedRenderer { content: &[Element<'_, M, Self>], layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> Self::Output { let mut mouse_interaction = mouse::Interaction::default(); @@ -18,7 +19,7 @@ impl row::Renderer for IcedRenderer { .zip(layout.children()) .map(|(child, layout)| { let (primitive, new_mouse_interaction) = - child.draw(self, defaults, layout, cursor_position); + child.draw(self, defaults, layout, cursor_position, viewport); if new_mouse_interaction > mouse_interaction { mouse_interaction = new_mouse_interaction; diff --git a/voxygen/src/ui/ice/renderer/widget/scrollable.rs b/voxygen/src/ui/ice/renderer/widget/scrollable.rs index 6c176fb7d0..edf7c1a4a7 100644 --- a/voxygen/src/ui/ice/renderer/widget/scrollable.rs +++ b/voxygen/src/ui/ice/renderer/widget/scrollable.rs @@ -3,9 +3,7 @@ use common::util::srgba_to_linear; use iced::{mouse, scrollable, Rectangle}; use style::scrollable::{Scroller, Track}; -const SCROLLBAR_WIDTH: u16 = 6; const SCROLLBAR_MIN_HEIGHT: u16 = 6; -const SCROLLBAR_MARGIN: u16 = 1; impl scrollable::Renderer for IcedRenderer { type Style = style::scrollable::Style; @@ -18,32 +16,42 @@ impl scrollable::Renderer for IcedRenderer { bounds: Rectangle, content_bounds: Rectangle, offset: u32, + scrollbar_width: u16, + scrollbar_margin: u16, + scroller_width: u16, ) -> Option { - // TODO: might actually want to divide by p_scale here (same in text&ext_input) - // (or just not use it) (or at least only account for dpi but not any - // additional scaling) - let width = (SCROLLBAR_WIDTH + 2 * SCROLLBAR_MARGIN) as f32 * self.p_scale; if content_bounds.height > bounds.height { - let scrollbar_bounds = Rectangle { - x: bounds.x + bounds.width - width, - width, + // Area containing both scrollbar and scroller + let outer_width = (scrollbar_width.max(scroller_width) + 2 * scrollbar_margin) as f32 /* * self.p_scale */; + let outer_bounds = Rectangle { + x: bounds.x + bounds.width - outer_width, + width: outer_width, ..bounds }; + // Background scrollbar (i.e. the track) + let scrollbar_bounds = Rectangle { + x: bounds.x + bounds.width - outer_width / 2.0 - (scrollbar_width / 2) as f32, + width: scrollbar_width as f32, + ..bounds + }; + + // Interactive scroller let visible_fraction = bounds.height / content_bounds.height; - let scrollbar_height = (bounds.height * visible_fraction) - .max((2 * SCROLLBAR_MIN_HEIGHT) as f32 * self.p_scale); + let scroller_height = (bounds.height * visible_fraction) + .max((2 * SCROLLBAR_MIN_HEIGHT) as f32/* * self.p_scale*/); let y_offset = offset as f32 * visible_fraction; let scroller_bounds = Rectangle { - x: scrollbar_bounds.x + SCROLLBAR_MARGIN as f32 * self.p_scale, - // TODO: check this behavior + x: bounds.x + bounds.width - outer_width / 2.0 - (scrollbar_width / 2) as f32, /* * self.p_scale*/ y: scrollbar_bounds.y + y_offset, - width: scrollbar_bounds.width - (2 * SCROLLBAR_MARGIN) as f32 * self.p_scale, - height: scrollbar_height, + width: scroller_width as f32, /* * self.p_scale*/ + height: scroller_height, }; Some(scrollable::Scrollbar { + outer_bounds, bounds: scrollbar_bounds, + margin: scrollbar_margin, scroller: scrollable::Scroller { bounds: scroller_bounds, }, @@ -145,20 +153,14 @@ impl scrollable::Renderer for IcedRenderer { } if let Some(track) = style.track { - let bounds = Rectangle { - x: scrollbar.bounds.x + SCROLLBAR_MARGIN as f32 * self.p_scale, - width: scrollbar.bounds.width - - (2 * SCROLLBAR_MARGIN) as f32 * self.p_scale, - ..scrollbar.bounds - }; primitives.push(match track { Track::Color(color) => Primitive::Rectangle { - bounds, + bounds: scrollbar.bounds, linear_color: srgba_to_linear(color.map(|e| e as f32 / 255.0)), }, Track::Image(handle, color) => Primitive::Image { handle: (handle, Rotation::None), - bounds, + bounds: scrollbar.bounds, color, }, }); diff --git a/voxygen/src/ui/ice/renderer/widget/stack.rs b/voxygen/src/ui/ice/renderer/widget/stack.rs index 0594a69ae3..081f516a98 100644 --- a/voxygen/src/ui/ice/renderer/widget/stack.rs +++ b/voxygen/src/ui/ice/renderer/widget/stack.rs @@ -1,5 +1,5 @@ use super::super::{super::widget::stack, IcedRenderer, Primitive}; -use iced::{mouse, Element, Layout, Point}; +use iced::{mouse, Element, Layout, Point, Rectangle}; impl stack::Renderer for IcedRenderer { fn draw( @@ -8,6 +8,7 @@ impl stack::Renderer for IcedRenderer { content: &[Element<'_, M, Self>], layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> Self::Output { let mut mouse_interaction = mouse::Interaction::default(); @@ -18,7 +19,7 @@ impl stack::Renderer for IcedRenderer { .zip(layout.children()) .map(|(child, layout)| { let (primitive, new_mouse_interaction) = - child.draw(self, defaults, layout, cursor_position); + child.draw(self, defaults, layout, cursor_position, viewport); if new_mouse_interaction > mouse_interaction { mouse_interaction = new_mouse_interaction; diff --git a/voxygen/src/ui/ice/renderer/widget/tooltip.rs b/voxygen/src/ui/ice/renderer/widget/tooltip.rs index 626096dd0e..0707c6bfd7 100644 --- a/voxygen/src/ui/ice/renderer/widget/tooltip.rs +++ b/voxygen/src/ui/ice/renderer/widget/tooltip.rs @@ -1,5 +1,5 @@ use super::super::{super::widget::tooltip, IcedRenderer, Primitive}; -use iced::{Element, Layout, Point}; +use iced::{Element, Layout, Point, Rectangle}; impl tooltip::Renderer for IcedRenderer { fn draw( @@ -7,11 +7,12 @@ impl tooltip::Renderer for IcedRenderer { alpha: f32, defaults: &Self::Defaults, cursor_position: Point, + viewport: &Rectangle, content: &Element<'_, M, Self>, content_layout: Layout<'_>, ) -> Self::Output { let (primitive, cursor_interaction) = - content.draw(self, defaults, content_layout, cursor_position); + content.draw(self, defaults, content_layout, cursor_position, viewport); ( Primitive::Opacity { alpha, diff --git a/voxygen/src/ui/ice/widget/aspect_ratio_container.rs b/voxygen/src/ui/ice/widget/aspect_ratio_container.rs index c178580e28..4d118bf62f 100644 --- a/voxygen/src/ui/ice/widget/aspect_ratio_container.rs +++ b/voxygen/src/ui/ice/widget/aspect_ratio_container.rs @@ -139,11 +139,13 @@ where defaults: &R::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> R::Output { renderer.draw( defaults, layout.bounds(), cursor_position, + viewport, &self.content, layout.children().next().unwrap(), ) @@ -179,6 +181,7 @@ pub trait Renderer: iced::Renderer { defaults: &Self::Defaults, bounds: Rectangle, cursor_position: Point, + viewport: &Rectangle, //style: &Self::Style, content: &Element<'_, M, Self>, content_layout: Layout<'_>, diff --git a/voxygen/src/ui/ice/widget/background_container.rs b/voxygen/src/ui/ice/widget/background_container.rs index 1e16e66628..7aad366bf4 100644 --- a/voxygen/src/ui/ice/widget/background_container.rs +++ b/voxygen/src/ui/ice/widget/background_container.rs @@ -1,4 +1,6 @@ -use iced::{layout, Clipboard, Element, Event, Hasher, Layout, Length, Point, Size, Widget}; +use iced::{ + layout, Clipboard, Element, Event, Hasher, Layout, Length, Point, Rectangle, Size, Widget, +}; use std::{hash::Hash, u32}; // TODO: decouple from image/compound graphic widgets (they could still use @@ -74,6 +76,7 @@ pub trait Background: Sized { defaults: &R::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> R::Output; } @@ -294,11 +297,13 @@ where defaults: &R::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> R::Output { renderer.draw( defaults, &self.background, layout, + viewport, &self.content, layout.children().next().unwrap(), cursor_position, @@ -331,6 +336,7 @@ pub trait Renderer: iced::Renderer { defaults: &Self::Defaults, background: &B, background_layout: Layout<'_>, + viewport: &Rectangle, content: &Element<'_, M, Self>, content_layout: Layout<'_>, cursor_position: Point, diff --git a/voxygen/src/ui/ice/widget/compound_graphic.rs b/voxygen/src/ui/ice/widget/compound_graphic.rs index 167e175734..dcd846df23 100644 --- a/voxygen/src/ui/ice/widget/compound_graphic.rs +++ b/voxygen/src/ui/ice/widget/compound_graphic.rs @@ -134,6 +134,8 @@ impl CompoundGraphic { _defaults: &R::Defaults, layout: Layout<'_>, _cursor_position: Point, + // Note: could use to skip elements outside the viewport + _viewport: &Rectangle, ) -> R::Output { let [pixel_w, pixel_h] = self.graphics_size; let bounds = layout.bounds(); @@ -195,8 +197,9 @@ where defaults: &R::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> R::Output { - Self::draw(self, renderer, defaults, layout, cursor_position) + Self::draw(self, renderer, defaults, layout, cursor_position, viewport) } fn hash_layout(&self, state: &mut Hasher) { @@ -251,7 +254,8 @@ where defaults: &R::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> R::Output { - Self::draw(self, renderer, defaults, layout, cursor_position) + Self::draw(self, renderer, defaults, layout, cursor_position, viewport) } } diff --git a/voxygen/src/ui/ice/widget/fill_text.rs b/voxygen/src/ui/ice/widget/fill_text.rs index 7cd5b8d103..0243d70656 100644 --- a/voxygen/src/ui/ice/widget/fill_text.rs +++ b/voxygen/src/ui/ice/widget/fill_text.rs @@ -1,4 +1,4 @@ -use iced::{layout, Element, Hasher, Layout, Length, Point, Size, Widget}; +use iced::{layout, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget}; use std::hash::Hash; const DEFAULT_FILL_FRACTION: f32 = 1.0; @@ -94,6 +94,7 @@ where defaults: &R::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> R::Output { // Note: this breaks if the parent widget adjusts the bounds height let font_size = (layout.bounds().height * self.fill_fraction) as u16; @@ -103,6 +104,7 @@ where defaults, layout.children().next().unwrap(), cursor_position, + viewport, ) } diff --git a/voxygen/src/ui/ice/widget/image.rs b/voxygen/src/ui/ice/widget/image.rs index 4a74bf0c81..2d0aa564ca 100644 --- a/voxygen/src/ui/ice/widget/image.rs +++ b/voxygen/src/ui/ice/widget/image.rs @@ -1,5 +1,5 @@ use super::super::graphic; -use iced::{layout, Element, Hasher, Layout, Length, Point, Widget}; +use iced::{layout, Element, Hasher, Layout, Length, Point, Rectangle, Widget}; use std::hash::Hash; use vek::Rgba; @@ -86,6 +86,7 @@ where _defaults: &R::Defaults, layout: Layout<'_>, _cursor_position: Point, + _viewport: &Rectangle, ) -> R::Output { renderer.draw(self.handle, self.color, layout) } @@ -134,6 +135,7 @@ where _defaults: &R::Defaults, layout: Layout<'_>, _cursor_position: Point, + _viewport: &Rectangle, ) -> R::Output { renderer.draw(self.handle, self.color, layout) } diff --git a/voxygen/src/ui/ice/widget/mouse_detector.rs b/voxygen/src/ui/ice/widget/mouse_detector.rs index 742fbb6f34..eb25275213 100644 --- a/voxygen/src/ui/ice/widget/mouse_detector.rs +++ b/voxygen/src/ui/ice/widget/mouse_detector.rs @@ -86,6 +86,7 @@ where _defaults: &R::Defaults, layout: Layout<'_>, _cursor_position: Point, + _viewport: &Rectangle, ) -> R::Output { renderer.draw(layout.bounds()) } diff --git a/voxygen/src/ui/ice/widget/overlay.rs b/voxygen/src/ui/ice/widget/overlay.rs index 914ba0fc1f..33320325ea 100644 --- a/voxygen/src/ui/ice/widget/overlay.rs +++ b/voxygen/src/ui/ice/widget/overlay.rs @@ -169,12 +169,14 @@ where defaults: &R::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> R::Output { let mut children = layout.children(); renderer.draw( defaults, layout.bounds(), cursor_position, + viewport, &self.over, children.next().unwrap(), &self.under, @@ -210,6 +212,7 @@ pub trait Renderer: iced::Renderer { defaults: &Self::Defaults, bounds: Rectangle, cursor_position: Point, + viewport: &Rectangle, //style: &self::Style, over: &Element<'_, M, Self>, over_layout: Layout<'_>, diff --git a/voxygen/src/ui/ice/widget/stack.rs b/voxygen/src/ui/ice/widget/stack.rs index 7fda1b5c2d..e325eed59b 100644 --- a/voxygen/src/ui/ice/widget/stack.rs +++ b/voxygen/src/ui/ice/widget/stack.rs @@ -1,4 +1,5 @@ -use iced::{layout, Element, Hasher, Layout, Length, Point, Size, Widget}; +// TODO: unused (I think?) consider slating for removal +use iced::{layout, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget}; use std::hash::Hash; /// Stack up some widgets @@ -60,8 +61,9 @@ where defaults: &R::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> R::Output { - renderer.draw(defaults, &self.children, layout, cursor_position) + renderer.draw(defaults, &self.children, layout, cursor_position, viewport) } fn hash_layout(&self, state: &mut Hasher) { @@ -89,6 +91,7 @@ pub trait Renderer: iced::Renderer { children: &[Element<'_, M, Self>], layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> Self::Output; } diff --git a/voxygen/src/ui/ice/widget/tooltip.rs b/voxygen/src/ui/ice/widget/tooltip.rs index 6d85836780..df1a788553 100644 --- a/voxygen/src/ui/ice/widget/tooltip.rs +++ b/voxygen/src/ui/ice/widget/tooltip.rs @@ -209,6 +209,7 @@ where defaults: &R::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> R::Output { let bounds = layout.bounds(); if bounds.contains(cursor_position) { @@ -224,7 +225,7 @@ where } self.content - .draw(renderer, defaults, layout, cursor_position) + .draw(renderer, defaults, layout, cursor_position, viewport) } fn overlay(&mut self, layout: Layout<'_>) -> Option> { @@ -355,7 +356,15 @@ where layout: Layout<'_>, cursor_position: Point, ) -> R::Output { - renderer.draw(self.alpha, defaults, cursor_position, &self.content, layout) + renderer.draw( + self.alpha, + defaults, + cursor_position, + // TODO: hopefully this works + &layout.bounds(), + &self.content, + layout, + ) } } @@ -365,6 +374,7 @@ pub trait Renderer: iced::Renderer { alpha: f32, defaults: &Self::Defaults, cursor_position: Point, + viewport: &Rectangle, content: &Element<'_, M, Self>, content_layout: Layout<'_>, ) -> Self::Output;