private static void SetOrientation(DisplayOrientation supportedOrientations, bool bUpdateDimensions) { bool ll = (supportedOrientations & DisplayOrientation.LandscapeLeft) == DisplayOrientation.LandscapeLeft; bool lr = (supportedOrientations & DisplayOrientation.LandscapeRight) == DisplayOrientation.LandscapeRight; bool p = (supportedOrientations & DisplayOrientation.Portrait) == DisplayOrientation.Portrait; bool onlyLandscape = (ll || lr) && !p; bool onlyPortrait = !(ll || lr) && p; #if WINDOWS_PHONE bool bSwapDims = bUpdateDimensions && ((m_GraphicsDeviceMgr.SupportedOrientations & supportedOrientations) == DisplayOrientation.Default); #else bool bSwapDims = bUpdateDimensions && ((m_GraphicsDeviceMgr.SupportedOrientations & supportedOrientations) == 0); #endif if (bSwapDims && (ll || lr)) { // Check for landscape changes that do not need a swap #if WINDOWS_PHONE if (((m_GraphicsDeviceMgr.SupportedOrientations & DisplayOrientation.LandscapeLeft) != DisplayOrientation.Default) || ((m_GraphicsDeviceMgr.SupportedOrientations & DisplayOrientation.LandscapeRight) != DisplayOrientation.Default)) #else if (((m_GraphicsDeviceMgr.SupportedOrientations & DisplayOrientation.LandscapeLeft) != 0) || ((m_GraphicsDeviceMgr.SupportedOrientations & DisplayOrientation.LandscapeRight) != 0)) #endif { bSwapDims = false; } } int preferredBackBufferWidth = m_GraphicsDeviceMgr.PreferredBackBufferWidth; int preferredBackBufferHeight = m_GraphicsDeviceMgr.PreferredBackBufferHeight; if (bSwapDims) { CCSize newSize = m_obDesignResolutionSize.Inverted; CCDrawManager.SetDesignResolutionSize(newSize.Width, newSize.Height, m_eResolutionPolicy); /* * m_obViewPortRect = m_obViewPortRect.InvertedSize; * m_obDesignResolutionSize = m_obDesignResolutionSize.Inverted; * CCDirector.SharedDirector.m_obWinSizeInPoints = CCDirector.SharedDirector.m_obWinSizeInPoints.Inverted; * CCDirector.SharedDirector.m_obWinSizeInPixels = CCDirector.SharedDirector.m_obWinSizeInPixels.Inverted; * m_obScreenSize = m_obScreenSize.Inverted; * float f = m_fScaleX; * m_fScaleX = m_fScaleY; * m_fScaleY = f; */ } preferredBackBufferWidth = m_GraphicsDeviceMgr.PreferredBackBufferWidth; preferredBackBufferHeight = m_GraphicsDeviceMgr.PreferredBackBufferHeight; #if ANDROID if (onlyLandscape && m_GraphicsDeviceMgr.PreferredBackBufferHeight > m_GraphicsDeviceMgr.PreferredBackBufferWidth) { m_GraphicsDeviceMgr.PreferredBackBufferWidth = preferredBackBufferHeight; m_GraphicsDeviceMgr.PreferredBackBufferHeight = preferredBackBufferWidth; } m_GraphicsDeviceMgr.SupportedOrientations = supportedOrientations; #endif #if WINDOWS_PHONE if (bSwapDims) { m_GraphicsDeviceMgr.PreferredBackBufferWidth = preferredBackBufferHeight; m_GraphicsDeviceMgr.PreferredBackBufferHeight = preferredBackBufferWidth; } else { if (onlyLandscape) { m_GraphicsDeviceMgr.PreferredBackBufferWidth = 840; m_GraphicsDeviceMgr.PreferredBackBufferHeight = 480; } else if (onlyPortrait) { m_GraphicsDeviceMgr.PreferredBackBufferWidth = 480; m_GraphicsDeviceMgr.PreferredBackBufferHeight = 840; } } m_GraphicsDeviceMgr.SupportedOrientations = supportedOrientations; #endif #if IOS || IPHONE if (bSwapDims) { m_GraphicsDeviceMgr.PreferredBackBufferWidth = preferredBackBufferHeight; m_GraphicsDeviceMgr.PreferredBackBufferHeight = preferredBackBufferWidth; } else if (onlyLandscape && m_GraphicsDeviceMgr.PreferredBackBufferHeight > m_GraphicsDeviceMgr.PreferredBackBufferWidth) { m_GraphicsDeviceMgr.PreferredBackBufferWidth = preferredBackBufferHeight; m_GraphicsDeviceMgr.PreferredBackBufferHeight = preferredBackBufferWidth; } m_GraphicsDeviceMgr.SupportedOrientations = supportedOrientations; #endif #if WINDOWS if (bSwapDims) { m_GraphicsDeviceMgr.PreferredBackBufferWidth = preferredBackBufferHeight; m_GraphicsDeviceMgr.PreferredBackBufferHeight = preferredBackBufferWidth; } else { if (onlyPortrait) { m_GraphicsDeviceMgr.PreferredBackBufferWidth = 480; m_GraphicsDeviceMgr.PreferredBackBufferHeight = 800; } else { m_GraphicsDeviceMgr.PreferredBackBufferWidth = 800; m_GraphicsDeviceMgr.PreferredBackBufferHeight = 480; } } #endif m_GraphicsDeviceMgr.ApplyChanges(); }