X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0aaa6ace7ede4240453251d6a1c84c918c54c321..3678169caab0f713415414dce013a638305f3cce:/src/osx/iphone/nonownedwnd.mm diff --git a/src/osx/iphone/nonownedwnd.mm b/src/osx/iphone/nonownedwnd.mm index d50c0cfc31..1be798fb72 100644 --- a/src/osx/iphone/nonownedwnd.mm +++ b/src/osx/iphone/nonownedwnd.mm @@ -1,10 +1,10 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/osx/cocoa/nonownedwnd.mm +// Name: src/osx/iphone/nonownedwnd.mm // Purpose: non owned window for iphone // Author: Stefan Csomor // Modified by: // Created: 2008-06-20 -// RCS-ID: $Id: nonownedwnd.mm 48805 2007-09-19 14:52:25Z SC $ +// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -55,13 +55,13 @@ wxPoint wxFromNSPoint( UIView* parent, const CGPoint& p ) @end -@interface wxUIContentView : wxUIView +@interface wxUIContentView : UIView { wxUIContentViewController* _controller; } -- (void) setController: (UIViewController*) controller; -- (UIViewController*) controller; +- (void) setController: (wxUIContentViewController*) controller; +- (wxUIContentViewController*) controller; @end @@ -77,12 +77,14 @@ wxNonOwnedWindowIPhoneImpl::wxNonOwnedWindowIPhoneImpl( wxNonOwnedWindow* nonown { m_macWindow = NULL; m_macFullScreenData = NULL; + m_initialShowSent = false; } wxNonOwnedWindowIPhoneImpl::wxNonOwnedWindowIPhoneImpl() { m_macWindow = NULL; m_macFullScreenData = NULL; + m_initialShowSent = false; } wxNonOwnedWindowIPhoneImpl::~wxNonOwnedWindowIPhoneImpl() @@ -128,9 +130,14 @@ long style, long extraStyle, const wxString& name ) std::swap(r.size.width,r.size.height); [m_macWindow initWithFrame:r ]; + [m_macWindow setHidden:YES]; [m_macWindow setWindowLevel:level]; - // [m_macWindow makeKeyAndOrderFront:nil]; +} + +void wxNonOwnedWindowIPhoneImpl::Create( wxWindow* WXUNUSED(parent), WXWindow nativeWindow ) +{ + m_macWindow = nativeWindow; } @@ -152,6 +159,16 @@ bool wxNonOwnedWindowIPhoneImpl::Show(bool show) [m_macWindow setHidden:(show ? NO : YES)]; if ( show ) { + if ( !m_initialShowSent ) + { + wxNonOwnedWindow* now = dynamic_cast (GetWXPeer()); + wxShowEvent eventShow(now->GetId(), true); + eventShow.SetEventObject(now); + + now->HandleWindowEvent(eventShow); + + m_initialShowSent = true; + } //[m_macWindow orderFront: self]; [m_macWindow makeKeyWindow]; } @@ -256,6 +273,11 @@ void wxNonOwnedWindowIPhoneImpl::Iconize( bool iconize ) void wxNonOwnedWindowIPhoneImpl::Maximize(bool maximize) { + if ( maximize ) + { + CGRect r = [[UIScreen mainScreen] bounds]; + [m_macWindow setFrame:r]; + } } bool wxNonOwnedWindowIPhoneImpl::IsFullScreen() const @@ -292,6 +314,14 @@ void wxNonOwnedWindowIPhoneImpl::WindowToScreen( int *x, int *y ) *y = p.y; } +wxNonOwnedWindowImpl* wxNonOwnedWindowImpl::CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, WXWindow nativeWindow) +{ + wxNonOwnedWindowIPhoneImpl* now = new wxNonOwnedWindowIPhoneImpl( wxpeer ); + now->Create( parent, nativeWindow ); + return now; +} + + wxNonOwnedWindowImpl* wxNonOwnedWindowImpl::CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, const wxPoint& pos, const wxSize& size, long style, long extraStyle, const wxString& name ) { @@ -305,23 +335,32 @@ wxWidgetImpl* wxWidgetImpl::CreateContentView( wxNonOwnedWindow* now ) UIWindow* toplevelwindow = now->GetWXWindow(); CGRect frame = [toplevelwindow bounds]; CGRect appframe = [[UIScreen mainScreen] applicationFrame]; - - if ( now->GetWindowStyle() == wxDEFAULT_FRAME_STYLE ) - { - double offset = appframe.origin.y; - frame.origin.y += offset; - frame.size.height -= offset; - } - - wxUIContentView* contentview = [[wxUIContentView alloc] initWithFrame:frame]; + BOOL fullscreen = now->GetWindowStyle() == wxDEFAULT_FRAME_STYLE && [[UIApplication sharedApplication] statusBarStyle] == UIStatusBarStyleBlackTranslucent; + + wxUIContentView* contentview = [[wxUIContentView alloc] initWithFrame:( fullscreen ? frame : appframe ) ]; contentview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - wxUIContentViewController* controller = [[wxUIContentViewController alloc] init]; + wxUIContentViewController* controller = [[wxUIContentViewController alloc] initWithNibName:nil bundle:nil]; + +#ifdef __IPHONE_3_0 + controller.wantsFullScreenLayout = fullscreen; +#endif + controller.view = contentview; + [contentview release]; [contentview setController:controller]; + [contentview setHidden:YES]; wxWidgetIPhoneImpl* impl = new wxWidgetIPhoneImpl( now, contentview, true ); impl->InstallEventHandler(); - [toplevelwindow addSubview:contentview]; + + if ([toplevelwindow respondsToSelector:@selector(setRootViewController:)]) + { + toplevelwindow.rootViewController = controller; + } + else + { + [toplevelwindow addSubview:contentview]; + } return impl; } @@ -331,16 +370,26 @@ wxWidgetImpl* wxWidgetImpl::CreateContentView( wxNonOwnedWindow* now ) @implementation wxUIContentView -- (void) setController: (UIViewController*) controller +- (void) setController: (wxUIContentViewController*) controller { _controller = controller; } -- (UIViewController*) controller +- (wxUIContentViewController*) controller { return _controller; } ++ (void)initialize +{ + static BOOL initialized = NO; + if (!initialized) + { + initialized = YES; + wxOSXIPhoneClassAddWXMethods( self ); + } +} + @end @implementation wxUIContentViewController @@ -355,15 +404,62 @@ wxWidgetImpl* wxWidgetImpl::CreateContentView( wxNonOwnedWindow* now ) return YES; } +// iOS 6 support, right now unconditionally supporting all orientations, TODO use a orientation mask + +-(BOOL)shouldAutorotate +{ + return YES; +} + + - (NSUInteger)supportedInterfaceOrientations +{ + return UIInterfaceOrientationMaskAll; +} + + + + - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { - CGRect fr = [self.view frame]; wxWidgetIPhoneImpl* impl = (wxWidgetIPhoneImpl* ) wxWidgetImpl::FindFromWXWidget( [self view] ); wxNonOwnedWindow* now = dynamic_cast (impl->GetWXPeer()); now->HandleResized(0); } +-(void) viewWillAppear:(BOOL)animated +{ + wxWidgetIPhoneImpl* impl = (wxWidgetIPhoneImpl* ) wxWidgetImpl::FindFromWXWidget( [self view] ); + wxNonOwnedWindow* now = dynamic_cast (impl->GetWXPeer()); + wxNonOwnedWindowIPhoneImpl* nowimpl = dynamic_cast (now->GetNonOwnedPeer()); + + if ( nowimpl->InitialShowEventSent() ) + { + wxShowEvent eventShow(now->GetId(), true); + eventShow.SetEventObject(now); + + now->HandleWindowEvent(eventShow); + } +} + +-(void) viewWillDisappear:(BOOL)animated +{ + wxWidgetIPhoneImpl* impl = (wxWidgetIPhoneImpl* ) wxWidgetImpl::FindFromWXWidget( [self view] ); + if( impl ) + { + wxNonOwnedWindow* now = dynamic_cast (impl->GetWXPeer()); + wxNonOwnedWindowIPhoneImpl* nowimpl = dynamic_cast (now->GetNonOwnedPeer()); + + if ( nowimpl->InitialShowEventSent() ) + { + wxShowEvent eventShow(now->GetId(), false); + eventShow.SetEventObject(now); + + now->HandleWindowEvent(eventShow); + } + } +} + -(void) dealloc { [super dealloc]; @@ -381,6 +477,7 @@ wxWidgetImpl* wxWidgetImpl::CreateContentView( wxNonOwnedWindow* now ) footerView = frame->GetToolBar()->GetHandle(); } } + return footerView; } @end