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;
|
||
}
|
||
}
|