diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2020-12-17 09:02:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-17 09:02:01 +0100 |
commit | 9e49dbda2a145165269f07bc4f621211c695de52 (patch) | |
tree | ad77d80e6538f3011b7f54fce936932b698467c7 /servers | |
parent | 933cf114d880651a65082e417c05c77bf771af95 (diff) | |
parent | 06ae77a320ba7b83616e4a30b1f40152bd1d3a82 (diff) |
Merge pull request #44360 from bruvzg/ctl_punct_word_break
Add word breaks on punctuation characters.
Diffstat (limited to 'servers')
-rw-r--r-- | servers/text_server.cpp | 7 | ||||
-rw-r--r-- | servers/text_server.h | 13 |
2 files changed, 11 insertions, 9 deletions
diff --git a/servers/text_server.cpp b/servers/text_server.cpp index b2584d9ffd..30dfa60ba3 100644 --- a/servers/text_server.cpp +++ b/servers/text_server.cpp @@ -376,6 +376,7 @@ void TextServer::_bind_methods() { BIND_ENUM_CONSTANT(GRAPHEME_IS_BREAK_SOFT); BIND_ENUM_CONSTANT(GRAPHEME_IS_TAB); BIND_ENUM_CONSTANT(GRAPHEME_IS_ELONGATION); + BIND_ENUM_CONSTANT(GRAPHEME_IS_PUNCTUATION); /* Hinting */ BIND_ENUM_CONSTANT(HINTING_NONE); @@ -679,7 +680,7 @@ Vector<Vector2i> TextServer::shaped_text_get_line_breaks(RID p_shaped, float p_w Vector<Vector2i> TextServer::shaped_text_get_word_breaks(RID p_shaped) const { Vector<Vector2i> words; - const_cast<TextServer *>(this)->shaped_text_update_breaks(p_shaped); + const_cast<TextServer *>(this)->shaped_text_update_justification_ops(p_shaped); const Vector<Glyph> &logical = const_cast<TextServer *>(this)->shaped_text_sort_logical(p_shaped); const Vector2i &range = shaped_text_get_range(p_shaped); @@ -690,8 +691,8 @@ Vector<Vector2i> TextServer::shaped_text_get_word_breaks(RID p_shaped) const { for (int i = 0; i < l_size; i++) { if (l_gl[i].count > 0) { - if ((l_gl[i].flags & GRAPHEME_IS_SPACE) == GRAPHEME_IS_SPACE) { - words.push_back(Vector2i(word_start, l_gl[i].end - 1)); + if (((l_gl[i].flags & GRAPHEME_IS_SPACE) == GRAPHEME_IS_SPACE) || ((l_gl[i].flags & GRAPHEME_IS_PUNCTUATION) == GRAPHEME_IS_PUNCTUATION)) { + words.push_back(Vector2i(word_start, l_gl[i].start)); word_start = l_gl[i].end; } } diff --git a/servers/text_server.h b/servers/text_server.h index 09179cd218..a9b8649268 100644 --- a/servers/text_server.h +++ b/servers/text_server.h @@ -74,11 +74,12 @@ public: GRAPHEME_IS_VALID = 1 << 0, // Glyph is valid. GRAPHEME_IS_RTL = 1 << 1, // Glyph is right-to-left. GRAPHEME_IS_VIRTUAL = 1 << 2, // Glyph is not part of source string (added by fit_to_width function, do not affect caret movement). - GRAPHEME_IS_SPACE = 1 << 3, // Is whitespace (for justification). - GRAPHEME_IS_BREAK_HARD = 1 << 4, // Is line break (mandatory break, e.g "\n") - GRAPHEME_IS_BREAK_SOFT = 1 << 5, // Is line break (optional break, e.g space) - GRAPHEME_IS_TAB = 1 << 6, // Is tab or vertical tab - GRAPHEME_IS_ELONGATION = 1 << 7 // Elongation (e.g kashida), glyph can be duplicated or truncated to fit line to width. + GRAPHEME_IS_SPACE = 1 << 3, // Is whitespace (for justification and word breaks). + GRAPHEME_IS_BREAK_HARD = 1 << 4, // Is line break (mandatory break, e.g. "\n"). + GRAPHEME_IS_BREAK_SOFT = 1 << 5, // Is line break (optional break, e.g. space). + GRAPHEME_IS_TAB = 1 << 6, // Is tab or vertical tab. + GRAPHEME_IS_ELONGATION = 1 << 7, // Elongation (e.g. kashida), glyph can be duplicated or truncated to fit line to width. + GRAPHEME_IS_PUNCTUATION = 1 << 8 // Punctuation (can be used as word break, but not line break or justifiction). }; enum Hinting { @@ -104,7 +105,7 @@ public: uint8_t count = 0; // Number of glyphs in the grapheme, set in the first glyph only. uint8_t repeat = 1; // Draw multiple times in the row. - uint8_t flags = 0; // Grapheme flags (valid, rtl, virtual), set in the first glyph only. + uint16_t flags = 0; // Grapheme flags (valid, rtl, virtual), set in the first glyph only. float x_off = 0.f; // Offset from the origin of the glyph on baseline. float y_off = 0.f; |