Added text alignment support.

This commit is contained in:
2023-10-09 17:55:46 -05:00
parent 52c473b029
commit 8df7cd23ea
5 changed files with 67 additions and 1 deletions

View File

@ -22,12 +22,65 @@ void UILabel::onStart() {
this->shaderBuffer.init();
useEvent([&]{
// TODO: I believe I only need to rebuffer here if maxWidth is not -1
this->rebufferQuads(this->texts);
}, eventAlignmentUpdated);
useEffect([&]{
this->rebufferQuads(this->texts);
}, lineHeight);
useEvent([&]{
this->updateTextAlignments();
}, eventTextChanged);
useEffect([&]{
this->updateTextAlignments();
}, this->textAlign);
}
void UILabel::updateTextAlignments() {
struct FontShaderBufferData data;
switch(this->textAlign) {
case UI_LABEL_TEXT_ALIGN_LEFT: {
auto itLine = lines.begin();
int32_t i = 0;
while(itLine != lines.end()) {
data.linePositions[i] = glm::vec2(0, 0);
++itLine;
}
break;
}
case UI_LABEL_TEXT_ALIGN_RIGHT: {
float_t widthBased = this->getWidth();
auto itLine = lines.begin();
int32_t i = 0;
while(itLine != lines.end()) {
data.linePositions[i] = glm::vec2(widthBased - itLine->width, 0);
++itLine;
}
break;
}
case UI_LABEL_TEXT_ALIGN_CENTER: {
float_t widthBased = this->getWidth();
auto itLine = lines.begin();
int32_t i = 0;
while(itLine != lines.end()) {
float_t x = (widthBased - itLine->width) / 2.0f;
data.linePositions[i] = glm::vec2(x, 0);
++itLine;
}
break;
}
default:
assertUnreachable("UILabel::updateTextAlignments: TextAlign invalid");
}
this->shaderBuffer.buffer(&data, &data.linePositions);
}
std::vector<struct ShaderPassItem> UILabel::getUIRenderPasses() {

View File

@ -59,6 +59,8 @@ namespace Dawn {
bool_t ignoreAlignmentUpdate = false;
bool_t hasDecorations = false;
void updateTextAlignments();
public:
int32_t quadStart = 0;
int32_t quadCount = -1;