58 lines
1.8 KiB
Rust
58 lines
1.8 KiB
Rust
|
//! Certain properties of an `NSWindow` cannot be changed after initialization (e.g, the style
|
|||
|
//! mask). This configuration object acts as a way to orchestrate enabling customization before the
|
|||
|
//! window object is created - it's returned in your `WindowDelegate` object.
|
|||
|
|
|||
|
use crate::foundation::NSUInteger;
|
|||
|
use crate::geometry::Rect;
|
|||
|
use crate::window::enums::WindowStyle;
|
|||
|
|
|||
|
#[derive(Debug)]
|
|||
|
pub struct WindowConfig {
|
|||
|
/// The style the window should have.
|
|||
|
pub style: NSUInteger,
|
|||
|
|
|||
|
/// The initial dimensions for the window.
|
|||
|
pub initial_dimensions: Rect,
|
|||
|
|
|||
|
/// From the Apple docs:
|
|||
|
///
|
|||
|
/// _"When true, the window server defers creating the window device
|
|||
|
/// until the window is moved onscreen. All display messages sent to
|
|||
|
/// the window or its views are postponed until the window is created,
|
|||
|
/// just before it’s moved onscreen."_
|
|||
|
///
|
|||
|
/// You generally just want this to be true, and it's the default for this struct.
|
|||
|
pub defer: bool
|
|||
|
}
|
|||
|
|
|||
|
impl Default for WindowConfig {
|
|||
|
fn default() -> Self {
|
|||
|
let mut config = WindowConfig {
|
|||
|
style: 0,
|
|||
|
initial_dimensions: Rect::new(100., 100., 1024., 768.),
|
|||
|
defer: true
|
|||
|
};
|
|||
|
|
|||
|
config.set_styles(&[
|
|||
|
WindowStyle::Resizable, WindowStyle::Miniaturizable, WindowStyle::UnifiedTitleAndToolbar,
|
|||
|
WindowStyle::Closable, WindowStyle::Titled
|
|||
|
]);
|
|||
|
|
|||
|
config
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
impl WindowConfig {
|
|||
|
/// Given a set of styles, converts them to `NSUInteger` and stores them for later use.
|
|||
|
pub fn set_styles(&mut self, styles: &[WindowStyle]) {
|
|||
|
let mut style: NSUInteger = 0;
|
|||
|
|
|||
|
for mask in styles {
|
|||
|
let i: NSUInteger = mask.into();
|
|||
|
style = style | i;
|
|||
|
}
|
|||
|
|
|||
|
self.style = style;
|
|||
|
}
|
|||
|
}
|