diff options
Diffstat (limited to 'wgpu')
-rw-r--r-- | wgpu/src/backend.rs | 17 | ||||
-rw-r--r-- | wgpu/src/lib.rs | 4 | ||||
-rw-r--r-- | wgpu/src/widget.rs | 9 | ||||
-rw-r--r-- | wgpu/src/widget/button.rs | 5 | ||||
-rw-r--r-- | wgpu/src/widget/checkbox.rs | 3 | ||||
-rw-r--r-- | wgpu/src/widget/container.rs | 3 | ||||
-rw-r--r-- | wgpu/src/widget/pane_grid.rs | 7 | ||||
-rw-r--r-- | wgpu/src/widget/pick_list.rs | 4 | ||||
-rw-r--r-- | wgpu/src/widget/progress_bar.rs | 10 | ||||
-rw-r--r-- | wgpu/src/widget/radio.rs | 2 | ||||
-rw-r--r-- | wgpu/src/widget/rule.rs | 9 | ||||
-rw-r--r-- | wgpu/src/widget/scrollable.rs | 4 | ||||
-rw-r--r-- | wgpu/src/widget/slider.rs | 10 | ||||
-rw-r--r-- | wgpu/src/widget/text_input.rs | 5 | ||||
-rw-r--r-- | wgpu/src/widget/toggler.rs | 3 | ||||
-rw-r--r-- | wgpu/src/widget/tooltip.rs | 4 | ||||
-rw-r--r-- | wgpu/src/window/compositor.rs | 29 |
17 files changed, 57 insertions, 71 deletions
diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs index 73fa5c5f..bb84cc8f 100644 --- a/wgpu/src/backend.rs +++ b/wgpu/src/backend.rs @@ -8,7 +8,6 @@ use iced_graphics::font; use iced_graphics::layer::Layer; use iced_graphics::{Primitive, Viewport}; use iced_native::alignment; -use iced_native::mouse; use iced_native::{Font, Size}; #[cfg(any(feature = "image_rs", feature = "svg"))] @@ -28,6 +27,7 @@ pub struct Backend { image_pipeline: image::Pipeline, default_text_size: u16, + primitive: Primitive, } impl Backend { @@ -60,6 +60,7 @@ impl Backend { image_pipeline, default_text_size: settings.default_text_size, + primitive: Primitive::None, } } @@ -67,23 +68,23 @@ impl Backend { /// /// The text provided as overlay will be rendered on top of the primitives. /// This is useful for rendering debug information. - pub fn draw<T: AsRef<str>>( + pub fn present<T: AsRef<str>>( &mut self, device: &wgpu::Device, staging_belt: &mut wgpu::util::StagingBelt, encoder: &mut wgpu::CommandEncoder, frame: &wgpu::TextureView, + primitives: &[Primitive], viewport: &Viewport, - (primitive, mouse_interaction): &(Primitive, mouse::Interaction), overlay_text: &[T], - ) -> mouse::Interaction { + ) { log::debug!("Drawing"); let target_size = viewport.physical_size(); let scale_factor = viewport.scale_factor() as f32; let transformation = viewport.projection(); - let mut layers = Layer::generate(primitive, viewport); + let mut layers = Layer::generate(primitives, viewport); layers.push(Layer::overlay(overlay_text, viewport)); for layer in layers { @@ -102,8 +103,6 @@ impl Backend { #[cfg(any(feature = "image_rs", feature = "svg"))] self.image_pipeline.trim_cache(); - - *mouse_interaction } fn flush( @@ -120,6 +119,10 @@ impl Backend { ) { let bounds = (layer.bounds * scale_factor).snap(); + if bounds.width < 1 || bounds.height < 1 { + return; + } + if !layer.quads.is_empty() { self.quad_pipeline.draw( device, diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs index e868a655..ed99b126 100644 --- a/wgpu/src/lib.rs +++ b/wgpu/src/lib.rs @@ -36,9 +36,7 @@ mod backend; mod quad; mod text; -pub use iced_graphics::{ - Antialiasing, Color, Defaults, Error, Primitive, Viewport, -}; +pub use iced_graphics::{Antialiasing, Color, Error, Primitive, Viewport}; pub use wgpu; pub use backend::Backend; diff --git a/wgpu/src/widget.rs b/wgpu/src/widget.rs index a575d036..99ae0ac2 100644 --- a/wgpu/src/widget.rs +++ b/wgpu/src/widget.rs @@ -66,13 +66,14 @@ pub mod qr_code; #[doc(no_inline)] pub use qr_code::QRCode; -pub use iced_native::Space; +pub use iced_native::widget::Space; /// A container that distributes its contents vertically. -pub type Column<'a, Message> = iced_native::Column<'a, Message, Renderer>; +pub type Column<'a, Message> = + iced_native::widget::Column<'a, Message, Renderer>; /// A container that distributes its contents horizontally. -pub type Row<'a, Message> = iced_native::Row<'a, Message, Renderer>; +pub type Row<'a, Message> = iced_native::widget::Row<'a, Message, Renderer>; /// A paragraph of text. -pub type Text = iced_native::Text<Renderer>; +pub type Text = iced_native::widget::Text<Renderer>; diff --git a/wgpu/src/widget/button.rs b/wgpu/src/widget/button.rs index fc729cd5..f11ff25e 100644 --- a/wgpu/src/widget/button.rs +++ b/wgpu/src/widget/button.rs @@ -4,9 +4,10 @@ use crate::Renderer; pub use iced_graphics::button::{Style, StyleSheet}; -pub use iced_native::button::State; +pub use iced_native::widget::button::State; /// A widget that produces a message when clicked. /// /// This is an alias of an `iced_native` button with an `iced_wgpu::Renderer`. -pub type Button<'a, Message> = iced_native::Button<'a, Message, Renderer>; +pub type Button<'a, Message> = + iced_native::widget::Button<'a, Message, Renderer>; diff --git a/wgpu/src/widget/checkbox.rs b/wgpu/src/widget/checkbox.rs index d27d77cc..76d572d9 100644 --- a/wgpu/src/widget/checkbox.rs +++ b/wgpu/src/widget/checkbox.rs @@ -6,4 +6,5 @@ pub use iced_graphics::checkbox::{Style, StyleSheet}; /// A box that can be checked. /// /// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`. -pub type Checkbox<Message> = iced_native::Checkbox<Message, Renderer>; +pub type Checkbox<'a, Message> = + iced_native::widget::Checkbox<'a, Message, Renderer>; diff --git a/wgpu/src/widget/container.rs b/wgpu/src/widget/container.rs index bc26cef2..c16db50d 100644 --- a/wgpu/src/widget/container.rs +++ b/wgpu/src/widget/container.rs @@ -7,4 +7,5 @@ pub use iced_graphics::container::{Style, StyleSheet}; /// /// This is an alias of an `iced_native` container with a default /// `Renderer`. -pub type Container<'a, Message> = iced_native::Container<'a, Message, Renderer>; +pub type Container<'a, Message> = + iced_native::widget::Container<'a, Message, Renderer>; diff --git a/wgpu/src/widget/pane_grid.rs b/wgpu/src/widget/pane_grid.rs index fc36862c..3c47acf0 100644 --- a/wgpu/src/widget/pane_grid.rs +++ b/wgpu/src/widget/pane_grid.rs @@ -20,12 +20,13 @@ pub use iced_graphics::pane_grid::{ /// [](https://gfycat.com/mixedflatjellyfish) /// /// This is an alias of an `iced_native` pane grid with an `iced_wgpu::Renderer`. -pub type PaneGrid<'a, Message> = iced_native::PaneGrid<'a, Message, Renderer>; +pub type PaneGrid<'a, Message> = + iced_native::widget::PaneGrid<'a, Message, Renderer>; /// The content of a [`Pane`]. pub type Content<'a, Message> = - iced_native::pane_grid::Content<'a, Message, Renderer>; + iced_native::widget::pane_grid::Content<'a, Message, Renderer>; /// The title bar of a [`Pane`]. pub type TitleBar<'a, Message> = - iced_native::pane_grid::TitleBar<'a, Message, Renderer>; + iced_native::widget::pane_grid::TitleBar<'a, Message, Renderer>; diff --git a/wgpu/src/widget/pick_list.rs b/wgpu/src/widget/pick_list.rs index fccc68c9..4d93be68 100644 --- a/wgpu/src/widget/pick_list.rs +++ b/wgpu/src/widget/pick_list.rs @@ -1,9 +1,9 @@ //! Display a dropdown list of selectable values. -pub use iced_native::pick_list::State; +pub use iced_native::widget::pick_list::State; pub use iced_graphics::overlay::menu::Style as Menu; pub use iced_graphics::pick_list::{Style, StyleSheet}; /// A widget allowing the selection of a single value from a list of options. pub type PickList<'a, T, Message> = - iced_native::PickList<'a, T, Message, crate::Renderer>; + iced_native::widget::PickList<'a, T, Message, crate::Renderer>; diff --git a/wgpu/src/widget/progress_bar.rs b/wgpu/src/widget/progress_bar.rs index 45a25d00..88391ccb 100644 --- a/wgpu/src/widget/progress_bar.rs +++ b/wgpu/src/widget/progress_bar.rs @@ -2,12 +2,4 @@ //! //! A [`ProgressBar`] has a range of possible values and a current value, //! as well as a length, height and style. -use crate::Renderer; - -pub use iced_graphics::progress_bar::{Style, StyleSheet}; - -/// A bar that displays progress. -/// -/// This is an alias of an `iced_native` progress bar with an -/// `iced_wgpu::Renderer`. -pub type ProgressBar = iced_native::ProgressBar<Renderer>; +pub use iced_graphics::progress_bar::*; diff --git a/wgpu/src/widget/radio.rs b/wgpu/src/widget/radio.rs index 0b843d1f..9ef1d7a5 100644 --- a/wgpu/src/widget/radio.rs +++ b/wgpu/src/widget/radio.rs @@ -7,4 +7,4 @@ pub use iced_graphics::radio::{Style, StyleSheet}; /// /// This is an alias of an `iced_native` radio button with an /// `iced_wgpu::Renderer`. -pub type Radio<Message> = iced_native::Radio<Message, Renderer>; +pub type Radio<'a, Message> = iced_native::widget::Radio<'a, Message, Renderer>; diff --git a/wgpu/src/widget/rule.rs b/wgpu/src/widget/rule.rs index 3f7bc67a..40281773 100644 --- a/wgpu/src/widget/rule.rs +++ b/wgpu/src/widget/rule.rs @@ -1,10 +1,3 @@ //! Display a horizontal or vertical rule for dividing content. -use crate::Renderer; - -pub use iced_graphics::rule::{FillMode, Style, StyleSheet}; - -/// Display a horizontal or vertical rule for dividing content. -/// -/// This is an alias of an `iced_native` rule with an `iced_wgpu::Renderer`. -pub type Rule = iced_native::Rule<Renderer>; +pub use iced_graphics::rule::*; diff --git a/wgpu/src/widget/scrollable.rs b/wgpu/src/widget/scrollable.rs index fabb4318..d5635ec5 100644 --- a/wgpu/src/widget/scrollable.rs +++ b/wgpu/src/widget/scrollable.rs @@ -2,7 +2,7 @@ use crate::Renderer; pub use iced_graphics::scrollable::{Scrollbar, Scroller, StyleSheet}; -pub use iced_native::scrollable::State; +pub use iced_native::widget::scrollable::State; /// A widget that can vertically display an infinite amount of content /// with a scrollbar. @@ -10,4 +10,4 @@ pub use iced_native::scrollable::State; /// This is an alias of an `iced_native` scrollable with a default /// `Renderer`. pub type Scrollable<'a, Message> = - iced_native::Scrollable<'a, Message, Renderer>; + iced_native::widget::Scrollable<'a, Message, Renderer>; diff --git a/wgpu/src/widget/slider.rs b/wgpu/src/widget/slider.rs index 9a269858..2fb3d5d9 100644 --- a/wgpu/src/widget/slider.rs +++ b/wgpu/src/widget/slider.rs @@ -1,13 +1,5 @@ //! Display an interactive selector of a single value from a range of values. //! //! A [`Slider`] has some local [`State`]. -use crate::Renderer; - pub use iced_graphics::slider::{Handle, HandleShape, Style, StyleSheet}; -pub use iced_native::slider::State; - -/// An horizontal bar and a handle that selects a single value from a range of -/// values. -/// -/// This is an alias of an `iced_native` slider with an `iced_wgpu::Renderer`. -pub type Slider<'a, T, Message> = iced_native::Slider<'a, T, Message, Renderer>; +pub use iced_native::widget::slider::{Slider, State}; diff --git a/wgpu/src/widget/text_input.rs b/wgpu/src/widget/text_input.rs index db18b1cc..5560e3e0 100644 --- a/wgpu/src/widget/text_input.rs +++ b/wgpu/src/widget/text_input.rs @@ -4,9 +4,10 @@ use crate::Renderer; pub use iced_graphics::text_input::{Style, StyleSheet}; -pub use iced_native::text_input::State; +pub use iced_native::widget::text_input::State; /// A field that can be filled with text. /// /// This is an alias of an `iced_native` text input with an `iced_wgpu::Renderer`. -pub type TextInput<'a, Message> = iced_native::TextInput<'a, Message, Renderer>; +pub type TextInput<'a, Message> = + iced_native::widget::TextInput<'a, Message, Renderer>; diff --git a/wgpu/src/widget/toggler.rs b/wgpu/src/widget/toggler.rs index dfcf759b..7ef5e22e 100644 --- a/wgpu/src/widget/toggler.rs +++ b/wgpu/src/widget/toggler.rs @@ -6,4 +6,5 @@ pub use iced_graphics::toggler::{Style, StyleSheet}; /// A toggler that can be toggled /// /// This is an alias of an `iced_native` toggler with an `iced_wgpu::Renderer`. -pub type Toggler<Message> = iced_native::Toggler<Message, Renderer>; +pub type Toggler<'a, Message> = + iced_native::widget::Toggler<'a, Message, Renderer>; diff --git a/wgpu/src/widget/tooltip.rs b/wgpu/src/widget/tooltip.rs index 89ab3a15..c6af3903 100644 --- a/wgpu/src/widget/tooltip.rs +++ b/wgpu/src/widget/tooltip.rs @@ -1,6 +1,6 @@ //! Display a widget over another. /// A widget allowing the selection of a single value from a list of options. pub type Tooltip<'a, Message> = - iced_native::Tooltip<'a, Message, crate::Renderer>; + iced_native::widget::Tooltip<'a, Message, crate::Renderer>; -pub use iced_native::tooltip::Position; +pub use iced_native::widget::tooltip::Position; diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index bd8e1f89..7bdd4c23 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -1,7 +1,7 @@ use crate::{Backend, Color, Error, Renderer, Settings, Viewport}; use futures::task::SpawnExt; -use iced_native::{futures, mouse}; +use iced_native::futures; use raw_window_handle::HasRawWindowHandle; /// A window graphics backend for iced powered by `wgpu`. @@ -133,15 +133,14 @@ impl iced_graphics::window::Compositor for Compositor { ); } - fn draw<T: AsRef<str>>( + fn present<T: AsRef<str>>( &mut self, renderer: &mut Self::Renderer, surface: &mut Self::Surface, viewport: &Viewport, background_color: Color, - output: &<Self::Renderer as iced_native::Renderer>::Output, overlay: &[T], - ) -> Result<mouse::Interaction, iced_graphics::window::SurfaceError> { + ) -> Result<(), iced_graphics::window::SurfaceError> { match surface.get_current_texture() { Ok(frame) => { let mut encoder = self.device.create_command_encoder( @@ -180,15 +179,17 @@ impl iced_graphics::window::Compositor for Compositor { depth_stencil_attachment: None, }); - let mouse_interaction = renderer.backend_mut().draw( - &mut self.device, - &mut self.staging_belt, - &mut encoder, - view, - viewport, - output, - overlay, - ); + renderer.present(|backend, primitive| { + backend.present( + &mut self.device, + &mut self.staging_belt, + &mut encoder, + view, + primitive, + viewport, + overlay, + ); + }); // Submit work self.staging_belt.finish(); @@ -203,7 +204,7 @@ impl iced_graphics::window::Compositor for Compositor { self.local_pool.run_until_stalled(); - Ok(mouse_interaction) + Ok(()) } Err(error) => match error { wgpu::SurfaceError::Timeout => { |