summaryrefslogtreecommitdiffstats
path: root/widget
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--widget/src/lib.rs6
-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