axmol/tests/cpp-tests/Classes/UITest/CocoStudioGUITest/UIButtonTest/UIButtonTest.cpp

1144 lines
42 KiB
C++

/****************************************************************************
Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
https://axis-project.github.io/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#include "UIButtonTest.h"
USING_NS_CC;
using namespace cocos2d::ui;
UIButtonTests::UIButtonTests()
{
ADD_TEST_CASE(UIButtonTest);
ADD_TEST_CASE(UIButtonTest_Scale9);
ADD_TEST_CASE(UIButtonTest_Scale9_State_Change);
ADD_TEST_CASE(UIButtonTest_PressedAction);
ADD_TEST_CASE(UIButtonTest_Title);
ADD_TEST_CASE(UIButtonTestRemoveSelf);
ADD_TEST_CASE(UIButtonTestSwitchScale9);
ADD_TEST_CASE(UIButtonTestZoomScale);
ADD_TEST_CASE(UIButtonTextOnly);
ADD_TEST_CASE(UIButtonIgnoreContentSizeTest);
ADD_TEST_CASE(UIButtonTitleEffectTest);
ADD_TEST_CASE(UIButtonFlipTest);
ADD_TEST_CASE(UIButtonNormalDefaultTest);
ADD_TEST_CASE(UIButtonDisableDefaultTest);
ADD_TEST_CASE(UIButtonCloneTest);
ADD_TEST_CASE(Issue12249);
ADD_TEST_CASE(Issue17116);
ADD_TEST_CASE(UIButtonWithPolygonInfo);
ADD_TEST_CASE(UIButtonScale9ChangeSpriteFrame);
}
// UIButtonTest
UIButtonTest::UIButtonTest() : _displayValueLabel(nullptr) {}
UIButtonTest::~UIButtonTest() {}
bool UIButtonTest::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("No Event", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert = Text::create("Button", "fonts/Marker Felt.ttf", 30);
alert->setColor(Color3B(159, 168, 176));
alert->setPosition(
Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f - alert->getContentSize().height * 1.75f));
_uiLayer->addChild(alert);
// Create the button
Button* button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
CCLOG("content size should be greater than 0: width = %f, height = %f", button->getContentSize().width,
button->getContentSize().height);
button->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
button->addTouchEventListener(CC_CALLBACK_2(UIButtonTest::touchEvent, this));
button->setZoomScale(0.4f);
button->setPressedActionEnabled(true);
_uiLayer->addChild(button);
button->setOpacity(100);
// Create the imageview
ImageView* imageView = ImageView::create();
imageView->setPosition(
Vec2(widgetSize.width / 2.0f + 50 + button->getContentSize().width / 2, widgetSize.height / 2.0f));
imageView->setTag(12);
_uiLayer->addChild(imageView);
_button = button;
TTFConfig ttfConfig("fonts/arial.ttf", 15);
auto label1 = Label::createWithTTF(ttfConfig, "Print Resources");
auto item1 = MenuItemLabel::create(label1, CC_CALLBACK_1(UIButtonTest::printWidgetResources, this));
item1->setPosition(
Vec2(VisibleRect::left().x + 60, VisibleRect::bottom().y + item1->getContentSize().height * 3));
auto pMenu1 = Menu::create(item1, nullptr);
pMenu1->setPosition(Vec2(0.0f, 0.0f));
this->addChild(pMenu1, 10);
return true;
}
return false;
}
void UIButtonTest::touchEvent(Ref* pSender, Widget::TouchEventType type)
{
switch (type)
{
case Widget::TouchEventType::BEGAN:
_displayValueLabel->setString(StringUtils::format("Touch Down"));
break;
case Widget::TouchEventType::MOVED:
_displayValueLabel->setString(StringUtils::format("Touch Move"));
break;
case Widget::TouchEventType::ENDED:
{
_displayValueLabel->setString(StringUtils::format("Touch Up"));
ImageView* imageView = (ImageView*)_uiLayer->getChildByTag(12);
imageView->setVisible(false);
imageView->loadTexture("cocosui/ccicon.png");
imageView->setOpacity(0);
imageView->setVisible(true);
imageView->runAction(
Sequence::create(FadeIn::create(0.5), DelayTime::create(1.0), FadeOut::create(0.5), nullptr));
Button* btn = (Button*)pSender;
btn->loadTextureNormal("cocosui/animationbuttonnormal.png");
}
break;
case Widget::TouchEventType::CANCELED:
_displayValueLabel->setString(StringUtils::format("Touch Cancelled"));
break;
default:
break;
}
}
void UIButtonTest::printWidgetResources(cocos2d::Ref* sender)
{
cocos2d::ResourceData normalFileName = _button->getNormalFile();
CCLOG("normalFileName Name : %s, Type: %d", normalFileName.file.c_str(), normalFileName.type);
cocos2d::ResourceData clickedFileName = _button->getPressedFile();
CCLOG("clickedFileName Name : %s, Type: %d", clickedFileName.file.c_str(), clickedFileName.type);
cocos2d::ResourceData disabledFileName = _button->getDisabledFile();
CCLOG("disabledFileName Name : %s, Type: %d", disabledFileName.file.c_str(), disabledFileName.type);
}
// UIButtonTest_Scale9
UIButtonTest_Scale9::UIButtonTest_Scale9() : _displayValueLabel(nullptr) {}
UIButtonTest_Scale9::~UIButtonTest_Scale9() {}
bool UIButtonTest_Scale9::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("No Event", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert = Text::create("Button scale9 render", "fonts/Marker Felt.ttf", 30);
alert->setColor(Color3B(159, 168, 176));
alert->setPosition(
Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f - alert->getContentSize().height * 1.75f));
_uiLayer->addChild(alert);
// Create the button
Button* button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
// open scale9 render
button->setScale9Enabled(true);
button->setContentSize(Size(150.0f, 70.0f));
button->setPosition(Vec2(-button->getContentSize().width - 10, widgetSize.height / 2.0f));
auto moveBy = MoveBy::create(1.0f, Vec2(widgetSize.width / 2, 0.0f));
auto moveByReverse = moveBy->reverse()->clone();
button->runAction(RepeatForever::create(Sequence::create(moveBy, moveByReverse, NULL)));
button->setPressedActionEnabled(true);
button->addTouchEventListener(CC_CALLBACK_2(UIButtonTest_Scale9::touchEvent, this));
_uiLayer->addChild(button);
// Create the imageview
Button* button2 = Button::create();
button2->setPosition(
Vec2(widgetSize.width / 2.0f + button->getContentSize().width + 20, widgetSize.height / 2.0f));
button2->setName("normal");
_uiLayer->addChild(button2);
Sprite* sprite = Sprite::create("cocosui/animationbuttonnormal.png");
button2->addChild(sprite);
return true;
}
return false;
}
void UIButtonTest_Scale9::touchEvent(Ref* pSender, Widget::TouchEventType type)
{
switch (type)
{
case Widget::TouchEventType::BEGAN:
_displayValueLabel->setString(StringUtils::format("Touch Down"));
break;
case Widget::TouchEventType::MOVED:
_displayValueLabel->setString(StringUtils::format("Touch Move"));
break;
case Widget::TouchEventType::ENDED:
{
_displayValueLabel->setString(StringUtils::format("Touch Up"));
Button* btn = (Button*)_uiLayer->getChildByName("normal");
btn->loadTextureNormal("cocosui/animationbuttonnormal.png");
btn->loadTexturePressed("cocosui/animationbuttonpressed.png");
btn->runAction(Sequence::create(FadeIn::create(0.5), DelayTime::create(1.0), FadeOut::create(0.5), nullptr));
}
break;
case Widget::TouchEventType::CANCELED:
_displayValueLabel->setString(StringUtils::format("Touch Cancelled"));
break;
default:
break;
}
}
// UIButtonTest_Scale9_State_Change
UIButtonTest_Scale9_State_Change::UIButtonTest_Scale9_State_Change() : _displayValueLabel(nullptr) {}
UIButtonTest_Scale9_State_Change::~UIButtonTest_Scale9_State_Change() {}
bool UIButtonTest_Scale9_State_Change::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("No Event", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert = Text::create("Button scale9 render", "fonts/Marker Felt.ttf", 30);
alert->setColor(Color3B(159, 168, 176));
alert->setPosition(
Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f - alert->getContentSize().height * 1.75f));
_uiLayer->addChild(alert);
// Create the button
Button* button = Button::create("cocosui/button.png");
// open scale9 render
button->ignoreContentAdaptWithSize(false);
button->setScale9Enabled(true);
button->setPosition(Vec2(widgetSize.width / 2.0f - 100, widgetSize.height / 2.0f));
button->setContentSize(Size(180.0f, 60.0f));
button->setTitleText("Hello Scale9");
button->setPressedActionEnabled(false);
button->addTouchEventListener(CC_CALLBACK_2(UIButtonTest_Scale9_State_Change::touchEvent, this));
_uiLayer->addChild(button);
Button* button2 = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
// open scale9 render
button2->ignoreContentAdaptWithSize(false);
button2->setScale9Enabled(true);
button2->setTitleText("Hello scale9");
button2->setPosition(Vec2(widgetSize.width / 2.0f + 100, widgetSize.height / 2.0f));
button2->setContentSize(Size(180.0f, 60.0f));
button2->setPressedActionEnabled(true);
button2->addTouchEventListener(CC_CALLBACK_2(UIButtonTest_Scale9_State_Change::touchEvent, this));
_uiLayer->addChild(button2);
return true;
}
return false;
}
void UIButtonTest_Scale9_State_Change::touchEvent(Ref* pSender, Widget::TouchEventType type)
{
switch (type)
{
case Widget::TouchEventType::BEGAN:
_displayValueLabel->setString(StringUtils::format("Touch Down"));
break;
case Widget::TouchEventType::MOVED:
_displayValueLabel->setString(StringUtils::format("Touch Move"));
break;
case Widget::TouchEventType::ENDED:
{
_displayValueLabel->setString(StringUtils::format("Touch Up"));
Button* btn = (Button*)pSender;
if (btn->isScale9Enabled())
{
btn->setScale9Enabled(false);
}
else
btn->setScale9Enabled(true);
}
break;
case Widget::TouchEventType::CANCELED:
_displayValueLabel->setString(StringUtils::format("Touch Cancelled"));
break;
default:
break;
}
}
// UIButtonTest_PressAction
UIButtonTest_PressedAction::UIButtonTest_PressedAction() : _displayValueLabel(nullptr) {}
UIButtonTest_PressedAction::~UIButtonTest_PressedAction() {}
bool UIButtonTest_PressedAction::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("No Event", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert = Text::create("Button Pressed Action", "fonts/Marker Felt.ttf", 30);
alert->setColor(Color3B(159, 168, 176));
alert->setPosition(
Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f - alert->getContentSize().height * 1.75f));
_uiLayer->addChild(alert);
// Create the button
Button* button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button->setPressedActionEnabled(true);
button->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
button->setColor(Color3B::GREEN);
button->setOpacity(30);
button->addTouchEventListener(CC_CALLBACK_2(UIButtonTest_PressedAction::touchEvent, this));
button->setName("button");
_uiLayer->addChild(button);
Button* button2 = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button2->setPosition(button->getPosition() + Vec2(100.0f, 0.0f));
button2->setName("button2");
_uiLayer->addChild(button2);
return true;
}
return false;
}
void UIButtonTest_PressedAction::touchEvent(Ref* pSender, Widget::TouchEventType type)
{
switch (type)
{
case Widget::TouchEventType::BEGAN:
_displayValueLabel->setString(StringUtils::format("Touch Down"));
break;
case Widget::TouchEventType::MOVED:
_displayValueLabel->setString(StringUtils::format("Touch Move"));
break;
case Widget::TouchEventType::ENDED:
{
_displayValueLabel->setString(StringUtils::format("Touch Up"));
Button* btn = (Button*)_uiLayer->getChildByName("button");
btn->loadTextureNormal("cocosui/animationbuttonnormal.png");
Button* btn2 = (Button*)_uiLayer->getChildByName("button2");
btn2->setAnchorPoint(Vec2(0, 0.5));
}
break;
case Widget::TouchEventType::CANCELED:
_displayValueLabel->setString(StringUtils::format("Touch Cancelled"));
break;
default:
break;
}
}
// UIButtonTest_Title
UIButtonTest_Title::UIButtonTest_Title() : _displayValueLabel(nullptr) {}
UIButtonTest_Title::~UIButtonTest_Title() {}
bool UIButtonTest_Title::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the text button events will be displayed
_displayValueLabel = Text::create("No Event", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert = Text::create("Button with title, title should be flipped!", "fonts/Marker Felt.ttf", 30);
alert->setColor(Color3B(159, 168, 176));
alert->setPosition(
Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f - alert->getContentSize().height * 1.75f));
_uiLayer->addChild(alert);
// Create the button with title
Button* button = Button::create("cocosui/backtotoppressed.png", "cocosui/backtotopnormal.png");
button->setTitleText("Title Button!");
button->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
button->setTitleColor(Color3B::YELLOW);
CCASSERT(button->getTitleColor() == Color3B::YELLOW, "Button setTitleColor & getTitleColor not match!");
button->addTouchEventListener(CC_CALLBACK_2(UIButtonTest_Title::touchEvent, this));
_uiLayer->addChild(button);
button->setFlippedX(true);
auto label = button->getTitleRenderer();
label->setScale(4.0);
button->runAction(
RepeatForever::create(Sequence::create(ScaleTo::create(1.0f, 1.2f), ScaleTo::create(1.0f, 1.0f), nullptr)));
TextBMFont* text = TextBMFont::create("BMFont", "cocosui/bitmapFontTest2.fnt");
text->setPosition(button->getPosition() + Vec2(button->getContentSize().width / 2 + 50, 0.0f));
text->setColor(Color3B::YELLOW);
text->setOpacity(50);
text->setName("text");
auto button2 = Button::create("cocosui/backtotopnormal.png", "cocosui/backtotoppressed.png");
button2->setTitleFontName("fonts/helvetica-32.fnt");
button2->setTitleText("BMFont");
// the change of font size will take no effect.
button2->setTitleFontSize(30);
button2->setPosition(Vec2(button->getPosition() + Vec2(50.0f, -80.0f)));
this->addChild(button2);
_uiLayer->addChild(text);
return true;
}
return false;
}
void UIButtonTest_Title::touchEvent(Ref* pSender, Widget::TouchEventType type)
{
switch (type)
{
case Widget::TouchEventType::BEGAN:
_displayValueLabel->setString(StringUtils::format("Touch Down"));
break;
case Widget::TouchEventType::MOVED:
_displayValueLabel->setString(StringUtils::format("Touch Move"));
break;
case Widget::TouchEventType::ENDED:
{
_displayValueLabel->setString(StringUtils::format("Touch Up"));
TextBMFont* text = (TextBMFont*)_uiLayer->getChildByName("text");
text->setFntFile("cocosui/bitmapFontTest2.fnt");
if (text->getString() == "BMFont")
{
text->setString("Hello");
}
else
{
text->setString("BMFont");
}
}
break;
case Widget::TouchEventType::CANCELED:
_displayValueLabel->setString(StringUtils::format("Touch Cancelled"));
break;
default:
break;
}
}
// UIButtonTest_RemoveSelf
UIButtonTestRemoveSelf::UIButtonTestRemoveSelf() : _displayValueLabel(nullptr) {}
UIButtonTestRemoveSelf::~UIButtonTestRemoveSelf() {}
bool UIButtonTestRemoveSelf::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("No Event", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert =
Text::create("Remove Self in the Button's Callback shouldn't cause crash!", "fonts/Marker Felt.ttf", 10);
alert->setColor(Color3B(159, 168, 176));
alert->setPosition(
Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f - alert->getContentSize().height * 2.75f));
_uiLayer->addChild(alert);
Layout* layout = Layout::create();
layout->setContentSize(widgetSize * 0.6f);
layout->setBackGroundColor(Color3B::GREEN);
layout->setBackGroundColorType(Layout::BackGroundColorType::SOLID);
layout->setBackGroundColorOpacity(100);
layout->setPosition(Size(widgetSize.width / 2, widgetSize.height / 2));
layout->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
layout->setTag(12);
_uiLayer->addChild(layout);
// Create the button
Button* button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button->setPosition(Vec2(layout->getContentSize().width / 2.0f, layout->getContentSize().height / 2.0f));
// button->addTouchEventListener(this, toucheventselector(UIButtonTest::touchEvent));
button->addTouchEventListener(CC_CALLBACK_2(UIButtonTestRemoveSelf::touchEvent, this));
layout->addChild(button);
return true;
}
return false;
}
void UIButtonTestRemoveSelf::touchEvent(Ref* pSender, Widget::TouchEventType type)
{
switch (type)
{
case Widget::TouchEventType::BEGAN:
_displayValueLabel->setString(StringUtils::format("Touch Down"));
break;
case Widget::TouchEventType::MOVED:
_displayValueLabel->setString(StringUtils::format("Touch Move"));
break;
case Widget::TouchEventType::ENDED:
{
_displayValueLabel->setString(StringUtils::format("Touch Up"));
auto layout = _uiLayer->getChildByTag(12);
layout->removeFromParentAndCleanup(true);
}
break;
case Widget::TouchEventType::CANCELED:
_displayValueLabel->setString(StringUtils::format("Touch Cancelled"));
break;
default:
break;
}
}
// UIButtonTestSwitchScale9
UIButtonTestSwitchScale9::UIButtonTestSwitchScale9() : _displayValueLabel(nullptr) {}
UIButtonTestSwitchScale9::~UIButtonTestSwitchScale9() {}
bool UIButtonTestSwitchScale9::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("No Event", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Create the button
Button* button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
button->addTouchEventListener(CC_CALLBACK_2(UIButtonTestSwitchScale9::touchEvent, this));
button->setTitleText("Button Title");
button->ignoreContentAdaptWithSize(false);
_uiLayer->addChild(button);
return true;
}
return false;
}
void UIButtonTestSwitchScale9::touchEvent(Ref* pSender, Widget::TouchEventType type)
{
switch (type)
{
case Widget::TouchEventType::BEGAN:
_displayValueLabel->setString(StringUtils::format("Touch Down"));
break;
case Widget::TouchEventType::MOVED:
_displayValueLabel->setString(StringUtils::format("Touch Move"));
break;
case Widget::TouchEventType::ENDED:
{
_displayValueLabel->setString(StringUtils::format("Touch Up"));
auto btn = ((Button*)pSender);
btn->setScale9Enabled(!btn->isScale9Enabled());
btn->setContentSize(Size(200.0f, 100.0f));
}
break;
case Widget::TouchEventType::CANCELED:
_displayValueLabel->setString(StringUtils::format("Touch Cancelled"));
break;
default:
break;
}
}
// UIButtonTestZoomScale
UIButtonTestZoomScale::UIButtonTestZoomScale() : _displayValueLabel(nullptr) {}
UIButtonTestZoomScale::~UIButtonTestZoomScale() {}
bool UIButtonTestZoomScale::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("Zoom Scale: -0.5", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + 20));
_uiLayer->addChild(_displayValueLabel);
// Create the button
Button* button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + 20));
button->setPressedActionEnabled(true);
button->addClickEventListener([=](Ref* sender) {
CCLOG("Button clicked, position = (%f, %f)", button->getPosition().x, button->getPosition().y);
});
button->setName("button");
_uiLayer->addChild(button);
button->setZoomScale(-0.5);
Slider* slider = Slider::create();
slider->loadBarTexture("cocosui/sliderTrack.png");
slider->loadSlidBallTextures("cocosui/sliderThumb.png", "cocosui/sliderThumb.png", "");
slider->loadProgressBarTexture("cocosui/sliderProgress.png");
slider->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f - 20));
slider->addEventListener(CC_CALLBACK_2(UIButtonTestZoomScale::sliderEvent, this));
slider->setPercent(button->getZoomScale() * 100);
_uiLayer->addChild(slider);
return true;
}
return false;
}
void UIButtonTestZoomScale::sliderEvent(Ref* pSender, Slider::EventType type)
{
if (type == Slider::EventType::ON_PERCENTAGE_CHANGED)
{
Slider* slider = dynamic_cast<Slider*>(pSender);
int percent = slider->getPercent();
Button* btn = (Button*)_uiLayer->getChildByName("button");
float zoomScale = percent * 0.01;
btn->setZoomScale(zoomScale);
_displayValueLabel->setString(StringUtils::format("Zoom Scale: %f", zoomScale));
}
}
// UIButtonTextOnly
UIButtonTextOnly::UIButtonTextOnly() : _displayValueLabel(nullptr) {}
UIButtonTextOnly::~UIButtonTextOnly() {}
bool UIButtonTextOnly::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("Text Only Button", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + 20));
_uiLayer->addChild(_displayValueLabel);
// Create the button
auto button = Button::create();
button->setPositionNormalized(Vec2(0.5f, 0.5f));
button->setTitleText("PLAY GAME");
CCLOG("content size should be greater than 0: width = %f, height = %f", button->getContentSize().width,
button->getContentSize().height);
button->setZoomScale(0.3f);
button->setPressedActionEnabled(true);
button->addClickEventListener([](Ref* sender) { CCLOG("clicked!"); });
_uiLayer->addChild(button);
return true;
}
return false;
}
// UIButtonIgnoreContentSizeTest
UIButtonIgnoreContentSizeTest::UIButtonIgnoreContentSizeTest() : _displayValueLabel(nullptr) {}
UIButtonIgnoreContentSizeTest::~UIButtonIgnoreContentSizeTest() {}
bool UIButtonIgnoreContentSizeTest::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("Button IgnoreContent Size Test", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + 20));
_uiLayer->addChild(_displayValueLabel);
// Create the button
auto button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button->ignoreContentAdaptWithSize(false);
button->setContentSize(Size(200.0f, 100.0f));
button->setPositionNormalized(Vec2(0.3f, 0.5f));
button->setTitleText("PLAY GAME");
button->setZoomScale(0.3f);
button->setPressedActionEnabled(true);
button->addClickEventListener([=](Ref* sender) {
CCLOG("clicked!");
button->setScale(1.2f);
});
_uiLayer->addChild(button);
// Create the button
auto button2 = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button2->ignoreContentAdaptWithSize(false);
button2->setContentSize(Size(200.0f, 100.0f));
button2->setPositionNormalized(Vec2(0.8f, 0.5f));
button2->setTitleText("PLAY GAME");
button2->setZoomScale(0.3f);
button2->setPressedActionEnabled(true);
button2->addClickEventListener([=](Ref* sender) {
button2->runAction(ScaleTo::create(1.0f, 1.2f));
CCLOG("clicked!");
});
_uiLayer->addChild(button2);
return true;
}
return false;
}
// UIButtonTitleEffectTest
UIButtonTitleEffectTest::UIButtonTitleEffectTest() : _displayValueLabel(nullptr) {}
UIButtonTitleEffectTest::~UIButtonTitleEffectTest() {}
bool UIButtonTitleEffectTest::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("Button Title Effect", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + 20));
_uiLayer->addChild(_displayValueLabel);
// Create the button
auto button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button->setPositionNormalized(Vec2(0.3f, 0.5f));
button->setTitleText("PLAY GAME");
button->setTitleFontName("fonts/Marker Felt.ttf");
button->setZoomScale(0.3f);
button->setScale(2.0f);
button->setPressedActionEnabled(true);
Label* title = button->getTitleRenderer();
button->setTitleColor(Color3B::RED);
title->enableShadow(Color4B::BLACK, Size(2, -2));
_uiLayer->addChild(button);
// Create the button
auto button2 = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button2->setPositionNormalized(Vec2(0.8f, 0.5f));
button2->setTitleText("PLAY GAME");
auto title2 = button2->getTitleRenderer();
title2->enableOutline(Color4B::GREEN, 3);
_uiLayer->addChild(button2);
return true;
}
return false;
}
// UIButtonFlipTest
UIButtonFlipTest::UIButtonFlipTest() : _displayValueLabel(nullptr) {}
UIButtonFlipTest::~UIButtonFlipTest() {}
bool UIButtonFlipTest::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("Button X Flipped", "fonts/Marker Felt.ttf", 20);
_displayValueLabel->setPositionNormalized(Vec2(0.3f, 0.7f));
_uiLayer->addChild(_displayValueLabel);
// Create the button
auto button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button->setPositionNormalized(Vec2(0.3f, 0.5f));
button->setTitleText("PLAY GAME");
button->setTitleFontName("fonts/Marker Felt.ttf");
button->setZoomScale(0.3f);
button->setScale(2.0f);
button->setFlippedX(true);
button->setPressedActionEnabled(true);
_uiLayer->addChild(button);
// Create the button
auto button2 = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png");
button2->setPositionNormalized(Vec2(0.8f, 0.5f));
button2->setTitleText("PLAY GAME");
button2->setFlippedY(true);
_uiLayer->addChild(button2);
auto titleLabel = Text::create("Button Y flipped", "Arial", 20);
titleLabel->setPositionNormalized(Vec2(0.8f, 0.7f));
this->addChild(titleLabel);
return true;
}
return false;
}
// UIButtonNormalDefaultTest
UIButtonNormalDefaultTest::UIButtonNormalDefaultTest() : _displayValueLabel(nullptr) {}
UIButtonNormalDefaultTest::~UIButtonNormalDefaultTest() {}
bool UIButtonNormalDefaultTest::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert = Text::create("Button should scale when clicked", "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 * 1.75f));
_uiLayer->addChild(alert);
// Create the button
Button* button = Button::create("cocosui/animationbuttonnormal.png");
button->setPosition(Vec2(widgetSize.width / 2.0f - 80, widgetSize.height / 2.0f + 40));
button->setZoomScale(0.4f);
button->setPressedActionEnabled(true);
_uiLayer->addChild(button);
// Create the button
Button* buttonScale9 = Button::create("cocosui/button.png");
// open scale9 render
buttonScale9->setScale9Enabled(true);
buttonScale9->setPosition(Vec2(widgetSize.width / 2.0f + 50, widgetSize.height / 2.0f + 40));
buttonScale9->setContentSize(Size(150.0f, 70.0f));
buttonScale9->setPressedActionEnabled(true);
_uiLayer->addChild(buttonScale9);
return true;
}
return false;
}
// UIButtonDisableDefaultTest
UIButtonDisableDefaultTest::UIButtonDisableDefaultTest() : _displayValueLabel(nullptr) {}
UIButtonDisableDefaultTest::~UIButtonDisableDefaultTest() {}
bool UIButtonDisableDefaultTest::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert = Text::create("Left button will turn normal when clicked", "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 * 1.75f));
_uiLayer->addChild(alert);
// Create the button
Button* button = Button::create("cocosui/animationbuttonnormal.png");
button->setPosition(Vec2(widgetSize.width / 2.0f - 80, widgetSize.height / 2.0f + 40));
button->setZoomScale(0.4f);
button->setPressedActionEnabled(true);
button->setBright(false);
button->setScale9Enabled(true);
button->setCapInsets(Rect(3, 3, 5, 5));
button->addClickEventListener([=](Ref*) { button->setBright(true); });
_uiLayer->addChild(button);
// Create the button
Button* buttonScale9 = Button::create("cocosui/button.png");
// open scale9 render
buttonScale9->setScale9Enabled(true);
buttonScale9->setPosition(Vec2(widgetSize.width / 2.0f + 50, widgetSize.height / 2.0f + 40));
buttonScale9->setContentSize(Size(150.0f, 70.0f));
buttonScale9->setPressedActionEnabled(true);
buttonScale9->setEnabled(false);
buttonScale9->setBright(false);
_uiLayer->addChild(buttonScale9);
return true;
}
return false;
}
// UIButtonCloneTest
UIButtonCloneTest::UIButtonCloneTest() : _displayValueLabel(nullptr) {}
UIButtonCloneTest::~UIButtonCloneTest() {}
bool UIButtonCloneTest::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert = Text::create("This test case shouldn't trigger the Assertion!", "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 * 1.75f));
_uiLayer->addChild(alert);
// Create the button
Button* button = Button::create("cocosui/animationbuttonnormal.png");
button->setPosition(Vec2(widgetSize.width / 2.0f - 80, widgetSize.height / 2.0f + 40));
_uiLayer->addChild(button);
CCASSERT(button->getTitleRenderer() == nullptr, "Button title render must be nullptr ");
auto buttonCopy = (Button*)button->clone();
buttonCopy->setPosition(Vec2(widgetSize.width / 2.0f + 80, widgetSize.height / 2.0f + 40));
this->addChild(buttonCopy);
auto buttonScale9Copy = (Button*)button->clone();
buttonScale9Copy->setPosition(button->getPosition() + Vec2(0.0f, -60.0f));
buttonScale9Copy->setScale9Enabled(true);
buttonScale9Copy->setContentSize(button->getContentSize() * 1.5f);
this->addChild(buttonScale9Copy);
auto buttonScale9Copy2 = (Button*)buttonScale9Copy->clone();
buttonScale9Copy2->setPosition(buttonCopy->getPosition() + Vec2(0.0f, -60.0f));
buttonScale9Copy2->setScale9Enabled(true);
buttonScale9Copy2->setContentSize(buttonCopy->getContentSize() * 1.5f);
this->addChild(buttonScale9Copy2);
CCASSERT(button->getTitleRenderer() == nullptr, "Original Button title render must be nullptr ");
CCASSERT(buttonCopy->getTitleRenderer() == nullptr, "Copied Button title render must be nullptr ");
return true;
}
return false;
}
// https://github.com/cocos2d/cocos2d-x/issues/12249
Issue12249::Issue12249() : _displayValueLabel(nullptr) {}
bool Issue12249::init()
{
if (UIScene::init())
{
Size widgetSize = _widget->getContentSize();
// Add a label in which the button events will be displayed
_displayValueLabel = Text::create("Test Issue 12249", "fonts/Marker Felt.ttf", 32);
_displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
_displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
_uiLayer->addChild(_displayValueLabel);
// Add the alert
Text* alert = Text::create("This test case two buttons should seem to be same!", "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.0f));
_uiLayer->addChild(alert);
// Create the button 1
Button *button = nullptr, *button2 = nullptr;
float btnWidth = 100;
button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
button->setScale9Enabled(true);
button->setContentSize(Size(btnWidth, button->getContentSize().height));
button->setTitleText("Scale9 Button 1");
button->setPosition(Vec2(widgetSize.width / 2.0f - btnWidth, widgetSize.height / 2.0f));
_uiLayer->addChild(button);
// create button 2, load texture after button creation
button2 = Button::create();
button2->setScale9Enabled(true);
button2->loadTextures("cocosui/button.png", "cocosui/buttonHighlighted.png", "");
button2->setContentSize(Size(btnWidth, button2->getContentSize().height));
button2->setTitleText("Scale9 Button 2");
button2->setPosition(Vec2(widgetSize.width / 2.0f + btnWidth, widgetSize.height / 2.0f));
_uiLayer->addChild(button2);
return true;
}
return false;
}
// https://github.com/cocos2d/cocos2d-x/issues/17116
Issue17116::Issue17116() {}
bool Issue17116::init()
{
if (UIScene::init())
{
auto visibleSize = Director::getInstance()->getVisibleSize();
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Images/issue_17116.plist");
auto button = ui::Button::create();
button->loadTextureNormal("issue_17116/buttons/play-big", ui::Widget::TextureResType::PLIST);
button->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));
button->setOpacity(100);
addChild(button);
return true;
}
return false;
}
UIButtonWithPolygonInfo::UIButtonWithPolygonInfo() {}
bool UIButtonWithPolygonInfo::init()
{
if (UIScene::init())
{
auto visibleSize = Director::getInstance()->getVisibleSize();
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Images/poly_test_textures.plist");
auto button = ui::Button::create();
button->loadTextureNormal("poly_test/wheel_disc_back.png", ui::Widget::TextureResType::PLIST);
button->setPosition(Vec2(visibleSize.width / 2 - 100, visibleSize.height / 2));
button->setScale(0.5);
button->setScale9Enabled(true);
addChild(button);
auto buttonCopy = button->clone();
button->setPosition(Vec2(visibleSize.width / 2 + 100, visibleSize.height / 2));
addChild(buttonCopy);
return true;
}
return false;
}
UIButtonScale9ChangeSpriteFrame::UIButtonScale9ChangeSpriteFrame() {}
bool UIButtonScale9ChangeSpriteFrame::init()
{
if (UIScene::init())
{
ImageView* sprite = ImageView::create("Images/blocks.png");
sprite->setScale9Enabled(true);
sprite->setCapInsets(Rect(32, 32, 32, 32));
sprite->setContentSize(Size(96 * 1.5, 96));
sprite->setNormalizedPosition(Vec2(0.2f, 0.5f));
this->addChild(sprite);
auto button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
button->setScale9Enabled(true);
button->setContentSize(Size(100.0f, 50.0f));
button->setNormalizedPosition(Vec2(0.6f, 0.5f));
button->setTitleText("Press me");
addChild(button);
button->addClickEventListener([sprite](Ref* button) { sprite->loadTexture("Images/blocks9.png"); });
return true;
}
return false;
}