/**************************************************************************** Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md). https://axmolengine.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 "UIRichTextTest.h" #include "cocostudio/ArmatureDataManager.h" #include "cocostudio/Armature.h" USING_NS_AX; using namespace ax::ui; UIRichTextTests::UIRichTextTests() { ADD_TEST_CASE(UIRichTextTest); ADD_TEST_CASE(UIRichTextXMLBasic); ADD_TEST_CASE(UIRichTextXMLSmallBig); ADD_TEST_CASE(UIRichTextXMLColor); ADD_TEST_CASE(UIRichTextXMLSUIB); ADD_TEST_CASE(UIRichTextXMLSUIB2); ADD_TEST_CASE(UIRichTextXMLSUIB3); ADD_TEST_CASE(UIRichTextXMLImg); ADD_TEST_CASE(UIRichTextXMLUrl); ADD_TEST_CASE(UIRichTextXMLUrlImg); ADD_TEST_CASE(UIRichTextXMLFace); ADD_TEST_CASE(UIRichTextXMLBR); ADD_TEST_CASE(UIRichTextXMLInvalid); ADD_TEST_CASE(UIRichTextXMLOutline); ADD_TEST_CASE(UIRichTextXMLShadow); ADD_TEST_CASE(UIRichTextXMLGlow); ADD_TEST_CASE(UIRichTextXMLExtend); ADD_TEST_CASE(UIRichTextXMLSpace); ADD_TEST_CASE(UIRichTextNewline); ADD_TEST_CASE(UIRichTextHeaders); ADD_TEST_CASE(UIRichTextParagraph); } // // UIRichTextTestBase // bool UIRichTextTestBase::init() { if (!UIScene::init()) { return false; } _defaultContentSize = Size(100, 100); return true; } void UIRichTextTestBase::touchEvent(Ref* pSender, Widget::TouchEventType type) { switch (type) { case Widget::TouchEventType::ENDED: { if (_richText->isIgnoreContentAdaptWithSize()) { _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); } else { _richText->ignoreContentAdaptWithSize(true); } } break; default: break; } } void UIRichTextTestBase::switchWrapMode(Ref* pSender, Widget::TouchEventType type) { if (type == Widget::TouchEventType::ENDED) { auto wrapMode = _richText->getWrapMode(); wrapMode = (wrapMode == RichText::WRAP_PER_WORD) ? RichText::WRAP_PER_CHAR : RichText::WRAP_PER_WORD; _richText->setWrapMode(wrapMode); } } void UIRichTextTestBase::switchHorizontalAlignment(Ref* sender, Widget::TouchEventType type) { if (type == Widget::TouchEventType::ENDED) { auto alignment = _richText->getHorizontalAlignment(); alignment = static_cast( (static_cast>(alignment) + 1) % 3); _richText->setHorizontalAlignment(alignment); } } void UIRichTextTestBase::switchVerticalAlignment(ax::Ref* sender, ax::ui::Widget::TouchEventType type) { if (type == Widget::TouchEventType::ENDED) { auto alignment = _richText->getVerticalAlignment(); alignment = static_cast( (static_cast>(alignment) + 1) % 3); _richText->setVerticalAlignment(alignment); } } void UIRichTextTestBase::createButtonPanel() { auto& widgetSize = _widget->getContentSize(); auto* buttonPanel = Layout::create(); buttonPanel->setContentSize(Vec2(widgetSize.width, 1)); buttonPanel->setLayoutType(Layout::Type::CENTER_HORIZONTAL); buttonPanel->setAnchorPoint(Vec2::ANCHOR_MIDDLE); _widget->addChild(buttonPanel, 10); auto maxButtonHeight = 0.f; Button* button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png"); button->setTouchEnabled(true); button->setTitleText("switch"); button->addTouchEventListener(AX_CALLBACK_2(UIRichTextTest::touchEvent, this)); buttonPanel->addChild(button); maxButtonHeight = std::max(maxButtonHeight, button->getContentSize().height); Button* button2 = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png"); button2->setTouchEnabled(true); button2->setTitleText("wrap mode"); button2->addTouchEventListener(AX_CALLBACK_2(UIRichTextTest::switchWrapMode, this)); buttonPanel->addChild(button2); maxButtonHeight = std::max(maxButtonHeight, button2->getContentSize().height); Button* button3 = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png"); button3->setTouchEnabled(true); button3->setTitleText("H-alignment"); button3->addTouchEventListener(AX_CALLBACK_2(UIRichTextTest::switchHorizontalAlignment, this)); buttonPanel->addChild(button3); maxButtonHeight = std::max(maxButtonHeight, button3->getContentSize().height); Button* button4 = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png"); button4->setTouchEnabled(true); button4->setTitleText("V-alignment"); button4->addTouchEventListener(AX_CALLBACK_2(UIRichTextTest::switchVerticalAlignment, this)); buttonPanel->addChild(button4); maxButtonHeight = std::max(maxButtonHeight, button4->getContentSize().height); buttonPanel->setContentSize(Vec2(widgetSize.width, maxButtonHeight)); buttonPanel->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2 + maxButtonHeight * 2.5f)); } // // UIRichTextTest // bool UIRichTextTest::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); auto config = Configuration::getInstance(); config->loadConfigFile("configs/config-test-ok.plist"); std::string str1 = config->getValue("Chinese").asString(); std::string str2 = config->getValue("Japanese").asString(); AXLOG("str1:%s ascii length = %d, utf8 length = %d, substr = %s", str1.c_str(), static_cast(str1.length()), StringUtils::getCharacterCountInUTF8String(str1), Helper::getSubStringOfUTF8String(str1, 0, 5).c_str()); AXLOG("str2:%s ascii length = %d, utf8 length = %d, substr = %s", str2.c_str(), static_cast(str2.length()), StringUtils::getCharacterCountInUTF8String(str2), Helper::getSubStringOfUTF8String(str2, 0, 2).c_str()); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125f)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::create(); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); RichElementText* re1 = RichElementText::create(1, Color3B::WHITE, 255, str1, "SimSun", 10); RichElementText* re2 = RichElementText::create(2, Color3B::YELLOW, 255, "And this is yellow. ", "Helvetica", 10); RichElementText* re3 = RichElementText::create(3, Color3B::GRAY, 255, str2, "Yu Mincho", 10); RichElementText* re4 = RichElementText::create(4, Color3B::GREEN, 255, "And green with TTF support. ", "fonts/Marker Felt.ttf", 10); RichElementText* re5 = RichElementText::create(5, Color3B::RED, 255, "Last one is red ", "Helvetica", 10); RichElementImage* reimg = RichElementImage::create(6, Color3B::WHITE, 255, "cocosui/sliderballnormal.png"); // TODO // cocostudio::ArmatureDataManager::getInstance()->addArmatureFileInfo("cocosui/100/100.ExportJson"); // cocostudio::Armature *pAr = cocostudio::Armature::create("100"); // // pAr->getAnimation()->play("Animation1"); // RichElementCustomNode* recustom = RichElementCustomNode::create(1, Color3B::WHITE, 255, pAr); RichElementText* re6 = RichElementText::create(7, Color3B::ORANGE, 255, "Have fun!! ", "Helvetica", 10); _richText->pushBackElement(re1); _richText->insertElement(re2, 1); _richText->pushBackElement(re3); _richText->pushBackElement(re4); _richText->pushBackElement(re5); _richText->insertElement(reimg, 2); // _richText->pushBackElement(recustom); _richText->pushBackElement(re6); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLBasic // bool UIRichTextXMLBasic::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "This is just simple text, with no XML tags. Testing the basics. Testing word-wrapping. Testing (\"punctuation\") " "Testing, Testing"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLSmallBig // bool UIRichTextXMLSmallBig::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "Regular size.smaller size.bigger.normal.bigger.normal."); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLColor // bool UIRichTextXMLColor::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "Default color.red.greenred again.default again"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLSUIB // bool UIRichTextXMLSUIB::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML("system font: underlineitalicsboldstrike-through"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLSUIB2 // bool UIRichTextXMLSUIB2::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "ttf font: " "underlineitalicsboldstrike-through"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLSUIB3 // bool UIRichTextXMLSUIB3::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "ttf font: italics and underlinebold " "and strike-through"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLImg // bool UIRichTextXMLImg::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); #ifdef AX_PLATFORM_PC _defaultContentSize = Size(290, 290); #endif // RichText _richText = RichText::createWithXML( "Image: and this is text again." "Image with width/height: and " "Image with scaleX/scaleY: and " "Image with width%/height%: and " "Image with empty width/height%: and " "Image with scale: and " "Image with w/h/sX/sY: and " "goes text again"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLUrl // bool UIRichTextXMLUrl::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "This link will redirect you to google: click me"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLUrlImg // bool UIRichTextXMLUrlImg::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "This link will redirect you to google: "); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLFace // bool UIRichTextXMLFace::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); _defaultContentSize = Size(120, 100); // RichText _richText = RichText::createWithXML( "Marker Felt 20.Arial " "20.Thonburi 24 blue"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLBR // bool UIRichTextXMLBR::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("RichText", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "this is one line.
this should be in another line.
and this is another line"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLInvalid // bool UIRichTextXMLInvalid::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("Invalid XML test", "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 * 3.125)); _widget->addChild(alert); // RichText _richText = RichText::createWithXML("this is an invalid xml. no closing tag"); if (_richText) { _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); } return true; } return false; } // // UIRichTextXMLOutline // bool UIRichTextXMLOutline::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("Outline", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "OUTLINE"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLShadow // bool UIRichTextXMLShadow::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("Shadow", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); _defaultContentSize = Size(150, 100); // RichText _richText = RichText::createWithXML( "SHADOW"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLGlow // bool UIRichTextXMLGlow::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("Glow", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); // RichText _richText = RichText::createWithXML( "GLOW"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLExtend // bool UIRichTextXMLExtend::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("Extend", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); /* Tag extension */ RichText::setTagDescription("CloseNormal", false, [](const ValueMap& tagAttrValueMap) { RichElementImage* richElement = RichElementImage::create(0, Color3B::WHITE, 255, "cocosui/CloseNormal.png"); return make_pair(ValueMap(), richElement); }); RichText::setTagDescription("CloseSelected", false, [](const ValueMap& tagAttrValueMap) { RichElementImage* richElement = RichElementImage::create(0, Color3B::WHITE, 255, "cocosui/CloseSelected.png"); return make_pair(ValueMap(), richElement); }); /* Defaults */ ValueMap defaults; defaults[RichText::KEY_FONT_COLOR_STRING] = "#FFF"; defaults[RichText::KEY_FONT_SIZE] = 12.0f; defaults[RichText::KEY_FONT_FACE] = "fonts/Marker Felt.ttf"; defaults[RichText::KEY_ANCHOR_FONT_COLOR_STRING] = "#f0f8ff"; defaults[RichText::KEY_ANCHOR_TEXT_BOLD] = false; defaults[RichText::KEY_ANCHOR_TEXT_ITALIC] = false; // defaults[RichText::KEY_ANCHOR_TEXT_LINE] = RichText::VALUE_TEXT_LINE_NONE; // defaults[RichText::KEY_ANCHOR_TEXT_LINE] = RichText::VALUE_TEXT_LINE_DEL; defaults[RichText::KEY_ANCHOR_TEXT_LINE] = RichText::VALUE_TEXT_LINE_UNDER; // defaults[RichText::KEY_ANCHOR_TEXT_STYLE] = RichText::VALUE_TEXT_STYLE_NONE; // defaults[RichText::KEY_ANCHOR_TEXT_STYLE] = RichText::VALUE_TEXT_STYLE_OUTLINE; // defaults[RichText::KEY_ANCHOR_TEXT_STYLE] = RichText::VALUE_TEXT_STYLE_SHADOW; // defaults[RichText::KEY_ANCHOR_TEXT_STYLE] = RichText::VALUE_TEXT_STYLE_GLOW; defaults[RichText::KEY_ANCHOR_TEXT_OUTLINE_COLOR] = "#D2B48C"; defaults[RichText::KEY_ANCHOR_TEXT_OUTLINE_SIZE] = 4; defaults[RichText::KEY_ANCHOR_TEXT_SHADOW_COLOR] = "#4169E1"; defaults[RichText::KEY_ANCHOR_TEXT_SHADOW_OFFSET_WIDTH] = 4.0f; defaults[RichText::KEY_ANCHOR_TEXT_SHADOW_OFFSET_HEIGHT] = -4.0f; defaults[RichText::KEY_ANCHOR_TEXT_SHADOW_BLUR_RADIUS] = 0; defaults[RichText::KEY_ANCHOR_TEXT_GLOW_COLOR] = "#AFEEEE"; // RichText _richText = RichText::createWithXML( "CloseNormal-tag:


CloseSelected-tag:
", defaults, [](std::string_view url) { Application::getInstance()->openURL(url); }); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextXMLSpace // bool UIRichTextXMLSpace::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("Space", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); _defaultContentSize = Size(50, 100); // RichText _richText = RichText::createWithXML( "words should be divided with space.

HELLO " "WORLD

HELLO WORLD"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } // // UIRichTextNewline // bool UIRichTextNewline::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("Axmol Issue #1170", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); _defaultContentSize = Size(50, 100); _richText = RichText::create(); _richText->setHorizontalAlignment(ui::RichText::HorizontalAlignment::CENTER); auto* textElement = ui::RichElementText::create(1, Color3B::WHITE, 255, "Line1\nLine2\n", "fonts/Marker Felt.ttf", 32, 0); _richText->pushBackElement(textElement); textElement = ui::RichElementText::create(2, Color3B::WHITE, 255, "Line3", "fonts/Marker Felt.ttf", 32, 0); _richText->pushBackElement(textElement); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } bool UIRichTextHeaders::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("Header Tags", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); #ifdef AX_PLATFORM_PC _defaultContentSize = Size(290, 290); #endif // RichText _richText = RichText::createWithXML( R"(

h1. HEADING

h2. HEADING

h3. HEADING

h4. HEADING

h5. HEADING
h6. HEADING
)"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; } bool UIRichTextParagraph::init() { if (UIRichTextTestBase::init()) { auto& widgetSize = _widget->getContentSize(); // Add the alert Text* alert = Text::create("Paragraph Tag", "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 * 3.125)); _widget->addChild(alert); createButtonPanel(); #ifdef AX_PLATFORM_PC _defaultContentSize = Size(290, 290); #endif // RichText _richText = RichText::createWithXML( "

Paragraph1: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et " "dolore magna aliqua. Feugiat scelerisque varius morbi enim nunc. Dis parturient montes nascetur ridiculus " "mus mauris vitae ultricies.

Paragraph2: Lectus urna duis convallis convallis tellus id interdum velit. " "Convallis a cras semper auctor neque vitae tempus quam pellentesque. Congue quisque egestas diam in arcu " "cursus euismod quis.

"); _richText->ignoreContentAdaptWithSize(false); _richText->setContentSize(_defaultContentSize); _richText->setPosition(Vec2(widgetSize.width / 2, widgetSize.height / 2)); _richText->setLocalZOrder(10); _widget->addChild(_richText); // test remove all children, this call won't effect the test _richText->removeAllChildren(); return true; } return false; }