diff options
Diffstat (limited to '')
-rw-r--r-- | widget/src/lib.rs | 6 | ||||
-rw-r--r-- | widget/src/shader.rs (renamed from renderer/src/widget/shader.rs) | 82 | ||||
-rw-r--r-- | widget/src/shader/event.rs (renamed from renderer/src/widget/shader/event.rs) | 1 | ||||
-rw-r--r-- | widget/src/shader/program.rs (renamed from renderer/src/widget/shader/program.rs) | 10 |
4 files changed, 53 insertions, 46 deletions
diff --git a/widget/src/lib.rs b/widget/src/lib.rs index 5220e83a..07378d83 100644 --- a/widget/src/lib.rs +++ b/widget/src/lib.rs @@ -98,7 +98,11 @@ pub use tooltip::Tooltip; pub use vertical_slider::VerticalSlider; #[cfg(feature = "wgpu")] -pub use renderer::widget::shader::{self, Shader, Transformation}; +pub mod shader; + +#[cfg(feature = "wgpu")] +#[doc(no_inline)] +pub use shader::Shader; #[cfg(feature = "svg")] pub mod svg; diff --git a/renderer/src/widget/shader.rs b/widget/src/shader.rs index e218f35a..9d482537 100644 --- a/renderer/src/widget/shader.rs +++ b/widget/src/shader.rs @@ -1,25 +1,24 @@ //! A custom shader widget for wgpu applications. -use crate::core::event::Status; -use crate::core::layout::{Limits, Node}; -use crate::core::mouse::{Cursor, Interaction}; -use crate::core::renderer::Style; -use crate::core::widget::tree::{State, Tag}; -use crate::core::widget::{tree, Tree}; -use crate::core::{ - self, layout, mouse, widget, window, Clipboard, Element, Layout, Length, - Rectangle, Shell, Size, Widget, -}; -use std::marker::PhantomData; - mod event; mod program; pub use event::Event; -pub use iced_graphics::Transformation; -pub use iced_wgpu::custom::Primitive; -pub use iced_wgpu::custom::Storage; pub use program::Program; +use crate::core; +use crate::core::layout::{self, Layout}; +use crate::core::mouse; +use crate::core::renderer; +use crate::core::widget::tree::{self, Tree}; +use crate::core::widget::{self, Widget}; +use crate::core::window; +use crate::core::{Clipboard, Element, Length, Rectangle, Shell, Size}; +use crate::renderer::wgpu::primitive::pipeline; + +use std::marker::PhantomData; + +pub use pipeline::{Primitive, Storage}; + /// A widget which can render custom shaders with Iced's `wgpu` backend. /// /// Must be initialized with a [`Program`], which describes the internal widget state & how @@ -56,17 +55,17 @@ impl<Message, P: Program<Message>> Shader<Message, P> { } } -impl<P, Message, Theme> Widget<Message, crate::Renderer<Theme>> - for Shader<Message, P> +impl<P, Message, Renderer> Widget<Message, Renderer> for Shader<Message, P> where P: Program<Message>, + Renderer: pipeline::Renderer, { - fn tag(&self) -> Tag { + fn tag(&self) -> tree::Tag { struct Tag<T>(T); tree::Tag::of::<Tag<P::State>>() } - fn state(&self) -> State { + fn state(&self) -> tree::State { tree::State::new(P::State::default()) } @@ -81,9 +80,9 @@ where fn layout( &self, _tree: &mut Tree, - _renderer: &crate::Renderer<Theme>, - limits: &Limits, - ) -> Node { + _renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node { let limits = limits.width(self.width).height(self.height); let size = limits.resolve(Size::ZERO); @@ -95,12 +94,12 @@ where tree: &mut Tree, event: crate::core::Event, layout: Layout<'_>, - cursor: Cursor, - _renderer: &crate::Renderer<Theme>, + cursor: mouse::Cursor, + _renderer: &Renderer, _clipboard: &mut dyn Clipboard, shell: &mut Shell<'_, Message>, _viewport: &Rectangle, - ) -> Status { + ) -> event::Status { let bounds = layout.bounds(); let custom_shader_event = match event { @@ -140,9 +139,9 @@ where &self, tree: &Tree, layout: Layout<'_>, - cursor: Cursor, + cursor: mouse::Cursor, _viewport: &Rectangle, - _renderer: &crate::Renderer<Theme>, + _renderer: &Renderer, ) -> mouse::Interaction { let bounds = layout.bounds(); let state = tree.state.downcast_ref::<P::State>(); @@ -153,9 +152,9 @@ where fn draw( &self, tree: &widget::Tree, - renderer: &mut crate::Renderer<Theme>, - _theme: &Theme, - _style: &Style, + renderer: &mut Renderer, + _theme: &Renderer::Theme, + _style: &renderer::Style, layout: Layout<'_>, cursor_position: mouse::Cursor, _viewport: &Rectangle, @@ -163,20 +162,21 @@ where let bounds = layout.bounds(); let state = tree.state.downcast_ref::<P::State>(); - renderer.draw_custom( + renderer.draw_pipeline_primitive( bounds, self.program.draw(state, cursor_position, bounds), ); } } -impl<'a, M, P, Theme> From<Shader<M, P>> - for Element<'a, M, crate::Renderer<Theme>> +impl<'a, Message, Renderer, P> From<Shader<Message, P>> + for Element<'a, Message, Renderer> where - M: 'a, - P: Program<M> + 'a, + Message: 'a, + Renderer: pipeline::Renderer, + P: Program<Message> + 'a, { - fn from(custom: Shader<M, P>) -> Element<'a, M, crate::Renderer<Theme>> { + fn from(custom: Shader<Message, P>) -> Element<'a, Message, Renderer> { Element::new(custom) } } @@ -193,16 +193,16 @@ where state: &mut Self::State, event: Event, bounds: Rectangle, - cursor: Cursor, + cursor: mouse::Cursor, shell: &mut Shell<'_, Message>, - ) -> (Status, Option<Message>) { + ) -> (event::Status, Option<Message>) { T::update(self, state, event, bounds, cursor, shell) } fn draw( &self, state: &Self::State, - cursor: Cursor, + cursor: mouse::Cursor, bounds: Rectangle, ) -> Self::Primitive { T::draw(self, state, cursor, bounds) @@ -212,8 +212,8 @@ where &self, state: &Self::State, bounds: Rectangle, - cursor: Cursor, - ) -> Interaction { + cursor: mouse::Cursor, + ) -> mouse::Interaction { T::mouse_interaction(self, state, bounds, cursor) } } diff --git a/renderer/src/widget/shader/event.rs b/widget/src/shader/event.rs index 8901fb31..e4d2b03d 100644 --- a/renderer/src/widget/shader/event.rs +++ b/widget/src/shader/event.rs @@ -2,6 +2,7 @@ use crate::core::keyboard; use crate::core::mouse; use crate::core::touch; + use std::time::Instant; pub use crate::core::event::Status; diff --git a/renderer/src/widget/shader/program.rs b/widget/src/shader/program.rs index b8871688..0319844d 100644 --- a/renderer/src/widget/shader/program.rs +++ b/widget/src/shader/program.rs @@ -1,6 +1,8 @@ -use crate::core::{event, mouse, Rectangle, Shell}; -use crate::widget; -use widget::shader; +use crate::core::event; +use crate::core::mouse; +use crate::core::{Rectangle, Shell}; +use crate::renderer::wgpu::primitive::pipeline; +use crate::shader; /// The state and logic of a [`Shader`] widget. /// @@ -13,7 +15,7 @@ pub trait Program<Message> { type State: Default + 'static; /// The type of primitive this [`Program`] can draw. - type Primitive: shader::Primitive + 'static; + type Primitive: pipeline::Primitive + 'static; /// Update the internal [`State`] of the [`Program`]. This can be used to reflect state changes /// based on mouse & other events. You can use the [`Shell`] to publish messages, request a |