Simplify Widget ContentSize cascade change algorithm

This commit is contained in:
andyque 2014-07-24 11:52:42 +08:00
parent 5ac75dadcc
commit 7353f8685a
6 changed files with 84 additions and 7 deletions

View File

@ -319,7 +319,6 @@ void Widget::setSizePercent(const Vec2 &percent)
this->setContentSize(cSize);
}
_customSize = cSize;
onSizeChanged();
}
void Widget::updateSizeAndPosition()
@ -373,7 +372,8 @@ void Widget::updateSizeAndPosition(const cocos2d::Size &parentSize)
default:
break;
}
onSizeChanged();
//update position & position percent
Vec2 absPos = getPosition();
switch (_positionType)
{
@ -426,7 +426,6 @@ void Widget::ignoreContentAdaptWithSize(bool ignore)
{
this->setContentSize(_customSize);
}
onSizeChanged();
}
bool Widget::isIgnoreContentAdaptWithSize() const
@ -486,7 +485,6 @@ void Widget::updateContentSizeWithTextureSize(const cocos2d::Size &size)
{
this->setContentSize(_customSize);
}
onSizeChanged();
}
void Widget::setTouchEnabled(bool enable)
@ -1036,7 +1034,6 @@ void Widget::copyProperties(Widget *widget)
{
setLayoutParameter(iter->second->clone());
}
onSizeChanged();
}
void Widget::setFlippedX(bool flippedX)

View File

@ -87,7 +87,7 @@ g_guisTests[] =
UISceneManager* sceneManager = UISceneManager::sharedUISceneManager();
sceneManager->setCurrentUISceneId(kUIImageViewTest);
sceneManager->setMinUISceneId(kUIImageViewTest);
sceneManager->setMaxUISceneId(kUIImageViewTest_Scale9);
sceneManager->setMaxUISceneId(kUIImageViewTest_ContentSize);
Scene* scene = sceneManager->currentUIScene();
Director::getInstance()->replaceScene(scene);
}

View File

@ -61,3 +61,71 @@ bool UIImageViewTest_Scale9::init()
}
return false;
}
// UIImageViewTest_ContentSize
bool UIImageViewTest_ContentSize::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
Text* alert = Text::create("ImageView ContentSize Change", "fonts/Marker Felt.ttf", 26);
alert->setColor(Color3B(159, 168, 176));
alert->setPosition(Vec2(widgetSize.width / 2.0f,
widgetSize.height / 2.0f - alert->getContentSize().height * 2.125f));
_uiLayer->addChild(alert);
Text *status = Text::create("child ImageView position percent", "fonts/Marker Felt.ttf", 16);
status->setColor(Color3B::RED);
status->setPosition(Vec2(widgetSize.width/2, widgetSize.height/2 + 80));
_uiLayer->addChild(status,20);
// Create the imageview
ImageView* imageView = ImageView::create("cocosui/buttonHighlighted.png");
imageView->setScale9Enabled(true);
imageView->setContentSize(Size(200, 80));
imageView->setPosition(Vec2(widgetSize.width / 2.0f,
widgetSize.height / 2.0f ));
ImageView* imageViewChild = ImageView::create("cocosui/buttonHighlighted.png");
imageViewChild->setScale9Enabled(true);
imageViewChild->setSizeType(Widget::SizeType::PERCENT);
imageViewChild->setPositionType(Widget::PositionType::PERCENT);
imageViewChild->setSizePercent(Vec2::ANCHOR_MIDDLE);
imageViewChild->setPositionPercent(Vec2::ANCHOR_MIDDLE);
imageViewChild->setPosition(Vec2(widgetSize.width / 2.0f,
widgetSize.height / 2.0f));
ImageView* imageViewChild2 = ImageView::create("cocosui/buttonHighlighted.png");
imageViewChild2->setScale9Enabled(true);
imageViewChild2->setSizeType(Widget::SizeType::PERCENT);
imageViewChild2->setPositionType(Widget::PositionType::PERCENT);
imageViewChild2->setSizePercent(Vec2::ANCHOR_MIDDLE);
imageViewChild2->setPositionPercent(Vec2::ANCHOR_MIDDLE);
imageViewChild->addChild(imageViewChild2);
imageView->addChild(imageViewChild);
imageView->setTouchEnabled(true);
imageView->addTouchEventListener([=](Ref* sender, Widget::TouchEventType type){
if (type == Widget::TouchEventType::ENDED) {
float width = CCRANDOM_0_1() * 200 + 50;
float height = CCRANDOM_0_1() * 80 + 30;
imageView->setContentSize(Size(width, height));
imageViewChild->setPositionPercent(Vec2(CCRANDOM_0_1(), CCRANDOM_0_1()));
status->setString(StringUtils::format("child ImageView position percent: %f, %f",
imageViewChild->getPositionPercent().x, imageViewChild->getPositionPercent().y));
}
});
_uiLayer->addChild(imageView);
return true;
}
return false;
}

View File

@ -45,4 +45,13 @@ protected:
UI_SCENE_CREATE_FUNC(UIImageViewTest_Scale9)
};
class UIImageViewTest_ContentSize : public UIScene
{
public:
bool init();
protected:
UI_SCENE_CREATE_FUNC(UIImageViewTest_ContentSize)
};
#endif /* defined(__TestCpp__UIImageViewTest__) */

View File

@ -58,6 +58,7 @@ static const char* s_testArray[] =
*/
"UIImageViewTest",
"UIImageViewTest_Scale9",
"UIImageViewTest_ContentSize",
"UILoadingBarTest_Left",
"UILoadingBarTest_Right",
"UILoadingBarTest_Left_Scale9",
@ -205,7 +206,8 @@ Scene *UISceneManager::currentUIScene()
case kUIImageViewTest_Scale9:
return UIImageViewTest_Scale9::sceneWithTitle(s_testArray[_currentUISceneId]);
case kUIImageViewTest_ContentSize:
return UIImageViewTest_ContentSize::sceneWithTitle(s_testArray[_currentUISceneId]);
case kUILoadingBarTest_Left:
return UILoadingBarTest_Left::sceneWithTitle(s_testArray[_currentUISceneId]);

View File

@ -48,6 +48,7 @@ enum
*/
kUIImageViewTest,
kUIImageViewTest_Scale9,
kUIImageViewTest_ContentSize,
kUILoadingBarTest_Left,
kUILoadingBarTest_Right,
kUILoadingBarTest_Left_Scale9,