Add DynamicFont::get_available_chars()
This commit is contained in:
parent
9e34ba4855
commit
80a5df4821
|
@ -26,6 +26,14 @@
|
||||||
Adds a fallback font.
|
Adds a fallback font.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="get_available_chars" qualifiers="const">
|
||||||
|
<return type="String">
|
||||||
|
</return>
|
||||||
|
<description>
|
||||||
|
Returns a string containing all the characters available in the main and all the fallback fonts.
|
||||||
|
If a given character is included in more than one font, it appears only once in the returned string.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="get_fallback" qualifiers="const">
|
<method name="get_fallback" qualifiers="const">
|
||||||
<return type="DynamicFontData">
|
<return type="DynamicFontData">
|
||||||
</return>
|
</return>
|
||||||
|
|
|
@ -290,6 +290,21 @@ Size2 DynamicFontAtSize::get_char_size(CharType p_char, CharType p_next, const V
|
||||||
return ret;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2 &p_pos, CharType p_char, CharType p_next, const Color &p_modulate, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks, bool p_advance_only, bool p_outline) const {
|
float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2 &p_pos, CharType p_char, CharType p_next, const Color &p_modulate, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks, bool p_advance_only, bool p_outline) const {
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -849,6 +864,25 @@ Size2 DynamicFont::get_char_size(CharType p_char, CharType p_next) const {
|
||||||
return ret;
|
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 {
|
bool DynamicFont::is_distance_field_hint() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -964,6 +998,8 @@ void DynamicFont::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_font_data", "data"), &DynamicFont::set_font_data);
|
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_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("set_size", "data"), &DynamicFont::set_size);
|
||||||
ClassDB::bind_method(D_METHOD("get_size"), &DynamicFont::get_size);
|
ClassDB::bind_method(D_METHOD("get_size"), &DynamicFont::get_size);
|
||||||
|
|
||||||
|
|
|
@ -189,6 +189,7 @@ public:
|
||||||
float get_underline_thickness() const;
|
float get_underline_thickness() const;
|
||||||
|
|
||||||
Size2 get_char_size(CharType p_char, CharType p_next, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks) const;
|
Size2 get_char_size(CharType p_char, CharType p_next, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks) const;
|
||||||
|
String get_available_chars() const;
|
||||||
|
|
||||||
float draw_char(RID p_canvas_item, const Point2 &p_pos, CharType p_char, CharType p_next, const Color &p_modulate, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks, bool p_advance_only = false, bool p_outline = false) const;
|
float draw_char(RID p_canvas_item, const Point2 &p_pos, CharType p_char, CharType p_next, const Color &p_modulate, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks, bool p_advance_only = false, bool p_outline = false) const;
|
||||||
|
|
||||||
|
@ -277,6 +278,7 @@ public:
|
||||||
virtual float get_underline_thickness() const override;
|
virtual float get_underline_thickness() const override;
|
||||||
|
|
||||||
virtual Size2 get_char_size(CharType p_char, CharType p_next = 0) const override;
|
virtual Size2 get_char_size(CharType p_char, CharType p_next = 0) const override;
|
||||||
|
String get_available_chars() const;
|
||||||
|
|
||||||
virtual bool is_distance_field_hint() const override;
|
virtual bool is_distance_field_hint() const override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue