]> git.saurik.com Git - wxWidgets.git/commitdiff
support for auto-rotate on iphone
authorStefan Csomor <csomor@advancedconcepts.ch>
Sat, 24 Oct 2009 19:28:50 +0000 (19:28 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Sat, 24 Oct 2009 19:28:50 +0000 (19:28 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62496 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/osx/iphone/nonownedwnd.mm
src/osx/iphone/utils.mm
src/osx/iphone/window.mm
src/osx/nonownedwnd_osx.cpp

index 6b484a5fda807f4d4e1adf67dec7a939299ea421..ba4386f2792994c4bacac54c87db5bea2ebc2f3d 100644 (file)
@@ -194,7 +194,7 @@ void wxNonOwnedWindowIPhoneImpl::GetSize( int &width, int &height ) const
 
 void wxNonOwnedWindowIPhoneImpl::GetContentArea( int& left, int &top, int &width, int &height ) const
 {
-    CGRect rect = [m_macWindow frame];
+    CGRect rect = [m_macWindow bounds];
     width = rect.size.width;
     height = rect.size.height;
     left = rect.origin.x;
index 738b52dffa9719fabfa170788adb7e254016cdfa..f6b5b25d32d4d5ccab559af5a680f20e7f3d0851 100644 (file)
@@ -136,6 +136,7 @@ extern CGSize MeasureTextInContext( UIFont *font, NSString* text )
 
 void wxClientDisplayRect(int *x, int *y, int *width, int *height)
 {
+#if 0
     CGRect r = [[UIScreen mainScreen] applicationFrame];
     CGRect bounds = [[UIScreen mainScreen] bounds];
     if ( bounds.size.height > r.size.height )
@@ -162,6 +163,15 @@ void wxClientDisplayRect(int *x, int *y, int *width, int *height)
         if ( height )
             *height = r.size.width;
     }
+#else
+    // it's easier to treat the status bar as an element of the toplevel window 
+    // instead of the desktop in order to support easy rotation
+    if ( x )
+        *x = 0;
+    if ( y )
+        *y = 0;
+    wxDisplaySize(width, height);
+#endif
 }
 
 void wxGetMousePosition( int* x, int* y )
index 15e4029b84c5cb753bcbde8d1fea0704a6105030..c6cce21b50ad832f25eff17f946c2aedfce67847 100644 (file)
@@ -321,17 +321,21 @@ void wxOSXIPhoneClassAddWXMethods(Class c)
 
 - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation
 {
+    wxWidgetIPhoneImpl* impl = (wxWidgetIPhoneImpl* ) wxWidgetImpl::FindFromWXWidget( [self view] );
+    wxNonOwnedWindow* now = dynamic_cast<wxNonOwnedWindow*> (impl->GetWXPeer());
+    
+    // TODO: determine NO or YES based on min size requirements (whether it fits on the new orientation)
+    
     return YES;
 }
 
 - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
 {
     CGRect fr = [self.view frame];
-//    CGRect cv = [[self.view superview] frame];
-//    CGRect bounds = CGRectMake( 0,0,fr.size.width, fr.size.height);
-//    [[self.view superview] setFrame: fr ];
-//    [self.view setFrame: bounds];
-//    [self.view setNeedsDisplayInRect:bounds];
+    wxWidgetIPhoneImpl* impl = (wxWidgetIPhoneImpl* ) wxWidgetImpl::FindFromWXWidget( [self view] );
+    wxNonOwnedWindow* now = dynamic_cast<wxNonOwnedWindow*> (impl->GetWXPeer());
+        
+    now->HandleResized(0);
 }
 
 @end
@@ -419,7 +423,9 @@ void wxWidgetIPhoneImpl::GetSize( int &width, int &height ) const
 void wxWidgetIPhoneImpl::GetContentArea( int&left, int &top, int &width, int &height ) const
 {
     left = top = 0;
-    GetSize( width, height );
+    CGRect rect = [m_osxView bounds];
+    width = rect.size.width;
+    height = rect.size.height;
 }
 
 void wxWidgetIPhoneImpl::SetNeedsDisplay( const wxRect* where )
@@ -767,31 +773,21 @@ wxWidgetImpl* wxWidgetImpl::CreateUserPane( wxWindowMac* wxpeer, wxWindowMac* WX
 wxWidgetImpl* wxWidgetImpl::CreateContentView( wxNonOwnedWindow* now )
 {
     UIWindow* toplevelwindow = now->GetWXWindow();
+    CGRect frame = [toplevelwindow bounds];
+    CGRect appframe = [[UIScreen mainScreen] applicationFrame];
 
-    wxUIContentView* contentview = [[wxUIContentView alloc] initWithFrame:[toplevelwindow bounds]];
+    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];
     contentview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     wxUIContentViewController* controller = [[wxUIContentViewController alloc] init];
     controller.view = contentview;
-    /*
-    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
-    // left orientation not yet implemented !
-    if (orientation == UIInterfaceOrientationLandscapeRight )
-    {
-        CGAffineTransform transform = v.transform;
-
-        // Use the status bar frame to determine the center point of the window's content area.
-        CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
-        CGRect bounds = CGRectMake(0, 0, statusBarFrame.size.height, statusBarFrame.origin.x);
-        CGPoint center = CGPointMake(bounds.size.height / 2.0, bounds.size.width / 2.0);
-
-        // Set the center point of the view to the center point of the window's content area.
-        v.center = center;
 
-        // Rotate the view 90 degrees around its new center point.
-        transform = CGAffineTransformRotate(transform, ( M_PI / 2.0));
-        v.transform = transform;
-    }
-    */
     wxWidgetIPhoneImpl* impl = new wxWidgetIPhoneImpl( now, contentview, true );
     impl->InstallEventHandler();
     [toplevelwindow addSubview:contentview];
index fc50ea40916ec9d6fa249d5ab386609d7ef6c7d1..bdc9be1d32f0efb777e5ba90e9f5bd313160d46f 100644 (file)
@@ -399,8 +399,13 @@ void wxNonOwnedWindow::DoGetClientSize( int *width, int *height ) const
         return;
 
     int left, top, w, h;
+    // perhaps we should do this for all ?
+#ifdef __WXOSX_IPHONE__
+    m_peer->GetContentArea(left, top, w, h);
+#else
     m_nowpeer->GetContentArea(left, top, w, h);
-
+#endif
+    
     if (width)
        *width = w ;
     if (height)