Use system fonts as fallback and improve system font handling.

Add support for font weight and stretch selection when using system fonts.
Add function to get system fallback font from a font name, style, text, and language code.
Implement system font support for Android.
Use system fonts as a last resort fallback.
This commit is contained in:
bruvzg
2022-11-21 15:04:01 +02:00
parent 015dc492de
commit ecec415988
51 changed files with 2756 additions and 150 deletions

View File

@@ -69,6 +69,12 @@ void TextServerExtension::_bind_methods() {
GDVIRTUAL_BIND(_font_set_style_name, "font_rid", "name_style");
GDVIRTUAL_BIND(_font_get_style_name, "font_rid");
GDVIRTUAL_BIND(_font_set_weight, "font_rid", "weight");
GDVIRTUAL_BIND(_font_get_weight, "font_rid");
GDVIRTUAL_BIND(_font_set_stretch, "font_rid", "stretch");
GDVIRTUAL_BIND(_font_get_stretch, "font_rid");
GDVIRTUAL_BIND(_font_set_antialiasing, "font_rid", "antialiasing");
GDVIRTUAL_BIND(_font_get_antialiasing, "font_rid");
@@ -87,6 +93,9 @@ void TextServerExtension::_bind_methods() {
GDVIRTUAL_BIND(_font_set_fixed_size, "font_rid", "fixed_size");
GDVIRTUAL_BIND(_font_get_fixed_size, "font_rid");
GDVIRTUAL_BIND(_font_set_allow_system_fallback, "font_rid", "allow_system_fallback");
GDVIRTUAL_BIND(_font_is_allow_system_fallback, "font_rid");
GDVIRTUAL_BIND(_font_set_force_autohinter, "font_rid", "force_autohinter");
GDVIRTUAL_BIND(_font_is_force_autohinter, "font_rid");
@@ -308,6 +317,8 @@ void TextServerExtension::_bind_methods() {
GDVIRTUAL_BIND(_string_to_lower, "string", "language");
GDVIRTUAL_BIND(_parse_structured_text, "parser_type", "args", "text");
GDVIRTUAL_BIND(_cleanup);
}
bool TextServerExtension::has_feature(Feature p_feature) const {
@@ -434,6 +445,26 @@ String TextServerExtension::font_get_style_name(const RID &p_font_rid) const {
return ret;
}
void TextServerExtension::font_set_weight(const RID &p_font_rid, int64_t p_weight) {
GDVIRTUAL_CALL(_font_set_weight, p_font_rid, p_weight);
}
int64_t TextServerExtension::font_get_weight(const RID &p_font_rid) const {
int64_t ret = 400;
GDVIRTUAL_CALL(_font_get_weight, p_font_rid, ret);
return ret;
}
void TextServerExtension::font_set_stretch(const RID &p_font_rid, int64_t p_stretch) {
GDVIRTUAL_CALL(_font_set_stretch, p_font_rid, p_stretch);
}
int64_t TextServerExtension::font_get_stretch(const RID &p_font_rid) const {
int64_t ret = 100;
GDVIRTUAL_CALL(_font_get_stretch, p_font_rid, ret);
return ret;
}
void TextServerExtension::font_set_name(const RID &p_font_rid, const String &p_name) {
GDVIRTUAL_CALL(_font_set_name, p_font_rid, p_name);
}
@@ -504,6 +535,16 @@ int64_t TextServerExtension::font_get_fixed_size(const RID &p_font_rid) const {
return ret;
}
void TextServerExtension::font_set_allow_system_fallback(const RID &p_font_rid, bool p_allow_system_fallback) {
GDVIRTUAL_CALL(_font_set_allow_system_fallback, p_font_rid, p_allow_system_fallback);
}
bool TextServerExtension::font_is_allow_system_fallback(const RID &p_font_rid) const {
bool ret = false;
GDVIRTUAL_CALL(_font_is_allow_system_fallback, p_font_rid, ret);
return ret;
}
void TextServerExtension::font_set_force_autohinter(const RID &p_font_rid, bool p_force_autohinter) {
GDVIRTUAL_CALL(_font_set_force_autohinter, p_font_rid, p_force_autohinter);
}
@@ -1360,6 +1401,10 @@ bool TextServerExtension::spoof_check(const String &p_string) const {
return TextServer::spoof_check(p_string);
}
void TextServerExtension::cleanup() {
GDVIRTUAL_CALL(_cleanup);
}
TextServerExtension::TextServerExtension() {
//NOP
}

View File

@@ -109,6 +109,16 @@ public:
GDVIRTUAL2(_font_set_style_name, RID, const String &);
GDVIRTUAL1RC(String, _font_get_style_name, RID);
virtual void font_set_weight(const RID &p_font_rid, int64_t p_weight) override;
virtual int64_t font_get_weight(const RID &p_font_rid) const override;
GDVIRTUAL2(_font_set_weight, RID, int);
GDVIRTUAL1RC(int64_t, _font_get_weight, RID);
virtual void font_set_stretch(const RID &p_font_rid, int64_t p_stretch) override;
virtual int64_t font_get_stretch(const RID &p_font_rid) const override;
GDVIRTUAL2(_font_set_stretch, RID, int);
GDVIRTUAL1RC(int64_t, _font_get_stretch, RID);
virtual void font_set_antialiasing(const RID &p_font_rid, TextServer::FontAntialiasing p_antialiasing) override;
virtual TextServer::FontAntialiasing font_get_antialiasing(const RID &p_font_rid) const override;
GDVIRTUAL2(_font_set_antialiasing, RID, TextServer::FontAntialiasing);
@@ -154,6 +164,11 @@ public:
GDVIRTUAL2(_font_set_transform, RID, Transform2D);
GDVIRTUAL1RC(Transform2D, _font_get_transform, RID);
virtual void font_set_allow_system_fallback(const RID &p_font_rid, bool p_allow_system_fallback) override;
virtual bool font_is_allow_system_fallback(const RID &p_font_rid) const override;
GDVIRTUAL2(_font_set_allow_system_fallback, RID, bool);
GDVIRTUAL1RC(bool, _font_is_allow_system_fallback, RID);
virtual void font_set_force_autohinter(const RID &p_font_rid, bool p_force_autohinter) override;
virtual bool font_is_force_autohinter(const RID &p_font_rid) const override;
GDVIRTUAL2(_font_set_force_autohinter, RID, bool);
@@ -514,6 +529,9 @@ public:
GDVIRTUAL2RC(int64_t, _is_confusable, const String &, const PackedStringArray &);
GDVIRTUAL1RC(bool, _spoof_check, const String &);
virtual void cleanup() override;
GDVIRTUAL0(_cleanup);
TextServerExtension();
~TextServerExtension();
};