#include "FontTest.h" #include "../testResource.h" #include "2d/CCFontAtlasCache.h" #include "2d/CCFontFreeType.h" USING_NS_CC; enum { kTagLabel1, kTagLabel2, kTagLabel3, kTagLabel4, kTagColor1, kTagColor2, kTagColor3, }; //you don't need any ifdef anymore static std::string fontList[] = { "fonts/A Damn Mess.ttf", "fonts/Abberancy.ttf", "fonts/Abduction.ttf", "fonts/Paint Boy.ttf", "fonts/Schwarzwald.ttf", "fonts/Scissor Cuts.ttf", }; static int vAlignIdx = 0; static TextVAlignment verticalAlignment[] = { TextVAlignment::TOP, TextVAlignment::CENTER, TextVAlignment::BOTTOM, }; FontTests::FontTests() { for (auto& fontFile : fontList) { addTestCase("FontTests", [&](){vAlignIdx = 0; return FontTest::create(fontFile); }); } for (auto& fontFile : fontList) { addTestCase("FontTests", [&](){ vAlignIdx = 1; return FontTest::create(fontFile); }); } for (auto& fontFile : fontList) { addTestCase("FontTests", [&](){vAlignIdx = 2; return FontTest::create(fontFile); }); } ADD_TEST_CASE(FontNoReplacementTest); ADD_TEST_CASE(FontReplacementTest); } void FontTest::showFont(const std::string& fontFile) { auto s = Director::getInstance()->getWinSize(); auto blockSize = Size(s.width/3, 200); float fontSize = 26; removeChildByTag(kTagLabel1, true); removeChildByTag(kTagLabel2, true); removeChildByTag(kTagLabel3, true); removeChildByTag(kTagLabel4, true); removeChildByTag(kTagColor1, true); removeChildByTag(kTagColor2, true); removeChildByTag(kTagColor3, true); auto top = Label::createWithSystemFont(fontFile, fontFile, 24); auto left = Label::createWithSystemFont("alignment left", fontFile, fontSize, blockSize, TextHAlignment::LEFT, verticalAlignment[vAlignIdx]); auto center = Label::createWithSystemFont("alignment center", fontFile, fontSize, blockSize, TextHAlignment::CENTER, verticalAlignment[vAlignIdx]); auto right = Label::createWithSystemFont("alignment right", fontFile, fontSize, blockSize, TextHAlignment::RIGHT, verticalAlignment[vAlignIdx]); auto leftColor = LayerColor::create(Color4B(100, 100, 100, 255), blockSize.width, blockSize.height); auto centerColor = LayerColor::create(Color4B(200, 100, 100, 255), blockSize.width, blockSize.height); auto rightColor = LayerColor::create(Color4B(100, 100, 200, 255), blockSize.width, blockSize.height); leftColor->setIgnoreAnchorPointForPosition(false); centerColor->setIgnoreAnchorPointForPosition(false); rightColor->setIgnoreAnchorPointForPosition(false); top->setAnchorPoint(Vec2(0.5, 1)); left->setAnchorPoint(Vec2(0,0.5)); leftColor->setAnchorPoint(Vec2(0,0.5)); center->setAnchorPoint(Vec2(0,0.5)); centerColor->setAnchorPoint(Vec2(0,0.5)); right->setAnchorPoint(Vec2(0,0.5)); rightColor->setAnchorPoint(Vec2(0,0.5)); top->setPosition(s.width/2,s.height-20); left->setPosition(0,s.height/2); leftColor->setPosition(left->getPosition()); center->setPosition(blockSize.width, s.height/2); centerColor->setPosition(center->getPosition()); right->setPosition(blockSize.width*2, s.height/2); rightColor->setPosition(right->getPosition()); this->addChild(leftColor, -1, kTagColor1); this->addChild(left, 0, kTagLabel1); this->addChild(rightColor, -1, kTagColor2); this->addChild(right, 0, kTagLabel2); this->addChild(centerColor, -1, kTagColor3); this->addChild(center, 0, kTagLabel3); this->addChild(top, 0, kTagLabel4); } std::string FontTest::title() const { return "Font test"; } FontNoReplacementTest* FontNoReplacementTest::create() { auto ret = new (std::nothrow) FontNoReplacementTest; if (ret && ret->init()) { ret->autorelease(); } else { delete ret; ret = nullptr; } return ret; } FontNoReplacementTest::FontNoReplacementTest() { _replace = false; } FontNoReplacementTest::~FontNoReplacementTest() { // need to clear the caches since we change the lookup dictionary after the application init. FontAtlasCache::unloadFontAtlasTTF("fonts/A Damn Mess.ttf"); FontFreeType::releaseFont("fonts/A Damn Mess.ttf"); FontAtlasCache::unloadFontAtlasTTF("fonts/Abberancy.ttf"); FontFreeType::releaseFont("fonts/Abberancy.ttf"); FontAtlasCache::unloadFontAtlasTTF("fonts/Abduction.ttf"); FontFreeType::releaseFont("fonts/Abduction.ttf"); FontAtlasCache::unloadFontAtlasTTF("fonts/Schwarzwald.ttf"); FontFreeType::releaseFont("fonts/Schwarzwald.ttf"); FileUtils::getInstance()->setFilenameLookupDictionary(ValueMap()); } void FontNoReplacementTest::onEnter() { TestCase::onEnter(); std::string suffix; if (_replace) { ValueMap dict{ { "fonts/A Damn Mess.ttf", Value("fonts/arial.ttf") }, { "fonts/Abberancy.ttf", Value("fonts/arial.ttf") }, { "fonts/Abduction.ttf", Value("fonts/arial.ttf") }, { "fonts/Schwarzwald.ttf", Value("fonts/arial.ttf") } }; FileUtils::getInstance()->setFilenameLookupDictionary(dict); suffix = " replaced by arial.ttf"; } auto s = Director::getInstance()->getWinSize(); auto blockSize = Size(s.width / 3, 200); float fontSize = 26; removeChildByTag(kTagLabel1, true); removeChildByTag(kTagLabel2, true); removeChildByTag(kTagLabel3, true); removeChildByTag(kTagLabel4, true); removeChildByTag(kTagColor1, true); removeChildByTag(kTagColor2, true); removeChildByTag(kTagColor3, true); auto top = Label::createWithTTF("fonts/A Damn Mess.ttf" + suffix, "fonts/A Damn Mess.ttf", 24); auto left = Label::createWithTTF("fonts/Abberancy.ttf" + suffix, "fonts/Abberancy.ttf", fontSize, blockSize, TextHAlignment::LEFT, verticalAlignment[0]); auto center = Label::createWithTTF("fonts/Abduction.ttf" + suffix, "fonts/Abduction.ttf", fontSize, blockSize, TextHAlignment::CENTER, verticalAlignment[0]); auto right = Label::createWithTTF("fonts/Schwarzwald.ttf" + suffix, "fonts/Schwarzwald.ttf", fontSize, blockSize, TextHAlignment::RIGHT, verticalAlignment[0]); auto leftColor = LayerColor::create(Color4B(100, 100, 100, 255), blockSize.width, blockSize.height); auto centerColor = LayerColor::create(Color4B(200, 100, 100, 255), blockSize.width, blockSize.height); auto rightColor = LayerColor::create(Color4B(100, 100, 200, 255), blockSize.width, blockSize.height); leftColor->setIgnoreAnchorPointForPosition(false); centerColor->setIgnoreAnchorPointForPosition(false); rightColor->setIgnoreAnchorPointForPosition(false); top->setAnchorPoint(Vec2(0.5, 1)); left->setAnchorPoint(Vec2(0, 0.5)); leftColor->setAnchorPoint(Vec2(0, 0.5)); center->setAnchorPoint(Vec2(0, 0.5)); centerColor->setAnchorPoint(Vec2(0, 0.5)); right->setAnchorPoint(Vec2(0, 0.5)); rightColor->setAnchorPoint(Vec2(0, 0.5)); top->setPosition(s.width / 2, s.height - 20); left->setPosition(0, s.height / 2); leftColor->setPosition(left->getPosition()); center->setPosition(blockSize.width, s.height / 2); centerColor->setPosition(center->getPosition()); right->setPosition(blockSize.width * 2, s.height / 2); rightColor->setPosition(right->getPosition()); this->addChild(leftColor, -1, kTagColor1); this->addChild(left, 0, kTagLabel1); this->addChild(rightColor, -1, kTagColor2); this->addChild(right, 0, kTagLabel2); this->addChild(centerColor, -1, kTagColor3); this->addChild(center, 0, kTagLabel3); this->addChild(top, 0, kTagLabel4); } std::string FontNoReplacementTest::title() const { return "Font no replacement test"; } FontReplacementTest* FontReplacementTest::create() { auto ret = new (std::nothrow) FontReplacementTest; if (ret && ret->init()) { ret->autorelease(); } else { delete ret; ret = nullptr; } return ret; } FontReplacementTest::FontReplacementTest() { _replace = true; } std::string FontReplacementTest::title() const { return "Font replacement test"; }