feat: Add window drag support from winit
Exposes access to the winit window's window_drag method as an action.
This commit is contained in:
parent
77c838011f
commit
7ea7dbef57
3 changed files with 16 additions and 0 deletions
|
|
@ -5,6 +5,12 @@ use std::fmt;
|
||||||
|
|
||||||
/// An operation to be performed on some window.
|
/// An operation to be performed on some window.
|
||||||
pub enum Action<T> {
|
pub enum Action<T> {
|
||||||
|
/// Moves the window with the left mouse button until the button is
|
||||||
|
/// released.
|
||||||
|
///
|
||||||
|
/// There’s no guarantee that this will work unless the left mouse
|
||||||
|
/// button was pressed immediately before this function is called.
|
||||||
|
Drag,
|
||||||
/// Resize the window.
|
/// Resize the window.
|
||||||
Resize {
|
Resize {
|
||||||
/// The new logical width of the window
|
/// The new logical width of the window
|
||||||
|
|
@ -37,6 +43,7 @@ impl<T> Action<T> {
|
||||||
T: 'static,
|
T: 'static,
|
||||||
{
|
{
|
||||||
match self {
|
match self {
|
||||||
|
Self::Drag => Action::Drag,
|
||||||
Self::Resize { width, height } => Action::Resize { width, height },
|
Self::Resize { width, height } => Action::Resize { width, height },
|
||||||
Self::Move { x, y } => Action::Move { x, y },
|
Self::Move { x, y } => Action::Move { x, y },
|
||||||
Self::SetMode(mode) => Action::SetMode(mode),
|
Self::SetMode(mode) => Action::SetMode(mode),
|
||||||
|
|
@ -48,6 +55,7 @@ impl<T> Action<T> {
|
||||||
impl<T> fmt::Debug for Action<T> {
|
impl<T> fmt::Debug for Action<T> {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
|
Self::Drag => write!(f, "Action::Drag"),
|
||||||
Self::Resize { width, height } => write!(
|
Self::Resize { width, height } => write!(
|
||||||
f,
|
f,
|
||||||
"Action::Resize {{ widget: {}, height: {} }}",
|
"Action::Resize {{ widget: {}, height: {} }}",
|
||||||
|
|
|
||||||
|
|
@ -615,6 +615,9 @@ pub fn run_command<A, E>(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
command::Action::Window(action) => match action {
|
command::Action::Window(action) => match action {
|
||||||
|
window::Action::Drag => {
|
||||||
|
let _res = window.drag_window();
|
||||||
|
}
|
||||||
window::Action::Resize { width, height } => {
|
window::Action::Resize { width, height } => {
|
||||||
window.set_inner_size(winit::dpi::LogicalSize {
|
window.set_inner_size(winit::dpi::LogicalSize {
|
||||||
width,
|
width,
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,11 @@ use iced_native::window;
|
||||||
|
|
||||||
pub use window::{Event, Mode};
|
pub use window::{Event, Mode};
|
||||||
|
|
||||||
|
/// Begins dragging the window while the left mouse button is held.
|
||||||
|
pub fn drag<Message>() -> Command<Message> {
|
||||||
|
Command::single(command::Action::Window(window::Action::Drag))
|
||||||
|
}
|
||||||
|
|
||||||
/// Resizes the window to the given logical dimensions.
|
/// Resizes the window to the given logical dimensions.
|
||||||
pub fn resize<Message>(width: u32, height: u32) -> Command<Message> {
|
pub fn resize<Message>(width: u32, height: u32) -> Command<Message> {
|
||||||
Command::single(command::Action::Window(window::Action::Resize {
|
Command::single(command::Action::Window(window::Action::Resize {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue