FontAtlas::FontAtlas(Font &theFont) : _font(&theFont) , _currentPageData(nullptr) , _fontAscender(0) , _rendererRecreatedListener(nullptr) , _antialiasEnabled(true) , _rendererRecreate(false) { _font->retain(); FontFreeType* fontTTf = dynamic_cast<FontFreeType*>(_font); if (fontTTf) { _commonLineHeight = _font->getFontMaxHeight(); _fontAscender = fontTTf->getFontAscender(); auto texture = new (std::nothrow) Texture2D; _currentPage = 0; _currentPageOrigX = 0; _currentPageOrigY = 0; _letterPadding = 0; if(fontTTf->isDistanceFieldEnabled()) { _letterPadding += 2 * FontFreeType::DistanceMapSpread; } _currentPageDataSize = CacheTextureWidth * CacheTextureHeight; auto outlineSize = fontTTf->getOutlineSize(); if(outlineSize > 0) { _commonLineHeight += 2 * outlineSize; _currentPageDataSize *= 2; } _currentPageData = new unsigned char[_currentPageDataSize]; memset(_currentPageData, 0, _currentPageDataSize); auto pixelFormat = outlineSize > 0 ? Texture2D::PixelFormat::AI88 : Texture2D::PixelFormat::A8; texture->initWithData(_currentPageData, _currentPageDataSize, pixelFormat, CacheTextureWidth, CacheTextureHeight, Size(CacheTextureWidth,CacheTextureHeight) ); addTexture(texture,0); texture->release(); #if CC_ENABLE_CACHE_TEXTURE_DATA auto eventDispatcher = Director::getInstance()->getEventDispatcher(); _rendererRecreatedListener = EventListenerCustom::create(EVENT_RENDERER_RECREATED, CC_CALLBACK_1(FontAtlas::listenRendererRecreated, this)); eventDispatcher->addEventListenerWithFixedPriority(_rendererRecreatedListener, 1); #endif } }
FontAtlas::FontAtlas(Font &theFont) : _font(&theFont) , _currentPageData(nullptr) , _fontAscender(0) , _toForegroundListener(nullptr) , _toBackgroundListener(nullptr) { _font->retain(); FontFreeType* fontTTf = dynamic_cast<FontFreeType*>(_font); if (fontTTf) { _commonLineHeight = _font->getFontMaxHeight(); _fontAscender = fontTTf->getFontAscender(); auto texture = new Texture2D; _currentPage = 0; _currentPageOrigX = 0; _currentPageOrigY = 0; _letterPadding = 0; if(fontTTf->isDistanceFieldEnabled()) { _letterPadding += 2 * FontFreeType::DistanceMapSpread; } _currentPageDataSize = CacheTextureWidth * CacheTextureHeight; if(fontTTf->getOutlineSize() > 0) { _currentPageDataSize *= 2; } _currentPageData = new unsigned char[_currentPageDataSize]; memset(_currentPageData, 0, _currentPageDataSize); addTexture(texture,0); texture->release(); #if CC_ENABLE_CACHE_TEXTURE_DATA auto eventDispatcher = Director::getInstance()->getEventDispatcher(); _toBackgroundListener = EventListenerCustom::create(EVENT_COME_TO_BACKGROUND, CC_CALLBACK_1(FontAtlas::listenToBackground, this)); eventDispatcher->addEventListenerWithFixedPriority(_toBackgroundListener, 1); _toForegroundListener = EventListenerCustom::create(EVENT_COME_TO_FOREGROUND, CC_CALLBACK_1(FontAtlas::listenToForeground, this)); eventDispatcher->addEventListenerWithFixedPriority(_toForegroundListener, 1); #endif } }