summaryrefslogtreecommitdiffstats
path: root/widget/src/shader.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-11-04 18:26:46 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-11-05 23:52:59 +0100
commit6fc16769c4fb07d5e976a9c1762ecd17cf734bce (patch)
treecd25b9ce9f5ce989afd7d9ad1f9bd9cc225b0ae7 /widget/src/shader.rs
parent14ec3307304fbf40e7f281d2356f40456124dfef (diff)
downloadiced-6fc16769c4fb07d5e976a9c1762ecd17cf734bce.tar.gz
iced-6fc16769c4fb07d5e976a9c1762ecd17cf734bce.tar.bz2
iced-6fc16769c4fb07d5e976a9c1762ecd17cf734bce.zip
Unify `shader::Program` API with `canvas::Program`
Diffstat (limited to '')
-rw-r--r--widget/src/shader.rs54
1 files changed, 27 insertions, 27 deletions
diff --git a/widget/src/shader.rs b/widget/src/shader.rs
index 115a5ed9..8ec57482 100644
--- a/widget/src/shader.rs
+++ b/widget/src/shader.rs
@@ -1,23 +1,22 @@
//! A custom shader widget for wgpu applications.
-mod event;
mod program;
-pub use event::Event;
pub use program::Program;
-use crate::core;
+use crate::core::event;
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::core::{Clipboard, Element, Event, Length, Rectangle, Shell, Size};
use crate::renderer::wgpu::primitive;
use std::marker::PhantomData;
pub use crate::graphics::Viewport;
+pub use crate::Action;
pub use primitive::{Primitive, Storage};
/// A widget which can render custom shaders with Iced's `wgpu` backend.
@@ -100,28 +99,30 @@ where
) {
let bounds = layout.bounds();
- let custom_shader_event = match event {
- core::Event::Mouse(mouse_event) => Some(Event::Mouse(mouse_event)),
- core::Event::Keyboard(keyboard_event) => {
- Some(Event::Keyboard(keyboard_event))
+ let state = tree.state.downcast_mut::<P::State>();
+
+ if let Some(action) = self.program.update(state, event, bounds, cursor)
+ {
+ let (message, redraw_request, event_status) = action.into_inner();
+
+ if let Some(message) = message {
+ shell.publish(message);
}
- core::Event::Touch(touch_event) => Some(Event::Touch(touch_event)),
- core::Event::Window(window::Event::RedrawRequested(instant)) => {
- Some(Event::RedrawRequested(instant))
+
+ if let Some(redraw_request) = redraw_request {
+ match redraw_request {
+ window::RedrawRequest::NextFrame => {
+ shell.request_redraw();
+ }
+ window::RedrawRequest::At(at) => {
+ shell.request_redraw_at(at);
+ }
+ }
+ }
+
+ if event_status == event::Status::Captured {
+ shell.capture_event();
}
- core::Event::Window(_) => None,
- };
-
- if let Some(custom_shader_event) = custom_shader_event {
- let state = tree.state.downcast_mut::<P::State>();
-
- self.program.update(
- state,
- custom_shader_event,
- bounds,
- cursor,
- shell,
- );
}
}
@@ -186,9 +187,8 @@ where
event: Event,
bounds: Rectangle,
cursor: mouse::Cursor,
- shell: &mut Shell<'_, Message>,
- ) {
- T::update(self, state, event, bounds, cursor, shell);
+ ) -> Option<Action<Message>> {
+ T::update(self, state, event, bounds, cursor)
}
fn draw(