diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-18 17:24:54 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-18 17:24:54 +0200 |
commit | b51ee8b029b0b9f719f01bbdd21a329e65d4d238 (patch) | |
tree | 52e79f7d4582023148fe24a494606e4792e419fa /servers/text/text_server_extension.cpp | |
parent | a2a1ed1aac1cd7caa418a0a35a936f289b886a41 (diff) | |
parent | 5d3fcc57669c4104a85c79327f7c2662a0d191a3 (diff) | |
download | redot-engine-b51ee8b029b0b9f719f01bbdd21a329e65d4d238.tar.gz |
Merge pull request #80650 from bruvzg/comp_char_fix
[TextServer] Fix system font fallback and caret/selection behavior for composite characters.
Diffstat (limited to 'servers/text/text_server_extension.cpp')
-rw-r--r-- | servers/text/text_server_extension.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/servers/text/text_server_extension.cpp b/servers/text/text_server_extension.cpp index e3e86acb7a..6fc13867cc 100644 --- a/servers/text/text_server_extension.cpp +++ b/servers/text/text_server_extension.cpp @@ -303,6 +303,11 @@ void TextServerExtension::_bind_methods() { GDVIRTUAL_BIND(_shaped_text_next_grapheme_pos, "shaped", "pos"); GDVIRTUAL_BIND(_shaped_text_prev_grapheme_pos, "shaped", "pos"); + GDVIRTUAL_BIND(_shaped_text_get_character_breaks, "shaped"); + GDVIRTUAL_BIND(_shaped_text_next_character_pos, "shaped", "pos"); + GDVIRTUAL_BIND(_shaped_text_prev_character_pos, "shaped", "pos"); + GDVIRTUAL_BIND(_shaped_text_closest_character_pos, "shaped", "pos"); + GDVIRTUAL_BIND(_format_number, "string", "language"); GDVIRTUAL_BIND(_parse_number, "string", "language"); GDVIRTUAL_BIND(_percent_sign, "language"); @@ -311,6 +316,7 @@ void TextServerExtension::_bind_methods() { GDVIRTUAL_BIND(_is_valid_identifier, "string"); GDVIRTUAL_BIND(_string_get_word_breaks, "string", "language", "chars_per_line"); + GDVIRTUAL_BIND(_string_get_character_breaks, "string", "language"); GDVIRTUAL_BIND(_is_confusable, "string", "dict"); GDVIRTUAL_BIND(_spoof_check, "string"); @@ -1333,6 +1339,38 @@ int64_t TextServerExtension::shaped_text_prev_grapheme_pos(const RID &p_shaped, return TextServer::shaped_text_prev_grapheme_pos(p_shaped, p_pos); } +PackedInt32Array TextServerExtension::shaped_text_get_character_breaks(const RID &p_shaped) const { + PackedInt32Array ret; + if (GDVIRTUAL_CALL(_shaped_text_get_character_breaks, p_shaped, ret)) { + return ret; + } + return PackedInt32Array(); +} + +int64_t TextServerExtension::shaped_text_next_character_pos(const RID &p_shaped, int64_t p_pos) const { + int64_t ret; + if (GDVIRTUAL_CALL(_shaped_text_next_character_pos, p_shaped, p_pos, ret)) { + return ret; + } + return TextServer::shaped_text_next_character_pos(p_shaped, p_pos); +} + +int64_t TextServerExtension::shaped_text_prev_character_pos(const RID &p_shaped, int64_t p_pos) const { + int64_t ret; + if (GDVIRTUAL_CALL(_shaped_text_prev_character_pos, p_shaped, p_pos, ret)) { + return ret; + } + return TextServer::shaped_text_prev_character_pos(p_shaped, p_pos); +} + +int64_t TextServerExtension::shaped_text_closest_character_pos(const RID &p_shaped, int64_t p_pos) const { + int64_t ret; + if (GDVIRTUAL_CALL(_shaped_text_closest_character_pos, p_shaped, p_pos, ret)) { + return ret; + } + return TextServer::shaped_text_closest_character_pos(p_shaped, p_pos); +} + String TextServerExtension::format_number(const String &p_string, const String &p_language) const { String ret; if (GDVIRTUAL_CALL(_format_number, p_string, p_language, ret)) { @@ -1399,6 +1437,14 @@ PackedInt32Array TextServerExtension::string_get_word_breaks(const String &p_str return ret; } +PackedInt32Array TextServerExtension::string_get_character_breaks(const String &p_string, const String &p_language) const { + PackedInt32Array ret; + if (GDVIRTUAL_CALL(_string_get_character_breaks, p_string, p_language, ret)) { + return ret; + } + return TextServer::string_get_character_breaks(p_string, p_language); +} + int64_t TextServerExtension::is_confusable(const String &p_string, const PackedStringArray &p_dict) const { int64_t ret; if (GDVIRTUAL_CALL(_is_confusable, p_string, p_dict, ret)) { |