diff options
Diffstat (limited to 'native/src/window')
| -rw-r--r-- | native/src/window/action.rs | 166 | ||||
| -rw-r--r-- | native/src/window/event.rs | 58 | ||||
| -rw-r--r-- | native/src/window/icon.rs | 80 | ||||
| -rw-r--r-- | native/src/window/mode.rs | 12 | ||||
| -rw-r--r-- | native/src/window/redraw_request.rs | 38 | ||||
| -rw-r--r-- | native/src/window/user_attention.rs | 21 | 
6 files changed, 0 insertions, 375 deletions
diff --git a/native/src/window/action.rs b/native/src/window/action.rs deleted file mode 100644 index 095a8eec..00000000 --- a/native/src/window/action.rs +++ /dev/null @@ -1,166 +0,0 @@ -use crate::window::{Icon, Mode, UserAttention}; - -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, -    /// 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>), -    /// Changes the window [`Icon`]. -    /// -    /// On Windows and X11, this is typically the small icon in the top-left -    /// corner of the titlebar. -    /// -    /// ## Platform-specific -    /// -    /// - **Web / Wayland / macOS:** Unsupported. -    /// -    /// - **Windows:** Sets `ICON_SMALL`. The base size for a window icon is 16x16, but it's -    ///   recommended to account for screen scaling and pick a multiple of that, i.e. 32x32. -    /// -    /// - **X11:** Has no universal guidelines for icon sizes, so you're at the whims of the WM. That -    ///   said, it's usually in the same ballpark as on Windows. -    ChangeIcon(Icon), -} - -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::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)))), -            Self::ChangeIcon(icon) => Action::ChangeIcon(icon), -        } -    } -} - -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::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"), -            Self::ChangeIcon(_icon) => { -                write!(f, "Action::ChangeIcon(icon)") -            } -        } -    } -} 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 31868ecf..00000000 --- a/native/src/window/icon.rs +++ /dev/null @@ -1,80 +0,0 @@ -//! Change the icon of a window. -use crate::Size; - -use std::mem; - -/// Builds an  [`Icon`] from its RGBA pixels in the sRGB color space. -pub fn from_rgba( -    rgba: Vec<u8>, -    width: u32, -    height: u32, -) -> Result<Icon, Error> { -    const PIXEL_SIZE: usize = mem::size_of::<u8>() * 4; - -    if rgba.len() % PIXEL_SIZE != 0 { -        return Err(Error::ByteCountNotDivisibleBy4 { -            byte_count: rgba.len(), -        }); -    } - -    let pixel_count = rgba.len() / PIXEL_SIZE; - -    if pixel_count != (width * height) as usize { -        return Err(Error::DimensionsVsPixelCount { -            width, -            height, -            width_x_height: (width * height) as usize, -            pixel_count, -        }); -    } - -    Ok(Icon { -        rgba, -        size: Size::new(width, height), -    }) -} - -/// An window icon normally used for the titlebar or taskbar. -#[derive(Debug, Clone)] -pub struct Icon { -    rgba: Vec<u8>, -    size: Size<u32>, -} - -impl Icon { -    /// Returns the raw data of the [`Icon`]. -    pub fn into_raw(self) -> (Vec<u8>, Size<u32>) { -        (self.rgba, self.size) -    } -} - -#[derive(Debug, thiserror::Error)] -/// An error produced when using [`Icon::from_rgba`] with invalid arguments. -pub enum Error { -    /// Produced when the length of the `rgba` argument isn't divisible by 4, thus `rgba` can't be -    /// safely interpreted as 32bpp RGBA pixels. -    #[error( -        "The provided RGBA data (with length {byte_count}) isn't divisible \ -        by 4. Therefore, it cannot be safely interpreted as 32bpp RGBA pixels" -    )] -    ByteCountNotDivisibleBy4 { -        /// The length of the provided RGBA data. -        byte_count: usize, -    }, -    /// Produced when the number of pixels (`rgba.len() / 4`) isn't equal to `width * height`. -    /// At least one of your arguments is incorrect. -    #[error( -        "The number of RGBA pixels ({pixel_count}) does not match the \ -        provided dimensions ({width}x{height})." -    )] -    DimensionsVsPixelCount { -        /// The provided width. -        width: u32, -        /// The provided height. -        height: u32, -        /// The product of `width` and `height`. -        width_x_height: usize, -        /// The amount of pixels of the provided RGBA data. -        pixel_count: usize, -    }, -} 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/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/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, -}  | 
