use super::{NSButton, NSResponder}; use bitflags::bitflags; use objc2::foundation::{NSInteger, NSObject, NSUInteger}; use objc2::{ extern_class, extern_methods, msg_send_id, rc::{Id, Shared}, ClassType, Encode, Encoding, }; extern_class!( #[derive(Debug, PartialEq, Eq, Hash)] pub(crate) struct NSWindow; unsafe impl ClassType for NSWindow { #[inherits(NSObject)] type Super = NSResponder; } ); extern_methods!( unsafe impl NSWindow { #[sel(styleMask)] pub(crate) fn style_mask(&self) -> NSWindowStyleMask; #[sel(setStyleMask:)] pub(crate) fn set_style_mask(&self, mask: NSWindowStyleMask); #[sel(setTitleVisibility:)] pub(crate) fn set_title_visibility(&self, visibility: NSWindowTitleVisibility); #[sel(setTitlebarAppearsTransparent:)] pub(crate) fn set_titlebar_appears_transparent(&self, val: bool); #[sel(setMovableByWindowBackground:)] pub(crate) fn set_movable_by_window_background(&self, val: bool); pub(crate) fn standard_window_button( &self, kind: NSWindowButton, ) -> Option> { unsafe { msg_send_id![self, standardWindowButton: kind] } } } ); bitflags! { pub struct NSWindowStyleMask: NSUInteger { #[doc(alias = "NSWindowStyleMaskBorderless")] const BORDERLESS = 0; #[doc(alias = "NSWindowStyleMaskTitled")] const TITLED = 1 << 0; #[doc(alias = "NSWindowStyleMaskClosable")] const CLOSABLE = 1 << 1; #[doc(alias = "NSWindowStyleMaskMiniaturizable")] const MINIATURIZABLE = 1 << 2; #[doc(alias = "NSWindowStyleMaskResizable")] const RESIZABLE = 1 << 3; #[deprecated = "Deprecated since macOS 10.2"] #[doc(alias = "NSWindowStyleMaskTexturedBackground")] const TEXTURED_BACKGROUND = 1 << 8; #[doc(alias = "NSWindowStyleMaskUnifiedTitleAndToolbar")] const UNIFIED_TITLE_AND_TOOLBAR = 1 << 12; #[doc(alias = "NSWindowStyleMaskFullScreen")] const FULLSCREEN = 1 << 14; #[doc(alias = "NSWindowStyleMaskFullSizeContentView")] const FULL_SIZE_CONTENT_VIEW = 1 << 15; } } unsafe impl Encode for NSWindowStyleMask { const ENCODING: Encoding = NSUInteger::ENCODING; } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(isize)] // NSInteger #[allow(unused)] pub enum NSWindowTitleVisibility { #[doc(alias = "NSWindowTitleVisible")] Visible = 0, #[doc(alias = "NSWindowTitleHidden")] Hidden = 1, } unsafe impl Encode for NSWindowTitleVisibility { const ENCODING: Encoding = NSInteger::ENCODING; } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[repr(usize)] // NSUInteger #[allow(unused)] pub enum NSWindowButton { #[doc(alias = "NSWindowCloseButton")] Close = 0, #[doc(alias = "NSWindowMiniaturizeButton")] Miniaturize = 1, #[doc(alias = "NSWindowZoomButton")] Zoom = 2, #[doc(alias = "NSWindowToolbarButton")] Toolbar = 3, #[doc(alias = "NSWindowDocumentIconButton")] DocumentIcon = 4, #[doc(alias = "NSWindowDocumentVersionsButton")] DocumentVersions = 6, #[doc(alias = "NSWindowFullScreenButton")] #[deprecated = "Deprecated since macOS 10.12"] FullScreen = 7, } unsafe impl Encode for NSWindowButton { const ENCODING: Encoding = NSUInteger::ENCODING; }