Do not cache the textWidth in GuiText

This commit is contained in:
Maschell 2020-08-13 13:39:17 +02:00
parent e8ee63068b
commit 427b511cb0
2 changed files with 8 additions and 21 deletions

View File

@ -94,9 +94,7 @@ public:
virtual std::string toUTF8(void) const; virtual std::string toUTF8(void) const;
//!Get the Horizontal Size of Text //!Get the Horizontal Size of Text
int32_t getTextWidth() { int32_t getTextWidth();
return textWidth;
}
int32_t getTextWidth(int32_t ind); int32_t getTextWidth(int32_t ind);
@ -173,10 +171,8 @@ protected:
int32_t textScrollPos; //!< Current starting index of text string for scrolling int32_t textScrollPos; //!< Current starting index of text string for scrolling
int32_t textScrollInitialDelay; //!< Delay to wait before starting to scroll int32_t textScrollInitialDelay; //!< Delay to wait before starting to scroll
int32_t textScrollDelay; //!< Scrolling speed int32_t textScrollDelay; //!< Scrolling speed
int32_t size; //!< Font size
int32_t maxWidth; //!< Maximum width of the generated text object (for text wrapping) int32_t maxWidth; //!< Maximum width of the generated text object (for text wrapping)
FreeTypeGX *font; FreeTypeGX *font;
int32_t textWidth;
int32_t currentSize; int32_t currentSize;
int32_t linestodraw; int32_t linestodraw;
glm::vec4 color; glm::vec4 color;

View File

@ -45,7 +45,6 @@ GuiText::GuiText() {
maxWidth = presetMaxWidth; maxWidth = presetMaxWidth;
internalSSAA = presetSSAA; internalSSAA = presetSSAA;
wrapMode = 0; wrapMode = 0;
textWidth = 0;
font = presentFont; font = presentFont;
linestodraw = MAX_LINES_TO_DRAW; linestodraw = MAX_LINES_TO_DRAW;
textScrollPos = 0; textScrollPos = 0;
@ -67,7 +66,6 @@ GuiText::GuiText(const char *t, int32_t s, const glm::vec4 &c) {
maxWidth = presetMaxWidth; maxWidth = presetMaxWidth;
internalSSAA = presetSSAA; internalSSAA = presetSSAA;
wrapMode = 0; wrapMode = 0;
textWidth = 0;
font = presentFont; font = presentFont;
linestodraw = MAX_LINES_TO_DRAW; linestodraw = MAX_LINES_TO_DRAW;
textScrollPos = 0; textScrollPos = 0;
@ -83,8 +81,6 @@ GuiText::GuiText(const char *t, int32_t s, const glm::vec4 &c) {
if (!text) { if (!text) {
return; return;
} }
textWidth = font->getWidth(text, currentSize);
} }
} }
@ -98,7 +94,6 @@ GuiText::GuiText(const wchar_t *t, int32_t s, const glm::vec4 &c) {
maxWidth = presetMaxWidth; maxWidth = presetMaxWidth;
internalSSAA = presetSSAA; internalSSAA = presetSSAA;
wrapMode = 0; wrapMode = 0;
textWidth = 0;
font = presentFont; font = presentFont;
linestodraw = MAX_LINES_TO_DRAW; linestodraw = MAX_LINES_TO_DRAW;
textScrollPos = 0; textScrollPos = 0;
@ -116,8 +111,6 @@ GuiText::GuiText(const wchar_t *t, int32_t s, const glm::vec4 &c) {
} }
wcscpy(text, t); wcscpy(text, t);
textWidth = font->getWidth(text, currentSize);
} }
} }
@ -134,7 +127,6 @@ GuiText::GuiText(const char *t) {
maxWidth = presetMaxWidth; maxWidth = presetMaxWidth;
internalSSAA = presetSSAA; internalSSAA = presetSSAA;
wrapMode = 0; wrapMode = 0;
textWidth = 0;
font = presentFont; font = presentFont;
linestodraw = MAX_LINES_TO_DRAW; linestodraw = MAX_LINES_TO_DRAW;
textScrollPos = 0; textScrollPos = 0;
@ -150,8 +142,6 @@ GuiText::GuiText(const char *t) {
if (!text) { if (!text) {
return; return;
} }
textWidth = font->getWidth(text, currentSize);
} }
} }
@ -184,8 +174,6 @@ void GuiText::setText(const char *t) {
if (!text) { if (!text) {
return; return;
} }
textWidth = font->getWidth(text, currentSize);
} }
} }
@ -228,8 +216,6 @@ void GuiText::setText(const wchar_t *t) {
} }
wcscpy(text, t); wcscpy(text, t);
textWidth = font->getWidth(text, currentSize);
} }
} }
@ -288,10 +274,16 @@ int32_t GuiText::getTextWidth(int32_t ind) {
if (ind < 0 || ind >= (int32_t) textDyn.size()) { if (ind < 0 || ind >= (int32_t) textDyn.size()) {
return this->getTextWidth(); return this->getTextWidth();
} }
return font->getWidth(textDyn[ind], currentSize); return font->getWidth(textDyn[ind], currentSize);
} }
//!Get the Horizontal Size of Text
int32_t GuiText::getTextWidth() {
auto res = font->getWidth(text, currentSize);
res = res > maxWidth && maxWidth > 0 ? maxWidth : res;
return res;
}
const wchar_t *GuiText::getDynText(int32_t ind) { const wchar_t *GuiText::getDynText(int32_t ind) {
if (ind < 0 || ind >= (int32_t) textDyn.size()) { if (ind < 0 || ind >= (int32_t) textDyn.size()) {
return text; return text;
@ -309,7 +301,6 @@ bool GuiText::setFont(FreeTypeGX *f) {
} }
font = f; font = f;
textWidth = font->getWidth(text, currentSize);
return true; return true;
} }