From: David Elliott <dfe@tgwbd.org> Date: Mon, 8 Sep 2003 14:51:38 +0000 (+0000) Subject: * Added NSWindowStyleForWxStyle static method X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/080c7d56e0ab91ba778c1687eee353ea7cef4485 * Added NSWindowStyleForWxStyle static method * Create(): Handle window styles and initial frame size git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23426 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/cocoa/toplevel.h b/include/wx/cocoa/toplevel.h index 516f8eb7c5..20ca43150a 100644 --- a/include/wx/cocoa/toplevel.h +++ b/include/wx/cocoa/toplevel.h @@ -73,6 +73,7 @@ protected: WX_NSWindow m_cocoaNSWindow; static wxCocoaNSWindowHash sm_cocoaHash; virtual void CocoaReplaceView(WX_NSView oldView, WX_NSView newView); + static unsigned int NSWindowStyleForWxStyle(long style); // ------------------------------------------------------------------------ // Implementation diff --git a/src/cocoa/toplevel.mm b/src/cocoa/toplevel.mm index 20c1f6e9ff..c51f22719a 100644 --- a/src/cocoa/toplevel.mm +++ b/src/cocoa/toplevel.mm @@ -34,6 +34,7 @@ #import <AppKit/NSView.h> #import <AppKit/NSWindow.h> +#import <AppKit/NSPanel.h> // ---------------------------------------------------------------------------- // globals // ---------------------------------------------------------------------------- @@ -59,6 +60,26 @@ void wxTopLevelWindowCocoa::Init() m_closed = false; } +unsigned int wxTopLevelWindowCocoa::NSWindowStyleForWxStyle(long style) +{ + unsigned int styleMask = 0; + if(style & wxCAPTION) + styleMask |= NSTitledWindowMask; + if(style & wxMINIMIZE_BOX) + styleMask |= NSMiniaturizableWindowMask; + #if 0 + if(style & wxMAXIMIZE_BOX) + styleMask |= NSWindowMask; + #endif + if(style & wxCLOSE_BOX) + styleMask |= NSClosableWindowMask; + if(style & wxRESIZE_BORDER) + styleMask |= NSResizableWindowMask; + if(style & wxSIMPLE_BORDER) + styleMask |= NSBorderlessWindowMask; + return styleMask; +} + bool wxTopLevelWindowCocoa::Create(wxWindow *parent, wxWindowID winid, const wxString& title, @@ -76,24 +97,28 @@ bool wxTopLevelWindowCocoa::Create(wxWindow *parent, if ( parent ) parent->AddChild(this); - // TODO: get rect from given position/size - NSRect cocoaRect = NSMakeRect(100,100,200,200); + unsigned int cocoaStyle = NSWindowStyleForWxStyle(style); + if(style & wxFRAME_TOOL_WINDOW) + cocoaStyle |= NSUtilityWindowMask; - // TODO: Set flags given wxWindows style - unsigned int cocoaStyle = 0; - cocoaStyle |= NSTitledWindowMask; - cocoaStyle |= NSClosableWindowMask; - cocoaStyle |= NSMiniaturizableWindowMask; - cocoaStyle |= NSResizableWindowMask; + // NOTE: y-origin needs to be flipped. + NSRect cocoaRect = [NSWindow contentRectForFrameRect:NSMakeRect(pos.x,pos.y,size.x,size.y) styleMask:cocoaStyle]; m_cocoaNSWindow = NULL; m_cocoaNSView = NULL; - SetNSWindow([[NSWindow alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]); + if(style & wxFRAME_TOOL_WINDOW) + SetNSWindow([[NSPanel alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]); + else + SetNSWindow([[NSWindow alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]); // NOTE: SetNSWindow has retained the Cocoa object for this object. // Because we do not release on close, the following release matches the // above alloc and thus the retain count will be 1. [m_cocoaNSWindow release]; + if(style & wxFRAME_NO_TASKBAR) + [m_cocoaNSWindow setExcludedFromWindowsMenu: YES]; + if(style & wxSTAY_ON_TOP) + [m_cocoaNSWindow setLevel:NSFloatingWindowLevel]; [m_cocoaNSWindow setTitle:wxNSStringWithWxString(title)]; return TRUE; }