Merge pull request #162 from hecrj/feature/window-file-events
Window file events
This commit is contained in:
commit
6ca5e6184f
@ -9,7 +9,7 @@ use crate::{
|
|||||||
/// additional events, feel free to [open an issue] and share your use case!_
|
/// additional events, feel free to [open an issue] and share your use case!_
|
||||||
///
|
///
|
||||||
/// [open an issue]: https://github.com/hecrj/iced/issues
|
/// [open an issue]: https://github.com/hecrj/iced/issues
|
||||||
#[derive(PartialEq, Clone, Copy, Debug)]
|
#[derive(PartialEq, Clone, Debug)]
|
||||||
pub enum Event {
|
pub enum Event {
|
||||||
/// A keyboard event
|
/// A keyboard event
|
||||||
Keyboard(keyboard::Event),
|
Keyboard(keyboard::Event),
|
||||||
|
@ -159,7 +159,7 @@ where
|
|||||||
self.children.iter_mut().zip(layout.children()).for_each(
|
self.children.iter_mut().zip(layout.children()).for_each(
|
||||||
|(child, layout)| {
|
|(child, layout)| {
|
||||||
child.widget.on_event(
|
child.widget.on_event(
|
||||||
event,
|
event.clone(),
|
||||||
layout,
|
layout,
|
||||||
cursor_position,
|
cursor_position,
|
||||||
messages,
|
messages,
|
||||||
|
@ -160,7 +160,7 @@ where
|
|||||||
self.children.iter_mut().zip(layout.children()).for_each(
|
self.children.iter_mut().zip(layout.children()).for_each(
|
||||||
|(child, layout)| {
|
|(child, layout)| {
|
||||||
child.widget.on_event(
|
child.widget.on_event(
|
||||||
event,
|
event.clone(),
|
||||||
layout,
|
layout,
|
||||||
cursor_position,
|
cursor_position,
|
||||||
messages,
|
messages,
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
/// A window-related event.
|
/// A window-related event.
|
||||||
#[derive(PartialEq, Clone, Copy, Debug)]
|
#[derive(PartialEq, Clone, Debug)]
|
||||||
pub enum Event {
|
pub enum Event {
|
||||||
/// A window was resized
|
/// A window was resized
|
||||||
Resized {
|
Resized {
|
||||||
@ -9,4 +11,22 @@ pub enum Event {
|
|||||||
/// The new height of the window (in units)
|
/// The new height of the window (in units)
|
||||||
height: u32,
|
height: u32,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// A file is being hovered over the window.
|
||||||
|
///
|
||||||
|
/// When the user hovers multiple files at once, this event will be emitted
|
||||||
|
/// for each file separately.
|
||||||
|
FileHovered(PathBuf),
|
||||||
|
|
||||||
|
/// A file has beend dropped into the window.
|
||||||
|
///
|
||||||
|
/// When the user drops multiple files at once, this event will be emitted
|
||||||
|
/// for each file separately.
|
||||||
|
FileDropped(PathBuf),
|
||||||
|
|
||||||
|
/// A file was hovered, but has exited the window.
|
||||||
|
///
|
||||||
|
/// There will be a single `FilesHoveredLeft` event triggered even if
|
||||||
|
/// multiple files were hovered.
|
||||||
|
FilesHoveredLeft,
|
||||||
}
|
}
|
||||||
|
@ -209,9 +209,10 @@ pub trait Application: Sized {
|
|||||||
);
|
);
|
||||||
|
|
||||||
debug.event_processing_started();
|
debug.event_processing_started();
|
||||||
events.iter().for_each(|event| {
|
events
|
||||||
subscription_pool.broadcast_event(*event)
|
.iter()
|
||||||
});
|
.cloned()
|
||||||
|
.for_each(|event| subscription_pool.broadcast_event(event));
|
||||||
|
|
||||||
let mut messages = user_interface.update(
|
let mut messages = user_interface.update(
|
||||||
&renderer,
|
&renderer,
|
||||||
@ -330,6 +331,18 @@ pub trait Application: Sized {
|
|||||||
event: window_event,
|
event: window_event,
|
||||||
..
|
..
|
||||||
} => match window_event {
|
} => match window_event {
|
||||||
|
WindowEvent::Resized(new_size) => {
|
||||||
|
events.push(Event::Window(window::Event::Resized {
|
||||||
|
width: new_size.width.round() as u32,
|
||||||
|
height: new_size.height.round() as u32,
|
||||||
|
}));
|
||||||
|
|
||||||
|
size = new_size;
|
||||||
|
resized = true;
|
||||||
|
}
|
||||||
|
WindowEvent::CloseRequested => {
|
||||||
|
*control_flow = ControlFlow::Exit;
|
||||||
|
}
|
||||||
WindowEvent::CursorMoved { position, .. } => {
|
WindowEvent::CursorMoved { position, .. } => {
|
||||||
events.push(Event::Mouse(mouse::Event::CursorMoved {
|
events.push(Event::Mouse(mouse::Event::CursorMoved {
|
||||||
x: position.x as f32,
|
x: position.x as f32,
|
||||||
@ -398,17 +411,16 @@ pub trait Application: Sized {
|
|||||||
modifiers: conversion::modifiers_state(modifiers),
|
modifiers: conversion::modifiers_state(modifiers),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
WindowEvent::CloseRequested => {
|
WindowEvent::HoveredFile(path) => {
|
||||||
*control_flow = ControlFlow::Exit;
|
events
|
||||||
|
.push(Event::Window(window::Event::FileHovered(path)));
|
||||||
}
|
}
|
||||||
WindowEvent::Resized(new_size) => {
|
WindowEvent::DroppedFile(path) => {
|
||||||
events.push(Event::Window(window::Event::Resized {
|
events
|
||||||
width: new_size.width.round() as u32,
|
.push(Event::Window(window::Event::FileDropped(path)));
|
||||||
height: new_size.height.round() as u32,
|
}
|
||||||
}));
|
WindowEvent::HoveredFileCancelled => {
|
||||||
|
events.push(Event::Window(window::Event::FilesHoveredLeft));
|
||||||
size = new_size;
|
|
||||||
resized = true;
|
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
|
@ -86,7 +86,7 @@ impl Pool {
|
|||||||
.values_mut()
|
.values_mut()
|
||||||
.filter_map(|connection| connection.listener.as_mut())
|
.filter_map(|connection| connection.listener.as_mut())
|
||||||
.for_each(|listener| {
|
.for_each(|listener| {
|
||||||
if let Err(error) = listener.try_send(event) {
|
if let Err(error) = listener.try_send(event.clone()) {
|
||||||
log::error!(
|
log::error!(
|
||||||
"Error sending event to subscription: {:?}",
|
"Error sending event to subscription: {:?}",
|
||||||
error
|
error
|
||||||
|
Loading…
x
Reference in New Issue
Block a user