mirror of https://github.com/axmolengine/axmol.git
1995 lines
60 KiB
C++
1995 lines
60 KiB
C++
#include "LabelTestNew.h"
|
||
#include "../testResource.h"
|
||
#include "renderer/CCRenderer.h"
|
||
|
||
USING_NS_CC;
|
||
using namespace ui;
|
||
|
||
enum {
|
||
kTagTileMap = 1,
|
||
kTagSpriteManager = 1,
|
||
kTagAnimation1 = 1,
|
||
kTagBitmapAtlas1 = 1,
|
||
kTagBitmapAtlas2 = 2,
|
||
kTagBitmapAtlas3 = 3,
|
||
};
|
||
|
||
enum {
|
||
kTagSprite1,
|
||
kTagSprite2,
|
||
kTagSprite3,
|
||
kTagSprite4,
|
||
kTagSprite5,
|
||
kTagSprite6,
|
||
kTagSprite7,
|
||
kTagSprite8,
|
||
};
|
||
|
||
//------------------------------------------------------------------
|
||
//
|
||
// AtlasDemoNew
|
||
//
|
||
//------------------------------------------------------------------
|
||
|
||
NewLabelTests::NewLabelTests()
|
||
{
|
||
ADD_TEST_CASE(LabelFNTColorAndOpacity);
|
||
ADD_TEST_CASE(LabelFNTSpriteActions);
|
||
ADD_TEST_CASE(LabelFNTPadding);
|
||
ADD_TEST_CASE(LabelFNTOffset);
|
||
ADD_TEST_CASE(LabelFNTColor);
|
||
ADD_TEST_CASE(LabelFNTHundredLabels);
|
||
ADD_TEST_CASE(LabelFNTMultiLine);
|
||
ADD_TEST_CASE(LabelFNTandTTFEmpty);
|
||
ADD_TEST_CASE(LabelFNTRetina);
|
||
ADD_TEST_CASE(LabelFNTGlyphDesigner);
|
||
ADD_TEST_CASE(LabelTTFUnicodeChinese);
|
||
ADD_TEST_CASE(LabelFNTUnicodeChinese);
|
||
ADD_TEST_CASE(LabelFNTMultiLineAlignment);
|
||
ADD_TEST_CASE(LabelFNTUNICODELanguages);
|
||
ADD_TEST_CASE(LabelTTFAlignmentNew);
|
||
ADD_TEST_CASE(LabelFNTBounds);
|
||
ADD_TEST_CASE(LabelTTFLongLineWrapping);
|
||
ADD_TEST_CASE(LabelTTFColor);
|
||
ADD_TEST_CASE(LabelTTFFontsTestNew);
|
||
ADD_TEST_CASE(LabelTTFDynamicAlignment);
|
||
ADD_TEST_CASE(LabelTTFCJKWrappingTest);
|
||
ADD_TEST_CASE(LabelTTFUnicodeNew);
|
||
ADD_TEST_CASE(LabelBMFontTestNew);
|
||
ADD_TEST_CASE(LabelTTFDistanceField);
|
||
ADD_TEST_CASE(LabelOutlineAndGlowTest);
|
||
ADD_TEST_CASE(LabelShadowTest);
|
||
ADD_TEST_CASE(LabelCharMapTest);
|
||
ADD_TEST_CASE(LabelCharMapColorTest);
|
||
ADD_TEST_CASE(LabelCrashTest);
|
||
ADD_TEST_CASE(LabelTTFOldNew);
|
||
ADD_TEST_CASE(LabelFontNameTest);
|
||
ADD_TEST_CASE(LabelAlignmentTest);
|
||
ADD_TEST_CASE(LabelIssue4428Test);
|
||
ADD_TEST_CASE(LabelIssue4999Test);
|
||
ADD_TEST_CASE(LabelLineHeightTest);
|
||
ADD_TEST_CASE(LabelAdditionalKerningTest);
|
||
ADD_TEST_CASE(LabelIssue8492Test);
|
||
ADD_TEST_CASE(LabelMultilineWithOutline);
|
||
ADD_TEST_CASE(LabelIssue9255Test);
|
||
ADD_TEST_CASE(LabelSmallDimensionsTest);
|
||
ADD_TEST_CASE(LabelIssue10089Test);
|
||
ADD_TEST_CASE(LabelSystemFontColor);
|
||
ADD_TEST_CASE(LabelIssue10773Test);
|
||
ADD_TEST_CASE(LabelIssue11576Test);
|
||
ADD_TEST_CASE(LabelIssue11699Test);
|
||
ADD_TEST_CASE(LabelIssue12409Test);
|
||
ADD_TEST_CASE(LabelIssue12775Test);
|
||
};
|
||
|
||
LabelTTFAlignmentNew::LabelTTFAlignmentNew()
|
||
{
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
TTFConfig config("fonts/tahoma.ttf",16);
|
||
|
||
auto ttf0 = Label::createWithTTF(config,"Alignment 0\nnew line",TextHAlignment::LEFT);
|
||
ttf0->setPosition(Vec2(s.width/2,(s.height/6)*2 - 30));
|
||
this->addChild(ttf0);
|
||
|
||
auto ttf1 = Label::createWithTTF(config,"Alignment 1\nnew line",TextHAlignment::CENTER);
|
||
ttf1->setPosition(Vec2(s.width/2,(s.height/6)*3 - 30));
|
||
this->addChild(ttf1);
|
||
|
||
auto ttf2 = Label::createWithTTF(config,"Alignment 2\nnew line",TextHAlignment::RIGHT);
|
||
ttf2->setPosition(Vec2(s.width/2,(s.height/6)*4 - 30));
|
||
this->addChild(ttf2);
|
||
}
|
||
|
||
std::string LabelTTFAlignmentNew::title() const
|
||
{
|
||
return "New Label + TTF";
|
||
}
|
||
|
||
std::string LabelTTFAlignmentNew::subtitle() const
|
||
{
|
||
return "Tests alignment values";
|
||
}
|
||
|
||
LabelFNTColorAndOpacity::LabelFNTColorAndOpacity()
|
||
{
|
||
_time = 0;
|
||
|
||
auto col = LayerColor::create( Color4B(128,128,128,255) );
|
||
addChild(col, -10);
|
||
|
||
auto label1 = Label::createWithBMFont("fonts/bitmapFontTest2.fnt", "Test");
|
||
|
||
label1->setAnchorPoint( Vec2(0,0) );
|
||
addChild(label1, 0, kTagBitmapAtlas1);
|
||
auto fade = FadeOut::create(1.0f);
|
||
auto fade_in = fade->reverse();
|
||
auto seq = Sequence::create(fade, fade_in, nullptr);
|
||
auto repeat = RepeatForever::create(seq);
|
||
label1->runAction(repeat);
|
||
|
||
auto label2 = Label::createWithBMFont("fonts/bitmapFontTest2.fnt", "Test");
|
||
label2->setColor( Color3B::RED );
|
||
addChild(label2, 0, kTagBitmapAtlas2);
|
||
auto tint = Sequence::create(TintTo::create(1, 255, 0, 0),
|
||
TintTo::create(1, 0, 255, 0),
|
||
TintTo::create(1, 0, 0, 255),
|
||
nullptr);
|
||
label2->runAction( RepeatForever::create(tint) );
|
||
|
||
auto label3 = Label::createWithBMFont("fonts/bitmapFontTest2.fnt", "Test");
|
||
label3->setAnchorPoint( Vec2(1,1) );
|
||
addChild(label3, 0, kTagBitmapAtlas3);
|
||
|
||
label1->setPosition( VisibleRect::leftBottom() );
|
||
label2->setPosition( VisibleRect::center() );
|
||
label3->setPosition( VisibleRect::rightTop() );
|
||
|
||
schedule(CC_CALLBACK_1(LabelFNTColorAndOpacity::step, this), "step_key");
|
||
}
|
||
|
||
void LabelFNTColorAndOpacity::step(float dt)
|
||
{
|
||
_time += dt;
|
||
char string[15] = {0};
|
||
sprintf(string, "%2.2f Test j", _time);
|
||
|
||
auto label1 = (Label*) getChildByTag(kTagBitmapAtlas1);
|
||
label1->setString(string);
|
||
|
||
auto label2 = (Label*) getChildByTag(kTagBitmapAtlas2);
|
||
label2->setString(string);
|
||
|
||
auto label3 = (Label*) getChildByTag(kTagBitmapAtlas3);
|
||
label3->setString(string);
|
||
}
|
||
|
||
std::string LabelFNTColorAndOpacity::title() const
|
||
{
|
||
return "New Label + .FNT file";
|
||
}
|
||
|
||
std::string LabelFNTColorAndOpacity::subtitle() const
|
||
{
|
||
return "Testing opacity + tint";
|
||
}
|
||
|
||
LabelFNTSpriteActions::LabelFNTSpriteActions()
|
||
{
|
||
_time = 0;
|
||
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
auto drawNode = DrawNode::create();
|
||
drawNode->drawLine( Vec2(0, s.height/2), Vec2(s.width, s.height/2), Color4F(1.0, 1.0, 1.0, 1.0) );
|
||
drawNode->drawLine( Vec2(s.width/2, 0), Vec2(s.width/2, s.height), Color4F(1.0, 1.0, 1.0, 1.0) );
|
||
addChild(drawNode, -1);
|
||
|
||
// Upper Label
|
||
auto label = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "Bitmap Font Atlas");
|
||
addChild(label);
|
||
|
||
|
||
label->setPosition( Vec2(s.width/2, s.height/2) );
|
||
|
||
auto BChar = (Sprite*) label->getLetter(0);
|
||
auto FChar = (Sprite*) label->getLetter(7);
|
||
auto AChar = (Sprite*) label->getLetter(12);
|
||
|
||
|
||
auto rotate = RotateBy::create(2, 360);
|
||
auto rot_4ever = RepeatForever::create(rotate);
|
||
|
||
auto scale = ScaleBy::create(2, 1.5f);
|
||
auto scale_back = scale->reverse();
|
||
auto scale_seq = Sequence::create(scale, scale_back,nullptr);
|
||
auto scale_4ever = RepeatForever::create(scale_seq);
|
||
|
||
auto jump = JumpBy::create(0.5f, Vec2::ZERO, 60, 1);
|
||
auto jump_4ever = RepeatForever::create(jump);
|
||
|
||
auto fade_out = FadeOut::create(1);
|
||
auto fade_in = FadeIn::create(1);
|
||
auto seq = Sequence::create(fade_out, fade_in, nullptr);
|
||
auto fade_4ever = RepeatForever::create(seq);
|
||
|
||
BChar->runAction(rot_4ever);
|
||
BChar->runAction(scale_4ever);
|
||
FChar->runAction(jump_4ever);
|
||
AChar->runAction(fade_4ever);
|
||
|
||
|
||
// Bottom Label
|
||
auto label2 = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "00.0");
|
||
addChild(label2, 0, kTagBitmapAtlas2);
|
||
label2->setPosition( Vec2(s.width/2.0f, 80) );
|
||
|
||
auto lastChar = (Sprite*) label2->getLetter(3);
|
||
lastChar->runAction( rot_4ever->clone() );
|
||
|
||
schedule(CC_CALLBACK_1(LabelFNTSpriteActions::step, this), 0.1f, "step_key");
|
||
}
|
||
|
||
void LabelFNTSpriteActions::step(float dt)
|
||
{
|
||
_time += dt;
|
||
char string[10] = {0};
|
||
sprintf(string, "%04.1f", _time);
|
||
auto label1 = (Label*) getChildByTag(kTagBitmapAtlas2);
|
||
label1->setString(string);
|
||
}
|
||
|
||
std::string LabelFNTSpriteActions::title() const
|
||
{
|
||
return "New Label + .FNT file";
|
||
}
|
||
|
||
std::string LabelFNTSpriteActions::subtitle() const
|
||
{
|
||
return "Using fonts as Sprite objects. Some characters should rotate.";
|
||
}
|
||
|
||
LabelFNTPadding::LabelFNTPadding()
|
||
{
|
||
auto label = Label::createWithBMFont("fonts/bitmapFontTest4.fnt", "abcdefg");
|
||
addChild(label);
|
||
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
label->setPosition( Vec2(s.width/2, s.height/2) );
|
||
}
|
||
|
||
std::string LabelFNTPadding::title() const
|
||
{
|
||
return "New Label + .FNT file";
|
||
}
|
||
|
||
std::string LabelFNTPadding::subtitle() const
|
||
{
|
||
return "Testing padding";
|
||
}
|
||
|
||
LabelFNTOffset::LabelFNTOffset()
|
||
{
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
Label* label = nullptr;
|
||
label = Label::createWithBMFont("fonts/bitmapFontTest5.fnt", "FaFeFiFoFu");
|
||
addChild(label);
|
||
label->setPosition( Vec2(s.width/2, s.height/2+50) );
|
||
|
||
label = Label::createWithBMFont("fonts/bitmapFontTest5.fnt", "fafefifofu");
|
||
addChild(label);
|
||
label->setPosition( Vec2(s.width/2, s.height/2) );
|
||
|
||
label = Label::createWithBMFont("fonts/bitmapFontTest5.fnt", "aeiou");
|
||
addChild(label);
|
||
label->setPosition( Vec2(s.width/2, s.height/2-50) );
|
||
}
|
||
|
||
std::string LabelFNTOffset::title() const
|
||
{
|
||
return "New Label + .FNT file";
|
||
}
|
||
|
||
std::string LabelFNTOffset::subtitle() const
|
||
{
|
||
return "Rendering should be OK. Testing offset";
|
||
}
|
||
|
||
LabelFNTColor::LabelFNTColor()
|
||
{
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
Label* label = nullptr;
|
||
label = Label::createWithBMFont("fonts/bitmapFontTest5.fnt", "Blue");
|
||
label->setColor( Color3B::BLUE );
|
||
addChild(label);
|
||
label->setPosition( Vec2(s.width/2, s.height/4) );
|
||
|
||
label = Label::createWithBMFont("fonts/bitmapFontTest5.fnt", "Red");
|
||
addChild(label);
|
||
label->setPosition( Vec2(s.width/2, 2*s.height/4) );
|
||
label->setColor( Color3B::RED );
|
||
|
||
label = Label::createWithBMFont("fonts/bitmapFontTest5.fnt", "Green");
|
||
addChild(label);
|
||
label->setPosition( Vec2(s.width/2, 3*s.height/4) );
|
||
label->setColor( Color3B::GREEN );
|
||
label->setString("Green");
|
||
}
|
||
|
||
std::string LabelFNTColor::title() const
|
||
{
|
||
return "New Label + .FNT file";
|
||
}
|
||
|
||
std::string LabelFNTColor::subtitle() const
|
||
{
|
||
return "Testing color";
|
||
}
|
||
|
||
LabelFNTHundredLabels::LabelFNTHundredLabels()
|
||
{
|
||
// Upper Label
|
||
for ( int i=0 ; i < 100;i ++ )
|
||
{
|
||
char str[6] = {0};
|
||
sprintf(str, "-%d-", i);
|
||
auto label = Label::createWithBMFont("fonts/bitmapFontTest.fnt", str);
|
||
addChild(label);
|
||
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
auto p = Vec2( CCRANDOM_0_1() * s.width, CCRANDOM_0_1() * s.height);
|
||
label->setPosition( p );
|
||
}
|
||
}
|
||
|
||
std::string LabelFNTHundredLabels::title() const
|
||
{
|
||
return "New Label + .FNT file";
|
||
}
|
||
|
||
std::string LabelFNTHundredLabels::subtitle() const
|
||
{
|
||
return "Creating several Labels using the same FNT file; should be fast";
|
||
}
|
||
|
||
LabelFNTMultiLine::LabelFNTMultiLine()
|
||
{
|
||
Size s;
|
||
|
||
// Left
|
||
auto label1 = Label::createWithBMFont("fonts/bitmapFontTest3.fnt", " Multi line\nLeft");
|
||
label1->setAnchorPoint(Vec2(0,0));
|
||
addChild(label1, 0, kTagBitmapAtlas1);
|
||
|
||
s = label1->getContentSize();
|
||
CCLOG("content size: %.2fx%.2f", s.width, s.height);
|
||
|
||
|
||
// Center
|
||
auto label2 = Label::createWithBMFont( "fonts/bitmapFontTest3.fnt", "Multi line\nCenter");
|
||
addChild(label2, 0, kTagBitmapAtlas2);
|
||
|
||
s= label2->getContentSize();
|
||
CCLOG("content size: %.2fx%.2f", s.width, s.height);
|
||
|
||
// right
|
||
auto label3 = Label::createWithBMFont("fonts/bitmapFontTest3.fnt", "Multi line\nRight\nThree lines Three");
|
||
label3->setAnchorPoint(Vec2(1, 1));
|
||
addChild(label3, 0, kTagBitmapAtlas3);
|
||
|
||
s = label3->getContentSize();
|
||
CCLOG("content size: %.2fx%.2f", s.width, s.height);
|
||
|
||
label1->setPosition(VisibleRect::leftBottom());
|
||
label2->setPosition(VisibleRect::center());
|
||
label3->setPosition(VisibleRect::rightTop());
|
||
}
|
||
|
||
std::string LabelFNTMultiLine::title() const
|
||
{
|
||
return "New Label + .FNT file";
|
||
}
|
||
|
||
std::string LabelFNTMultiLine::subtitle() const
|
||
{
|
||
return "Multiline + anchor point";
|
||
}
|
||
|
||
LabelFNTandTTFEmpty::LabelFNTandTTFEmpty()
|
||
{
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
// LabelBMFont
|
||
auto label1 = Label::createWithBMFont("fonts/bitmapFontTest3.fnt", "", TextHAlignment::CENTER, s.width);
|
||
addChild(label1, 0, kTagBitmapAtlas1);
|
||
label1->setPosition(Vec2(s.width/2, s.height - 100));
|
||
|
||
// LabelTTF
|
||
TTFConfig ttfConfig("fonts/arial.ttf",24);
|
||
auto label2 = Label::createWithTTF(ttfConfig,"", TextHAlignment::CENTER,s.width);
|
||
addChild(label2, 0, kTagBitmapAtlas2);
|
||
label2->setPosition(Vec2(s.width/2, s.height / 2));
|
||
|
||
auto label3 = Label::createWithCharMap("fonts/tuffy_bold_italic-charmap.plist");
|
||
addChild(label3, 0, kTagBitmapAtlas3);
|
||
label3->setPosition(Vec2(s.width/2, 100));
|
||
|
||
schedule(CC_CALLBACK_1(LabelFNTandTTFEmpty::updateStrings, this), 1.0f, "update_strings_key");
|
||
|
||
setEmpty = false;
|
||
}
|
||
|
||
void LabelFNTandTTFEmpty::updateStrings(float dt)
|
||
{
|
||
auto label1 = static_cast<Label*>( getChildByTag(kTagBitmapAtlas1) );
|
||
auto label2 = static_cast<Label*>( getChildByTag(kTagBitmapAtlas2) );
|
||
auto label3 = static_cast<Label*>( getChildByTag(kTagBitmapAtlas3) );
|
||
|
||
if( ! setEmpty )
|
||
{
|
||
label1->setString("not empty");
|
||
label2->setString("not empty");
|
||
label3->setString("hi");
|
||
|
||
setEmpty = true;
|
||
}
|
||
else
|
||
{
|
||
label1->setString("");
|
||
label2->setString("");
|
||
label3->setString("");
|
||
|
||
setEmpty = false;
|
||
}
|
||
}
|
||
|
||
std::string LabelFNTandTTFEmpty::title() const
|
||
{
|
||
return "New Label : .FNT file & .TTF file";
|
||
}
|
||
|
||
std::string LabelFNTandTTFEmpty::subtitle() const
|
||
{
|
||
return "3 empty labels: new Label + FNT/TTF/CharMap";
|
||
}
|
||
|
||
LabelFNTRetina::LabelFNTRetina()
|
||
{
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
// LabelBMFont
|
||
auto label1 = Label::createWithBMFont("fonts/konqa32.fnt", "TESTING RETINA DISPLAY");
|
||
addChild(label1);
|
||
label1->setPosition(Vec2(s.width/2, s.height/2));
|
||
}
|
||
|
||
std::string LabelFNTRetina::title() const
|
||
{
|
||
return "New Label + .FNT file";
|
||
}
|
||
|
||
std::string LabelFNTRetina::subtitle() const
|
||
{
|
||
return "loading arista16 or arista16-hd";
|
||
}
|
||
|
||
LabelFNTGlyphDesigner::LabelFNTGlyphDesigner()
|
||
{
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
auto layer = LayerColor::create(Color4B(128,128,128,255));
|
||
addChild(layer, -10);
|
||
|
||
// LabelBMFont
|
||
auto label1 = Label::createWithBMFont("fonts/futura-48.fnt", "Testing Glyph Designer");
|
||
addChild(label1);
|
||
label1->setPosition(Vec2(s.width/2, s.height/2));
|
||
}
|
||
|
||
std::string LabelFNTGlyphDesigner::title() const
|
||
{
|
||
return "New Label + .FNT file";
|
||
}
|
||
|
||
std::string LabelFNTGlyphDesigner::subtitle() const
|
||
{
|
||
return "Testing Glyph Designer: you should see a font with shawdows and outline";
|
||
}
|
||
|
||
LabelTTFUnicodeChinese::LabelTTFUnicodeChinese()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
// Adding "啊" letter at the end of string to make VS2012 happy, otherwise VS will generate errors
|
||
// like "Error 3 error C2146: syntax error : missing ')' before identifier 'label'";
|
||
TTFConfig ttfConfig("fonts/HKYuanMini.ttf",28,GlyphCollection::CUSTOM, "美好的一天啊");
|
||
auto label = Label::createWithTTF(ttfConfig,"美好的一天啊", TextHAlignment::CENTER, size.width);
|
||
|
||
if(label) {
|
||
label->setPosition(Vec2(size.width / 2, size.height /2));
|
||
this->addChild(label);
|
||
}
|
||
}
|
||
|
||
std::string LabelTTFUnicodeChinese::title() const
|
||
{
|
||
return "New Label + .TTF file Chinese";
|
||
}
|
||
|
||
std::string LabelTTFUnicodeChinese::subtitle() const
|
||
{
|
||
return "Testing new Label + TTF with Chinese character";
|
||
}
|
||
|
||
LabelFNTUnicodeChinese::LabelFNTUnicodeChinese()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
auto label = Label::createWithBMFont("fonts/bitmapFontChinese.fnt", "中国");
|
||
label->setPosition(Vec2(size.width / 2, size.height /2));
|
||
this->addChild(label);
|
||
}
|
||
|
||
std::string LabelFNTUnicodeChinese::title() const
|
||
{
|
||
return "New Label + .FNT file Chinese";
|
||
}
|
||
|
||
std::string LabelFNTUnicodeChinese::subtitle() const
|
||
{
|
||
return "Testing new Label + FNT with Chinese character";
|
||
}
|
||
|
||
|
||
/// BitmapFontMultiLineAlignmentNew
|
||
|
||
#define LongSentencesExample "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
|
||
#define LineBreaksExample "Lorem ipsum dolor\nsit amet\nconsectetur adipisicing elit\nblah\nblah"
|
||
#define MixedExample "ABC\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt\nDEF"
|
||
|
||
#define ArrowsMax 0.95
|
||
#define ArrowsMin 0.7
|
||
|
||
#define LeftAlign 0
|
||
#define CenterAlign 1
|
||
#define RightAlign 2
|
||
|
||
#define LongSentences 0
|
||
#define LineBreaks 1
|
||
#define Mixed 2
|
||
|
||
static float alignmentItemPadding = 50;
|
||
static float menuItemPaddingCenter = 50;
|
||
|
||
LabelFNTMultiLineAlignment::LabelFNTMultiLineAlignment()
|
||
{
|
||
auto listener = EventListenerTouchAllAtOnce::create();
|
||
listener->onTouchesBegan = CC_CALLBACK_2(LabelFNTMultiLineAlignment::onTouchesBegan, this);
|
||
listener->onTouchesMoved = CC_CALLBACK_2(LabelFNTMultiLineAlignment::onTouchesMoved, this);
|
||
listener->onTouchesEnded = CC_CALLBACK_2(LabelFNTMultiLineAlignment::onTouchesEnded, this);
|
||
|
||
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
|
||
// ask director the the window size
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
// create and initialize a Label
|
||
this->_labelShouldRetain = Label::createWithBMFont("fonts/markerFelt.fnt", LongSentencesExample, TextHAlignment::CENTER, size.width/1.5);
|
||
this->_labelShouldRetain->retain();
|
||
|
||
this->_arrowsBarShouldRetain = Sprite::create("Images/arrowsBar.png");
|
||
this->_arrowsBarShouldRetain->retain();
|
||
this->_arrowsShouldRetain = Sprite::create("Images/arrows.png");
|
||
this->_arrowsShouldRetain->retain();
|
||
|
||
MenuItemFont::setFontSize(20);
|
||
auto longSentences = MenuItemFont::create("Long Flowing Sentences", CC_CALLBACK_1(LabelFNTMultiLineAlignment::stringChanged, this));
|
||
auto lineBreaks = MenuItemFont::create("Short Sentences With Intentional Line Breaks", CC_CALLBACK_1(LabelFNTMultiLineAlignment::stringChanged, this));
|
||
auto mixed = MenuItemFont::create("Long Sentences Mixed With Intentional Line Breaks", CC_CALLBACK_1(LabelFNTMultiLineAlignment::stringChanged, this));
|
||
auto stringMenu = Menu::create(longSentences, lineBreaks, mixed, nullptr);
|
||
stringMenu->alignItemsVertically();
|
||
|
||
longSentences->setColor(Color3B::RED);
|
||
_lastSentenceItem = longSentences;
|
||
longSentences->setTag(LongSentences);
|
||
lineBreaks->setTag(LineBreaks);
|
||
mixed->setTag(Mixed);
|
||
|
||
MenuItemFont::setFontSize(30);
|
||
|
||
auto left = MenuItemFont::create("Left", CC_CALLBACK_1(LabelFNTMultiLineAlignment::alignmentChanged, this));
|
||
auto center = MenuItemFont::create("Center", CC_CALLBACK_1(LabelFNTMultiLineAlignment::alignmentChanged, this));
|
||
auto right = MenuItemFont::create("Right", CC_CALLBACK_1(LabelFNTMultiLineAlignment::alignmentChanged, this));
|
||
auto alignmentMenu = Menu::create(left, center, right, nullptr);
|
||
alignmentMenu->alignItemsHorizontallyWithPadding(alignmentItemPadding);
|
||
|
||
center->setColor(Color3B::RED);
|
||
_lastAlignmentItem = center;
|
||
left->setTag(LeftAlign);
|
||
center->setTag(CenterAlign);
|
||
right->setTag(RightAlign);
|
||
|
||
// position the label on the center of the screen
|
||
this->_labelShouldRetain->setPosition(Vec2(size.width/2, size.height/2));
|
||
|
||
this->_arrowsBarShouldRetain->setVisible(false);
|
||
|
||
float arrowsWidth = (ArrowsMax - ArrowsMin) * size.width;
|
||
this->_arrowsBarShouldRetain->setScaleX(arrowsWidth / this->_arrowsBarShouldRetain->getContentSize().width);
|
||
this->_arrowsBarShouldRetain->setPosition(Vec2(((ArrowsMax + ArrowsMin) / 2) * size.width, this->_labelShouldRetain->getPosition().y));
|
||
|
||
this->snapArrowsToEdge();
|
||
|
||
stringMenu->setPosition(Vec2(size.width/2, size.height - menuItemPaddingCenter));
|
||
alignmentMenu->setPosition(Vec2(size.width/2, menuItemPaddingCenter+15));
|
||
|
||
this->addChild(this->_labelShouldRetain);
|
||
this->addChild(this->_arrowsBarShouldRetain);
|
||
this->addChild(this->_arrowsShouldRetain);
|
||
this->addChild(stringMenu);
|
||
this->addChild(alignmentMenu);
|
||
}
|
||
|
||
LabelFNTMultiLineAlignment::~LabelFNTMultiLineAlignment()
|
||
{
|
||
this->_labelShouldRetain->release();
|
||
this->_arrowsBarShouldRetain->release();
|
||
this->_arrowsShouldRetain->release();
|
||
}
|
||
|
||
std::string LabelFNTMultiLineAlignment::title() const
|
||
{
|
||
return "";
|
||
}
|
||
|
||
std::string LabelFNTMultiLineAlignment::subtitle() const
|
||
{
|
||
return "";
|
||
}
|
||
|
||
void LabelFNTMultiLineAlignment::stringChanged(cocos2d::Ref *sender)
|
||
{
|
||
auto item = (MenuItemFont*)sender;
|
||
item->setColor(Color3B::RED);
|
||
this->_lastAlignmentItem->setColor(Color3B::WHITE);
|
||
this->_lastAlignmentItem = item;
|
||
|
||
switch(item->getTag())
|
||
{
|
||
case LongSentences:
|
||
this->_labelShouldRetain->setString(LongSentencesExample);
|
||
break;
|
||
case LineBreaks:
|
||
this->_labelShouldRetain->setString(LineBreaksExample);
|
||
break;
|
||
case Mixed:
|
||
this->_labelShouldRetain->setString(MixedExample);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
this->snapArrowsToEdge();
|
||
}
|
||
|
||
void LabelFNTMultiLineAlignment::alignmentChanged(cocos2d::Ref *sender)
|
||
{
|
||
auto item = static_cast<MenuItemFont*>(sender);
|
||
item->setColor(Color3B::RED);
|
||
this->_lastAlignmentItem->setColor(Color3B::WHITE);
|
||
this->_lastAlignmentItem = item;
|
||
|
||
switch(item->getTag())
|
||
{
|
||
case LeftAlign:
|
||
this->_labelShouldRetain->setAlignment(TextHAlignment::LEFT);
|
||
break;
|
||
case CenterAlign:
|
||
this->_labelShouldRetain->setAlignment(TextHAlignment::CENTER);
|
||
break;
|
||
case RightAlign:
|
||
this->_labelShouldRetain->setAlignment(TextHAlignment::RIGHT);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
this->snapArrowsToEdge();
|
||
}
|
||
|
||
void LabelFNTMultiLineAlignment::onTouchesBegan(const std::vector<Touch*>& touches, cocos2d::Event *event)
|
||
{
|
||
auto touch = touches[0];
|
||
auto location = touch->getLocationInView();
|
||
|
||
if (this->_arrowsShouldRetain->getBoundingBox().containsPoint(location))
|
||
{
|
||
_drag = true;
|
||
this->_arrowsBarShouldRetain->setVisible(true);
|
||
}
|
||
}
|
||
|
||
void LabelFNTMultiLineAlignment::onTouchesEnded(const std::vector<Touch*>& touches, cocos2d::Event *event)
|
||
{
|
||
_drag = false;
|
||
this->snapArrowsToEdge();
|
||
|
||
this->_arrowsBarShouldRetain->setVisible(false);
|
||
}
|
||
|
||
void LabelFNTMultiLineAlignment::onTouchesMoved(const std::vector<Touch*>& touches, cocos2d::Event *event)
|
||
{
|
||
if (! _drag)
|
||
{
|
||
return;
|
||
}
|
||
|
||
auto touch = touches[0];
|
||
auto location = touch->getLocationInView();
|
||
|
||
auto winSize = Director::getInstance()->getWinSize();
|
||
|
||
this->_arrowsShouldRetain->setPosition(Vec2(MAX(MIN(location.x, ArrowsMax*winSize.width), ArrowsMin*winSize.width),
|
||
this->_arrowsShouldRetain->getPosition().y));
|
||
|
||
float labelWidth = fabs(this->_arrowsShouldRetain->getPosition().x - this->_labelShouldRetain->getPosition().x) * 2;
|
||
|
||
this->_labelShouldRetain->setMaxLineWidth(labelWidth);
|
||
}
|
||
|
||
void LabelFNTMultiLineAlignment::snapArrowsToEdge()
|
||
{
|
||
this->_arrowsShouldRetain->setPosition(Vec2(this->_labelShouldRetain->getPosition().x + this->_labelShouldRetain->getContentSize().width/2,
|
||
this->_labelShouldRetain->getPosition().y));
|
||
}
|
||
|
||
/// BMFontUnicodeNew
|
||
LabelFNTUNICODELanguages::LabelFNTUNICODELanguages()
|
||
{
|
||
auto strings = FileUtils::getInstance()->getValueMapFromFile("fonts/strings.xml");
|
||
std::string chinese = strings["chinese1"].asString();
|
||
std::string russian = strings["russian"].asString();
|
||
std::string spanish = strings["spanish"].asString();
|
||
std::string japanese = strings["japanese"].asString();
|
||
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
auto label1 = Label::createWithBMFont("fonts/arial-unicode-26.fnt", spanish, TextHAlignment::CENTER, 200);
|
||
addChild(label1);
|
||
label1->setPosition(Vec2(s.width/2, s.height/5*3));
|
||
|
||
auto label2 = Label::createWithBMFont("fonts/arial-unicode-26.fnt", chinese);
|
||
addChild(label2);
|
||
label2->setPosition(Vec2(s.width/2, s.height/5*2.5));
|
||
|
||
auto label3 = Label::createWithBMFont("fonts/arial-26-en-ru.fnt", russian);
|
||
addChild(label3);
|
||
label3->setPosition(Vec2(s.width/2, s.height/5*2));
|
||
|
||
auto label4 = Label::createWithBMFont("fonts/arial-unicode-26.fnt", japanese);
|
||
addChild(label4);
|
||
label4->setPosition(Vec2(s.width/2, s.height/5*1.5));
|
||
}
|
||
|
||
std::string LabelFNTUNICODELanguages::title() const
|
||
{
|
||
return "New Label + .FNT + UNICODE";
|
||
}
|
||
|
||
std::string LabelFNTUNICODELanguages::subtitle() const
|
||
{
|
||
return "You should see 4 differnt labels:\nIn Spanish, Chinese, Russian and Korean";
|
||
}
|
||
|
||
LabelFNTBounds::LabelFNTBounds()
|
||
{
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
auto layer = LayerColor::create(Color4B(128,128,128,255));
|
||
addChild(layer, -10);
|
||
|
||
// LabelBMFont
|
||
auto label1 = Label::createWithBMFont("fonts/boundsTestFont.fnt", "Testing Glyph Designer", TextHAlignment::CENTER,s.width);
|
||
addChild(label1);
|
||
label1->setPosition(Vec2(s.width/2, s.height/2));
|
||
|
||
auto drawNode = DrawNode::create();
|
||
auto labelSize = label1->getContentSize();
|
||
auto origin = Director::getInstance()->getWinSize();
|
||
|
||
origin.width = origin.width / 2 - (labelSize.width / 2);
|
||
origin.height = origin.height / 2 - (labelSize.height / 2);
|
||
|
||
Vec2 vertices[4]=
|
||
{
|
||
Vec2(origin.width, origin.height),
|
||
Vec2(labelSize.width + origin.width, origin.height),
|
||
Vec2(labelSize.width + origin.width, labelSize.height + origin.height),
|
||
Vec2(origin.width, labelSize.height + origin.height)
|
||
};
|
||
drawNode->drawPoly(vertices, 4, true, Color4F(1.0, 1.0, 1.0, 1.0));
|
||
addChild(drawNode);
|
||
}
|
||
|
||
std::string LabelFNTBounds::title() const
|
||
{
|
||
return "New Label + .FNT + Bounds";
|
||
}
|
||
|
||
std::string LabelFNTBounds::subtitle() const
|
||
{
|
||
return "You should see string enclosed by a box";
|
||
}
|
||
|
||
LabelTTFLongLineWrapping::LabelTTFLongLineWrapping()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
// Long sentence
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 14);
|
||
auto label1 = Label::createWithTTF(ttfConfig, LongSentencesExample, TextHAlignment::CENTER,size.width);
|
||
label1->setPosition( Vec2(size.width/2, size.height/2) );
|
||
label1->setAnchorPoint(Vec2(0.5, 1.0));
|
||
addChild(label1);
|
||
}
|
||
|
||
std::string LabelTTFLongLineWrapping::title() const
|
||
{
|
||
return "New Label + .TTF";
|
||
}
|
||
|
||
std::string LabelTTFLongLineWrapping::subtitle() const
|
||
{
|
||
return "Uses the new Label with TTF. Testing auto-wrapping";
|
||
}
|
||
|
||
LabelTTFColor::LabelTTFColor()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 18);
|
||
// Green
|
||
auto label1 = Label::createWithTTF(ttfConfig,"Green", TextHAlignment::CENTER, size.width);
|
||
label1->setPosition( Vec2(size.width/2, size.height * 0.3f) );
|
||
label1->setTextColor( Color4B::GREEN );
|
||
addChild(label1);
|
||
|
||
// Red
|
||
auto label2 = Label::createWithTTF(ttfConfig,"Red", TextHAlignment::CENTER, size.width);
|
||
label2->setPosition( Vec2(size.width/2, size.height * 0.4f) );
|
||
label2->setTextColor( Color4B::RED );
|
||
addChild(label2);
|
||
|
||
// Blue
|
||
auto label3 = Label::createWithTTF(ttfConfig,"Blue", TextHAlignment::CENTER, size.width);
|
||
label3->setPosition( Vec2(size.width/2, size.height * 0.5f) );
|
||
label3->setTextColor( Color4B::BLUE );
|
||
addChild(label3);
|
||
}
|
||
|
||
std::string LabelTTFColor::title() const
|
||
{
|
||
return "New Label + .TTF";
|
||
}
|
||
|
||
std::string LabelTTFColor::subtitle() const
|
||
{
|
||
return "Uses the new Label with TTF. Testing Color";
|
||
}
|
||
|
||
LabelTTFDynamicAlignment::LabelTTFDynamicAlignment()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 23);
|
||
_label = Label::createWithTTF(ttfConfig,LongSentencesExample, TextHAlignment::CENTER, size.width);
|
||
_label->setPosition( Vec2(size.width/2, size.height/2) );
|
||
|
||
auto menu = Menu::create(
|
||
MenuItemFont::create("Left", CC_CALLBACK_1(LabelTTFDynamicAlignment::setAlignmentLeft, this)),
|
||
MenuItemFont::create("Center", CC_CALLBACK_1(LabelTTFDynamicAlignment::setAlignmentCenter, this)),
|
||
MenuItemFont::create("Right", CC_CALLBACK_1(LabelTTFDynamicAlignment::setAlignmentRight, this)),
|
||
nullptr);
|
||
|
||
menu->alignItemsVerticallyWithPadding(4);
|
||
menu->setPosition(Vec2(50, size.height / 4 ));
|
||
|
||
addChild(_label);
|
||
this->addChild(menu);
|
||
}
|
||
|
||
void LabelTTFDynamicAlignment::updateAlignment()
|
||
{
|
||
if (_label)
|
||
{
|
||
_label->setAlignment(_horizAlign);
|
||
}
|
||
}
|
||
|
||
void LabelTTFDynamicAlignment::setAlignmentLeft(Ref* sender)
|
||
{
|
||
_horizAlign = TextHAlignment::LEFT;
|
||
this->updateAlignment();
|
||
}
|
||
|
||
void LabelTTFDynamicAlignment::setAlignmentCenter(Ref* sender)
|
||
{
|
||
_horizAlign = TextHAlignment::CENTER;
|
||
this->updateAlignment();
|
||
}
|
||
|
||
void LabelTTFDynamicAlignment::setAlignmentRight(Ref* sender)
|
||
{
|
||
_horizAlign = TextHAlignment::RIGHT;
|
||
this->updateAlignment();
|
||
}
|
||
|
||
std::string LabelTTFDynamicAlignment::title() const
|
||
{
|
||
return "New Label + .TTF";
|
||
}
|
||
|
||
std::string LabelTTFDynamicAlignment::subtitle() const
|
||
{
|
||
return "Uses the new Label with TTF. Testing alignment";
|
||
}
|
||
|
||
//
|
||
// NewLabelTTF Chinese/Japanese/Korean wrapping test
|
||
//
|
||
LabelTTFCJKWrappingTest::LabelTTFCJKWrappingTest()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
auto drawNode = DrawNode::create();
|
||
drawNode->setAnchorPoint(Vec2(0, 0));
|
||
this->addChild(drawNode);
|
||
drawNode->drawSegment(
|
||
Vec2(size.width * 0.1, size.height * 0.8),
|
||
Vec2(size.width * 0.1, 0), 1, Color4F(1, 0, 0, 1));
|
||
drawNode->drawSegment(
|
||
Vec2(size.width * 0.85, size.height * 0.8),
|
||
Vec2(size.width * 0.85, 0), 1, Color4F(1, 0, 0, 1));
|
||
|
||
TTFConfig ttfConfig("fonts/HKYuanMini.ttf", 25, GlyphCollection::DYNAMIC);
|
||
auto label1 = Label::createWithTTF(ttfConfig,
|
||
"你好,Cocos2d-x v3的New Label.", TextHAlignment::LEFT, size.width * 0.75);
|
||
if(label1) {
|
||
label1->setTextColor(Color4B(128, 255, 255, 255));
|
||
label1->setPosition(Vec2(size.width * 0.1, size.height * 0.6));
|
||
label1->setAnchorPoint(Vec2(0, 0.5));
|
||
this->addChild(label1);
|
||
}
|
||
|
||
auto label2 = Label::createWithTTF(ttfConfig,
|
||
"早上好,Cocos2d-x v3的New Label.", TextHAlignment::LEFT, size.width * 0.75);
|
||
if(label2) {
|
||
label2->setTextColor(Color4B(255, 128, 255, 255));
|
||
label2->setPosition(Vec2(size.width * 0.1, size.height * 0.4));
|
||
label2->setAnchorPoint(Vec2(0, 0.5));
|
||
this->addChild(label2);
|
||
}
|
||
|
||
auto label3 = Label::createWithTTF(ttfConfig,
|
||
"美好的一天啊美好的一天啊美好的一天啊", TextHAlignment::LEFT, size.width * 0.75);
|
||
if(label3) {
|
||
label3->setTextColor(Color4B(255, 255, 128, 255));
|
||
label3->setPosition(Vec2(size.width * 0.1, size.height * 0.2));
|
||
label3->setAnchorPoint(Vec2(0, 0.5));
|
||
this->addChild(label3);
|
||
}
|
||
}
|
||
|
||
std::string LabelTTFCJKWrappingTest::title() const
|
||
{
|
||
return "New Label + .TTF";
|
||
}
|
||
|
||
std::string LabelTTFCJKWrappingTest::subtitle() const
|
||
{
|
||
return "New Label with CJK + ASCII characters\n"
|
||
"Characters should stay in the correct position";
|
||
}
|
||
|
||
//
|
||
// NewLabelTTF unicode test
|
||
//
|
||
LabelTTFUnicodeNew::LabelTTFUnicodeNew()
|
||
{
|
||
auto strings = FileUtils::getInstance()->getValueMapFromFile("fonts/strings.xml");
|
||
std::string chinese = strings["chinese1"].asString();
|
||
|
||
// std::string russian = strings["russian"].asString();
|
||
// std::string spanish = strings["spanish"].asString();
|
||
// std::string japanese = strings["japanese"].asString();
|
||
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
float vStep = size.height/9;
|
||
float vSize = size.height;
|
||
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 23,GlyphCollection::ASCII);
|
||
// Spanish
|
||
auto label1 = Label::createWithTTF(ttfConfig,"Buen día, ¿cómo te llamas?", TextHAlignment::CENTER, size.width);
|
||
label1->setPosition( Vec2(size.width/2, vSize - (vStep * 4.5)) );
|
||
addChild(label1);
|
||
|
||
// German
|
||
auto label2 = Label::createWithTTF(ttfConfig,"In welcher Straße haben Sie gelebt?", TextHAlignment::CENTER,size.width);
|
||
label2->setPosition( Vec2(size.width/2, vSize - (vStep * 5.5)) );
|
||
addChild(label2);
|
||
|
||
// chinese
|
||
ttfConfig.fontFilePath = "fonts/HKYuanMini.ttf";
|
||
ttfConfig.glyphs = GlyphCollection::CUSTOM;
|
||
ttfConfig.customGlyphs = chinese.c_str();
|
||
auto label3 = Label::createWithTTF(ttfConfig,chinese, TextHAlignment::CENTER,size.width);
|
||
if(label3) {
|
||
label3->setPosition( Vec2(size.width/2, vSize - (vStep * 6.5)) );
|
||
addChild(label3);
|
||
}
|
||
}
|
||
|
||
std::string LabelTTFUnicodeNew::title() const
|
||
{
|
||
return "New Label + TTF unicode";
|
||
}
|
||
|
||
std::string LabelTTFUnicodeNew::subtitle() const
|
||
{
|
||
return "Uses the new Label with TTF. Testing unicode";
|
||
}
|
||
|
||
LabelTTFFontsTestNew::LabelTTFFontsTestNew()
|
||
{
|
||
const char *ttfpaths[] = {
|
||
"fonts/A Damn Mess.ttf",
|
||
"fonts/Abberancy.ttf",
|
||
"fonts/Abduction.ttf",
|
||
"fonts/American Typewriter.ttf",
|
||
"fonts/Paint Boy.ttf",
|
||
"fonts/Schwarzwald.ttf",
|
||
"fonts/Scissor Cuts.ttf",
|
||
};
|
||
#define arraysize(ar) (sizeof(ar) / sizeof(ar[0]))
|
||
|
||
auto size = Director::getInstance()->getWinSize();
|
||
TTFConfig ttfConfig(ttfpaths[0],20, GlyphCollection::NEHE);
|
||
for(size_t i=0;i < arraysize(ttfpaths); ++i) {
|
||
ttfConfig.fontFilePath = ttfpaths[i];
|
||
auto label = Label::createWithTTF(ttfConfig, ttfpaths[i], TextHAlignment::CENTER,0);
|
||
if( label ) {
|
||
label->setPosition( Vec2(size.width/2, ((size.height * 0.6)/arraysize(ttfpaths) * i) + (size.height/5)));
|
||
addChild(label);
|
||
} else {
|
||
log("ERROR: Cannot load: %s", ttfpaths[i]);
|
||
}
|
||
}
|
||
}
|
||
|
||
std::string LabelTTFFontsTestNew::title() const
|
||
{
|
||
return "New Label + TTF";
|
||
}
|
||
|
||
std::string LabelTTFFontsTestNew::subtitle() const
|
||
{
|
||
return "";
|
||
}
|
||
|
||
LabelBMFontTestNew::LabelBMFontTestNew()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
auto label1 = Label::createWithBMFont("fonts/bitmapFontTest2.fnt", "Hello World, this is testing the new Label using fnt file", TextHAlignment::CENTER, size.width);
|
||
label1->setPosition( Vec2(size.width/2, size.height/2) );
|
||
addChild(label1);
|
||
}
|
||
|
||
std::string LabelBMFontTestNew::title() const
|
||
{
|
||
return "New Label + FNT";
|
||
}
|
||
|
||
std::string LabelBMFontTestNew::subtitle() const
|
||
{
|
||
return "Uses the new Label with .FNT file";
|
||
}
|
||
|
||
LabelTTFDistanceField::LabelTTFDistanceField()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 40, GlyphCollection::DYNAMIC,nullptr,true);
|
||
|
||
auto label1 = Label::createWithTTF(ttfConfig,"Distance Field",TextHAlignment::CENTER,size.width);
|
||
label1->setPosition( Vec2(size.width/2, size.height * 0.6f) );
|
||
label1->setTextColor( Color4B::GREEN );
|
||
addChild(label1);
|
||
|
||
auto action = Sequence::create(
|
||
DelayTime::create(1.0f),
|
||
ScaleTo::create(6.0f,5.0f,5.0f),
|
||
ScaleTo::create(6.0f,1.0f,1.0f),
|
||
nullptr);
|
||
label1->runAction(RepeatForever::create(action));
|
||
|
||
auto label2 = Label::createWithTTF(ttfConfig,"Distance Field",TextHAlignment::CENTER,size.width);
|
||
label2->setPosition( Vec2(size.width/2, size.height * 0.3f) );
|
||
label2->setTextColor( Color4B::RED );
|
||
addChild(label2);
|
||
}
|
||
|
||
std::string LabelTTFDistanceField::title() const
|
||
{
|
||
return "New Label + .TTF";
|
||
}
|
||
|
||
std::string LabelTTFDistanceField::subtitle() const
|
||
{
|
||
return "Testing rendering base on DistanceField";
|
||
}
|
||
|
||
LabelOutlineAndGlowTest::LabelOutlineAndGlowTest()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
auto bg = LayerColor::create(Color4B(200,191,231,255));
|
||
this->addChild(bg);
|
||
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 40, GlyphCollection::DYNAMIC,nullptr,true);
|
||
|
||
auto label1 = Label::createWithTTF(ttfConfig,"Glow", TextHAlignment::CENTER, size.width);
|
||
label1->setPosition( Vec2(size.width/2, size.height*0.7) );
|
||
label1->setTextColor( Color4B::GREEN );
|
||
label1->enableGlow(Color4B::YELLOW);
|
||
addChild(label1);
|
||
|
||
ttfConfig.outlineSize = 1;
|
||
auto label2 = Label::createWithTTF(ttfConfig,"Outline", TextHAlignment::CENTER, size.width);
|
||
label2->setPosition( Vec2(size.width/2, size.height*0.6) );
|
||
label2->setTextColor( Color4B::RED );
|
||
label2->enableOutline(Color4B::BLUE);
|
||
addChild(label2);
|
||
|
||
ttfConfig.outlineSize = 2;
|
||
auto label3 = Label::createWithTTF(ttfConfig,"Outline", TextHAlignment::CENTER, size.width);
|
||
label3->setPosition( Vec2(size.width/2, size.height*0.48) );
|
||
label3->setTextColor( Color4B::RED );
|
||
label3->enableOutline(Color4B::BLUE);
|
||
addChild(label3);
|
||
|
||
ttfConfig.outlineSize = 3;
|
||
auto label4 = Label::createWithTTF(ttfConfig,"Outline", TextHAlignment::CENTER, size.width);
|
||
label4->setPosition( Vec2(size.width/2, size.height*0.36) );
|
||
label4->setTextColor( Color4B::RED );
|
||
label4->enableOutline(Color4B::BLUE);
|
||
addChild(label4);
|
||
}
|
||
|
||
std::string LabelOutlineAndGlowTest::title() const
|
||
{
|
||
return "New Label";
|
||
}
|
||
|
||
std::string LabelOutlineAndGlowTest::subtitle() const
|
||
{
|
||
return "Testing outline and glow of label";
|
||
}
|
||
|
||
LabelShadowTest::LabelShadowTest()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
auto bg = LayerColor::create(Color4B(200,191,231,255));
|
||
this->addChild(bg);
|
||
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 40, GlyphCollection::DYNAMIC,nullptr,true);
|
||
|
||
shadowLabelTTF = Label::createWithTTF(ttfConfig,"TTF:Shadow");
|
||
shadowLabelTTF->setPosition( Vec2(size.width/2, size.height*0.65f) );
|
||
shadowLabelTTF->setTextColor( Color4B::RED );
|
||
shadowLabelTTF->enableShadow(Color4B::BLACK);
|
||
addChild(shadowLabelTTF);
|
||
|
||
shadowLabelOutline = Label::createWithTTF(ttfConfig,"TTF:Shadow");
|
||
shadowLabelOutline->setPosition( Vec2(size.width/2, size.height*0.5f) );
|
||
shadowLabelOutline->setTextColor( Color4B::RED );
|
||
shadowLabelOutline->enableOutline(Color4B::YELLOW,1);
|
||
shadowLabelOutline->enableShadow(Color4B::GREEN);
|
||
addChild(shadowLabelOutline);
|
||
|
||
shadowLabelBMFont = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "BMFont:Shadow");
|
||
shadowLabelBMFont->setPosition( Vec2(size.width/2, size.height*0.35f) );
|
||
shadowLabelBMFont->setColor( Color3B::RED );
|
||
shadowLabelBMFont->enableShadow(Color4B::GREEN);
|
||
addChild(shadowLabelBMFont);
|
||
|
||
auto slider = ui::Slider::create();
|
||
slider->setTag(1);
|
||
slider->setTouchEnabled(true);
|
||
slider->loadBarTexture("cocosui/sliderTrack.png");
|
||
slider->loadSlidBallTextures("cocosui/sliderThumb.png", "cocosui/sliderThumb.png", "");
|
||
slider->loadProgressBarTexture("cocosui/sliderProgress.png");
|
||
slider->setPosition(Vec2(size.width / 2.0f, size.height * 0.15f + slider->getContentSize().height * 2.0f));
|
||
slider->setPercent(52);
|
||
slider->addEventListener(CC_CALLBACK_2(LabelShadowTest::sliderEvent, this));
|
||
addChild(slider);
|
||
|
||
auto slider2 = ui::Slider::create();
|
||
slider2->setTag(2);
|
||
slider2->setTouchEnabled(true);
|
||
slider2->loadBarTexture("cocosui/sliderTrack.png");
|
||
slider2->loadSlidBallTextures("cocosui/sliderThumb.png", "cocosui/sliderThumb.png", "");
|
||
slider2->loadProgressBarTexture("cocosui/sliderProgress.png");
|
||
slider2->setPosition(Vec2(size.width * 0.15f, size.height / 2.0));
|
||
slider2->setRotation(90);
|
||
slider2->setPercent(52);
|
||
slider2->addEventListener(CC_CALLBACK_2(LabelShadowTest::sliderEvent, this));
|
||
addChild(slider2);
|
||
}
|
||
|
||
void LabelShadowTest::sliderEvent(Ref *pSender, ui::Slider::EventType type)
|
||
{
|
||
if (type == Slider::EventType::ON_PERCENTAGE_CHANGED)
|
||
{
|
||
Slider* slider = (Slider*)this->getChildByTag(1);
|
||
Slider* slider2 = (Slider*)this->getChildByTag(2);
|
||
|
||
auto offset = Size(slider->getPercent()-50,50 - slider2->getPercent());
|
||
shadowLabelTTF->enableShadow(Color4B::BLACK,offset);
|
||
shadowLabelBMFont->enableShadow(Color4B::GREEN,offset);
|
||
shadowLabelOutline->enableShadow(Color4B::GREEN,offset);
|
||
}
|
||
}
|
||
|
||
std::string LabelShadowTest::title() const
|
||
{
|
||
return "New Label";
|
||
}
|
||
|
||
std::string LabelShadowTest::subtitle() const
|
||
{
|
||
return "Testing shadow of label";
|
||
}
|
||
|
||
LabelCharMapTest::LabelCharMapTest()
|
||
{
|
||
_time = 0.0f;
|
||
|
||
auto label1 = Label::createWithCharMap("fonts/tuffy_bold_italic-charmap.plist");
|
||
addChild(label1, 0, kTagSprite1);
|
||
label1->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
|
||
label1->setPosition( Vec2(10,100) );
|
||
label1->setOpacity( 200 );
|
||
|
||
auto label2 = Label::createWithCharMap("fonts/tuffy_bold_italic-charmap.plist");
|
||
addChild(label2, 0, kTagSprite2);
|
||
label2->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
|
||
label2->setPosition( Vec2(10,200) );
|
||
label2->setOpacity( 32 );
|
||
|
||
schedule(CC_CALLBACK_1(LabelCharMapTest::step, this), "step_key");
|
||
}
|
||
|
||
void LabelCharMapTest::step(float dt)
|
||
{
|
||
_time += dt;
|
||
char string[12] = {0};
|
||
sprintf(string, "%2.2f Test", _time);
|
||
|
||
auto label1 = (Label*)getChildByTag(kTagSprite1);
|
||
label1->setString(string);
|
||
|
||
auto label2 = (Label*)getChildByTag(kTagSprite2);
|
||
sprintf(string, "%d", (int)_time);
|
||
label2->setString(string);
|
||
}
|
||
|
||
std::string LabelCharMapTest::title() const
|
||
{
|
||
return "New Label + char map file";
|
||
}
|
||
|
||
std::string LabelCharMapTest::subtitle() const
|
||
{
|
||
return "Updating label should be fast.";
|
||
}
|
||
|
||
//------------------------------------------------------------------
|
||
//
|
||
// LabelCharMapColorTest
|
||
//
|
||
//------------------------------------------------------------------
|
||
LabelCharMapColorTest::LabelCharMapColorTest()
|
||
{
|
||
auto label1 = Label::createWithCharMap( "fonts/tuffy_bold_italic-charmap.plist");
|
||
addChild(label1, 0, kTagSprite1);
|
||
label1->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
|
||
label1->setPosition( Vec2(10,100) );
|
||
label1->setOpacity( 200 );
|
||
|
||
auto label2 = Label::createWithCharMap("fonts/tuffy_bold_italic-charmap.plist");
|
||
addChild(label2, 0, kTagSprite2);
|
||
label2->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
|
||
label2->setPosition( Vec2(10,200) );
|
||
label2->setColor( Color3B::RED );
|
||
|
||
auto fade = FadeOut::create(1.0f);
|
||
auto fade_in = fade->reverse();
|
||
auto cb = CallFunc::create(CC_CALLBACK_0(LabelCharMapColorTest::actionFinishCallback, this));
|
||
auto seq = Sequence::create(fade, fade_in, cb, nullptr);
|
||
auto repeat = RepeatForever::create( seq );
|
||
label2->runAction( repeat );
|
||
|
||
_time = 0;
|
||
|
||
schedule(CC_CALLBACK_1(LabelCharMapColorTest::step, this), "step_key");
|
||
}
|
||
|
||
void LabelCharMapColorTest::actionFinishCallback()
|
||
{
|
||
CCLOG("Action finished");
|
||
}
|
||
|
||
void LabelCharMapColorTest::step(float dt)
|
||
{
|
||
_time += dt;
|
||
char string[12] = {0};
|
||
sprintf(string, "%2.2f Test", _time);
|
||
auto label1 = (Label*)getChildByTag(kTagSprite1);
|
||
label1->setString(string);
|
||
|
||
auto label2 = (Label*)getChildByTag(kTagSprite2);
|
||
sprintf(string, "%d", (int)_time);
|
||
label2->setString( string );
|
||
}
|
||
|
||
std::string LabelCharMapColorTest::title() const
|
||
{
|
||
return "New Label + CharMap";
|
||
}
|
||
|
||
std::string LabelCharMapColorTest::subtitle() const
|
||
{
|
||
return "Opacity + Color should work at the same time";
|
||
}
|
||
|
||
LabelCrashTest::LabelCrashTest()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 40, GlyphCollection::DYNAMIC,nullptr,true);
|
||
|
||
auto label1 = Label::createWithTTF(ttfConfig,"Test崩溃123", TextHAlignment::CENTER, size.width);
|
||
label1->setPosition( Vec2(size.width/2, size.height/2) );
|
||
addChild(label1);
|
||
}
|
||
|
||
std::string LabelCrashTest::title() const
|
||
{
|
||
return "New Label Crash Test";
|
||
}
|
||
|
||
std::string LabelCrashTest::subtitle() const
|
||
{
|
||
return "Not crash and show [Test123] when using unknown character.";
|
||
}
|
||
|
||
LabelTTFOldNew::LabelTTFOldNew()
|
||
{
|
||
auto s = Director::getInstance()->getWinSize();
|
||
float delta = s.height/4;
|
||
|
||
auto label1 = Label::createWithSystemFont("Cocos2d-x Label Test", "arial", 24);
|
||
addChild(label1, 0, kTagBitmapAtlas1);
|
||
label1->setPosition(Vec2(s.width/2, delta * 2));
|
||
label1->setColor(Color3B::RED);
|
||
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 24);
|
||
auto label2 = Label::createWithTTF(ttfConfig, "Cocos2d-x Label Test");
|
||
addChild(label2, 0, kTagBitmapAtlas2);
|
||
label2->setPosition(Vec2(s.width/2, delta * 2));
|
||
|
||
auto drawNode = DrawNode::create();
|
||
auto labelSize = label1->getContentSize();
|
||
auto origin = Director::getInstance()->getWinSize();
|
||
|
||
origin.width = origin.width / 2 - (labelSize.width / 2);
|
||
origin.height = origin.height / 2 - (labelSize.height / 2);
|
||
|
||
Vec2 vertices[4]=
|
||
{
|
||
Vec2(origin.width, origin.height),
|
||
Vec2(labelSize.width + origin.width, origin.height),
|
||
Vec2(labelSize.width + origin.width, labelSize.height + origin.height),
|
||
Vec2(origin.width, labelSize.height + origin.height)
|
||
};
|
||
drawNode->drawPoly(vertices, 4, true, Color4F(1.0, 0.0, 0.0, 1.0));
|
||
|
||
labelSize = label2->getContentSize();
|
||
origin = Director::getInstance()->getWinSize();
|
||
|
||
origin.width = origin.width / 2 - (labelSize.width / 2);
|
||
origin.height = origin.height / 2 - (labelSize.height / 2);
|
||
|
||
Vec2 vertices2[4]=
|
||
{
|
||
Vec2(origin.width, origin.height),
|
||
Vec2(labelSize.width + origin.width, origin.height),
|
||
Vec2(labelSize.width + origin.width, labelSize.height + origin.height),
|
||
Vec2(origin.width, labelSize.height + origin.height)
|
||
};
|
||
drawNode->drawPoly(vertices2, 4, true, Color4F(1.0, 1.0, 1.0, 1.0));
|
||
|
||
addChild(drawNode);
|
||
}
|
||
|
||
std::string LabelTTFOldNew::title() const
|
||
{
|
||
return "New / Old TTF";
|
||
}
|
||
|
||
std::string LabelTTFOldNew::subtitle() const
|
||
{
|
||
return "Comparison between old(red) and new(white) TTF label";
|
||
}
|
||
|
||
LabelFontNameTest::LabelFontNameTest()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
auto label1 = Label::create();
|
||
label1->setString("Default Font");
|
||
label1->setPosition( Vec2(size.width/2, size.height * 0.7) );
|
||
addChild(label1);
|
||
|
||
auto label3 = Label::createWithSystemFont("Marker Felt","Marker Felt",32);
|
||
label3->setPosition( Vec2(size.width/2, size.height * 0.5) );
|
||
addChild(label3);
|
||
}
|
||
|
||
std::string LabelFontNameTest::title() const
|
||
{
|
||
return "New Label Test";
|
||
}
|
||
|
||
std::string LabelFontNameTest::subtitle() const
|
||
{
|
||
return "create label by font name,compatible with old labelTTF";
|
||
}
|
||
|
||
LabelAlignmentTest::LabelAlignmentTest()
|
||
{
|
||
auto blockSize = Size(200, 160);
|
||
auto s = Director::getInstance()->getWinSize();
|
||
|
||
auto pos = Vec2((s.width - blockSize.width) / 2, (s.height - blockSize.height) / 2);
|
||
auto colorLayer = LayerColor::create(Color4B(100, 100, 100, 255), blockSize.width, blockSize.height);
|
||
colorLayer->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
|
||
colorLayer->setPosition(pos);
|
||
|
||
this->addChild(colorLayer);
|
||
|
||
MenuItemFont::setFontSize(30);
|
||
auto menu = Menu::create(
|
||
MenuItemFont::create("Left", CC_CALLBACK_1(LabelAlignmentTest::setAlignmentLeft, this)),
|
||
MenuItemFont::create("Center", CC_CALLBACK_1(LabelAlignmentTest::setAlignmentCenter, this)),
|
||
MenuItemFont::create("Right", CC_CALLBACK_1(LabelAlignmentTest::setAlignmentRight, this)),
|
||
nullptr);
|
||
menu->alignItemsVerticallyWithPadding(4);
|
||
menu->setPosition(Vec2(50, s.height / 2 - 20));
|
||
this->addChild(menu);
|
||
|
||
menu = Menu::create(
|
||
MenuItemFont::create("Top", CC_CALLBACK_1(LabelAlignmentTest::setAlignmentTop, this)),
|
||
MenuItemFont::create("Middle", CC_CALLBACK_1(LabelAlignmentTest::setAlignmentMiddle, this)),
|
||
MenuItemFont::create("Bottom", CC_CALLBACK_1(LabelAlignmentTest::setAlignmentBottom, this)),
|
||
nullptr);
|
||
menu->alignItemsVerticallyWithPadding(4);
|
||
menu->setPosition(Vec2(s.width - 50, s.height / 2 - 20));
|
||
this->addChild(menu);
|
||
|
||
_horizAlign = TextHAlignment::LEFT;
|
||
_vertAlign = TextVAlignment::TOP;
|
||
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 32);
|
||
_label = Label::create();
|
||
_label->setDimensions(200,160);
|
||
_label->setAlignment(_horizAlign,_vertAlign);
|
||
_label->setTTFConfig(ttfConfig);
|
||
_label->setString(getCurrentAlignment());
|
||
_label->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
|
||
_label->setPosition(pos);
|
||
addChild(_label);
|
||
|
||
}
|
||
|
||
LabelAlignmentTest::~LabelAlignmentTest()
|
||
{
|
||
|
||
}
|
||
|
||
void LabelAlignmentTest::setAlignmentLeft(Ref* sender)
|
||
{
|
||
_horizAlign = TextHAlignment::LEFT;
|
||
_label->setHorizontalAlignment(_horizAlign);
|
||
_label->setString(getCurrentAlignment());
|
||
}
|
||
|
||
void LabelAlignmentTest::setAlignmentCenter(Ref* sender)
|
||
{
|
||
_horizAlign = TextHAlignment::CENTER;
|
||
_label->setHorizontalAlignment(_horizAlign);
|
||
_label->setString(getCurrentAlignment());
|
||
}
|
||
|
||
void LabelAlignmentTest::setAlignmentRight(Ref* sender)
|
||
{
|
||
_horizAlign = TextHAlignment::RIGHT;
|
||
_label->setHorizontalAlignment(_horizAlign);
|
||
_label->setString(getCurrentAlignment());
|
||
}
|
||
|
||
void LabelAlignmentTest::setAlignmentTop(Ref* sender)
|
||
{
|
||
_vertAlign = TextVAlignment::TOP;
|
||
_label->setVerticalAlignment(_vertAlign);
|
||
_label->setString(getCurrentAlignment());
|
||
}
|
||
|
||
void LabelAlignmentTest::setAlignmentMiddle(Ref* sender)
|
||
{
|
||
_vertAlign = TextVAlignment::CENTER;
|
||
_label->setVerticalAlignment(_vertAlign);
|
||
_label->setString(getCurrentAlignment());
|
||
}
|
||
|
||
void LabelAlignmentTest::setAlignmentBottom(Ref* sender)
|
||
{
|
||
_vertAlign = TextVAlignment::BOTTOM;
|
||
_label->setVerticalAlignment(_vertAlign);
|
||
_label->setString(getCurrentAlignment());
|
||
}
|
||
|
||
const char* LabelAlignmentTest::getCurrentAlignment()
|
||
{
|
||
const char* vertical = nullptr;
|
||
const char* horizontal = nullptr;
|
||
switch (_vertAlign) {
|
||
case TextVAlignment::TOP:
|
||
vertical = "Top";
|
||
break;
|
||
case TextVAlignment::CENTER:
|
||
vertical = "Middle";
|
||
break;
|
||
case TextVAlignment::BOTTOM:
|
||
vertical = "Bottom";
|
||
break;
|
||
}
|
||
switch (_horizAlign) {
|
||
case TextHAlignment::LEFT:
|
||
horizontal = "Left";
|
||
break;
|
||
case TextHAlignment::CENTER:
|
||
horizontal = "Center";
|
||
break;
|
||
case TextHAlignment::RIGHT:
|
||
horizontal = "Right";
|
||
break;
|
||
}
|
||
|
||
return String::createWithFormat("Alignment %s %s", vertical, horizontal)->getCString();
|
||
}
|
||
|
||
std::string LabelAlignmentTest::title() const
|
||
{
|
||
return "Testing New Label";
|
||
}
|
||
|
||
std::string LabelAlignmentTest::subtitle() const
|
||
{
|
||
return "Select the buttons on the sides to change alignment";
|
||
}
|
||
|
||
LabelIssue4428Test::LabelIssue4428Test()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
auto label = Label::createWithBMFont( "fonts/bitmapFontTest3.fnt", "123\n456");
|
||
label->setPosition(Vec2(size.width /2.0f, size.height / 2.0f));
|
||
label->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
|
||
addChild(label);
|
||
|
||
int len = label->getStringLength();
|
||
for (int i = 0; i < len; ++i)
|
||
{
|
||
auto sprite = label->getLetter(i);
|
||
if (sprite != nullptr)
|
||
{
|
||
sprite->setFlippedY(true);
|
||
}
|
||
}
|
||
}
|
||
|
||
std::string LabelIssue4428Test::title() const
|
||
{
|
||
return "New Label Bugs Test";
|
||
}
|
||
|
||
std::string LabelIssue4428Test::subtitle() const
|
||
{
|
||
return "Reorder issue #4428.The label should be flipped vertically.";
|
||
}
|
||
|
||
LabelIssue4999Test::LabelIssue4999Test()
|
||
{
|
||
auto label = Label::createWithTTF("Smaller font test", "fonts/arial.ttf",5);
|
||
label->setPosition(VisibleRect::center());
|
||
label->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
|
||
addChild(label);
|
||
}
|
||
|
||
std::string LabelIssue4999Test::title() const
|
||
{
|
||
return "New Label Bugs Test";
|
||
}
|
||
|
||
std::string LabelIssue4999Test::subtitle() const
|
||
{
|
||
return "Reorder issue #4999.The label should be display cleanly.";
|
||
}
|
||
|
||
LabelLineHeightTest::LabelLineHeightTest()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
auto bg = LayerColor::create(Color4B(200,191,231,255));
|
||
this->addChild(bg);
|
||
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 25, GlyphCollection::DYNAMIC,nullptr,false);
|
||
|
||
label = Label::createWithTTF(ttfConfig,"Test\nLine\nHeight");
|
||
label->setPosition( Vec2(size.width/2, size.height*0.5f) );
|
||
label->setTextColor( Color4B::RED );
|
||
addChild(label);
|
||
|
||
auto slider = ui::Slider::create();
|
||
slider->setTouchEnabled(true);
|
||
slider->loadBarTexture("cocosui/sliderTrack.png");
|
||
slider->loadSlidBallTextures("cocosui/sliderThumb.png", "cocosui/sliderThumb.png", "");
|
||
slider->loadProgressBarTexture("cocosui/sliderProgress.png");
|
||
slider->setPosition(Vec2(size.width / 2.0f, size.height * 0.15f + slider->getContentSize().height * 2.0f));
|
||
slider->setPercent(label->getLineHeight());
|
||
slider->addEventListener(CC_CALLBACK_2(LabelLineHeightTest::sliderEvent, this));
|
||
addChild(slider);
|
||
}
|
||
|
||
void LabelLineHeightTest::sliderEvent(Ref *sender, ui::Slider::EventType type)
|
||
{
|
||
if (type == Slider::EventType::ON_PERCENTAGE_CHANGED)
|
||
{
|
||
Slider* slider = (Slider*)sender;
|
||
label->setLineHeight(slider->getPercent());
|
||
}
|
||
}
|
||
|
||
std::string LabelLineHeightTest::title() const
|
||
{
|
||
return "New Label";
|
||
}
|
||
|
||
std::string LabelLineHeightTest::subtitle() const
|
||
{
|
||
return "Testing line height of label";
|
||
}
|
||
|
||
LabelAdditionalKerningTest::LabelAdditionalKerningTest()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
auto bg = LayerColor::create(Color4B(200,191,231,255));
|
||
this->addChild(bg);
|
||
|
||
TTFConfig ttfConfig("fonts/arial.ttf", 40, GlyphCollection::DYNAMIC,nullptr,false);
|
||
|
||
label = Label::createWithTTF(ttfConfig,"Test additional kerning");
|
||
label->setPosition( Vec2(size.width/2, size.height*0.65f) );
|
||
label->setTextColor( Color4B::RED );
|
||
addChild(label);
|
||
|
||
auto slider = ui::Slider::create();
|
||
slider->setTouchEnabled(true);
|
||
slider->loadBarTexture("cocosui/sliderTrack.png");
|
||
slider->loadSlidBallTextures("cocosui/sliderThumb.png", "cocosui/sliderThumb.png", "");
|
||
slider->loadProgressBarTexture("cocosui/sliderProgress.png");
|
||
slider->setPosition(Vec2(size.width / 2.0f, size.height * 0.15f + slider->getContentSize().height * 2.0f));
|
||
slider->setPercent(0);
|
||
slider->addEventListener(CC_CALLBACK_2(LabelAdditionalKerningTest::sliderEvent, this));
|
||
addChild(slider);
|
||
}
|
||
|
||
void LabelAdditionalKerningTest::sliderEvent(Ref *sender, ui::Slider::EventType type)
|
||
{
|
||
if (type == Slider::EventType::ON_PERCENTAGE_CHANGED)
|
||
{
|
||
Slider* slider = (Slider*)sender;
|
||
label->setAdditionalKerning(slider->getPercent());
|
||
}
|
||
}
|
||
|
||
std::string LabelAdditionalKerningTest::title() const
|
||
{
|
||
return "New Label";
|
||
}
|
||
|
||
std::string LabelAdditionalKerningTest::subtitle() const
|
||
{
|
||
return "Testing additional kerning of label";
|
||
}
|
||
|
||
LabelIssue8492Test::LabelIssue8492Test()
|
||
{
|
||
auto label = Label::createWithBMFont("fonts/bitmapFontChinese.fnt", "中国中国中国中国中国");
|
||
label->setDimensions(5,100);
|
||
label->setPosition(VisibleRect::center());
|
||
addChild(label);
|
||
}
|
||
|
||
std::string LabelIssue8492Test::title() const
|
||
{
|
||
return "Reorder issue #8492";
|
||
}
|
||
|
||
std::string LabelIssue8492Test::subtitle() const
|
||
{
|
||
return "Work fine when dimensions are not enough to fit one character";
|
||
}
|
||
|
||
LabelMultilineWithOutline::LabelMultilineWithOutline()
|
||
{
|
||
auto label = Label::createWithTTF("Multi-line text\nwith\noutline feature", "fonts/arial.ttf", 24);
|
||
label->enableOutline(Color4B::ORANGE,1);
|
||
label->setPosition(VisibleRect::center());
|
||
addChild(label);
|
||
}
|
||
|
||
std::string LabelMultilineWithOutline::title() const
|
||
{
|
||
return "Reorder issue #9095";
|
||
}
|
||
|
||
std::string LabelMultilineWithOutline::subtitle() const
|
||
{
|
||
return "end in string 'outline feature'";
|
||
}
|
||
|
||
|
||
LabelIssue9255Test::LabelIssue9255Test()
|
||
{
|
||
Size s = Director::getInstance()->getWinSize();
|
||
auto parent = Node::create();
|
||
parent->setPosition(s.width/2, s.height/2);
|
||
parent->setVisible(false);
|
||
this->addChild(parent);
|
||
|
||
auto label = Label::createWithTTF("Crashed!!!", "fonts/HKYuanMini.ttf", 24);
|
||
label->setPosition(VisibleRect::center());
|
||
parent->addChild(label);
|
||
}
|
||
|
||
std::string LabelIssue9255Test::title() const
|
||
{
|
||
return "Test for Issue #9255";
|
||
}
|
||
|
||
std::string LabelIssue9255Test::subtitle() const
|
||
{
|
||
return "switch to desktop and switch back. Crashed!!!";
|
||
}
|
||
|
||
LabelSmallDimensionsTest::LabelSmallDimensionsTest()
|
||
{
|
||
auto label = Label::createWithSystemFont("Hello World!", "fonts/arial.ttf", 24, Size(30,100));
|
||
label->setPosition(VisibleRect::center());
|
||
addChild(label);
|
||
}
|
||
|
||
std::string LabelSmallDimensionsTest::title() const
|
||
{
|
||
return "Test create Label[system font] with small dimensions";
|
||
}
|
||
|
||
std::string LabelSmallDimensionsTest::subtitle() const
|
||
{
|
||
return "Program should not dead loop";
|
||
}
|
||
|
||
LabelIssue10089Test::LabelIssue10089Test()
|
||
{
|
||
auto center = VisibleRect::center();
|
||
|
||
auto labelA = Label::createWithSystemFont("create label with system font", "fonts/arial.ttf", 24);
|
||
auto size = labelA->getContentSize();
|
||
labelA->setDimensions(size.width, size.height);
|
||
labelA->setPosition(center.x, center.y + 50);
|
||
addChild(labelA);
|
||
|
||
auto labelB = Label::createWithTTF("create label with TTF", "fonts/arial.ttf", 24);
|
||
size = labelB->getContentSize();
|
||
labelB->setDimensions(size.width, size.height);
|
||
labelB->setPosition(center.x, center.y - 50);
|
||
addChild(labelB);
|
||
}
|
||
|
||
std::string LabelIssue10089Test::title() const
|
||
{
|
||
return "Test for Issue #10089";
|
||
}
|
||
|
||
std::string LabelIssue10089Test::subtitle() const
|
||
{
|
||
return "Should be able to see two single-line text";
|
||
}
|
||
|
||
LabelSystemFontColor::LabelSystemFontColor()
|
||
{
|
||
auto size = Director::getInstance()->getWinSize();
|
||
|
||
auto label1 = Label::createWithSystemFont("Color4B::Red", "fonts/arial.ttf", 20);
|
||
label1->setPosition(Vec2(size.width / 2, size.height * 0.3f));
|
||
label1->setTextColor(Color4B::RED);
|
||
addChild(label1);
|
||
|
||
auto label2 = Label::createWithSystemFont("Color4B::Green", "fonts/arial.ttf", 20);
|
||
label2->setPosition(Vec2(size.width / 2, size.height * 0.4f));
|
||
label2->setTextColor(Color4B::GREEN);
|
||
addChild(label2);
|
||
|
||
auto label3 = Label::createWithSystemFont("Color4B::Blue", "fonts/arial.ttf", 20);
|
||
label3->setPosition(Vec2(size.width / 2, size.height * 0.5f));
|
||
label3->setTextColor(Color4B::BLUE);
|
||
addChild(label3);
|
||
|
||
auto label4 = Label::createWithSystemFont("Color4B(0, 0, 255, 100)", "fonts/arial.ttf", 20);
|
||
label4->setPosition(Vec2(size.width / 2, size.height * 0.6f));
|
||
label4->setTextColor(Color4B(0, 0, 255, 100));
|
||
addChild(label4);
|
||
}
|
||
|
||
std::string LabelSystemFontColor::title() const
|
||
{
|
||
return "New Label + system font";
|
||
}
|
||
|
||
std::string LabelSystemFontColor::subtitle() const
|
||
{
|
||
return "Testing text color of system font";
|
||
}
|
||
|
||
LabelIssue10773Test::LabelIssue10773Test()
|
||
{
|
||
auto center = VisibleRect::center();
|
||
|
||
auto label = Label::createWithTTF("create label with TTF", "fonts/arial.ttf", 24);
|
||
label->getLetter(5);
|
||
label->setString("Hi");
|
||
label->setPosition(center.x, center.y);
|
||
addChild(label);
|
||
}
|
||
|
||
std::string LabelIssue10773Test::title() const
|
||
{
|
||
return "Test for Issue #10773";
|
||
}
|
||
|
||
std::string LabelIssue10773Test::subtitle() const
|
||
{
|
||
return "Should not crash!";
|
||
}
|
||
|
||
LabelIssue11576Test::LabelIssue11576Test()
|
||
{
|
||
auto center = VisibleRect::center();
|
||
|
||
auto label = Label::createWithTTF("abcdefg", "fonts/arial.ttf", 24);
|
||
for (int index = 0; index < label->getStringLength(); ++index)
|
||
{
|
||
label->getLetter(index);
|
||
}
|
||
|
||
this->runAction(Sequence::create(DelayTime::create(2.0f), CallFunc::create([label](){
|
||
label->setString("Hello World!");
|
||
}), nullptr));
|
||
|
||
label->setPosition(center.x, center.y);
|
||
addChild(label);
|
||
}
|
||
|
||
std::string LabelIssue11576Test::title() const
|
||
{
|
||
return "Test for Issue #11576";
|
||
}
|
||
|
||
std::string LabelIssue11576Test::subtitle() const
|
||
{
|
||
return "You should see another string displayed correctly after 2 seconds.";
|
||
}
|
||
|
||
LabelIssue11699Test::LabelIssue11699Test()
|
||
{
|
||
auto center = VisibleRect::center();
|
||
|
||
auto label = Label::createWithTTF("中国", "fonts/HKYuanMini.ttf", 150);
|
||
label->enableOutline(Color4B::RED, 2);
|
||
label->setPosition(center.x, center.y);
|
||
addChild(label);
|
||
}
|
||
|
||
std::string LabelIssue11699Test::title() const
|
||
{
|
||
return "Test for Issue #11699";
|
||
}
|
||
|
||
std::string LabelIssue11699Test::subtitle() const
|
||
{
|
||
return "Outline should match with the characters exactly.";
|
||
}
|
||
|
||
LabelIssue12409Test::LabelIssue12409Test()
|
||
{
|
||
auto center = VisibleRect::center();
|
||
|
||
auto label = Label::createWithTTF("abcdefghijklmn", "fonts/arial.ttf", 30);
|
||
label->setWidth(70);
|
||
label->setLineBreakWithoutSpace(true);
|
||
label->setPosition(center.x, center.y);
|
||
addChild(label);
|
||
|
||
auto labelSize = label->getContentSize();
|
||
auto winSize = Director::getInstance()->getWinSize();
|
||
Vec2 labelOrigin;
|
||
labelOrigin.x = winSize.width / 2 - (labelSize.width / 2);
|
||
labelOrigin.y = winSize.height / 2 - (labelSize.height / 2);
|
||
Vec2 vertices[4] =
|
||
{
|
||
Vec2(labelOrigin.x, labelOrigin.y),
|
||
Vec2(labelOrigin.x + labelSize.width, labelOrigin.y),
|
||
Vec2(labelOrigin.x + labelSize.width, labelOrigin.y + labelSize.height),
|
||
Vec2(labelOrigin.x, labelOrigin.y + labelSize.height)
|
||
};
|
||
|
||
auto drawNode = DrawNode::create();
|
||
drawNode->drawPoly(vertices, 4, true, Color4F::WHITE);
|
||
addChild(drawNode);
|
||
}
|
||
|
||
std::string LabelIssue12409Test::title() const
|
||
{
|
||
return "Test for Issue #12409";
|
||
}
|
||
|
||
std::string LabelIssue12409Test::subtitle() const
|
||
{
|
||
return "Testing auto-wrapping without space.";
|
||
}
|
||
|
||
LabelIssue12775Test::LabelIssue12775Test()
|
||
{
|
||
auto center = VisibleRect::center();
|
||
|
||
auto label = Label::createWithTTF("Hello", "fonts/xingkai-incomplete.ttf", 30);
|
||
label->setPosition(center.x, center.y);
|
||
addChild(label);
|
||
}
|
||
|
||
std::string LabelIssue12775Test::title() const
|
||
{
|
||
return "Test for Issue #12775";
|
||
}
|
||
|
||
std::string LabelIssue12775Test::subtitle() const
|
||
{
|
||
return "Should not crash if the font not contain a Unicode charmap.";
|
||
} |