// Copyright (c) 2022 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "UILabel.hpp" #include "game/DawnGame.hpp" using namespace Dawn; UILabel::UILabel(UICanvas *canvas) : UIComponent(canvas) { evtLangUpdated = useEvent([&]{ this->needsRebuffering = true; if(key.size() > 0 && this->getGame()->localeManager.getString(key).size() > 0) { this->hasText = true; } }, getGame()->localeManager.eventLanguageUpdated); } void UILabel::updatePositions() { UIComponent::updatePositions(); this->updateMesh(); } void UILabel::updateMesh() { if(!this->needsRebuffering || !this->hasText) return; if(this->font == nullptr || !this->font->isReady()) return; float_t width = this->width; if(width == 0) width = -1; std::string text = this->getGame()->localeManager.getString(key); this->font->buffer( text, this->fontSize, width, &this->mesh, &this->measure ); this->needsRebuffering = false; } void UILabel::setFont(Font *font) { this->font = font; this->needsRebuffering = true; } void UILabel::setText(std::string key) { this->key = key; this->hasText = false; if(key.size() > 0 && this->getGame()->localeManager.getString(key).size()>0){ this->hasText = true; } this->needsRebuffering = true; } void UILabel::setFontSize(float_t fontSize) { this->fontSize = fontSize; this->needsRebuffering = true; } float_t UILabel::getFontSize() { return this->fontSize; } float_t UILabel::getContentWidth() { this->updateMesh(); return this->measure.getWidth(); } float_t UILabel::getContentHeight() { this->updateMesh(); return this->measure.getHeight(); } std::vector UILabel::getSelfPassItems( glm::mat4 projection, glm::mat4 view, glm::mat4 transform ) { std::vector items; if(this->font == nullptr) return items; // this has to go eventually this->updateMesh(); auto item = this->getGame()->renderManager.uiShaderProgram.getUIPassItem( projection, view, transform, this->font->getTexture(), this->textColor, &this->mesh, this->z ); item.start = this->startQuad * QUAD_INDICE_COUNT; item.count = this->quadCount == -1 ? -1 : this->quadCount * QUAD_INDICE_COUNT; items.push_back(item); return items; } void UILabel::setTransform( UIComponentAlign xAlign, UIComponentAlign yAlign, glm::vec4 alignment, float_t z ) { this->needsRebuffering = true; UIComponent::setTransform(xAlign, yAlign, alignment, z); }