Exemplo n.º 1
0
void RichText::handleTextRenderer(const char *text, const char *fontName, float fontSize, const Color3B &color, GLubyte opacity)
{
    Label* textRenderer = Label::create(text, fontName, fontSize);
    float textRendererWidth = textRenderer->getContentSize().width;
    _leftSpaceWidth -= textRendererWidth;
    if (_leftSpaceWidth < 0.0f)
    {
        float overstepPercent = (-_leftSpaceWidth) / textRendererWidth;
        std::string curText = text;
        size_t stringLength = _calcCharCount(text);
        int leftLength = stringLength * (1.0f - overstepPercent);
        std::string leftWords = curText.substr(0, leftLength);
        std::string cutWords = curText.substr(leftLength, curText.length()-1);
        if (leftLength > 0)
        {
            Label* leftRenderer = Label::create(leftWords.substr(0, leftLength).c_str(), fontName, fontSize);
            leftRenderer->setColor(color);
            leftRenderer->setOpacity(opacity);
            pushToContainer(leftRenderer);
        }

        addNewLine();
        handleTextRenderer(cutWords.c_str(), fontName, fontSize, color, opacity);
    }
    else
    {
        textRenderer->setColor(color);
        textRenderer->setOpacity(opacity);
        pushToContainer(textRenderer);
    }
}
void Textbox::addText( std::string newText, glm::vec3 color, GLboolean newLine ) {
	if ( newText.size() == 0 )
		return;

	appendText( newText, color );

	if ( newLine ) {
		addNewLine();
	}
}
Exemplo n.º 3
0
void RichText::handleTextRenderer(const std::string& text, const std::string& fontName, float fontSize, const Color3B &color, GLubyte opacity)
{
    auto fileExist = FileUtils::getInstance()->isFileExist(fontName);
    Label* textRenderer = nullptr;
    if (fileExist)
    {
        textRenderer = Label::createWithTTF(text, fontName, fontSize);
    } 
    else
    {
        textRenderer = Label::createWithSystemFont(text, fontName, fontSize);
    }
    float textRendererWidth = textRenderer->getContentSize().width;
    _leftSpaceWidth -= textRendererWidth;
    if (_leftSpaceWidth < 0.0f)
    {
        float overstepPercent = (-_leftSpaceWidth) / textRendererWidth;
        std::string curText = text;
        size_t stringLength = StringUtils::getCharacterCountInUTF8String(text);
        int leftLength = stringLength * (1.0f - overstepPercent);
        //The minimum cut length is 1, otherwise will cause the infinite loop.
        if (0 == leftLength) leftLength = 1;
        std::string leftWords = Helper::getSubStringOfUTF8String(curText,0,leftLength);
        std::string cutWords = Helper::getSubStringOfUTF8String(curText, leftLength, stringLength - leftLength);
        if (leftLength > 0)
        {
            Label* leftRenderer = nullptr;
            if (fileExist)
            {
                leftRenderer = Label::createWithTTF(Helper::getSubStringOfUTF8String(leftWords, 0, leftLength), fontName, fontSize);
            }
            else
            {
                leftRenderer = Label::createWithSystemFont(Helper::getSubStringOfUTF8String(leftWords, 0, leftLength), fontName, fontSize);
            }
            if (leftRenderer)
            {
                leftRenderer->setColor(color);
                leftRenderer->setOpacity(opacity);
                pushToContainer(leftRenderer);
            }
        }

        addNewLine();
        handleTextRenderer(cutWords.c_str(), fontName, fontSize, color, opacity);
    }
    else
    {
        textRenderer->setColor(color);
        textRenderer->setOpacity(opacity);
        pushToContainer(textRenderer);
    }
}
void Textbox::appendText( std::string newText, glm::vec3 color ) {

	// get edges
	GLuint leftEdge = pos.x + paddingHorizontal + borderSize;
	GLuint rightEdge = pos.x + size.x - paddingHorizontal - borderSize - btnSize.x;

	// loop through each token of text
	std::string delimiter = " ";
	GLfloat delimOffset = getStringWidth( " " );
	std::string token;
	GLuint start = 0;
	GLuint end = newText.find( delimiter );
	while ( end != std::string::npos ) {
		// get the next token
		token = newText.substr( start, end - start );

		// calculate the width of the token
		GLfloat width = getStringWidth( token );

		// check to see if token fits on the same line
		if ( leftEdge + currHorizontalOffset + width > rightEdge ) {
			addNewLine();
		}
		tokens.push_back( StringToken( token, currHorizontalOffset, currentLineNumber, color ) );

		// move horizontal offset
		currHorizontalOffset += width + delimOffset;

		start = end + delimiter.length();
		end = newText.find( delimiter, start );
	}

	token = newText.substr( start, newText.size() );
	GLfloat width = getStringWidth( token );
	if ( leftEdge + currHorizontalOffset + width > rightEdge ) {
		addNewLine();
	}
	tokens.push_back( StringToken( token, currHorizontalOffset, currentLineNumber, color ) );
	currHorizontalOffset += width + delimOffset;
}
Exemplo n.º 5
0
void RichText::handleTextRenderer(const std::string& text, const std::string& fontName, float fontSize, const Color3B &color, GLubyte opacity)
{
    auto fileExist = FileUtils::getInstance()->isFileExist(fontName);
    Label* textRenderer = nullptr;
    if (fileExist)
    {
        textRenderer = Label::createWithTTF(text, fontName, fontSize);
    } 
    else
    {
        textRenderer = Label::createWithSystemFont(text, fontName, fontSize);
    }
    float textRendererWidth = textRenderer->getContentSize().width;
    _leftSpaceWidth -= textRendererWidth;
    if (_leftSpaceWidth < 0.0f)
    {
        float overstepPercent = (-_leftSpaceWidth) / textRendererWidth;
        std::string curText = text;
        size_t stringLength = _calcCharCount(text.c_str());
        int leftLength = stringLength * (1.0f - overstepPercent);
        std::string leftWords = curText.substr(0, leftLength);
        std::string cutWords = curText.substr(leftLength, curText.length()-1);
        if (leftLength > 0)
        {
            Label* leftRenderer = nullptr;
            if (fileExist)
            {
                leftRenderer = Label::createWithTTF(leftWords.substr(0, leftLength).c_str(), fontName, fontSize);
            } 
            else
            {
                leftRenderer = Label::createWithSystemFont(leftWords.substr(0, leftLength).c_str(), fontName, fontSize);
            }
            if (leftRenderer)
            {
                leftRenderer->setColor(color);
                leftRenderer->setOpacity(opacity);
                pushToContainer(leftRenderer);
            }
        }

        addNewLine();
        handleTextRenderer(cutWords.c_str(), fontName, fontSize, color, opacity);
    }
    else
    {
        textRenderer->setColor(color);
        textRenderer->setOpacity(opacity);
        pushToContainer(textRenderer);
    }
}
Exemplo n.º 6
0
//--------------------------------------------------------------
void ofApp::draw(){
  if(useMinimalGUI)
  {
    newLineString.clear();
    addNewLine("Light Life = " + ofToString(magicCircle.lightLife) + " frame");
    addNewLine("Light Fade Out Speed = " + ofToString(magicCircle.lightFadeOutSpeed));
    addNewLine("Perc Max Distance Circle = " + ofToString(magicCircle.percMaxDistanceCircle));
    ofPushStyle();
    ofSetColor(17,139,145);
    ofRect(0, 0, ofGetWindowWidth(), ofGetWindowHeight());
    ofSetColor(120,14,81);
    for(int a = 0; a < newLineString.size(); a++)
    {
      font.drawString(newLineString[a], 20, 20*(a+1));
    }
    ofPopStyle();
  }
  else
  {
    magicCircle.draw();
    gui.draw();
  }
}
Exemplo n.º 7
0
void RichText::handleCustomRenderer(cocos2d::Node *renderer)
{
    Size imgSize = renderer->getContentSize();
    _leftSpaceWidth -= imgSize.width;
    if (_leftSpaceWidth < 0.0f)
    {
        addNewLine();
        pushToContainer(renderer);
        _leftSpaceWidth -= imgSize.width;
    }
    else
    {
        pushToContainer(renderer);
    }
}
Exemplo n.º 8
0
 void RTContent::handleCustomRenderer(cocos2d::Node *renderer)
 {
     Size imgSize = renderer->getBoundingBox().size;
     _leftSpaceWidth -= imgSize.width;
     if (_leftSpaceWidth < 0.0f)
     {
         addNewLine();
         pushToContainer(renderer);
         _leftSpaceWidth -= imgSize.width;
     }
     else
     {
         pushToContainer(renderer);
     }
 }
Exemplo n.º 9
0
TileSelection::TileSelection( QWidget * parent, const char * name )
	:ItemSelection( parent, name )
{
	TilePresentation * pres;
	_tiles = new QList<TilePresentation *>;
	
	_sizeG = new QButtonGroup( this );
	_sizeG->setExclusive( true );

	for( int i = 1; i < 4; i++ ) {
		QPushButton * pb = new QPushButton( QString("x%1").arg(i), this );
		pb->setCheckable( true );
		pb->setFixedWidth( 50 );
		_sizeG->addButton( pb, i );
		addNewWidget( pb );
	}

	_eff = new QButtonGroup( this );
	_eff->setExclusive( true );
	QPushButton * pb = new QPushButton( QString("Auto-transition"), this );
	pb->setCheckable( true );
	pb->setFixedSize( QSize( 40, 40 ).expandedTo( pb->sizeHint() ) );
	_eff->addButton( pb,1 );
	addNewWidget( pb );
	addNewLine();

	//_sizeG->setId(1);
	for( int i = 1; i < DataTheme.tiles.count(); i++ ) {
		//addButton( ImageTheme.cells[i]->image( 0 ), i, i == 0 );
		pres = new TilePresentation( this );
		pres->setCell( DataTheme.tiles.at(i) );
		pres->getButton()->setCheckable( true );
		_bg->addButton( pres->getButton(), i );
		pres->getButton()->setFixedSize( QSize(40,40).expandedTo(pres->getButton()->sizeHint() ) );
		addNewWidget( pres );
		_tiles->append( pres );
	}
}
Exemplo n.º 10
0
void RichText::formatText()
{
    if (_formatTextDirty)
    {
        _elementRenderersContainer->removeAllChildren();
        _elementRenders.clear();
        if (_ignoreSize)
        {
            addNewLine();
            for (ssize_t i=0; i<_richElements.size(); i++)
            {
                RichElement* element = _richElements.at(i);
                Node* elementRenderer = nullptr;
                switch (element->_type)
                {
                case RichElement::Type::TEXT:
                {
                    RichElementText* elmtText = static_cast<RichElementText*>(element);
                    if (FileUtils::getInstance()->isFileExist(elmtText->_fontName))
                    {
                        elementRenderer = Label::createWithTTF(elmtText->_text.c_str(), elmtText->_fontName, elmtText->_fontSize);
                    }
                    else
                    {
                        elementRenderer = Label::createWithSystemFont(elmtText->_text.c_str(), elmtText->_fontName, elmtText->_fontSize);
                    }
                    break;
                }
                case RichElement::Type::IMAGE:
                {
                    RichElementImage* elmtImage = static_cast<RichElementImage*>(element);
                    elementRenderer = Sprite::create(elmtImage->_filePath.c_str());
                    break;
                }
                case RichElement::Type::CUSTOM:
                {
                    RichElementCustomNode* elmtCustom = static_cast<RichElementCustomNode*>(element);
                    elementRenderer = elmtCustom->_customNode;
                    break;
                }
                default:
                    break;
                }
                elementRenderer->setColor(element->_color);
                elementRenderer->setOpacity(element->_opacity);
                pushToContainer(elementRenderer);
            }
        }
        else
        {
            addNewLine();
            for (ssize_t i=0; i<_richElements.size(); i++)
            {

                RichElement* element = static_cast<RichElement*>(_richElements.at(i));
                switch (element->_type)
                {
                case RichElement::Type::TEXT:
                {
                    RichElementText* elmtText = static_cast<RichElementText*>(element);
                    handleTextRenderer(elmtText->_text.c_str(), elmtText->_fontName.c_str(), elmtText->_fontSize, elmtText->_color, elmtText->_opacity);
                    break;
                }
                case RichElement::Type::IMAGE:
                {
                    RichElementImage* elmtImage = static_cast<RichElementImage*>(element);
                    handleImageRenderer(elmtImage->_filePath.c_str(), elmtImage->_color, elmtImage->_opacity);
                    break;
                }
                case RichElement::Type::CUSTOM:
                {
                    RichElementCustomNode* elmtCustom = static_cast<RichElementCustomNode*>(element);
                    handleCustomRenderer(elmtCustom->_customNode);
                    break;
                }
                default:
                    break;
                }
            }
        }
        formarRenderers();
        _formatTextDirty = false;
    }
}
Exemplo n.º 11
0
 void RTContent::handleTextRenderer(const std::string& text, const std::string& fontName, float fontSize, const Color3B &color, GLubyte opacity)
 {
     auto fileExist = FileUtils::getInstance()->isFileExist(fontName);
     Label* textRenderer = nullptr;
     if (fileExist)
     {
         textRenderer = Label::createWithTTF(text, fontName, fontSize);
     }
     else
     {
         textRenderer = Label::createWithSystemFont(text, fontName, fontSize);
     }
     float textRendererWidth = textRenderer->getContentSize().width;
     float tmpLeftSpaceWidth = _leftSpaceWidth;
     tmpLeftSpaceWidth -= textRendererWidth;
     if (tmpLeftSpaceWidth < 0.0f)
     {
         //percent cut words
         float overstepPercent = (-tmpLeftSpaceWidth) / textRendererWidth;
         std::string curText = text;
         size_t stringLength = StringUtils::getCharacterCountInUTF8String(text);
         int leftLength = stringLength * (1.0f - overstepPercent);
         std::string leftWords = Helper::getSubStringOfUTF8String(curText, 0, leftLength);
         std::string cutWords = Helper::getSubStringOfUTF8String(curText, leftLength, stringLength - leftLength);
         
         Label* leftRenderer = nullptr;
         
         if (leftWords.length() > 0) {
             
             if (fileExist)
             {
                 leftRenderer = Label::createWithTTF(leftWords, fontName, fontSize);
             }
             else
             {
                 leftRenderer = Label::createWithSystemFont(leftWords, fontName, fontSize);
             }
         }
         
         if (!leftRenderer) {
             return;
         }
         
         // 处理需截文本字宽度不均,前半部分超出的情况 例如 "测试文本测试文本12341234",取宽度10/16 前半部分宽度10则超出很多
         while (true) {
             if (leftWords.length() > 0)
             {
                 leftRenderer->setString(leftWords);
                 
                 float leftRendererWidth = leftRenderer->getContentSize().width;
                 tmpLeftSpaceWidth = _leftSpaceWidth;
                 tmpLeftSpaceWidth -= leftRendererWidth;
                 
                 if (tmpLeftSpaceWidth < 0.0f) {
                     int leftWordsLen = (int)leftWords.length();
                     if (leftWordsLen <= 0) {
                         break;
                     }
                     else {
                         //cut char one by one to get the fit length
                         while (true) {
                             leftLength -= 1;
                             leftWords = Helper::getSubStringOfUTF8String(curText, 0, leftLength);
                             cutWords = Helper::getSubStringOfUTF8String(curText, leftLength, stringLength - leftLength);
                             if (leftWords.length() == 0) {
                                 break;
                             }
                             if (leftWords.length() < leftWordsLen) {
                                 break;
                             }
                         }
                     }
                 }
                 else {
                     //if _leftSpaceWidth > 0 break
                     break;
                 }
             }
             else {
                 //if leftWords is empty, break
                 break;
             }
         }
         
         // 处理需截文本字宽度不均,后半部分超出的情况 例如 "12341234测试文本测试文本",取宽度10/16 前半部分宽度10则缺少很多
         std::string lastLeftWords = leftWords;
         std::string lastCutWords = cutWords;
         float lastTmpLeftSpaceWidth = tmpLeftSpaceWidth;
         while (true) {
             if (cutWords.length() > 0)
             {
                 int leftWordsLen = (int)leftWords.length();
                 while (true) {
                     leftLength += 1;
                     leftWords = Helper::getSubStringOfUTF8String(curText, 0, leftLength);
                     cutWords = Helper::getSubStringOfUTF8String(curText, leftLength, stringLength - leftLength);
                     if (cutWords.length() == 0) {
                         break;
                     }
                     if (leftWords.length() > leftWordsLen) {
                         break;
                     }
                 }
                 
                 leftRenderer->setString(leftWords);
                 
                 float leftRendererWidth = leftRenderer->getContentSize().width;
                 tmpLeftSpaceWidth = _leftSpaceWidth;
                 tmpLeftSpaceWidth -= leftRendererWidth;
                 
                 if (tmpLeftSpaceWidth < 0.0f) {
                     leftWords = lastLeftWords;
                     cutWords = lastCutWords;
                     tmpLeftSpaceWidth = lastTmpLeftSpaceWidth;
                     leftRenderer->setString(leftWords);
                     break;
                 }
                 else {
                     lastLeftWords = leftWords;
                     lastCutWords = cutWords;
                     lastTmpLeftSpaceWidth = tmpLeftSpaceWidth;
                 }
             }
             else {
                 //if cutWords is empty, break
                 leftWords = lastLeftWords;
                 cutWords = lastCutWords;
                 tmpLeftSpaceWidth = lastTmpLeftSpaceWidth;
                 leftRenderer->setString(leftWords);
                 break;
             }
         }
         
         _leftSpaceWidth = tmpLeftSpaceWidth;
         leftRenderer->setColor(color);
         leftRenderer->setOpacity(opacity);
         pushToContainer(leftRenderer);
         
         _leftSpaceWidth = tmpLeftSpaceWidth;
         addNewLine();
         handleTextRenderer(cutWords.c_str(), fontName, fontSize, color, opacity);
     }
     else
     {
         _leftSpaceWidth = tmpLeftSpaceWidth;
         textRenderer->setColor(color);
         textRenderer->setOpacity(opacity);
         pushToContainer(textRenderer);
     }
 }
Exemplo n.º 12
0
 void addBlankLine() {
   addNewLine();
   addNewLine();
 }
Exemplo n.º 13
0
void RichText::formatText()
{
    if (_formatTextDirty)
    {
        _elementRenderersContainer->removeAllChildren();
        _elementRenders.clear();
        if (_ignoreSize)
        {
            addNewLine();
            for (unsigned int i=0; i<_richElements->count(); i++)
            {
                RichElement* element = static_cast<RichElement*>(_richElements->objectAtIndex(i));
                CCNode* elementRenderer = NULL;
                switch (element->_type)
                {
                    case RICH_TEXT:
                    {
                        RichElementText* elmtText = static_cast<RichElementText*>(element);
                        elementRenderer = CCLabelTTF::create(elmtText->_text.c_str(), elmtText->_fontName.c_str(), elmtText->_fontSize);
                        break;
                    }
                    case RICH_IMAGE:
                    {
                        RichElementImage* elmtImage = static_cast<RichElementImage*>(element);
                        elementRenderer = CCSprite::create(elmtImage->_filePath.c_str());
                        break;
                    }
                    case RICH_CUSTOM:
                    {
                        RichElementCustomNode* elmtCustom = static_cast<RichElementCustomNode*>(element);
                        elementRenderer = elmtCustom->_customNode;
                        break;
                    }
                    default:
                        break;
                }
                CCRGBAProtocol* colorRenderer = dynamic_cast<CCRGBAProtocol*>(elementRenderer);
                colorRenderer->setColor(element->_color);
                colorRenderer->setOpacity(element->_opacity);
                pushToContainer(elementRenderer);
            }
        }
        else
        {
            addNewLine();
            for (unsigned int i=0; i<_richElements->count(); i++)
            {
                
                RichElement* element = static_cast<RichElement*>(_richElements->objectAtIndex(i));
                switch (element->_type)
                {
                    case RICH_TEXT:
                    {
                        RichElementText* elmtText = static_cast<RichElementText*>(element);
                        handleTextRenderer(elmtText->_text.c_str(), elmtText->_fontName.c_str(), elmtText->_fontSize, elmtText->_color, elmtText->_opacity);
                        break;
                    }
                    case RICH_IMAGE:
                    {
                        RichElementImage* elmtImage = static_cast<RichElementImage*>(element);
                        handleImageRenderer(elmtImage->_filePath.c_str(), elmtImage->_color, elmtImage->_opacity);
                        break;
                    }
                    case RICH_CUSTOM:
                    {
                        RichElementCustomNode* elmtCustom = static_cast<RichElementCustomNode*>(element);
                        handleCustomRenderer(elmtCustom->_customNode);
                        break;
                    }
                    default:
                        break;
                }
            }
        }
        formarRenderers();
        _formatTextDirty = false;
    }
}