Merge pull request #10209 from andyque/fixLoadingBarReloadTexture

Fix loading bar reload texture issue
This commit is contained in:
minggo 2015-01-27 13:50:38 +08:00
commit 880abfe814
8 changed files with 119 additions and 6 deletions

View File

@ -193,6 +193,8 @@ void LoadingBar::loadTexture(const std::string& texture,TextureResType texType)
barRendererScaleChangedWithSize(); barRendererScaleChangedWithSize();
updateContentSizeWithTextureSize(_barRendererTextureSize); updateContentSizeWithTextureSize(_barRendererTextureSize);
this->updateProgressBar();
_barRendererAdaptDirty = true; _barRendererAdaptDirty = true;
} }
@ -216,7 +218,7 @@ void LoadingBar::setScale9Enabled(bool enabled)
ignoreContentAdaptWithSize(_prevIgnoreSize); ignoreContentAdaptWithSize(_prevIgnoreSize);
} }
setCapInsets(_capInsets); setCapInsets(_capInsets);
setPercent(_percent); this->updateProgressBar();
_barRendererAdaptDirty = true; _barRendererAdaptDirty = true;
} }
@ -255,18 +257,24 @@ void LoadingBar::setPercent(float percent)
return; return;
} }
_percent = percent; _percent = percent;
if (_totalLength <= 0) if (_totalLength <= 0)
{ {
return; return;
} }
float res = _percent / 100.0f;
this->updateProgressBar();
}
void LoadingBar::updateProgressBar()
{
if (_scale9Enabled) if (_scale9Enabled)
{ {
setScale9Scale(); setScale9Scale();
} }
else else
{ {
float res = _percent / 100.0f;
Sprite* spriteRenderer = _barRenderer->getSprite(); Sprite* spriteRenderer = _barRenderer->getSprite();
Rect rect = spriteRenderer->getTextureRect(); Rect rect = spriteRenderer->getTextureRect();
rect.size.width = _barRendererTextureSize.width * res; rect.size.width = _barRendererTextureSize.width * res;
@ -334,7 +342,7 @@ void LoadingBar::barRendererScaleChangedWithSize()
_totalLength = _contentSize.width; _totalLength = _contentSize.width;
if (_scale9Enabled) if (_scale9Enabled)
{ {
setScale9Scale(); this->setScale9Scale();
_barRenderer->setScale(1.0f); _barRenderer->setScale(1.0f);
} }
else else

View File

@ -148,6 +148,7 @@ protected:
virtual void onSizeChanged() override; virtual void onSizeChanged() override;
void setScale9Scale(); void setScale9Scale();
void updateProgressBar();
void barRendererScaleChangedWithSize(); void barRendererScaleChangedWithSize();
virtual void adaptRenderers() override; virtual void adaptRenderers() override;

View File

@ -139,7 +139,7 @@ g_guisTests[] =
UISceneManager* sceneManager = UISceneManager::sharedUISceneManager(); UISceneManager* sceneManager = UISceneManager::sharedUISceneManager();
sceneManager->setCurrentUISceneId(kUILoadingBarTest_Left); sceneManager->setCurrentUISceneId(kUILoadingBarTest_Left);
sceneManager->setMinUISceneId(kUILoadingBarTest_Left); sceneManager->setMinUISceneId(kUILoadingBarTest_Left);
sceneManager->setMaxUISceneId(kUILoadingBarTest_Right_Scale9); sceneManager->setMaxUISceneId(kUILoadingBarReloadTexture);
Scene* scene = sceneManager->currentUIScene(); Scene* scene = sceneManager->currentUIScene();
Director::getInstance()->replaceScene(scene); Director::getInstance()->replaceScene(scene);
} }

View File

@ -397,3 +397,89 @@ bool UILoadingBarTest_Scale9_State_Change::init()
} }
return false; return false;
} }
// UILoadingBarReloadTexture
UILoadingBarReloadTexture::UILoadingBarReloadTexture()
: _count(0)
{
}
UILoadingBarReloadTexture::~UILoadingBarReloadTexture()
{
}
bool UILoadingBarReloadTexture::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add the alert
Text *alert = Text::create("Click button to Toggle Scale9 and switch Texture.", "fonts/Marker Felt.ttf", 20);
alert->setColor(Color3B(159, 168, 176));
alert->setPosition(Vec2(widgetSize.width / 2.0f,
widgetSize.height / 2.0f - alert->getContentSize().height * 2.7f));
_uiLayer->addChild(alert);
LoadingBar* loadingBar = LoadingBar::create("cocosui/slider_bar_active_9patch.png");
loadingBar->setTag(0);
loadingBar->ignoreContentAdaptWithSize(false);
// loadingBar->setScale9Enabled(true);
loadingBar->setCapInsets(Rect(0, 0, 0, 0));
loadingBar->setContentSize(Size(300, 13));
loadingBar->setName("texture0");
loadingBar->setDirection(LoadingBar::Direction::RIGHT);
loadingBar->setPercent(70);
loadingBar->setPosition(Vec2(widgetSize.width / 2.0f,
widgetSize.height / 2.0f + loadingBar->getContentSize().height / 4.0f));
_uiLayer->addChild(loadingBar);
auto buttonScale9 = Button::create("cocosui/animationbuttonnormal.png",
"cocosui/animationbuttonpressed.png");
buttonScale9->setTitleText("ToggleScale9");
buttonScale9->addClickEventListener([=](Ref*){
loadingBar->setScale9Enabled(!loadingBar->isScale9Enabled());
});
buttonScale9->setPosition(loadingBar->getPosition() + Vec2(-50,50));
_uiLayer->addChild(buttonScale9);
auto buttonChangeTexture = Button::create("cocosui/animationbuttonnormal.png",
"cocosui/animationbuttonpressed.png");
buttonChangeTexture->setTitleText("ChangeTexture");
buttonChangeTexture->addClickEventListener([=](Ref*){
auto name = loadingBar->getName();
if (name == "texture0")
{
loadingBar->loadTexture("cocosui/slider_bar_active_9patch2.png");
loadingBar->setName("texture1");
}
else
{
loadingBar->loadTexture("cocosui/slider_bar_active_9patch.png");
loadingBar->setName("texture0");
}
});
buttonChangeTexture->setPosition(loadingBar->getPosition() + Vec2(50,50));
_uiLayer->addChild(buttonChangeTexture);
this->scheduleUpdate();
return true;
}
return false;
}
void UILoadingBarReloadTexture::update(float delta)
{
_count++;
if (_count > 100)
{
_count = 0;
}
LoadingBar* loadingBar = static_cast<LoadingBar*>(_uiLayer->getChildByTag(0));
loadingBar->setPercent(_count);
}

View File

@ -107,4 +107,18 @@ protected:
int _count; int _count;
}; };
class UILoadingBarReloadTexture : public UIScene
{
public:
UILoadingBarReloadTexture();
~UILoadingBarReloadTexture();
void update(float dt);
bool init();
protected:
UI_SCENE_CREATE_FUNC(UILoadingBarReloadTexture);
int _count;
};
#endif /* defined(__TestCpp__UILoadingBarTest__) */ #endif /* defined(__TestCpp__UILoadingBarTest__) */

View File

@ -71,6 +71,7 @@ static const char* s_testArray[] =
"UILoadingBarTest_Scale9_State_Change", "UILoadingBarTest_Scale9_State_Change",
"UILoadingBarTest_Left_Scale9", "UILoadingBarTest_Left_Scale9",
"UILoadingBarTest_Right_Scale9", "UILoadingBarTest_Right_Scale9",
"UILoadingBarReloadTexture",
"UITextAtlasTest", "UITextAtlasTest",
"UITextTest", "UITextTest",
@ -284,6 +285,8 @@ Scene *UISceneManager::currentUIScene()
case kUILoadingBarTest_Right_Scale9: case kUILoadingBarTest_Right_Scale9:
return UILoadingBarTest_Right_Scale9::sceneWithTitle(s_testArray[_currentUISceneId]); return UILoadingBarTest_Right_Scale9::sceneWithTitle(s_testArray[_currentUISceneId]);
case kUILoadingBarReloadTexture:
return UILoadingBarReloadTexture::sceneWithTitle(s_testArray[_currentUISceneId]);
case kUITextAtlasTest: case kUITextAtlasTest:
return UITextAtlasTest::sceneWithTitle(s_testArray[_currentUISceneId]); return UITextAtlasTest::sceneWithTitle(s_testArray[_currentUISceneId]);

View File

@ -66,6 +66,7 @@ enum
kUILoadingBarTest_Scale9_State_Change, kUILoadingBarTest_Scale9_State_Change,
kUILoadingBarTest_Left_Scale9, kUILoadingBarTest_Left_Scale9,
kUILoadingBarTest_Right_Scale9, kUILoadingBarTest_Right_Scale9,
kUILoadingBarReloadTexture,
kUITextAtlasTest, kUITextAtlasTest,
kUITextTest, kUITextTest,
kUITextTest_LineWrap, kUITextTest_LineWrap,

@ -1 +1 @@
Subproject commit 615f52a6c5fc1f60c6f01832d110c78a65be3a11 Subproject commit ce5606d4e520d2671a678b0ba3d5a0b84fdb5ab9