support for auto-rotate on iphone

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62496 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor 2009-10-24 19:28:50 +00:00
parent 502113941d
commit 65536c9221
4 changed files with 39 additions and 28 deletions

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

View 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 )

View 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];

View 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)