|
@@ -296,6 +296,21 @@ Size2 DynamicFontAtSize::get_char_size(CharType p_char, CharType p_next, const V
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+String DynamicFontAtSize::get_available_chars() const {
|
|
|
+ String chars;
|
|
|
+
|
|
|
+ FT_UInt gindex;
|
|
|
+ FT_ULong charcode = FT_Get_First_Char(face, &gindex);
|
|
|
+ while (gindex != 0) {
|
|
|
+ if (charcode != 0) {
|
|
|
+ chars += CharType(charcode);
|
|
|
+ }
|
|
|
+ charcode = FT_Get_Next_Char(face, charcode, &gindex);
|
|
|
+ }
|
|
|
+
|
|
|
+ return chars;
|
|
|
+}
|
|
|
+
|
|
|
void DynamicFontAtSize::set_texture_flags(uint32_t p_flags) {
|
|
|
|
|
|
texture_flags = p_flags;
|
|
@@ -876,6 +891,25 @@ Size2 DynamicFont::get_char_size(CharType p_char, CharType p_next) const {
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+String DynamicFont::get_available_chars() const {
|
|
|
+
|
|
|
+ if (!data_at_size.is_valid())
|
|
|
+ return "";
|
|
|
+
|
|
|
+ String chars = data_at_size->get_available_chars();
|
|
|
+
|
|
|
+ for (int i = 0; i < fallback_data_at_size.size(); i++) {
|
|
|
+ String fallback_chars = fallback_data_at_size[i]->get_available_chars();
|
|
|
+ for (int j = 0; j < fallback_chars.length(); j++) {
|
|
|
+ if (chars.find_char(fallback_chars[j]) == -1) {
|
|
|
+ chars += fallback_chars[j];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return chars;
|
|
|
+}
|
|
|
+
|
|
|
bool DynamicFont::is_distance_field_hint() const {
|
|
|
|
|
|
return false;
|
|
@@ -995,6 +1029,8 @@ void DynamicFont::_bind_methods() {
|
|
|
ClassDB::bind_method(D_METHOD("set_font_data", "data"), &DynamicFont::set_font_data);
|
|
|
ClassDB::bind_method(D_METHOD("get_font_data"), &DynamicFont::get_font_data);
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("get_available_chars"), &DynamicFont::get_available_chars);
|
|
|
+
|
|
|
ClassDB::bind_method(D_METHOD("set_size", "data"), &DynamicFont::set_size);
|
|
|
ClassDB::bind_method(D_METHOD("get_size"), &DynamicFont::get_size);
|
|
|
|