diff --git a/cocos2dx/CCDirector.cpp b/cocos2dx/CCDirector.cpp index 29ae3d0480..d3c91f9603 100644 --- a/cocos2dx/CCDirector.cpp +++ b/cocos2dx/CCDirector.cpp @@ -56,6 +56,15 @@ THE SOFTWARE. #include "CCEGLView.h" #include +/** + Position of the FPS + + Default: 0,0 (bottom-left corner) + */ +#ifndef CC_DIRECTOR_STATS_POSITION +#define CC_DIRECTOR_STATS_POSITION CCDirector::sharedDirector()->getVisibleOrigin() +#endif + using namespace std; unsigned int g_uNumberOfDraws = 0; @@ -465,6 +474,30 @@ CCSize CCDirector::getWinSizeInPixels() return m_obWinSizeInPixels; } +CCSize CCDirector::getVisibleSize() +{ + if (m_pobOpenGLView) + { + return m_pobOpenGLView->getVisibleSize(); + } + else + { + return CCSizeZero; + } +} + +CCPoint CCDirector::getVisibleOrigin() +{ + if (m_pobOpenGLView) + { + return m_pobOpenGLView->getVisibleOrigin(); + } + else + { + return CCPointZero; + } +} + void CCDirector::reshapeProjection(const CCSize& newWindowSize) { CC_UNUSED_PARAM(newWindowSize); @@ -733,16 +766,17 @@ void CCDirector::createStatsLabel() { if( m_pFPSLabel && m_pSPFLabel ) { - CCTexture2D *texture = m_pFPSLabel->getTexture(); + //CCTexture2D *texture = m_pFPSLabel->getTexture(); CC_SAFE_RELEASE_NULL(m_pFPSLabel); CC_SAFE_RELEASE_NULL(m_pSPFLabel); CC_SAFE_RELEASE_NULL(m_pDrawsLabel); - CCTextureCache::sharedTextureCache()->removeTexture(texture); + // CCTextureCache::sharedTextureCache()->removeTexture(texture); CCFileUtils::sharedFileUtils()->purgeCachedEntries(); } + /* CCTexture2DPixelFormat currentFormat = CCTexture2D::defaultAlphaPixelFormat(); CCTexture2D::setDefaultAlphaPixelFormat(kCCTexture2DPixelFormat_RGBA4444); m_pFPSLabel = new CCLabelAtlas(); @@ -751,12 +785,23 @@ void CCDirector::createStatsLabel() m_pSPFLabel->initWithString("0.000", "fps_images.png", 12, 32, '.'); m_pDrawsLabel = new CCLabelAtlas(); m_pDrawsLabel->initWithString("000", "fps_images.png", 12, 32, '.'); + */ + m_pFPSLabel = CCLabelTTF::create("00.0", "Arial", 24); + m_pFPSLabel->retain(); + m_pSPFLabel = CCLabelTTF::create("0.000", "Arial", 24); + m_pSPFLabel->retain(); + m_pDrawsLabel = CCLabelTTF::create("000", "Arial", 24); + m_pDrawsLabel->retain(); - CCTexture2D::setDefaultAlphaPixelFormat(currentFormat); + //CCTexture2D::setDefaultAlphaPixelFormat(currentFormat); - m_pDrawsLabel->setPosition( ccpAdd( ccp(0,34), CC_DIRECTOR_STATS_POSITION ) ); - m_pSPFLabel->setPosition( ccpAdd( ccp(0,17), CC_DIRECTOR_STATS_POSITION ) ); - m_pFPSLabel->setPosition( CC_DIRECTOR_STATS_POSITION ); + + CCSize contentSize = m_pDrawsLabel->getContentSize(); + m_pDrawsLabel->setPosition(ccpAdd(ccp(contentSize.width/2, contentSize.height/2 + 40), CC_DIRECTOR_STATS_POSITION)); + contentSize = m_pSPFLabel->getContentSize(); + m_pSPFLabel->setPosition(ccpAdd(ccp(contentSize.width/2, contentSize.height/2 + 20), CC_DIRECTOR_STATS_POSITION)); + contentSize = m_pFPSLabel->getContentSize(); + m_pFPSLabel->setPosition(ccpAdd(ccp(contentSize.width/2, contentSize.height/2), CC_DIRECTOR_STATS_POSITION)); } @@ -766,16 +811,7 @@ void CCDirector::createStatsLabel() void CCDirector::updateContentScaleFactor() { - // [openGLView responseToSelector:@selector(setContentScaleFactor)] - if (m_pobOpenGLView->canSetContentScaleFactor()) - { - m_pobOpenGLView->setContentScaleFactor(m_fContentScaleFactor); - m_bIsContentScaleSupported = true; - } - else - { - CCLOG("cocos2d: setContentScaleFactor:'is not supported on this device"); - } + m_bIsContentScaleSupported = m_pobOpenGLView->setContentScaleFactor(m_fContentScaleFactor); } bool CCDirector::enableRetinaDisplay(bool enabled) @@ -791,15 +827,8 @@ bool CCDirector::enableRetinaDisplay(bool enabled) { return false; } - - // setContentScaleFactor is not supported - if (! m_pobOpenGLView->canSetContentScaleFactor()) - { - return false; - } - - // SD device - if (m_pobOpenGLView->getMainScreenScale() == 1.0) + + if (! m_pobOpenGLView->enableRetina()) { return false; } diff --git a/cocos2dx/CCDirector.h b/cocos2dx/CCDirector.h index 9369b3a4e1..dd413deebe 100644 --- a/cocos2dx/CCDirector.h +++ b/cocos2dx/CCDirector.h @@ -34,6 +34,7 @@ THE SOFTWARE. #include "cocoa/CCArray.h" #include "CCGL.h" #include "kazmath/mat4.h" +#include "label_nodes/CCLabelTTF.h" NS_CC_BEGIN @@ -164,6 +165,16 @@ public: /** returns the size of the OpenGL view in pixels. */ CCSize getWinSizeInPixels(void); + + /** returns visible size of the OpenGL view in points. + * the value is equal to getWinSize if don't invoke + * CCEGLView::setDesignResolutionSize() + */ + CCSize getVisibleSize(); + + /** returns visible origin of the OpenGL view in points. + */ + CCPoint getVisibleOrigin(); /** changes the projection size */ void reshapeProjection(const CCSize& newWindowSize); @@ -344,9 +355,9 @@ protected: float m_fAccumDt; float m_fFrameRate; - CCLabelAtlas *m_pFPSLabel; - CCLabelAtlas *m_pSPFLabel; - CCLabelAtlas *m_pDrawsLabel; + CCLabelTTF *m_pFPSLabel; + CCLabelTTF *m_pSPFLabel; + CCLabelTTF *m_pDrawsLabel; /** Whether or not the Director is paused */ bool m_bPaused; @@ -404,7 +415,9 @@ protected: WatcherCallbackFun m_pWatcherFun; void *m_pWatcherSender; - + + // CCEGLViewProtocol will recreate stats labels to fit visible rect + friend class CCEGLViewProtocol; }; /** diff --git a/cocos2dx/include/ccConfig.h b/cocos2dx/include/ccConfig.h index e51a21809a..ec57986c48 100755 --- a/cocos2dx/include/ccConfig.h +++ b/cocos2dx/include/ccConfig.h @@ -76,16 +76,6 @@ To enabled set it to 1. Disabled by default. #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 0 #endif - -/** @def CC_DIRECTOR_STATS_POSITION - Position of the FPS - - Default: 0,0 (bottom-left corner) - */ -#ifndef CC_DIRECTOR_STATS_POSITION -#define CC_DIRECTOR_STATS_POSITION ccp(0,0) -#endif - /** @def CC_DIRECTOR_FPS_INTERVAL Senconds between FPS updates. 0.5 seconds, means that the FPS number will be updated every 0.5 seconds. diff --git a/cocos2dx/include/ccTypes.h b/cocos2dx/include/ccTypes.h index 15d9704f1a..efccf070eb 100755 --- a/cocos2dx/include/ccTypes.h +++ b/cocos2dx/include/ccTypes.h @@ -305,22 +305,6 @@ typedef struct _ccBlendFunc GLenum dst; } ccBlendFunc; -//! ccResolutionType -typedef enum -{ - //! Unknonw resolution type - kCCResolutionUnknown, - //! iPhone resolution type - kCCResolutioniPhone, - //! RetinaDisplay resolution type - kCCResolutioniPhoneRetinaDisplay, - //! iPad resolution type - kCCResolutioniPad, - //! iPad Retina Display resolution type - kCCResolutioniPadRetinaDisplay, - -} ccResolutionType; - // XXX: If any of these enums are edited and/or reordered, udpate CCTexture2D.m //! Vertical text alignment type typedef enum diff --git a/cocos2dx/label_nodes/CCLabelTTF.cpp b/cocos2dx/label_nodes/CCLabelTTF.cpp index 14953f500f..ca20749884 100644 --- a/cocos2dx/label_nodes/CCLabelTTF.cpp +++ b/cocos2dx/label_nodes/CCLabelTTF.cpp @@ -293,32 +293,6 @@ void CCLabelTTF::updateTexture() m_pFontName->c_str(), m_fFontSize * CC_CONTENT_SCALE_FACTOR()); } - - // iPad ? - //if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) { - if (CCApplication::sharedApplication().isIpad()) - { - if (CC_CONTENT_SCALE_FACTOR() == 2) - { - tex->setResolutionType(kCCResolutioniPadRetinaDisplay); - } - else - { - tex->setResolutionType(kCCResolutioniPad); - } - } - // iPhone ? - else - { - if (CC_CONTENT_SCALE_FACTOR() == 2) - { - tex->setResolutionType(kCCResolutioniPhoneRetinaDisplay); - } - else - { - tex->setResolutionType(kCCResolutioniPhone); - } - } this->setTexture(tex); tex->release(); diff --git a/cocos2dx/platform/CCApplicationProtocol.h b/cocos2dx/platform/CCApplicationProtocol.h index e7cc3eb469..f2fb426c61 100644 --- a/cocos2dx/platform/CCApplicationProtocol.h +++ b/cocos2dx/platform/CCApplicationProtocol.h @@ -50,6 +50,7 @@ public: virtual ccLanguageType getCurrentLanguage() = 0; virtual bool isIpad() { return false; } + virtual bool isIos() { return false; } }; diff --git a/cocos2dx/platform/CCEGLViewProtocol.cpp b/cocos2dx/platform/CCEGLViewProtocol.cpp index 2d12ca13de..e71ba6cd97 100644 --- a/cocos2dx/platform/CCEGLViewProtocol.cpp +++ b/cocos2dx/platform/CCEGLViewProtocol.cpp @@ -43,11 +43,13 @@ static void removeUsedIndexBit(int index) } CCEGLViewProtocol::CCEGLViewProtocol() - : m_bNeedScale(false) - , m_pDelegate(NULL) - , m_fScreenScaleFactor(1.0f) +: m_pDelegate(NULL) +, m_fScreenScaleFactor(1.0f) +, m_fYScale(1.0f) +, m_fXScale(1.0f) +, m_bIsRetinaEnabled(false) +, m_eResolutionPolicy(kResolutionUnKnown) { - strncpy(m_szViewName, "Cocos2d-x Game", sizeof(m_szViewName)); } CCEGLViewProtocol::~CCEGLViewProtocol() @@ -55,57 +57,85 @@ CCEGLViewProtocol::~CCEGLViewProtocol() } -void CCEGLViewProtocol::setFrameSize(float width, float height) -{ - m_sSizeInPixel.setSize(width, height); - m_rcViewPort.size.setSize(width, height); -} - -CCSize CCEGLViewProtocol::getFrameSize() -{ - return m_sSizeInPixel; -} - -void CCEGLViewProtocol::setDesignResolutionSize(float width, float height) +void CCEGLViewProtocol::setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy) { + CCAssert(m_bIsRetinaEnabled == false, "can not enable retina while set design resolution size!"); + CCAssert(resolutionPolicy != kResolutionUnKnown, "should set resolutionPolicy"); + if (width == 0.0f || height == 0.0f) { return; } - m_sSizeInPoint.setSize(width, height); + m_obDesignResolutionSize.setSize(width, height); + + m_fXScale = (float)m_obScreenSize.width / m_obDesignResolutionSize.width; + m_fYScale = (float)m_obScreenSize.height / m_obDesignResolutionSize.height; + + if (resolutionPolicy == kCCResolutionNoBorder) + { + m_fXScale = m_fYScale = MAX(m_fXScale, m_fYScale); + } + + if (resolutionPolicy == kCCResolutionShowAll) + { + m_fXScale = m_fYScale = MIN(m_fXScale, m_fYScale); + } - // calculate the factor and the rect of viewport - m_fScreenScaleFactor = MIN((float)m_sSizeInPixel.width / m_sSizeInPoint.width, - (float)m_sSizeInPixel.height / m_sSizeInPoint.height); - float viewPortW = m_sSizeInPoint.width * m_fScreenScaleFactor; - float viewPortH = m_sSizeInPoint.height * m_fScreenScaleFactor; + // calculate the rect of viewport + float viewPortW = m_obDesignResolutionSize.width * m_fXScale; + float viewPortH = m_obDesignResolutionSize.height * m_fYScale; - m_rcViewPort.setRect((m_sSizeInPixel.width - viewPortW) / 2, (m_sSizeInPixel.height - viewPortH) / 2, viewPortW, viewPortH); + m_obViewPortRect.setRect((m_obScreenSize.width - viewPortW) / 2, (m_obScreenSize.height - viewPortH) / 2, viewPortW, viewPortH); + + m_eResolutionPolicy = resolutionPolicy; + + //setViewPortInPoints(0, 0,m_obScreenSize.width, m_obScreenSize.height); + + // reset director's member vaviables to fit visible rect + CCDirector::sharedDirector()->createStatsLabel(); + CCDirector::sharedDirector()->m_obWinSizeInPoints = CCDirector::sharedDirector()->m_obWinSizeInPixels = getSize(); + CCDirector::sharedDirector()->setGLDefaultValues(); +} - CCLOG("m_fScreenScaleFactor = %f", m_fScreenScaleFactor); - m_bNeedScale = true; +bool CCEGLViewProtocol::enableRetina() +{ + return false; } CCSize CCEGLViewProtocol::getSize() { - CCSize size; - if (m_bNeedScale) - { - // retina and scale mode can't be opened at the same time - CCAssert(CC_CONTENT_SCALE_FACTOR() == 1.0f, "retina and scale mode can't be opened at the same time!"); - size.setSize(m_sSizeInPoint.width, m_sSizeInPoint.height); - } - else - { - size.setSize(m_sSizeInPixel.width, m_sSizeInPixel.height); - } - return size; + return m_obDesignResolutionSize; } -CCRect CCEGLViewProtocol::getViewPort() +void CCEGLViewProtocol::setSize(float width, float height) { - return m_rcViewPort; + m_obDesignResolutionSize = m_obScreenSize = CCSizeMake(width, height); +} + +CCSize CCEGLViewProtocol::getVisibleSize() +{ + if (m_eResolutionPolicy == kCCResolutionNoBorder) + { + return CCSizeMake(m_obScreenSize.width/m_fXScale, m_obScreenSize.height/m_fYScale); + } + else + { + return m_obDesignResolutionSize; + } +} + +CCPoint CCEGLViewProtocol::getVisibleOrigin() +{ + if (m_eResolutionPolicy == kCCResolutionNoBorder) + { + return CCPointMake((m_obDesignResolutionSize.width - m_obScreenSize.width/m_fXScale)/2, + (m_obDesignResolutionSize.height - m_obScreenSize.height/m_fYScale)/2); + } + else + { + return CCPointZero; + } } void CCEGLViewProtocol::setTouchDelegate(EGLTouchDelegate * pDelegate) @@ -118,74 +148,25 @@ float CCEGLViewProtocol::getScreenScaleFactor() return m_fScreenScaleFactor; } -bool CCEGLViewProtocol::canSetContentScaleFactor() +bool CCEGLViewProtocol::setContentScaleFactor(float contentScaleFactor) { return false; } -void CCEGLViewProtocol::setContentScaleFactor(float contentScaleFactor) -{ - m_fScreenScaleFactor = contentScaleFactor; -} - void CCEGLViewProtocol::setViewPortInPoints(float x , float y , float w , float h) { - if (m_bNeedScale) - { - CCAssert(CC_CONTENT_SCALE_FACTOR() == 1.0f, "retina and scale mode can't be opened at the same time!"); - float factor = m_fScreenScaleFactor / CC_CONTENT_SCALE_FACTOR(); - glViewport((GLint)(x * factor + m_rcViewPort.origin.x), - (GLint)(y * factor + m_rcViewPort.origin.y), - (GLsizei)(w * factor), - (GLsizei)(h * factor)); - } - else - { - glViewport( - (GLint)(x*CC_CONTENT_SCALE_FACTOR()), - (GLint)(y*CC_CONTENT_SCALE_FACTOR()), - (GLsizei)(w*CC_CONTENT_SCALE_FACTOR()), - (GLsizei)(h*CC_CONTENT_SCALE_FACTOR())); - } + glViewport((GLint)(x * m_fXScale + m_obViewPortRect.origin.x), + (GLint)(y * m_fYScale + m_obViewPortRect.origin.y), + (GLsizei)(w * m_fXScale), + (GLsizei)(h * m_fYScale)); } void CCEGLViewProtocol::setScissorInPoints(float x , float y , float w , float h) { - if (m_bNeedScale) - { - CCAssert(CC_CONTENT_SCALE_FACTOR() == 1.0f, "retina and scale mode can't be opened at the same time!"); - float factor = m_fScreenScaleFactor / CC_CONTENT_SCALE_FACTOR(); - glScissor((GLint)(x * factor + m_rcViewPort.origin.x), - (GLint)(y * factor + m_rcViewPort.origin.y), - (GLsizei)(w * factor), - (GLsizei)(h * factor)); - } - else - { - glScissor( - (GLint)(x * CC_CONTENT_SCALE_FACTOR()), - (GLint)(y * CC_CONTENT_SCALE_FACTOR()), - (GLsizei)(w * CC_CONTENT_SCALE_FACTOR()), - (GLsizei)(h * CC_CONTENT_SCALE_FACTOR())); - } -} - -float CCEGLViewProtocol::getMainScreenScale() -{ - return -1.0f; -} - -void CCEGLViewProtocol::setViewName(const char* pszViewName) -{ - if (pszViewName != NULL && strlen(pszViewName) > 0) - { - strncpy(m_szViewName, pszViewName, sizeof(m_szViewName)); - } -} - -const char* CCEGLViewProtocol::getViewName() -{ - return m_szViewName; + glScissor((GLint)(x * m_fXScale + m_obViewPortRect.origin.x), + (GLint)(y * m_fYScale + m_obViewPortRect.origin.y), + (GLsizei)(w * m_fXScale), + (GLsizei)(h * m_fYScale)); } void CCEGLViewProtocol::handleTouchesBegin(int num, int ids[], float xs[], float ys[]) @@ -212,15 +193,21 @@ void CCEGLViewProtocol::handleTouchesBegin(int num, int ids[], float xs[], float } CCTouch* pTouch = s_pTouches[nUnusedIndex] = new CCTouch(); - if (m_bNeedScale) + if (m_bIsRetinaEnabled) { - pTouch->setTouchInfo(nUnusedIndex, (x - m_rcViewPort.origin.x) / m_fScreenScaleFactor, - (y - m_rcViewPort.origin.y) / m_fScreenScaleFactor); + // on iOS, though retina is enabled, the value got from os is also + // relative to its original size + pTouch->setTouchInfo(nUnusedIndex, (x - m_obViewPortRect.origin.x), + (y - m_obViewPortRect.origin.y)); } - else + else { - pTouch->setTouchInfo(nUnusedIndex, x, y); + pTouch->setTouchInfo(nUnusedIndex, (x - m_obViewPortRect.origin.x) / m_fXScale, + (y - m_obViewPortRect.origin.y) / m_fYScale); } + + CCLOG("x = %f y = %f", pTouch->getLocationInView().x, pTouch->getLocationInView().y); + CCInteger* pInterObj = new CCInteger(nUnusedIndex); s_TouchesIntergerDict.setObject(pInterObj, id); set.addObject(pTouch); @@ -256,15 +243,17 @@ void CCEGLViewProtocol::handleTouchesMove(int num, int ids[], float xs[], float CCTouch* pTouch = s_pTouches[pIndex->getValue()]; if (pTouch) { - if (m_bNeedScale) + if (m_bIsRetinaEnabled) { - pTouch->setTouchInfo(pIndex->getValue(), (x - m_rcViewPort.origin.x) / m_fScreenScaleFactor, - (y - m_rcViewPort.origin.y) / m_fScreenScaleFactor); + pTouch->setTouchInfo(pIndex->getValue(), (x - m_obViewPortRect.origin.x), + (y - m_obViewPortRect.origin.y)); } - else + else { - pTouch->setTouchInfo(pIndex->getValue(), x, y); + pTouch->setTouchInfo(pIndex->getValue(), (x - m_obViewPortRect.origin.x) / m_fXScale, + (y - m_obViewPortRect.origin.y) / m_fYScale); } + set.addObject(pTouch); } else @@ -303,17 +292,18 @@ void CCEGLViewProtocol::getSetOfTouchesEndOrCancel(CCSet& set, int num, int ids[ if (pTouch) { CCLOGINFO("Ending touches with id: %d, x=%f, y=%f", id, x, y); - - if (m_bNeedScale) - { - pTouch->setTouchInfo(pIndex->getValue(), (x - m_rcViewPort.origin.x) / m_fScreenScaleFactor, - (y - m_rcViewPort.origin.y) / m_fScreenScaleFactor); - } - else - { - pTouch->setTouchInfo(pIndex->getValue(), x, y); - } + if (m_bIsRetinaEnabled) + { + pTouch->setTouchInfo(pIndex->getValue(), (x - m_obViewPortRect.origin.x), + (y - m_obViewPortRect.origin.y)); + } + else + { + pTouch->setTouchInfo(pIndex->getValue(), (x - m_obViewPortRect.origin.x) / m_fXScale, + (y - m_obViewPortRect.origin.y) / m_fYScale); + } + set.addObject(pTouch); // release the object diff --git a/cocos2dx/platform/CCEGLViewProtocol.h b/cocos2dx/platform/CCEGLViewProtocol.h index 0d514494ba..0cb3be3574 100644 --- a/cocos2dx/platform/CCEGLViewProtocol.h +++ b/cocos2dx/platform/CCEGLViewProtocol.h @@ -3,6 +3,21 @@ #include "ccTypes.h" +enum ResolutionPolicy +{ + // The entire application is visible in the specified area without trying to preserve the original aspect ratio. + // Distortion can occur, and the application may appear stretched or compressed. + kCCResolutionExactFit, + // The entire application fills the specified area, without distortion but possibly with some cropping, + // while maintaining the original aspect ratio of the application. + kCCResolutionNoBorder, + // The entire application is visible in the specified area without distortion while maintaining the original + // aspect ratio of the application. Borders can appear on two sides of the application. + kCCResolutionShowAll, + + kResolutionUnKnown, +}; + NS_CC_BEGIN #define CC_MAX_TOUCHES 5 @@ -26,20 +41,17 @@ public: virtual void swapBuffers() = 0; virtual void setIMEKeyboardState(bool bOpen) = 0; - virtual CCRect getViewPort(); virtual CCSize getSize(); - virtual void setFrameSize(float width, float height); - virtual CCSize getFrameSize(); - virtual void setDesignResolutionSize(float width, float height); + virtual void setSize(float width, float height); + virtual CCSize getVisibleSize(); + virtual CCPoint getVisibleOrigin(); + virtual void setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy); virtual void setTouchDelegate(EGLTouchDelegate * pDelegate); virtual float getScreenScaleFactor(); - virtual bool canSetContentScaleFactor(); - virtual void setContentScaleFactor(float contentScaleFactor); + virtual bool setContentScaleFactor(float contentScaleFactor); virtual void setViewPortInPoints(float x , float y , float w , float h); virtual void setScissorInPoints(float x , float y , float w , float h); - virtual float getMainScreenScale(); - virtual void setViewName(const char* pszViewName); - const char* getViewName(); + virtual bool enableRetina(); /** handle touch events by default, if you want to custom your handles, please override these functions */ virtual void handleTouchesBegin(int num, int ids[], float xs[], float ys[]); @@ -50,13 +62,19 @@ public: private: void getSetOfTouchesEndOrCancel(CCSet& set, int num, int ids[], float xs[], float ys[]); protected: - bool m_bNeedScale; EGLTouchDelegate* m_pDelegate; float m_fScreenScaleFactor; - CCSize m_sSizeInPixel; - CCSize m_sSizeInPoint; - CCRect m_rcViewPort; - char m_szViewName[50]; + // real size of screen + CCSize m_obScreenSize; + // resolution size, it is the size the app resources designed for + CCSize m_obDesignResolutionSize; + // the view port size + CCRect m_obViewPortRect; + char m_szViewName[50]; + float m_fXScale; + float m_fYScale; + ResolutionPolicy m_eResolutionPolicy; + bool m_bIsRetinaEnabled; }; // end of platform group diff --git a/cocos2dx/platform/CCFileUtils.h b/cocos2dx/platform/CCFileUtils.h index 98e70dbb17..0efa5e3c64 100644 --- a/cocos2dx/platform/CCFileUtils.h +++ b/cocos2dx/platform/CCFileUtils.h @@ -62,16 +62,6 @@ public: */ unsigned char* getFileDataFromZip(const char* pszZipFilePath, const char* pszFileName, unsigned long * pSize); - /** removes the suffix from a path - * On RetinaDisplay it will remove the -hd suffix - * On iPad it will remove the -ipad suffix - * On iPhone it will remove the (empty) suffix - Only valid on iOS. Not valid for OS X. - - @since v0.99.5 - */ - std::string& removeSuffixFromFile(std::string& path); - /** @brief Generate the absolute path of the file. @param pszRelativePath The relative path of the file. @@ -82,76 +72,15 @@ public: */ const char* fullPathFromRelativePath(const char *pszRelativePath); - /** Returns the fullpath of an filename including the resolution of the image. - - If in RetinaDisplay mode, and a RetinaDisplay file is found, it will return that path. - If in iPad mode, and an iPad file is found, it will return that path. - - Examples: - - * In iPad mode: "image.png" -> "/full/path/image-ipad.png" (in case the -ipad file exists) - * In RetinaDisplay mode: "image.png" -> "/full/path/image-hd.png" (in case the -hd file exists) - - If an iPad file is found, it will set resolution type to kCCResolutioniPad - If a RetinaDisplay file is found, it will set resolution type to kCCResolutionRetinaDisplay - - */ - const char* fullPathFromRelativePath(const char *pszRelativePath, ccResolutionType *pResolutionType); - /// @cond const char* fullPathFromRelativeFile(const char *pszFilename, const char *pszRelativeFile); /// @endcond - /** Sets the iPhone RetinaDisplay suffix to load resources. - By default it is "-hd". - Only valid on iOS. Not valid for OS X. - - @since v1.1 - */ - void setiPhoneRetinaDisplaySuffix(const char *suffix); - - /** Sets the iPad suffix to load resources. - By default it is "". - Only valid on iOS. Not valid for OS X. - - - */ - void setiPadSuffix(const char *suffix); - - /** Sets the iPad Retina Display suffix to load resources. - By default it is "-ipadhd". - Only valid on iOS. Not valid for OS X. - - @since v1.1 - */ - void setiPadRetinaDisplaySuffix(const char *suffix); - - /** Returns whether or not a given filename exists with the iPad suffix. - Only available on iOS. Not supported on OS X. - @since v1.1 - */ - bool iPadFileExistsAtPath(const char *filename); - - /** Returns whether or not a given filename exists with the iPad RetinaDisplay suffix. - Only available on iOS. Not supported on OS X. - @since v2.0 - */ - bool iPadRetinaDisplayFileExistsAtPath(const char *filename); - - /** Returns whether or not a given path exists with the iPhone RetinaDisplay suffix. - Only available on iOS. Not supported on OS X. - @since v1.1 - */ - bool iPhoneRetinaDisplayFileExistsAtPath(const char *filename); - /** - @brief Set the ResourcePath,we will find resource in this path - @param pszResourcePath The absolute resource path - @warning Don't call this function in android and iOS, it has not effect. - In android, if you want to read file other than apk, you shoud use invoke getFileData(), and pass the - absolute path. + @brief Set the ResourcePath,we will find resource relative to this path + @param pszResourcePath Relative path to root */ - void setResourcePath(const char *pszResourcePath); + void setResourceDirectory(const char *pszDirectoryName); /** @brief Get the writeable path @@ -164,6 +93,9 @@ public: */ void setPopupNotify(bool bNotify); bool isPopupNotify(); + +protected: + std::string m_obDirectory; }; // end of platform group diff --git a/cocos2dx/platform/CCFileUtilsCommon_cpp.h b/cocos2dx/platform/CCFileUtilsCommon_cpp.h index 93f093d641..631198c047 100644 --- a/cocos2dx/platform/CCFileUtilsCommon_cpp.h +++ b/cocos2dx/platform/CCFileUtilsCommon_cpp.h @@ -42,10 +42,6 @@ THE SOFTWARE. NS_CC_BEGIN -static const char *__suffixiPhoneRetinaDisplay = "-hd"; -static const char *__suffixiPad = "-ipad"; -static const char *__suffixiPadRetinaDisplay = "-ipadhd"; - typedef enum { SAX_NONE = 0, @@ -322,27 +318,6 @@ public: } }; -std::string& CCFileUtils::removeSuffixFromFile(std::string& path) -{ - // XXX win32 now can only support iphone retina, because - // we don't know it is ipad retina or iphone retina. - // fixe me later - if( CC_CONTENT_SCALE_FACTOR() == 2 ) - { - std::string::size_type pos = path.rfind("/") + 1; // the begin index of last part of path - - std::string::size_type suffixPos = path.rfind(__suffixiPhoneRetinaDisplay); - if (std::string::npos != suffixPos && suffixPos > pos) - { - CCLog("cocos2d: FilePath(%s) contains suffix(%s), remove it.", path.c_str(), - __suffixiPhoneRetinaDisplay); - path.replace(suffixPos, strlen(__suffixiPhoneRetinaDisplay), ""); - } - } - - return path; -} - CCDictionary* ccFileUtils_dictionaryWithContentsOfFileThreadSafe(const char *pFileName) { CCDictMaker tMaker; @@ -397,45 +372,13 @@ unsigned char* CCFileUtils::getFileDataFromZip(const char* pszZipFilePath, const return pBuffer; } - -const char* CCFileUtils::fullPathFromRelativePath(const char *pszRelativePath) +void CCFileUtils::setResourceDirectory(const char* pszResourceDirectory) { - ccResolutionType ignore; - return fullPathFromRelativePath(pszRelativePath, &ignore); -} - -/// functions iOS specific -void CCFileUtils::setiPhoneRetinaDisplaySuffix(const char *suffix) -{ - CCAssert(0, "not implement"); -} - -void CCFileUtils::setiPadSuffix(const char *suffix) -{ - CCAssert(0, "not implement"); -} - -void CCFileUtils::setiPadRetinaDisplaySuffix(const char *suffix) -{ - CCAssert(0, "not implement"); -} - -bool CCFileUtils::iPadFileExistsAtPath(const char *filename) -{ - CCAssert(0, "not implement"); - return false; -} - -bool CCFileUtils::iPadRetinaDisplayFileExistsAtPath(const char *filename) -{ - CCAssert(0, "not implement"); - return false; -} - -bool CCFileUtils::iPhoneRetinaDisplayFileExistsAtPath(const char *filename) -{ - CCAssert(0, "not implement"); - return false; + m_obDirectory = pszResourceDirectory; + if (m_obDirectory.size() > 0 && m_obDirectory[m_obDirectory.size() - 1] != '/') + { + m_obDirectory.append("/"); + } } ////////////////////////////////////////////////////////////////////////// diff --git a/cocos2dx/platform/android/CCEGLView.cpp b/cocos2dx/platform/android/CCEGLView.cpp index 524019c894..74bdc3ea81 100644 --- a/cocos2dx/platform/android/CCEGLView.cpp +++ b/cocos2dx/platform/android/CCEGLView.cpp @@ -64,7 +64,7 @@ CCEGLView::~CCEGLView() bool CCEGLView::isOpenGLReady() { - return (m_sSizeInPixel.width != 0 && m_sSizeInPixel.height != 0); + return (m_obScreenSize.width != 0 && m_obScreenSize.height != 0); } void CCEGLView::end() diff --git a/cocos2dx/platform/android/CCFileUtils.cpp b/cocos2dx/platform/android/CCFileUtils.cpp index dceff8381a..680a591f7d 100644 --- a/cocos2dx/platform/android/CCFileUtils.cpp +++ b/cocos2dx/platform/android/CCFileUtils.cpp @@ -31,6 +31,7 @@ NS_CC_BEGIN #include "platform/CCCommon.h" #include "jni/SystemInfoJni.h" +#include "jni/MessageJni.h" // record the resource path static string s_strResourcePath = ""; @@ -42,6 +43,7 @@ CCFileUtils* CCFileUtils::sharedFileUtils() if (s_pFileUtils == NULL) { s_pFileUtils = new CCFileUtils(); + s_strResourcePath = getApkPath(); } return s_pFileUtils; } @@ -61,25 +63,7 @@ void CCFileUtils::purgeCachedEntries() } -/* - * This function is implemented for jni to set apk path. - */ -void CCFileUtils::setResourcePath(const char* pszResourcePath) -{ - CCAssert(pszResourcePath != NULL, "[FileUtils setRelativePath] -- wrong relative path"); - - string tmp(pszResourcePath); - - if ((! pszResourcePath) || tmp.find(".apk") == string::npos) - { - return; - } - - s_strResourcePath = pszResourcePath; -} - -const char* CCFileUtils::fullPathFromRelativePath(const char *pszRelativePath, - ccResolutionType *pResolutionType) +const char* CCFileUtils::fullPathFromRelativePath(const char *pszRelativePath) { return pszRelativePath; } @@ -107,8 +91,18 @@ unsigned char* CCFileUtils::getFileData(const char* pszFileName, const char* psz if (pszFileName[0] != '/') { // read from apk + string pathWithoutDirectory = fullPath; + + fullPath.insert(0, m_obDirectory.c_str()); fullPath.insert(0, "assets/"); pData = CCFileUtils::getFileDataFromZip(s_strResourcePath.c_str(), fullPath.c_str(), pSize); + + if (! pData && m_obDirectory.size() > 0) + { + // search from root + pathWithoutDirectory.insert(0, "assets/"); + pData = CCFileUtils::getFileDataFromZip(s_strResourcePath.c_str(), pathWithoutDirectory.c_str(), pSize); + } } else { diff --git a/cocos2dx/platform/android/jni/MessageJni.cpp b/cocos2dx/platform/android/jni/MessageJni.cpp index ab0754cfcf..e7baa79eb7 100644 --- a/cocos2dx/platform/android/jni/MessageJni.cpp +++ b/cocos2dx/platform/android/jni/MessageJni.cpp @@ -44,6 +44,8 @@ using namespace cocos2d; extern "C" { + char *g_pApkPath; + ////////////////////////////////////////////////////////////////////////// // native renderer ////////////////////////////////////////////////////////////////////////// @@ -127,8 +129,13 @@ extern "C" ////////////////////////////////////////////////////////////////////////// void Java_org_cocos2dx_lib_Cocos2dxActivity_nativeSetPaths(JNIEnv* env, jobject thiz, jstring apkPath) { - const char* str = env->GetStringUTFChars(apkPath, NULL); - cocos2d::CCFileUtils::sharedFileUtils()->setResourcePath(str); - env->ReleaseStringUTFChars(apkPath, str); + g_pApkPath = (char*)env->GetStringUTFChars(apkPath, NULL); + // don't release it, we will use it later + //env->ReleaseStringUTFChars(apkPath, str); + } + + char* getApkPath() + { + return g_pApkPath; } } diff --git a/cocos2dx/platform/android/jni/MessageJni.h b/cocos2dx/platform/android/jni/MessageJni.h index b459c9ad36..0ecf5b48cd 100644 --- a/cocos2dx/platform/android/jni/MessageJni.h +++ b/cocos2dx/platform/android/jni/MessageJni.h @@ -29,6 +29,7 @@ extern "C" { extern void showMessageBoxJNI(const char * pszMsg, const char * pszTitle); extern void terminateProcessJNI(); + extern char* getApkPath(); } #endif // __ANDROID_MESSAGE_JNI_H__ diff --git a/cocos2dx/platform/android/jni/SensorJni.cpp b/cocos2dx/platform/android/jni/SensorJni.cpp index 361ccdf9e4..3ffeaa17a4 100644 --- a/cocos2dx/platform/android/jni/SensorJni.cpp +++ b/cocos2dx/platform/android/jni/SensorJni.cpp @@ -49,12 +49,6 @@ extern "C" void Java_org_cocos2dx_lib_Cocos2dxAccelerometer_onSensorChanged(JNIEnv* env, jobject thiz, jfloat x, jfloat y, jfloat z, jlong timeStamp) { // We need to invert to make it compatible with iOS. - CCRect rcRect = CCEGLView::sharedOpenGLView().getViewPort(); - float fScreenScaleFactor = CCEGLView::sharedOpenGLView().getScreenScaleFactor(); -// cocos2d::CCAccelerometer::sharedAccelerometer()->update((x - rcRect.origin.x) / fScreenScaleFactor, -// (y - rcRect.origin.y) / fScreenScaleFactor, -// z, -// timeStamp); CCDirector* pDirector = CCDirector::sharedDirector(); pDirector->getAccelerometer()->update(x, y, z, timeStamp); } diff --git a/cocos2dx/platform/ios/CCApplication.h b/cocos2dx/platform/ios/CCApplication.h index 627380c958..f90e54c594 100644 --- a/cocos2dx/platform/ios/CCApplication.h +++ b/cocos2dx/platform/ios/CCApplication.h @@ -81,6 +81,7 @@ public: virtual ccLanguageType getCurrentLanguage(); virtual bool isIpad(); + virtual bool isIos(); protected: static CCApplication * sm_pSharedApplication; diff --git a/cocos2dx/platform/ios/CCApplication.mm b/cocos2dx/platform/ios/CCApplication.mm index 9c21bc89f4..a94782f0e0 100644 --- a/cocos2dx/platform/ios/CCApplication.mm +++ b/cocos2dx/platform/ios/CCApplication.mm @@ -155,4 +155,9 @@ bool CCApplication::isIpad() return false; } +bool CCApplication::isIos() +{ + return true; +} + NS_CC_END diff --git a/cocos2dx/platform/ios/CCEGLView.h b/cocos2dx/platform/ios/CCEGLView.h index 6094941cd7..fd4b1241c8 100644 --- a/cocos2dx/platform/ios/CCEGLView.h +++ b/cocos2dx/platform/ios/CCEGLView.h @@ -38,21 +38,17 @@ public: CCEGLView(); ~CCEGLView(); - CCSize getSize(); - bool isOpenGLReady(); - bool canSetContentScaleFactor(); - bool isIpad(); - void setContentScaleFactor(float contentScaleFactor); + virtual bool isOpenGLReady(); + virtual bool isIpad(); + virtual bool setContentScaleFactor(float contentScaleFactor); virtual CCSize getFrameSize(); + virtual bool enableRetina(); // keep compatible - void end(); - void swapBuffers(); - + virtual void end(); + virtual void swapBuffers(); - float getMainScreenScale(); - - void setIMEKeyboardState(bool bOpen); + virtual void setIMEKeyboardState(bool bOpen); static CCEGLView& sharedOpenGLView(); diff --git a/cocos2dx/platform/ios/CCEGLView.mm b/cocos2dx/platform/ios/CCEGLView.mm index cec7168830..7e3b3e109d 100644 --- a/cocos2dx/platform/ios/CCEGLView.mm +++ b/cocos2dx/platform/ios/CCEGLView.mm @@ -32,7 +32,8 @@ NS_CC_BEGIN CCEGLView::CCEGLView() { - + m_obScreenSize.width = m_obDesignResolutionSize.width = [[EAGLView sharedEGLView] getWidth]; + m_obScreenSize.height = m_obDesignResolutionSize.height = [[EAGLView sharedEGLView] getHeight]; } CCEGLView::~CCEGLView() @@ -40,13 +41,6 @@ CCEGLView::~CCEGLView() } -CCSize CCEGLView::getSize() -{ - cocos2d::CCSize size([[EAGLView sharedEGLView] getWidth], [[EAGLView sharedEGLView] getHeight]); - - return size; -} - bool CCEGLView::isIpad() { return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; @@ -57,16 +51,38 @@ bool CCEGLView::isOpenGLReady() return [EAGLView sharedEGLView] != NULL; } -bool CCEGLView::canSetContentScaleFactor() +bool CCEGLView::setContentScaleFactor(float contentScaleFactor) { - return [[EAGLView sharedEGLView] respondsToSelector:@selector(setContentScaleFactor:)]; -} + // can not enable retina because have used resolution policy + assert(m_eResolutionPolicy == kResolutionUnKnown); -void CCEGLView::setContentScaleFactor(float contentScaleFactor) + if ([[EAGLView sharedEGLView] respondsToSelector:@selector(setContentScaleFactor:)]) + { + UIView * view = [EAGLView sharedEGLView]; + view.contentScaleFactor = contentScaleFactor; + [view setNeedsLayout]; + + m_fXScale = m_fYScale = contentScaleFactor; + m_bIsRetinaEnabled = true; + + return true; + } + else + { + return false; + } +} + +bool CCEGLView::enableRetina() { - UIView * view = [EAGLView sharedEGLView]; - view.contentScaleFactor = contentScaleFactor; - [view setNeedsLayout]; + bool ret = true; + + // can set content scale factor? + ret &= [[EAGLView sharedEGLView] respondsToSelector:@selector(setContentScaleFactor:)]; + // SD device? + ret &= ([[UIScreen mainScreen] scale] != 1.0f); + + return ret; } void CCEGLView::end() @@ -107,10 +123,5 @@ CCEGLView& CCEGLView::sharedOpenGLView() return instance; } -float CCEGLView::getMainScreenScale() -{ - return [[UIScreen mainScreen] scale]; -} - NS_CC_END diff --git a/cocos2dx/platform/ios/CCFileUtils.mm b/cocos2dx/platform/ios/CCFileUtils.mm index 744a4cce32..ec6745c0f4 100644 --- a/cocos2dx/platform/ios/CCFileUtils.mm +++ b/cocos2dx/platform/ios/CCFileUtils.mm @@ -44,9 +44,7 @@ USING_NS_CC; static void static_addValueToCCDict(id key, id value, CCDictionary* pDict); static void static_addItemToCCArray(id item, CCArray* pArray); -static NSString *__suffixiPhoneRetinaDisplay =@"-hd"; -static NSString *__suffixiPad =@"-ipad"; -static NSString *__suffixiPadRetinaDisplay =@"-ipadhd"; + static NSFileManager *__localFileManager= [[NSFileManager alloc] init]; static NSString* removeSuffixFromPath(NSString *suffix, NSString *path) @@ -238,60 +236,9 @@ void CCFileUtils::purgeCachedEntries() } -void CCFileUtils::setResourcePath(const char *pszResourcePath) +void CCFileUtils::setResourceDirectory(const char *pszDirectoryName) { - assert(0); -} - -std::string& CCFileUtils::removeSuffixFromFile(std::string& cpath ) -{ - NSString *ret = nil; - NSString *path = [NSString stringWithUTF8String:cpath.c_str()]; - - if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) - { - if( CC_CONTENT_SCALE_FACTOR() == 2 ) - { - ret = removeSuffixFromPath(__suffixiPadRetinaDisplay, path); - } - else - { - ret = removeSuffixFromPath(__suffixiPad, path); - } - } - else - { - if( CC_CONTENT_SCALE_FACTOR() == 2 ) - { - ret = removeSuffixFromPath(__suffixiPhoneRetinaDisplay, [NSString stringWithUTF8String:cpath.c_str()]); - } - else - { - ret = path; - } - } - - - cpath = [ret UTF8String]; - return cpath; -} - -void CCFileUtils::setiPhoneRetinaDisplaySuffix(const char *suffix) -{ - [__suffixiPhoneRetinaDisplay release]; - __suffixiPhoneRetinaDisplay = [[NSString stringWithUTF8String:suffix] retain]; -} - -void CCFileUtils::setiPadSuffix(const char *suffix) -{ - [__suffixiPad release]; - __suffixiPad = [[NSString stringWithUTF8String:suffix] retain]; -} - -void CCFileUtils::setiPadRetinaDisplaySuffix(const char *suffix) -{ - [__suffixiPadRetinaDisplay release]; - __suffixiPadRetinaDisplay = [[NSString stringWithUTF8String:suffix] retain]; + m_obDirectory = pszDirectoryName; } bool fileExistsAtPath(const char *cpath, const char *csuffix) @@ -320,87 +267,42 @@ bool fileExistsAtPath(const char *cpath, const char *csuffix) return ( path != nil ); } -bool CCFileUtils::iPhoneRetinaDisplayFileExistsAtPath(const char *cpath) -{ - return fileExistsAtPath(cpath, [__suffixiPhoneRetinaDisplay UTF8String]); -} - -bool CCFileUtils::iPadFileExistsAtPath(const char *cpath) -{ - return fileExistsAtPath(cpath, [__suffixiPad UTF8String]); -} - -bool CCFileUtils::iPadRetinaDisplayFileExistsAtPath(const char *cpath) -{ - return fileExistsAtPath(cpath, [__suffixiPadRetinaDisplay UTF8String]); -} - const char* CCFileUtils::fullPathFromRelativePath(const char *pszRelativePath) -{ - ccResolutionType ignore; - return fullPathFromRelativePath(pszRelativePath, &ignore); -} - -const char* CCFileUtils::fullPathFromRelativePath(const char *pszRelativePath, ccResolutionType *pResolutionType) { CCAssert(pszRelativePath != NULL, "CCFileUtils: Invalid path"); - + NSString *fullpath = nil; NSString *relPath = [NSString stringWithUTF8String:pszRelativePath]; - + // only if it is not an absolute path if( ! [relPath isAbsolutePath] ) { - + // pathForResource also searches in .lproj directories. issue #1230 NSString *file = [relPath lastPathComponent]; - NSString *imageDirectory = [relPath stringByDeletingLastPathComponent]; - + + NSMutableString *imageDirectory = [NSMutableString stringWithUTF8String:m_obDirectory.c_str()]; + NSMutableString *imageDirectoryWithDirectory = imageDirectory; + [imageDirectoryWithDirectory appendString:[relPath stringByDeletingLastPathComponent]]; + + // search path from directory set by setResourceDirectory fullpath = [[NSBundle mainBundle] pathForResource:file - ofType:nil - inDirectory:imageDirectory]; - - + ofType:nil + inDirectory:imageDirectoryWithDirectory]; + if (fullpath == nil) + { + // search from root directory + fullpath = [[NSBundle mainBundle] pathForResource:file + ofType:nil + inDirectory:imageDirectory]; + } } - + if (fullpath == nil) { fullpath = relPath; } - - NSString *ret = nil; - - // iPad? - if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) - { - // Retina Display ? - if( CC_CONTENT_SCALE_FACTOR() == 2 ) { - ret = getPathForSuffix(fullpath, __suffixiPadRetinaDisplay); - *pResolutionType = kCCResolutioniPadRetinaDisplay; - } - else - { - ret = getPathForSuffix(fullpath, __suffixiPad); - *pResolutionType = kCCResolutioniPad; - } - } - // iPhone ? - else - { - // Retina Display ? - if( CC_CONTENT_SCALE_FACTOR() == 2 ) { - ret = getPathForSuffix(fullpath, __suffixiPhoneRetinaDisplay); - *pResolutionType = kCCResolutioniPhoneRetinaDisplay; - } - } - - // If it is iPhone Non RetinaDisplay, or if the previous "getPath" failed, then use iPhone images. - if( ret == nil ) - { - *pResolutionType = kCCResolutioniPhone; - ret = fullpath; - } - - return [ret UTF8String]; + + return [fullpath UTF8String]; } const char *CCFileUtils::fullPathFromRelativeFile(const char *pszFilename, const char *pszRelativeFile) diff --git a/cocos2dx/platform/win32/CCEGLView.cpp b/cocos2dx/platform/win32/CCEGLView.cpp index b387f5da31..e10f5539aa 100644 --- a/cocos2dx/platform/win32/CCEGLView.cpp +++ b/cocos2dx/platform/win32/CCEGLView.cpp @@ -397,7 +397,7 @@ void CCEGLView::resize(int width, int height) rcClient.bottom - rcClient.top, SWP_NOCOPYBITS | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER); } -void CCEGLView::setFrameSize(float width, float height) +void CCEGLView::setSize(float width, float height) { Create((LPCTSTR)m_szViewName, (int)width, (int)height); CCEGLViewProtocol::setFrameSize(width, height); @@ -435,16 +435,13 @@ void CCEGLView::centerWindow() SetWindowPos(m_hWnd, 0, offsetX, offsetY, 0, 0, SWP_NOCOPYBITS | SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOZORDER); } -bool CCEGLView::canSetContentScaleFactor() -{ - return true; -} - -void CCEGLView::setContentScaleFactor(float contentScaleFactor) +bool CCEGLView::setContentScaleFactor(float contentScaleFactor) { CCEGLViewProtocol::setContentScaleFactor(contentScaleFactor); resize((int)(m_sSizeInPixel.width * contentScaleFactor), (int)(m_sSizeInPixel.height * contentScaleFactor)); centerWindow(); + + return true } CCEGLView& CCEGLView::sharedOpenGLView() diff --git a/cocos2dx/platform/win32/CCEGLView.h b/cocos2dx/platform/win32/CCEGLView.h index 1fdddce4e7..88104b8e94 100644 --- a/cocos2dx/platform/win32/CCEGLView.h +++ b/cocos2dx/platform/win32/CCEGLView.h @@ -44,9 +44,8 @@ public: virtual bool isOpenGLReady(); virtual void end(); virtual void swapBuffers(); - virtual bool canSetContentScaleFactor(); - virtual void setContentScaleFactor(float contentScaleFactor); - virtual void setFrameSize(float width, float height); + virtual bool setContentScaleFactor(float contentScaleFactor); + virtual void setSize(float width, float height); virtual void setIMEKeyboardState(bool bOpen); private: diff --git a/cocos2dx/platform/win32/CCFileUtils.cpp b/cocos2dx/platform/win32/CCFileUtils.cpp index 9a57cd49ff..09b7bcf9a8 100644 --- a/cocos2dx/platform/win32/CCFileUtils.cpp +++ b/cocos2dx/platform/win32/CCFileUtils.cpp @@ -83,7 +83,7 @@ void CCFileUtils::setResourcePath(const char *pszResourcePath) strcpy(s_pszResourcePath, pszResourcePath); } -const char* CCFileUtils::fullPathFromRelativePath(const char *pszRelativePath, ccResolutionType *pResolutionType) +const char* CCFileUtils::fullPathFromRelativePath(const char *pszRelativePath) { _CheckPath(); diff --git a/cocos2dx/textures/CCTexture2D.cpp b/cocos2dx/textures/CCTexture2D.cpp index 4916e0bb57..94d49e1e18 100644 --- a/cocos2dx/textures/CCTexture2D.cpp +++ b/cocos2dx/textures/CCTexture2D.cpp @@ -235,7 +235,6 @@ bool CCTexture2D::initWithData(const void *data, CCTexture2DPixelFormat pixelFor m_bHasPremultipliedAlpha = false; m_bHasMipmaps = false; - m_eResolutionType = kCCResolutionUnknown; setShaderProgram(CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTexture)); return true; @@ -250,11 +249,6 @@ const char* CCTexture2D::description(void) // implementation CCTexture2D (Image) bool CCTexture2D::initWithImage(CCImage *uiImage) -{ - return initWithImage(uiImage, kCCResolutionUnknown); -} - -bool CCTexture2D::initWithImage(CCImage * uiImage, ccResolutionType resolution) { if (uiImage == NULL) { @@ -267,7 +261,7 @@ bool CCTexture2D::initWithImage(CCImage * uiImage, ccResolutionType resolution) unsigned int imageHeight = uiImage->getHeight(); CCConfiguration *conf = CCConfiguration::sharedConfiguration(); - + unsigned maxTextureSize = conf->getMaxTextureSize(); if (imageWidth > maxTextureSize || imageHeight > maxTextureSize) { @@ -275,12 +269,11 @@ bool CCTexture2D::initWithImage(CCImage * uiImage, ccResolutionType resolution) this->release(); return NULL; } - - m_eResolutionType = resolution; - + // always load premultiplied images return initPremultipliedATextureWithImage(uiImage, imageWidth, imageHeight); } + bool CCTexture2D::initPremultipliedATextureWithImage(CCImage *image, unsigned int width, unsigned int height) { unsigned char* tempData = image->getData(); diff --git a/cocos2dx/textures/CCTexture2D.h b/cocos2dx/textures/CCTexture2D.h index 1c3810eb8c..9c8370b88f 100644 --- a/cocos2dx/textures/CCTexture2D.h +++ b/cocos2dx/textures/CCTexture2D.h @@ -134,8 +134,6 @@ public: bool initWithImage(CCImage * uiImage); - bool initWithImage(CCImage *uiImage, ccResolutionType resolution); - /** Initializes a texture from a string with dimensions, alignment, font name and font size */ bool initWithString(const char *text, const CCSize& dimensions, CCTextAlignment hAlignment, CCVerticalTextAlignment vAlignment, const char *fontName, float fontSize); /** Initializes a texture from a string with font name and font size */ @@ -273,17 +271,6 @@ private: /** shader program used by drawAtPoint and drawInRect */ CC_PROPERTY(CCGLProgram*, m_pShaderProgram, ShaderProgram); - - - /** Returns the resolution type of the texture. - Is it a RetinaDisplay texture, an iPad texture or an standard texture ? - Only valid on iOS. Not valid on OS X. - - Should be a readonly property. It is readwrite as a hack. - - @since v1.1 - */ - CC_SYNTHESIZE(ccResolutionType, m_eResolutionType, ResolutionType); }; // end of textures group diff --git a/cocos2dx/textures/CCTextureCache.cpp b/cocos2dx/textures/CCTextureCache.cpp index 9945dab479..99ad1b20ef 100644 --- a/cocos2dx/textures/CCTextureCache.cpp +++ b/cocos2dx/textures/CCTextureCache.cpp @@ -257,7 +257,6 @@ void CCTextureCache::addImageAsync(const char *path, CCObject *target, SEL_CallF // optimization std::string pathKey = path; - CCFileUtils::sharedFileUtils()->removeSuffixFromFile(pathKey); pathKey = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(pathKey.c_str()); texture = (CCTexture2D*)m_pTextures->objectForKey(pathKey.c_str()); @@ -400,8 +399,6 @@ CCTexture2D * CCTextureCache::addImage(const char * path) // remove possible -HD suffix to prevent caching the same image twice (issue #1040) std::string pathKey = path; - ccResolutionType resolution = kCCResolutionUnknown; - CCFileUtils::sharedFileUtils()->removeSuffixFromFile(pathKey); pathKey = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(pathKey.c_str()); texture = (CCTexture2D*)m_pTextures->objectForKey(pathKey.c_str()); @@ -446,7 +443,7 @@ CCTexture2D * CCTextureCache::addImage(const char * path) texture = new CCTexture2D(); if( texture && - texture->initWithImage(&image, resolution) ) + texture->initWithImage(&image) ) { #if CC_ENABLE_CACHE_TEXTURE_DATA // cache the texture file name @@ -477,7 +474,6 @@ CCTexture2D* CCTextureCache::addPVRTCImage(const char* path, int bpp, bool hasAl CCTexture2D * texture; std::string temp(path); - CCFileUtils::sharedFileUtils()->removeSuffixFromFile(temp); if ( (texture = (CCTexture2D*)m_pTextures->objectForKey(temp.c_str())) ) { @@ -514,8 +510,6 @@ CCTexture2D * CCTextureCache::addPVRImage(const char* path) CCTexture2D* texture = NULL; std::string key(path); - // remove possible -HD suffix to prevent caching the same image twice (issue #1040) - CCFileUtils::sharedFileUtils()->removeSuffixFromFile(key); if( (texture = (CCTexture2D*)m_pTextures->objectForKey(key.c_str())) ) { @@ -568,7 +562,7 @@ CCTexture2D* CCTextureCache::addUIImage(CCImage *image, const char *key) // prevents overloading the autorelease pool texture = new CCTexture2D(); - texture->initWithImage(image, kCCResolutionUnknown); + texture->initWithImage(image); if(key && texture) { @@ -890,8 +884,7 @@ void VolatileTexture::reloadAllTextures() break; case kImage: { - vt->texture->initWithImage(vt->uiImage, - kCCResolutionUnknown); + vt->texture->initWithImage(vt->uiImage); } break; default: diff --git a/samples/HelloCpp/Classes/AppDelegate.cpp b/samples/HelloCpp/Classes/AppDelegate.cpp index 70b77e1461..5cae0b6b44 100644 --- a/samples/HelloCpp/Classes/AppDelegate.cpp +++ b/samples/HelloCpp/Classes/AppDelegate.cpp @@ -16,9 +16,41 @@ bool AppDelegate::applicationDidFinishLaunching() { CCDirector *pDirector = CCDirector::sharedDirector(); pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView()); - - // enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices. - // pDirector->enableRetinaDisplay(true); + + if (isIpad()) + { + // ipad + + CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd"); + + // don't enable retina because we don't have ipad hd resource + CCEGLView::sharedOpenGLView().setDesignResolutionSize(960, 640, kCCResolutionNoBorder); + } + else + { + // iphone or other platforms + + if (pDirector->enableRetinaDisplay(true)) + { + // iphone hd + CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd"); + } + else + { + if (isIos()) + { + // iphone + CCFileUtils::sharedFileUtils()->setResourceDirectory("iphone"); + } + else + { + // android or other platform, use hd resource + + CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd"); + CCEGLView::sharedOpenGLView().setDesignResolutionSize(960, 640, kCCResolutionNoBorder); + } + } + } // turn on display FPS pDirector->setDisplayStats(true); diff --git a/samples/HelloCpp/Classes/HelloWorldScene.cpp b/samples/HelloCpp/Classes/HelloWorldScene.cpp index 890c3b0af1..df74a4bba0 100644 --- a/samples/HelloCpp/Classes/HelloWorldScene.cpp +++ b/samples/HelloCpp/Classes/HelloWorldScene.cpp @@ -26,6 +26,9 @@ bool HelloWorld::init() { return false; } + + CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); + CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); ///////////////////////////// // 2. add a menu item with "X" image, which is clicked to quit the program @@ -36,12 +39,19 @@ bool HelloWorld::init() "CloseNormal.png", "CloseSelected.png", this, - menu_selector(HelloWorld::menuCloseCallback) ); - pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) ); + menu_selector(HelloWorld::menuCloseCallback)); + if (CCApplication::sharedApplication().isIos() && !CCApplication::sharedApplication().isIpad()) + { + pCloseItem->setPosition(ccp(visibleSize.width - 20 + origin.x, 20 + origin.y)); + } + else + { + pCloseItem->setPosition(ccp(visibleSize.width - 40 + origin.x, 40 + origin.y)); + } // create menu, it's an autorelease object CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); - pMenu->setPosition( CCPointZero ); + pMenu->setPosition(CCPointZero); this->addChild(pMenu, 1); ///////////////////////////// @@ -50,11 +60,9 @@ bool HelloWorld::init() // add a label shows "Hello World" // create and initialize a label CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24); - // ask director the window size - CCSize size = CCDirector::sharedDirector()->getWinSize(); // position the label on the center of the screen - pLabel->setPosition( ccp(size.width / 2, size.height - 50) ); + pLabel->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height - 50 + origin.y)); // add the label as a child to this layer this->addChild(pLabel, 1); @@ -63,7 +71,7 @@ bool HelloWorld::init() CCSprite* pSprite = CCSprite::create("HelloWorld.png"); // position the sprite on the center of the screen - pSprite->setPosition( ccp(size.width/2, size.height/2) ); + pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); // add the sprite as a child to this layer this->addChild(pSprite, 0); diff --git a/samples/HelloCpp/Resources/HelloWorld.png.REMOVED.git-id b/samples/HelloCpp/Resources/iphone/HelloWorld.png.REMOVED.git-id similarity index 100% rename from samples/HelloCpp/Resources/HelloWorld.png.REMOVED.git-id rename to samples/HelloCpp/Resources/iphone/HelloWorld.png.REMOVED.git-id diff --git a/samples/HelloCpp/Resources/iphonehd/HelloWorld.png.REMOVED.git-id b/samples/HelloCpp/Resources/iphonehd/HelloWorld.png.REMOVED.git-id new file mode 100644 index 0000000000..d81514b887 --- /dev/null +++ b/samples/HelloCpp/Resources/iphonehd/HelloWorld.png.REMOVED.git-id @@ -0,0 +1 @@ +e35126a63c774b4967e6b0e31082d7a32f58ed02 \ No newline at end of file diff --git a/samples/HelloCpp/proj.android/jni/hellocpp/main.cpp b/samples/HelloCpp/proj.android/jni/hellocpp/main.cpp index 2015b76354..3af2b89f1f 100644 --- a/samples/HelloCpp/proj.android/jni/hellocpp/main.cpp +++ b/samples/HelloCpp/proj.android/jni/hellocpp/main.cpp @@ -25,9 +25,7 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi if (!CCDirector::sharedDirector()->getOpenGLView()) { CCEGLView *view = &CCEGLView::sharedOpenGLView(); - view->setFrameSize(w, h); - // set the design resolution screen size, if you want to use Design Resoulution scaled to current screen, please uncomment next line. - // view->setDesignResolutionSize(480, 320); + view->setSize(w, h); AppDelegate *pAppDelegate = new AppDelegate(); CCApplication::sharedApplication().run(); diff --git a/samples/HelloCpp/proj.ios/HelloCpp.xcodeproj/project.pbxproj b/samples/HelloCpp/proj.ios/HelloCpp.xcodeproj/project.pbxproj index 87b2663396..afc3f37ae1 100644 --- a/samples/HelloCpp/proj.ios/HelloCpp.xcodeproj/project.pbxproj +++ b/samples/HelloCpp/proj.ios/HelloCpp.xcodeproj/project.pbxproj @@ -7,17 +7,13 @@ objects = { /* Begin PBXBuildFile section */ + 15003FA315D2601D00B6775A /* iphone in Resources */ = {isa = PBXBuildFile; fileRef = 15003FA215D2601D00B6775A /* iphone */; }; + 15003FA515D2602400B6775A /* iphonehd in Resources */ = {isa = PBXBuildFile; fileRef = 15003FA415D2602400B6775A /* iphonehd */; }; 154269EB15B5669E00712A7F /* libcocos2dx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 154269D015B5644500712A7F /* libcocos2dx.a */; }; - 15DD6D7A156DD120003E7567 /* fps_images.png in Resources */ = {isa = PBXBuildFile; fileRef = 15DD6D78156DD120003E7567 /* fps_images.png */; }; - 15F990B5159C0DAF00848A44 /* fps_images-hd.png in Resources */ = {isa = PBXBuildFile; fileRef = 15F990B3159C0DAF00848A44 /* fps_images-hd.png */; }; - 15F990B6159C0DAF00848A44 /* fps_images-ipadhd.png in Resources */ = {isa = PBXBuildFile; fileRef = 15F990B4159C0DAF00848A44 /* fps_images-ipadhd.png */; }; 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; 782F4619153FEDF0009FC2E5 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 782F4617153FEDF0009FC2E5 /* Default.png */; }; - 784521CE14EBA449009D533B /* CloseNormal.png in Resources */ = {isa = PBXBuildFile; fileRef = 784521C514EBA449009D533B /* CloseNormal.png */; }; - 784521CF14EBA449009D533B /* CloseSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = 784521C614EBA449009D533B /* CloseSelected.png */; }; - 784521D214EBA449009D533B /* HelloWorld.png in Resources */ = {isa = PBXBuildFile; fileRef = 784521CA14EBA449009D533B /* HelloWorld.png */; }; BF1373EF128A898400D9F789 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF492D4B1289302400A09262 /* OpenGLES.framework */; }; BF1373F0128A899500D9F789 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = BF492C21128924A800A09262 /* libxml2.dylib */; }; BF1373F1128A899E00D9F789 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = BF492B6912891AC600A09262 /* libz.dylib */; }; @@ -51,10 +47,9 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 15003FA215D2601D00B6775A /* iphone */ = {isa = PBXFileReference; lastKnownFileType = folder; path = iphone; sourceTree = ""; }; + 15003FA415D2602400B6775A /* iphonehd */ = {isa = PBXFileReference; lastKnownFileType = folder; path = iphonehd; sourceTree = ""; }; 154269C815B5644500712A7F /* cocos2dx.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = cocos2dx.xcodeproj; path = ../../../cocos2dx/proj.ios/cocos2dx.xcodeproj; sourceTree = ""; }; - 15DD6D78156DD120003E7567 /* fps_images.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = fps_images.png; sourceTree = ""; }; - 15F990B3159C0DAF00848A44 /* fps_images-hd.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fps_images-hd.png"; sourceTree = ""; }; - 15F990B4159C0DAF00848A44 /* fps_images-ipadhd.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fps_images-ipadhd.png"; sourceTree = ""; }; 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1D6058910D05DD3D006BFB54 /* HelloCpp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloCpp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; @@ -63,9 +58,6 @@ 781C33B31547F06B00633F88 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 781C33B51547F06B00633F88 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 782F4617153FEDF0009FC2E5 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = SOURCE_ROOT; }; - 784521C514EBA449009D533B /* CloseNormal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = CloseNormal.png; sourceTree = ""; }; - 784521C614EBA449009D533B /* CloseSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = CloseSelected.png; sourceTree = ""; }; - 784521CA14EBA449009D533B /* HelloWorld.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = HelloWorld.png; sourceTree = ""; }; BF137426128A8E4600D9F789 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; BF23D4E3143315EB00657E08 /* AppDelegate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AppDelegate.cpp; sourceTree = ""; }; BF23D4E4143315EB00657E08 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -153,17 +145,13 @@ 784521C214EBA449009D533B /* Resources */ = { isa = PBXGroup; children = ( + 15003FA415D2602400B6775A /* iphonehd */, + 15003FA215D2601D00B6775A /* iphone */, D4EF94ED15BD319D00D803EB /* Icon-144.png */, D4EF94EB15BD319B00D803EB /* Icon-72.png */, D4EF94E915BD319500D803EB /* Icon-114.png */, D4EF94E715BD319200D803EB /* Icon-57.png */, - 15F990B3159C0DAF00848A44 /* fps_images-hd.png */, - 15F990B4159C0DAF00848A44 /* fps_images-ipadhd.png */, - 15DD6D78156DD120003E7567 /* fps_images.png */, 782F4617153FEDF0009FC2E5 /* Default.png */, - 784521C514EBA449009D533B /* CloseNormal.png */, - 784521C614EBA449009D533B /* CloseSelected.png */, - 784521CA14EBA449009D533B /* HelloWorld.png */, ); name = Resources; path = ../Resources; @@ -259,17 +247,13 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 784521CE14EBA449009D533B /* CloseNormal.png in Resources */, - 784521CF14EBA449009D533B /* CloseSelected.png in Resources */, - 784521D214EBA449009D533B /* HelloWorld.png in Resources */, 782F4619153FEDF0009FC2E5 /* Default.png in Resources */, - 15DD6D7A156DD120003E7567 /* fps_images.png in Resources */, - 15F990B5159C0DAF00848A44 /* fps_images-hd.png in Resources */, - 15F990B6159C0DAF00848A44 /* fps_images-ipadhd.png in Resources */, D4EF94E815BD319200D803EB /* Icon-57.png in Resources */, D4EF94EA15BD319500D803EB /* Icon-114.png in Resources */, D4EF94EC15BD319B00D803EB /* Icon-72.png in Resources */, D4EF94EE15BD319D00D803EB /* Icon-144.png in Resources */, + 15003FA315D2601D00B6775A /* iphone in Resources */, + 15003FA515D2602400B6775A /* iphonehd in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/samples/HelloLua/proj.android/jni/hellolua/main.cpp b/samples/HelloLua/proj.android/jni/hellolua/main.cpp index 7c8321c204..033ec82421 100644 --- a/samples/HelloLua/proj.android/jni/hellolua/main.cpp +++ b/samples/HelloLua/proj.android/jni/hellolua/main.cpp @@ -24,9 +24,7 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi if (!CCDirector::sharedDirector()->getOpenGLView()) { CCEGLView *view = &CCEGLView::sharedOpenGLView(); - view->setFrameSize(w, h); - // set the design resolution screen size, if you want to use Design Resoulution scaled to current screen, please uncomment next line. - view->setDesignResolutionSize(480, 320); + view->setSize(w, h); AppDelegate *pAppDelegate = new AppDelegate(); CCApplication::sharedApplication().run(); diff --git a/samples/TestCpp/proj.android/jni/testcpp/main.cpp b/samples/TestCpp/proj.android/jni/testcpp/main.cpp index b8f1da885a..21b56b9156 100644 --- a/samples/TestCpp/proj.android/jni/testcpp/main.cpp +++ b/samples/TestCpp/proj.android/jni/testcpp/main.cpp @@ -25,9 +25,7 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi if (!CCDirector::sharedDirector()->getOpenGLView()) { CCEGLView *view = &CCEGLView::sharedOpenGLView(); - view->setFrameSize(w, h); - // set the design resolution screen size, if you want to use Design Resoulution scaled to current screen, please uncomment next line. - // view->setDesignResolutionSize(480, 320); + view->setSize(w, h); AppDelegate *pAppDelegate = new AppDelegate(); CCApplication::sharedApplication().run(); diff --git a/samples/TestJavascript/proj.android/jni/testjavascript/main.cpp b/samples/TestJavascript/proj.android/jni/testjavascript/main.cpp index 42c1458559..b326bf94e1 100644 --- a/samples/TestJavascript/proj.android/jni/testjavascript/main.cpp +++ b/samples/TestJavascript/proj.android/jni/testjavascript/main.cpp @@ -25,9 +25,7 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi if (!CCDirector::sharedDirector()->getOpenGLView()) { CCEGLView *view = &CCEGLView::sharedOpenGLView(); - view->setFrameSize(w, h); - // set the design resolution screen size, if you want to use Design Resoulution scaled to current screen, please uncomment next line. - // view->setDesignResolutionSize(480, 320); + view->setSize(w, h); AppDelegate *pAppDelegate = new AppDelegate(); CCApplication::sharedApplication().run();