diff options
Diffstat (limited to 'native/src/window')
-rw-r--r-- | native/src/window/action.rs | 156 | ||||
-rw-r--r-- | native/src/window/event.rs | 58 | ||||
-rw-r--r-- | native/src/window/icon.rs | 12 | ||||
-rw-r--r-- | native/src/window/id.rs | 28 | ||||
-rw-r--r-- | native/src/window/mode.rs | 12 | ||||
-rw-r--r-- | native/src/window/position.rs | 22 | ||||
-rw-r--r-- | native/src/window/redraw_request.rs | 38 | ||||
-rw-r--r-- | native/src/window/settings.rs | 52 | ||||
-rw-r--r-- | native/src/window/user_attention.rs | 21 |
9 files changed, 0 insertions, 399 deletions
diff --git a/native/src/window/action.rs b/native/src/window/action.rs deleted file mode 100644 index 5751bf97..00000000 --- a/native/src/window/action.rs +++ /dev/null @@ -1,156 +0,0 @@ -use crate::window::{Mode, UserAttention, Settings}; - -use iced_futures::MaybeSend; -use std::fmt; - -/// An operation to be performed on some window. -pub enum Action<T> { - /// Closes the current window and exits the application. - Close, - /// 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, - /// Spawns a new window with the provided [`window::Settings`]. - Spawn { - /// The settings of the [`Window`]. - settings: Settings, - }, - /// Resize the window. - Resize { - /// The new logical width of the window - width: u32, - /// The new logical height of the window - height: u32, - }, - /// Sets the window to maximized or back - Maximize(bool), - /// Set the window to minimized or back - Minimize(bool), - /// Move the window. - /// - /// Unsupported on Wayland. - Move { - /// The new logical x location of the window - x: i32, - /// The new logical y location of the window - y: i32, - }, - /// Change the [`Mode`] of the window. - ChangeMode(Mode), - /// Fetch the current [`Mode`] of the window. - FetchMode(Box<dyn FnOnce(Mode) -> T + 'static>), - /// Toggle the window to maximized or back - ToggleMaximize, - /// Toggle whether window has decorations. - /// - /// ## Platform-specific - /// - **X11:** Not implemented. - /// - **Web:** Unsupported. - ToggleDecorations, - /// Request user attention to the window, this has no effect if the application - /// is already focused. How requesting for user attention manifests is platform dependent, - /// see [`UserAttention`] for details. - /// - /// Providing `None` will unset the request for user attention. Unsetting the request for - /// user attention might not be done automatically by the WM when the window receives input. - /// - /// ## Platform-specific - /// - /// - **iOS / Android / Web:** Unsupported. - /// - **macOS:** `None` has no effect. - /// - **X11:** Requests for user attention must be manually cleared. - /// - **Wayland:** Requires `xdg_activation_v1` protocol, `None` has no effect. - RequestUserAttention(Option<UserAttention>), - /// Bring the window to the front and sets input focus. Has no effect if the window is - /// already in focus, minimized, or not visible. - /// - /// This method steals input focus from other applications. Do not use this method unless - /// you are certain that's what the user wants. Focus stealing can cause an extremely disruptive - /// user experience. - /// - /// ## Platform-specific - /// - /// - **Web / Wayland:** Unsupported. - GainFocus, - /// Change whether or not the window will always be on top of other windows. - /// - /// ## Platform-specific - /// - /// - **Web / Wayland:** Unsupported. - ChangeAlwaysOnTop(bool), - /// Fetch an identifier unique to the window. - FetchId(Box<dyn FnOnce(u64) -> T + 'static>), -} - -impl<T> Action<T> { - /// Maps the output of a window [`Action`] using the provided closure. - pub fn map<A>( - self, - f: impl Fn(T) -> A + 'static + MaybeSend + Sync, - ) -> Action<A> - where - T: 'static, - { - match self { - Self::Spawn { settings } => Action::Spawn { settings }, - Self::Close => Action::Close, - Self::Drag => Action::Drag, - Self::Resize { width, height } => Action::Resize { width, height }, - Self::Maximize(maximized) => Action::Maximize(maximized), - Self::Minimize(minimized) => Action::Minimize(minimized), - Self::Move { x, y } => Action::Move { x, y }, - Self::ChangeMode(mode) => Action::ChangeMode(mode), - Self::FetchMode(o) => Action::FetchMode(Box::new(move |s| f(o(s)))), - Self::ToggleMaximize => Action::ToggleMaximize, - Self::ToggleDecorations => Action::ToggleDecorations, - Self::RequestUserAttention(attention_type) => { - Action::RequestUserAttention(attention_type) - } - Self::GainFocus => Action::GainFocus, - Self::ChangeAlwaysOnTop(on_top) => { - Action::ChangeAlwaysOnTop(on_top) - } - Self::FetchId(o) => Action::FetchId(Box::new(move |s| f(o(s)))), - } - } -} - -impl<T> fmt::Debug for Action<T> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Close => write!(f, "Action::Close"), - Self::Drag => write!(f, "Action::Drag"), - Self::Spawn { settings } => { - write!(f, "Action::Spawn {{ settings: {:?} }}", settings) - } - Self::Resize { width, height } => write!( - f, - "Action::Resize {{ widget: {width}, height: {height} }}" - ), - Self::Maximize(maximized) => { - write!(f, "Action::Maximize({maximized})") - } - Self::Minimize(minimized) => { - write!(f, "Action::Minimize({minimized}") - } - Self::Move { x, y } => { - write!(f, "Action::Move {{ x: {x}, y: {y} }}") - } - Self::ChangeMode(mode) => write!(f, "Action::SetMode({mode:?})"), - Self::FetchMode(_) => write!(f, "Action::FetchMode"), - Self::ToggleMaximize => write!(f, "Action::ToggleMaximize"), - Self::ToggleDecorations => write!(f, "Action::ToggleDecorations"), - Self::RequestUserAttention(_) => { - write!(f, "Action::RequestUserAttention") - } - Self::GainFocus => write!(f, "Action::GainFocus"), - Self::ChangeAlwaysOnTop(on_top) => { - write!(f, "Action::AlwaysOnTop({on_top})") - } - Self::FetchId(_) => write!(f, "Action::FetchId"), - } - } -} diff --git a/native/src/window/event.rs b/native/src/window/event.rs deleted file mode 100644 index e2fb5e66..00000000 --- a/native/src/window/event.rs +++ /dev/null @@ -1,58 +0,0 @@ -use crate::time::Instant; - -use std::path::PathBuf; - -/// A window-related event. -#[derive(PartialEq, Eq, Clone, Debug)] -pub enum Event { - /// A window was moved. - Moved { - /// The new logical x location of the window - x: i32, - /// The new logical y location of the window - y: i32, - }, - - /// A window was resized. - Resized { - /// The new logical width of the window - width: u32, - /// The new logical height of the window - height: u32, - }, - - /// A window redraw was requested. - /// - /// The [`Instant`] contains the current time. - RedrawRequested(Instant), - - /// The user has requested for the window to close. - /// - /// Usually, you will want to terminate the execution whenever this event - /// occurs. - CloseRequested, - - /// A window was focused. - Focused, - - /// A window was unfocused. - Unfocused, - - /// 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, -} diff --git a/native/src/window/icon.rs b/native/src/window/icon.rs deleted file mode 100644 index 08a6acfd..00000000 --- a/native/src/window/icon.rs +++ /dev/null @@ -1,12 +0,0 @@ -//! Attach an icon to the window of your application. - -/// The icon of a window. -#[derive(Debug, Clone)] -pub struct Icon { - /// The __rgba__ color data of the window [`Icon`]. - pub rgba: Vec<u8>, - /// The width of the window [`Icon`]. - pub width: u32, - /// The height of the window [`Icon`]. - pub height: u32, -} diff --git a/native/src/window/id.rs b/native/src/window/id.rs deleted file mode 100644 index 0a11b1aa..00000000 --- a/native/src/window/id.rs +++ /dev/null @@ -1,28 +0,0 @@ -use std::collections::hash_map::DefaultHasher; -use std::fmt::{Display, Formatter}; -use std::hash::{Hash, Hasher}; - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] -/// The ID of the window. -/// -/// Internally Iced uses `window::Id::MAIN` as the first window spawned. -pub struct Id(u64); - -impl Id { - /// The reserved window ID for the primary window in an Iced application. - pub const MAIN: Self = Id(0); - - /// Creates a new unique window ID. - pub fn new(id: impl Hash) -> Id { - let mut hasher = DefaultHasher::new(); - id.hash(&mut hasher); - - Id(hasher.finish()) - } -} - -impl Display for Id { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!(f, "Id({})", self.0) - } -} diff --git a/native/src/window/mode.rs b/native/src/window/mode.rs deleted file mode 100644 index fdce8e23..00000000 --- a/native/src/window/mode.rs +++ /dev/null @@ -1,12 +0,0 @@ -/// The mode of a window-based application. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum Mode { - /// The application appears in its own window. - Windowed, - - /// The application takes the whole screen of its current monitor. - Fullscreen, - - /// The application is hidden - Hidden, -} diff --git a/native/src/window/position.rs b/native/src/window/position.rs deleted file mode 100644 index c260c29e..00000000 --- a/native/src/window/position.rs +++ /dev/null @@ -1,22 +0,0 @@ -/// The position of a window in a given screen. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum Position { - /// The platform-specific default position for a new window. - Default, - /// The window is completely centered on the screen. - Centered, - /// The window is positioned with specific coordinates: `(X, Y)`. - /// - /// When the decorations of the window are enabled, Windows 10 will add some - /// invisible padding to the window. This padding gets included in the - /// position. So if you have decorations enabled and want the window to be - /// at (0, 0) you would have to set the position to - /// `(PADDING_X, PADDING_Y)`. - Specific(i32, i32), -} - -impl Default for Position { - fn default() -> Self { - Self::Default - } -} diff --git a/native/src/window/redraw_request.rs b/native/src/window/redraw_request.rs deleted file mode 100644 index 3b4f0fd3..00000000 --- a/native/src/window/redraw_request.rs +++ /dev/null @@ -1,38 +0,0 @@ -use crate::time::Instant; - -/// A request to redraw a window. -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] -pub enum RedrawRequest { - /// Redraw the next frame. - NextFrame, - - /// Redraw at the given time. - At(Instant), -} - -#[cfg(test)] -mod tests { - use super::*; - use std::time::{Duration, Instant}; - - #[test] - fn ordering() { - let now = Instant::now(); - let later = now + Duration::from_millis(10); - - assert_eq!(RedrawRequest::NextFrame, RedrawRequest::NextFrame); - assert_eq!(RedrawRequest::At(now), RedrawRequest::At(now)); - - assert!(RedrawRequest::NextFrame < RedrawRequest::At(now)); - assert!(RedrawRequest::At(now) > RedrawRequest::NextFrame); - assert!(RedrawRequest::At(now) < RedrawRequest::At(later)); - assert!(RedrawRequest::At(later) > RedrawRequest::At(now)); - - assert!(RedrawRequest::NextFrame <= RedrawRequest::NextFrame); - assert!(RedrawRequest::NextFrame <= RedrawRequest::At(now)); - assert!(RedrawRequest::At(now) >= RedrawRequest::NextFrame); - assert!(RedrawRequest::At(now) <= RedrawRequest::At(now)); - assert!(RedrawRequest::At(now) <= RedrawRequest::At(later)); - assert!(RedrawRequest::At(later) >= RedrawRequest::At(now)); - } -} diff --git a/native/src/window/settings.rs b/native/src/window/settings.rs deleted file mode 100644 index 67798fbe..00000000 --- a/native/src/window/settings.rs +++ /dev/null @@ -1,52 +0,0 @@ -use crate::window::{Icon, Position}; - -/// The window settings of an application. -#[derive(Debug, Clone)] -pub struct Settings { - /// The initial size of the window. - pub size: (u32, u32), - - /// The initial position of the window. - pub position: Position, - - /// The minimum size of the window. - pub min_size: Option<(u32, u32)>, - - /// The maximum size of the window. - pub max_size: Option<(u32, u32)>, - - /// Whether the window should be visible or not. - pub visible: bool, - - /// Whether the window should be resizable or not. - pub resizable: bool, - - /// Whether the window should have a border, a title bar, etc. or not. - pub decorations: bool, - - /// Whether the window should be transparent. - pub transparent: bool, - - /// Whether the window will always be on top of other windows. - pub always_on_top: bool, - - /// The icon of the window. - pub icon: Option<Icon>, -} - -impl Default for Settings { - fn default() -> Settings { - Settings { - size: (1024, 768), - position: Position::default(), - min_size: None, - max_size: None, - visible: true, - resizable: true, - decorations: true, - transparent: false, - always_on_top: false, - icon: None, - } - } -} diff --git a/native/src/window/user_attention.rs b/native/src/window/user_attention.rs deleted file mode 100644 index b03dfeef..00000000 --- a/native/src/window/user_attention.rs +++ /dev/null @@ -1,21 +0,0 @@ -/// The type of user attention to request. -/// -/// ## Platform-specific -/// -/// - **X11:** Sets the WM's `XUrgencyHint`. No distinction between [`Critical`] and [`Informational`]. -/// -/// [`Critical`]: Self::Critical -/// [`Informational`]: Self::Informational -#[derive(Debug, Clone, Copy)] -pub enum UserAttention { - /// ## Platform-specific - /// - /// - **macOS:** Bounces the dock icon until the application is in focus. - /// - **Windows:** Flashes both the window and the taskbar button until the application is in focus. - Critical, - /// ## Platform-specific - /// - /// - **macOS:** Bounces the dock icon once. - /// - **Windows:** Flashes the taskbar button until the application is in focus. - Informational, -} |