summaryrefslogtreecommitdiffstats
path: root/wgpu
diff options
context:
space:
mode:
Diffstat (limited to 'wgpu')
-rw-r--r--wgpu/src/backend.rs17
-rw-r--r--wgpu/src/lib.rs4
-rw-r--r--wgpu/src/widget.rs9
-rw-r--r--wgpu/src/widget/button.rs5
-rw-r--r--wgpu/src/widget/checkbox.rs3
-rw-r--r--wgpu/src/widget/container.rs3
-rw-r--r--wgpu/src/widget/pane_grid.rs7
-rw-r--r--wgpu/src/widget/pick_list.rs4
-rw-r--r--wgpu/src/widget/progress_bar.rs10
-rw-r--r--wgpu/src/widget/radio.rs2
-rw-r--r--wgpu/src/widget/rule.rs9
-rw-r--r--wgpu/src/widget/scrollable.rs4
-rw-r--r--wgpu/src/widget/slider.rs10
-rw-r--r--wgpu/src/widget/text_input.rs5
-rw-r--r--wgpu/src/widget/toggler.rs3
-rw-r--r--wgpu/src/widget/tooltip.rs4
-rw-r--r--wgpu/src/window/compositor.rs29
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::{
/// [![Pane grid - Iced](https://thumbs.gfycat.com/MixedFlatJellyfish-small.gif)](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 => {