diff options
Diffstat (limited to 'scene')
-rw-r--r-- | scene/gui/label.cpp | 14 | ||||
-rw-r--r-- | scene/gui/line_edit.cpp | 6 | ||||
-rw-r--r-- | scene/gui/text_edit.cpp | 7 |
3 files changed, 18 insertions, 9 deletions
diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index 7570094ff5..566d77e3fd 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -251,8 +251,10 @@ void Label::_notification(int p_what) { if (percent_visible < 1) { int total_glyphs = 0; for (int i = lines_skipped; i < last_line; i++) { - const Vector<TextServer::Glyph> glyphs = TS->shaped_text_get_glyphs(lines_rid[i]); - for (int j = 0; j < glyphs.size(); j++) { + const Vector<TextServer::Glyph> visual = TS->shaped_text_get_glyphs(lines_rid[i]); + const TextServer::Glyph *glyphs = visual.ptr(); + int gl_size = visual.size(); + for (int j = 0; j < gl_size; j++) { if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) { total_glyphs++; } @@ -287,11 +289,13 @@ void Label::_notification(int p_what) { } break; } - const Vector<TextServer::Glyph> glyphs = TS->shaped_text_get_glyphs(lines_rid[i]); + const Vector<TextServer::Glyph> visual = TS->shaped_text_get_glyphs(lines_rid[i]); + const TextServer::Glyph *glyphs = visual.ptr(); + int gl_size = visual.size(); float x = ofs.x; int outlines_drawn = glyhps_drawn; - for (int j = 0; j < glyphs.size(); j++) { + for (int j = 0; j < gl_size; j++) { for (int k = 0; k < glyphs[j].repeat; k++) { if (glyphs[j].font_rid != RID()) { if (font_color_shadow.a > 0) { @@ -320,7 +324,7 @@ void Label::_notification(int p_what) { } ofs.x = x; - for (int j = 0; j < glyphs.size(); j++) { + for (int j = 0; j < gl_size; j++) { for (int k = 0; k < glyphs[j].repeat; k++) { if (glyphs[j].font_rid != RID()) { TS->font_draw_glyph(glyphs[j].font_rid, ci, glyphs[j].font_size, ofs + Vector2(glyphs[j].x_off, glyphs[j].y_off), glyphs[j].index, font_color); diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 299c1f2f8a..d06bdaad91 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -834,11 +834,13 @@ void LineEdit::_notification(int p_what) { RenderingServer::get_singleton()->canvas_item_add_rect(ci, rect, selection_color); } } - const Vector<TextServer::Glyph> glyphs = TS->shaped_text_get_glyphs(text_rid); + const Vector<TextServer::Glyph> visual = TS->shaped_text_get_glyphs(text_rid); + const TextServer::Glyph *glyphs = visual.ptr(); + int gl_size = visual.size(); // Draw text. ofs.y += TS->shaped_text_get_ascent(text_rid); - for (int i = 0; i < glyphs.size(); i++) { + for (int i = 0; i < gl_size; i++) { bool selected = selection.enabled && glyphs[i].start >= selection.begin && glyphs[i].end <= selection.end; for (int j = 0; j < glyphs[i].repeat; j++) { if (ceil(ofs.x) >= x_ofs && (ofs.x + glyphs[i].advance) <= ofs_max) { diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 051fcef8f4..906dd94fff 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -1240,10 +1240,13 @@ void TextEdit::_notification(int p_what) { ofs_y += (row_height - text_height) / 2; - const Vector<TextServer::Glyph> glyphs = TS->shaped_text_get_glyphs(rid); + const Vector<TextServer::Glyph> visual = TS->shaped_text_get_glyphs(rid); + const TextServer::Glyph *glyphs = visual.ptr(); + int gl_size = visual.size(); + ofs_y += ldata->get_line_ascent(line_wrap_index); float char_ofs = 0.f; - for (int j = 0; j < glyphs.size(); j++) { + for (int j = 0; j < gl_size; j++) { if (color_map.has(glyphs[j].start)) { current_color = color_map[glyphs[j].start].get("color"); if (readonly && current_color.a > cache.font_color_readonly.a) { |