81 lines
2.0 KiB
C++
81 lines
2.0 KiB
C++
// Copyright (c) 2022 Dominic Masters
|
|
//
|
|
// This software is released under the MIT License.
|
|
// https://opensource.org/licenses/MIT
|
|
|
|
#pragma once
|
|
#include "UIComponent.hpp"
|
|
#include "display/mesh/QuadMesh.hpp"
|
|
#include "display/font/Font.hpp"
|
|
|
|
namespace Dawn {
|
|
class UILabel : public UIComponent {
|
|
private:
|
|
Mesh mesh;
|
|
bool_t needsRebuffering = true;
|
|
Font *font = nullptr;
|
|
std::string key = "";
|
|
float_t fontSize = 10.0f;
|
|
bool_t hasText = false;
|
|
std::function<void()> evtLangUpdated;
|
|
|
|
void updatePositions() override;
|
|
|
|
std::vector<struct ShaderPassItem> getSelfPassItems(
|
|
glm::mat4 projection,
|
|
glm::mat4 view,
|
|
glm::mat4 transform
|
|
) override;
|
|
|
|
public:
|
|
struct FontMeasure measure;
|
|
int32_t startQuad = 0;
|
|
int32_t quadCount = -1;
|
|
|
|
/** The colour of this label */
|
|
struct Color textColor = COLOR_MAGENTA;
|
|
|
|
UILabel(UICanvas *canvas);
|
|
virtual float_t getContentWidth() override;
|
|
virtual float_t getContentHeight() override;
|
|
void setTransform(
|
|
UIComponentAlign xAlign,
|
|
UIComponentAlign yAlign,
|
|
glm::vec4 alignment,
|
|
float_t z
|
|
) override;
|
|
|
|
/**
|
|
* Internal method to force the font mesh to be recreated.
|
|
*/
|
|
void updateMesh();
|
|
|
|
/**
|
|
* Set the font to use for the label.
|
|
*
|
|
* @param font Font to use.
|
|
*/
|
|
void setFont(Font *font);
|
|
|
|
/**
|
|
* Sets the text for the label to use.
|
|
*
|
|
* @param key Localzied string key for the label to use.
|
|
*/
|
|
void setText(std::string key);
|
|
|
|
/**
|
|
* Sets / Updates the font size for the label.
|
|
*
|
|
* @param fontSize Font size to use.
|
|
*/
|
|
void setFontSize(float_t fontSize);
|
|
|
|
/**
|
|
* Get the labels' current font size.
|
|
*
|
|
* @return Font size of the label.
|
|
*/
|
|
float_t getFontSize();
|
|
};
|
|
} |