diff --git a/cocos2dx/CCDirector.cpp b/cocos2dx/CCDirector.cpp index 676fe0d6ed..abd8804c06 100644 --- a/cocos2dx/CCDirector.cpp +++ b/cocos2dx/CCDirector.cpp @@ -336,7 +336,7 @@ void CCDirector::setProjection(ccDirectorProjection kProjection) if (m_pobOpenGLView) { - m_pobOpenGLView->setViewPortInPoints(0, 0, sizePoint.width, sizePoint.height); + m_pobOpenGLView->setViewPortInPoints(0, 0, size.width, size.height); } switch (kProjection) @@ -346,7 +346,7 @@ void CCDirector::setProjection(ccDirectorProjection kProjection) kmGLMatrixMode(KM_GL_PROJECTION); kmGLLoadIdentity(); kmMat4 orthoMatrix; - kmMat4OrthographicProjection(&orthoMatrix, 0, size.width / CC_CONTENT_SCALE_FACTOR(), 0, size.height / CC_CONTENT_SCALE_FACTOR(), -1024, 1024 ); + kmMat4OrthographicProjection(&orthoMatrix, 0, size.width, 0, size.height, -1024, 1024 ); kmGLMultMatrix(&orthoMatrix); kmGLMatrixMode(KM_GL_MODELVIEW); kmGLLoadIdentity(); @@ -371,8 +371,8 @@ void CCDirector::setProjection(ccDirectorProjection kProjection) kmGLMatrixMode(KM_GL_MODELVIEW); kmGLLoadIdentity(); kmVec3 eye, center, up; - kmVec3Fill( &eye, sizePoint.width/2, sizePoint.height/2, zeye ); - kmVec3Fill( ¢er, sizePoint.width/2, sizePoint.height/2, 0.0f ); + kmVec3Fill( &eye, size.width/2, size.height/2, zeye ); + kmVec3Fill( ¢er, size.width/2, size.height/2, 0.0f ); kmVec3Fill( &up, 0.0f, 1.0f, 0.0f); kmMat4LookAt(&matrixLookup, &eye, ¢er, &up); kmGLMultMatrix(&matrixLookup); @@ -404,7 +404,7 @@ void CCDirector::purgeCachedData(void) float CCDirector::getZEye(void) { - return (m_obWinSizeInPixels.height / 1.1566f / CC_CONTENT_SCALE_FACTOR()); + return (m_obWinSizeInPixels.height / 1.1566f); } void CCDirector::setAlphaBlending(bool bOn) @@ -810,33 +810,6 @@ void CCDirector::updateContentScaleFactor() m_bIsContentScaleSupported = m_pobOpenGLView->setContentScaleFactor(m_fContentScaleFactor); } -bool CCDirector::enableRetinaDisplay(bool enabled) -{ - // Already enabled? - if (enabled && m_fContentScaleFactor == 2) - { - return true; - } - - // Already disabled? - if (!enabled && m_fContentScaleFactor == 1) - { - return false; - } - - if (! m_pobOpenGLView->enableRetina()) - { - return false; - } - - float newScale = (float)(enabled ? 2 : 1); - setContentScaleFactor(newScale); - - createStatsLabel(); - - return true; -} - float CCDirector::getContentScaleFactor(void) { return m_fContentScaleFactor; diff --git a/cocos2dx/CCDirector.h b/cocos2dx/CCDirector.h index a29ef4db6d..b1aef65d47 100644 --- a/cocos2dx/CCDirector.h +++ b/cocos2dx/CCDirector.h @@ -159,8 +159,6 @@ public: */ CCNode* getNotificationNode(); void setNotificationNode(CCNode *node); - - bool enableRetinaDisplay(bool bEnabelRetina); // window size diff --git a/cocos2dx/platform/CCEGLViewProtocol.cpp b/cocos2dx/platform/CCEGLViewProtocol.cpp index a4e6080377..63b2d3eb34 100644 --- a/cocos2dx/platform/CCEGLViewProtocol.cpp +++ b/cocos2dx/platform/CCEGLViewProtocol.cpp @@ -46,7 +46,6 @@ CCEGLViewProtocol::CCEGLViewProtocol() : m_pDelegate(NULL) , m_fScaleY(1.0f) , m_fScaleX(1.0f) -, m_bIsRetinaEnabled(false) , m_eResolutionPolicy(kResolutionUnKnown) { } @@ -58,7 +57,6 @@ CCEGLViewProtocol::~CCEGLViewProtocol() 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) @@ -97,11 +95,6 @@ void CCEGLViewProtocol::setDesignResolutionSize(float width, float height, Resol CCDirector::sharedDirector()->setGLDefaultValues(); } -bool CCEGLViewProtocol::enableRetina() -{ - return false; -} - const CCSize& CCEGLViewProtocol::getSize() const { return m_obDesignResolutionSize; @@ -193,18 +186,8 @@ void CCEGLViewProtocol::handleTouchesBegin(int num, int ids[], float xs[], float } CCTouch* pTouch = s_pTouches[nUnusedIndex] = new CCTouch(); - if (m_bIsRetinaEnabled) - { - // 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 - { - pTouch->setTouchInfo(nUnusedIndex, (x - m_obViewPortRect.origin.x) / m_fScaleX, + pTouch->setTouchInfo(nUnusedIndex, (x - m_obViewPortRect.origin.x) / m_fScaleX, (y - m_obViewPortRect.origin.y) / m_fScaleY); - } //CCLOG("x = %f y = %f", pTouch->getLocationInView().x, pTouch->getLocationInView().y); @@ -243,16 +226,8 @@ void CCEGLViewProtocol::handleTouchesMove(int num, int ids[], float xs[], float CCTouch* pTouch = s_pTouches[pIndex->getValue()]; if (pTouch) { - 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_fScaleX, - (y - m_obViewPortRect.origin.y) / m_fScaleY); - } + pTouch->setTouchInfo(pIndex->getValue(), (x - m_obViewPortRect.origin.x) / m_fScaleX, + (y - m_obViewPortRect.origin.y) / m_fScaleY); set.addObject(pTouch); } @@ -292,17 +267,8 @@ 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_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_fScaleX, - (y - m_obViewPortRect.origin.y) / m_fScaleY); - } + pTouch->setTouchInfo(pIndex->getValue(), (x - m_obViewPortRect.origin.x) / m_fScaleX, + (y - m_obViewPortRect.origin.y) / m_fScaleY); set.addObject(pTouch); @@ -358,9 +324,4 @@ float CCEGLViewProtocol::getScaleY() const return m_fScaleY; } -bool CCEGLViewProtocol::isRetinaEnabled() const -{ - return m_bIsRetinaEnabled; -} - NS_CC_END diff --git a/cocos2dx/platform/CCEGLViewProtocol.h b/cocos2dx/platform/CCEGLViewProtocol.h index aa03d423a6..a9704bb946 100644 --- a/cocos2dx/platform/CCEGLViewProtocol.h +++ b/cocos2dx/platform/CCEGLViewProtocol.h @@ -106,12 +106,6 @@ public: * Set Scissor rectangle with points. */ virtual void setScissorInPoints(float x , float y , float w , float h); - - /** - * Enable retina mode. - * You can't use it with setDesignResolutionSize - */ - virtual bool enableRetina(); /** Touch events are handled by default; if you want to customize your handlers, please override these functions: */ virtual void handleTouchesBegin(int num, int ids[], float xs[], float ys[]); @@ -133,11 +127,6 @@ public: * Get scale factor of the vertical direction. */ float getScaleY() const; - - /** - * Get retina mode status (on if true). - */ - bool isRetinaEnabled() const; private: void getSetOfTouchesEndOrCancel(CCSet& set, int num, int ids[], float xs[], float ys[]); @@ -156,7 +145,6 @@ protected: float m_fScaleX; float m_fScaleY; ResolutionPolicy m_eResolutionPolicy; - bool m_bIsRetinaEnabled; }; // end of platform group diff --git a/cocos2dx/platform/ios/CCEGLView.h b/cocos2dx/platform/ios/CCEGLView.h index de0251c3ac..cbba96ef1d 100644 --- a/cocos2dx/platform/ios/CCEGLView.h +++ b/cocos2dx/platform/ios/CCEGLView.h @@ -40,7 +40,6 @@ public: virtual bool isOpenGLReady(); virtual bool setContentScaleFactor(float contentScaleFactor); - virtual bool enableRetina(); // keep compatible virtual void end(); diff --git a/cocos2dx/platform/ios/CCEGLView.mm b/cocos2dx/platform/ios/CCEGLView.mm index 68fb7d15cc..7118c05872 100644 --- a/cocos2dx/platform/ios/CCEGLView.mm +++ b/cocos2dx/platform/ios/CCEGLView.mm @@ -49,34 +49,11 @@ bool CCEGLView::isOpenGLReady() bool CCEGLView::setContentScaleFactor(float contentScaleFactor) { assert(m_eResolutionPolicy == kResolutionUnKnown); // cannot enable retina mode - - if ([[EAGLView sharedEGLView] respondsToSelector:@selector(setContentScaleFactor:)]) - { - UIView * view = [EAGLView sharedEGLView]; - view.contentScaleFactor = contentScaleFactor; - [view setNeedsLayout]; + + m_fScaleX = m_fScaleY = contentScaleFactor; + [[EAGLView sharedEGLView] setNeedsLayout]; - m_fScaleX = m_fScaleY = contentScaleFactor; - m_bIsRetinaEnabled = true; - - return true; - } - else - { - return false; - } -} - -bool CCEGLView::enableRetina() -{ - bool ret = true; - - // can set content scale factor? - ret &= [[EAGLView sharedEGLView] respondsToSelector:@selector(setContentScaleFactor:)]; - // SD device? - ret &= ([[UIScreen mainScreen] scale] != 1.0f); - - return ret; + return true; } void CCEGLView::end() diff --git a/cocos2dx/platform/ios/EAGLView.mm b/cocos2dx/platform/ios/EAGLView.mm index 2f9ba0a360..811b475e1c 100755 --- a/cocos2dx/platform/ios/EAGLView.mm +++ b/cocos2dx/platform/ios/EAGLView.mm @@ -151,6 +151,11 @@ static EAGLView *view = 0; originalRect_ = self.frame; self.keyboardShowNotification = nil; + + if ([view respondsToSelector:@selector(setContentScaleFactor:)]) + { + view.contentScaleFactor = [[UIScreen mainScreen] scale]; + } } return self; @@ -200,13 +205,13 @@ static EAGLView *view = 0; -(int) getWidth { CGSize bound = [self bounds].size; - return bound.width; + return bound.width * self.contentScaleFactor; } -(int) getHeight { CGSize bound = [self bounds].size; - return bound.height; + return bound.height * self.contentScaleFactor; } @@ -401,8 +406,8 @@ static EAGLView *view = 0; int i = 0; for (UITouch *touch in touches) { ids[i] = (int)touch; - xs[i] = [touch locationInView: [touch view]].x; - ys[i] = [touch locationInView: [touch view]].y; + xs[i] = [touch locationInView: [touch view]].x * view.contentScaleFactor;; + ys[i] = [touch locationInView: [touch view]].y * view.contentScaleFactor;; ++i; } cocos2d::CCEGLView::sharedOpenGLView()->handleTouchesBegin(i, ids, xs, ys); @@ -421,8 +426,8 @@ static EAGLView *view = 0; int i = 0; for (UITouch *touch in touches) { ids[i] = (int)touch; - xs[i] = [touch locationInView: [touch view]].x; - ys[i] = [touch locationInView: [touch view]].y; + xs[i] = [touch locationInView: [touch view]].x * view.contentScaleFactor;; + ys[i] = [touch locationInView: [touch view]].y * view.contentScaleFactor;; ++i; } cocos2d::CCEGLView::sharedOpenGLView()->handleTouchesMove(i, ids, xs, ys); @@ -442,8 +447,8 @@ static EAGLView *view = 0; int i = 0; for (UITouch *touch in touches) { ids[i] = (int)touch; - xs[i] = [touch locationInView: [touch view]].x; - ys[i] = [touch locationInView: [touch view]].y; + xs[i] = [touch locationInView: [touch view]].x * view.contentScaleFactor;; + ys[i] = [touch locationInView: [touch view]].y * view.contentScaleFactor;; ++i; } cocos2d::CCEGLView::sharedOpenGLView()->handleTouchesEnd(i, ids, xs, ys); @@ -463,8 +468,8 @@ static EAGLView *view = 0; int i = 0; for (UITouch *touch in touches) { ids[i] = (int)touch; - xs[i] = [touch locationInView: [touch view]].x; - ys[i] = [touch locationInView: [touch view]].y; + xs[i] = [touch locationInView: [touch view]].x * view.contentScaleFactor;; + ys[i] = [touch locationInView: [touch view]].y * view.contentScaleFactor;; ++i; } cocos2d::CCEGLView::sharedOpenGLView()->handleTouchesCancel(i, ids, xs, ys); @@ -806,21 +811,18 @@ static EAGLView *view = 0; notiInfo.end.size.height -= offestY; } - if (!cocos2d::CCEGLView::sharedOpenGLView()->isRetinaEnabled()) - { - float scaleX = cocos2d::CCEGLView::sharedOpenGLView()->getScaleX(); - float scaleY = cocos2d::CCEGLView::sharedOpenGLView()->getScaleY(); + float scaleX = cocos2d::CCEGLView::sharedOpenGLView()->getScaleX(); + float scaleY = cocos2d::CCEGLView::sharedOpenGLView()->getScaleY(); - notiInfo.begin.origin.x /= scaleX; - notiInfo.begin.origin.y /= scaleY; - notiInfo.begin.size.width /= scaleX; - notiInfo.begin.size.height /= scaleY; + notiInfo.begin.origin.x /= scaleX; + notiInfo.begin.origin.y /= scaleY; + notiInfo.begin.size.width /= scaleX; + notiInfo.begin.size.height /= scaleY; - notiInfo.end.origin.x /= scaleX; - notiInfo.end.origin.y /= scaleY; - notiInfo.end.size.width /= scaleX; - notiInfo.end.size.height /= scaleY; - } + notiInfo.end.origin.x /= scaleX; + notiInfo.end.origin.y /= scaleY; + notiInfo.end.size.width /= scaleX; + notiInfo.end.size.height /= scaleY; cocos2d::CCIMEDispatcher* dispatcher = cocos2d::CCIMEDispatcher::sharedDispatcher(); if (UIKeyboardWillShowNotification == type) @@ -860,10 +862,7 @@ static EAGLView *view = 0; if (dis < 0.0f) dis = 0.0f; - if (!cocos2d::CCEGLView::sharedOpenGLView()->isRetinaEnabled()) - { - dis *= cocos2d::CCEGLView::sharedOpenGLView()->getScaleY(); - } + dis *= cocos2d::CCEGLView::sharedOpenGLView()->getScaleY(); switch ([[UIApplication sharedApplication] statusBarOrientation]) { diff --git a/samples/HelloCpp/Classes/AppDelegate.cpp b/samples/HelloCpp/Classes/AppDelegate.cpp index 864ac4cb54..f721e604f7 100644 --- a/samples/HelloCpp/Classes/AppDelegate.cpp +++ b/samples/HelloCpp/Classes/AppDelegate.cpp @@ -16,40 +16,17 @@ bool AppDelegate::applicationDidFinishLaunching() { CCDirector *pDirector = CCDirector::sharedDirector(); pDirector->setOpenGLView(CCEGLView::sharedOpenGLView()); - - TargetPlatform target = getTargetPlatform(); - - if (target == kTargetIpad) - { - // ipad - - CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd"); - - // don't enable retina because we don't have ipad hd resource - CCEGLView::sharedOpenGLView()->setDesignResolutionSize(960, 640, kResolutionNoBorder); - } - else if (target == kTargetIphone) - { - // iphone - - // try to enable retina on device - if (true == CCDirector::sharedDirector()->enableRetinaDisplay(true)) - { - // iphone hd - CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd"); - } - else - { - CCFileUtils::sharedFileUtils()->setResourceDirectory("iphone"); - } - } - else - { - // android, windows, blackberry, linux or mac - // use 960*640 resources as design resolution size - CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd"); - CCEGLView::sharedOpenGLView()->setDesignResolutionSize(960, 640, kResolutionNoBorder); - } + //pDirector->setProjection(kCCDirectorProjection2D); + + if (pDirector->getWinSize().height > 320) + { + CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd"); + pDirector->setContentScaleFactor(2.0f); + } + else + CCFileUtils::sharedFileUtils()->setResourceDirectory("iphone"); + + CCEGLView::sharedOpenGLView()->setDesignResolutionSize(480, 320, kResolutionShowAll); // turn on display FPS pDirector->setDisplayStats(true); diff --git a/samples/HelloCpp/Classes/HelloWorldScene.cpp b/samples/HelloCpp/Classes/HelloWorldScene.cpp index e9935d46f7..28410ee365 100644 --- a/samples/HelloCpp/Classes/HelloWorldScene.cpp +++ b/samples/HelloCpp/Classes/HelloWorldScene.cpp @@ -27,7 +27,7 @@ bool HelloWorld::init() return false; } - CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); + CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); ///////////////////////////// @@ -40,9 +40,8 @@ bool HelloWorld::init() "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); - - pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 , - origin.y + pCloseItem->getContentSize().height/2)); + + pCloseItem->setPosition(ccp(winSize.width - 20 + origin.x, 20 + origin.y)); // create menu, it's an autorelease object CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); @@ -57,8 +56,7 @@ bool HelloWorld::init() CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24); // position the label on the center of the screen - pLabel->setPosition(ccp(origin.x + visibleSize.width/2, - origin.y + visibleSize.height - pLabel->getContentSize().height)); + pLabel->setPosition(ccp(winSize.width/2 + origin.x, winSize.height - 50 + origin.y)); // add the label as a child to this layer this->addChild(pLabel, 1); @@ -67,14 +65,11 @@ bool HelloWorld::init() CCSprite* pSprite = CCSprite::create("HelloWorld.png"); // position the sprite on the center of the screen - pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); + pSprite->setPosition(ccp(winSize.width/2 + origin.x, winSize.height/2 + origin.y)); // add the sprite as a child to this layer this->addChild(pSprite, 0); - // enable standard touch - this->setTouchEnabled(true); - return true; } @@ -86,11 +81,3 @@ void HelloWorld::menuCloseCallback(CCObject* pSender) exit(0); #endif } - -void HelloWorld::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) -{ - CCTouch* touch = (CCTouch*)(* pTouches->begin()); - CCPoint pos = touch->getLocation(); - - CCLog("touch, x = %f, y = %f", pos.x, pos.y); -}