diff --git a/src/window.rs b/src/window.rs index 5a199580bf..aba4bce881 100644 --- a/src/window.rs +++ b/src/window.rs @@ -6,6 +6,6 @@ pub mod icon; pub use icon::Icon; pub use position::Position; -pub use settings::Settings; +pub use settings::{PlatformSpecific, Settings}; pub use crate::runtime::window::*; diff --git a/src/window/settings.rs b/src/window/settings.rs index 24d0f4f9ec..a039e213a5 100644 --- a/src/window/settings.rs +++ b/src/window/settings.rs @@ -1,5 +1,15 @@ use crate::window::{Icon, Position}; +#[cfg(target_os = "macos")] +#[path = "settings/macos.rs"] +mod platform; + +#[cfg(not(target_os = "macos"))] +#[path = "settings/other.rs"] +mod platform; + +pub use platform::PlatformSpecific; + /// The window settings of an application. #[derive(Debug, Clone)] pub struct Settings { @@ -32,6 +42,9 @@ pub struct Settings { /// The icon of the window. pub icon: Option, + + /// Platform specific settings. + pub platform_specific: platform::PlatformSpecific, } impl Default for Settings { @@ -47,6 +60,7 @@ impl Default for Settings { transparent: false, always_on_top: false, icon: None, + platform_specific: Default::default(), } } } @@ -64,7 +78,9 @@ impl From for iced_winit::settings::Window { transparent: settings.transparent, always_on_top: settings.always_on_top, icon: settings.icon.map(Icon::into), - platform_specific: Default::default(), + platform_specific: iced_winit::settings::PlatformSpecific::from( + settings.platform_specific, + ), } } } diff --git a/src/window/settings/macos.rs b/src/window/settings/macos.rs new file mode 100644 index 0000000000..c08020cf80 --- /dev/null +++ b/src/window/settings/macos.rs @@ -0,0 +1,20 @@ +/// The platform specific window settings of an application. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub struct PlatformSpecific { + /// Hides the window title. + pub title_hidden: bool, + /// Makes the titlebar transparent and allows the content to appear behind it. + pub titlebar_transparent: bool, + /// Makes the window content appear behind the titlebar. + pub fullsize_content_view: bool, +} + +impl From for iced_winit::settings::PlatformSpecific { + fn from(platform_specific: PlatformSpecific) -> Self { + Self { + title_hidden: platform_specific.title_hidden, + titlebar_transparent: platform_specific.titlebar_transparent, + fullsize_content_view: platform_specific.fullsize_content_view, + } + } +} diff --git a/src/window/settings/other.rs b/src/window/settings/other.rs new file mode 100644 index 0000000000..943d9f0de4 --- /dev/null +++ b/src/window/settings/other.rs @@ -0,0 +1,9 @@ +/// The platform specific window settings of an application. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub struct PlatformSpecific; + +impl From for iced_winit::settings::PlatformSpecific { + fn from(_: PlatformSpecific) -> Self { + Default::default() + } +}