summaryrefslogtreecommitdiff
path: root/scene/resources/font.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/resources/font.cpp')
-rw-r--r--scene/resources/font.cpp105
1 files changed, 95 insertions, 10 deletions
diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp
index da35137a09..7c17610df7 100644
--- a/scene/resources/font.cpp
+++ b/scene/resources/font.cpp
@@ -472,6 +472,32 @@ void Font::_data_changed() {
bool Font::_set(const StringName &p_name, const Variant &p_value) {
String str = p_name;
+#ifndef DISABLE_DEPRECATED
+ if (str == "font_data") { // Compatibility, DynamicFont main data
+ Ref<FontData> fd = p_value;
+ if (fd.is_valid()) {
+ add_data(fd);
+ return true;
+ }
+ return false;
+ } else if (str.begins_with("fallback/")) { // Compatibility, DynamicFont fallback data
+ Ref<FontData> fd = p_value;
+ if (fd.is_valid()) {
+ add_data(fd);
+ return true;
+ }
+ return false;
+ } else if (str == "fallback") { // Compatibility, BitmapFont fallback
+ Ref<Font> f = p_value;
+ if (f.is_valid()) {
+ for (int i = 0; i < f->get_data_count(); i++) {
+ add_data(f->get_data(i));
+ }
+ return true;
+ }
+ return false;
+ }
+#endif /* DISABLE_DEPRECATED */
if (str.begins_with("data/")) {
int idx = str.get_slicec('/', 1).to_int();
Ref<FontData> fd = p_value;
@@ -595,41 +621,41 @@ Dictionary Font::get_feature_list() const {
float Font::get_height(int p_size) const {
float ret = 0.f;
for (int i = 0; i < data.size(); i++) {
- ret += data[i]->get_height(p_size);
+ ret = MAX(ret, data[i]->get_height(p_size));
}
- return (ret / data.size()) + spacing_top + spacing_bottom;
+ return ret + spacing_top + spacing_bottom;
}
float Font::get_ascent(int p_size) const {
float ret = 0.f;
for (int i = 0; i < data.size(); i++) {
- ret += data[i]->get_ascent(p_size);
+ ret = MAX(ret, data[i]->get_ascent(p_size));
}
- return (ret / data.size()) + spacing_top;
+ return ret + spacing_top;
}
float Font::get_descent(int p_size) const {
float ret = 0.f;
for (int i = 0; i < data.size(); i++) {
- ret += data[i]->get_descent(p_size);
+ ret = MAX(ret, data[i]->get_descent(p_size));
}
- return (ret / data.size()) + spacing_bottom;
+ return ret + spacing_bottom;
}
float Font::get_underline_position(int p_size) const {
float ret = 0.f;
for (int i = 0; i < data.size(); i++) {
- ret += data[i]->get_underline_position(p_size);
+ ret = MAX(ret, data[i]->get_underline_position(p_size));
}
- return (ret / data.size());
+ return ret;
}
float Font::get_underline_thickness(int p_size) const {
float ret = 0.f;
for (int i = 0; i < data.size(); i++) {
- ret += data[i]->get_underline_thickness(p_size);
+ ret = MAX(ret, data[i]->get_underline_thickness(p_size));
}
- return (ret / data.size());
+ return ret;
}
int Font::get_spacing(int p_type) const {
@@ -899,6 +925,23 @@ RES ResourceFormatLoaderFont::load(const String &p_path, const String &p_origina
return dfont;
}
+void ResourceFormatLoaderFont::get_recognized_extensions_for_type(const String &p_type, List<String> *p_extensions) const {
+#ifndef DISABLE_DEPRECATED
+ if (p_type == "DynacmicFontData") {
+ p_extensions->push_back("ttf");
+ p_extensions->push_back("otf");
+ p_extensions->push_back("woff");
+ return;
+ }
+ if (p_type == "BitmapFont") { // BitmapFont (*.font, *fnt) is handled by ResourceFormatLoaderCompatFont
+ return;
+ }
+#endif /* DISABLE_DEPRECATED */
+ if (p_type == "" || handles_type(p_type)) {
+ get_recognized_extensions(p_extensions);
+ }
+}
+
void ResourceFormatLoaderFont::get_recognized_extensions(List<String> *p_extensions) const {
p_extensions->push_back("ttf");
p_extensions->push_back("otf");
@@ -918,3 +961,45 @@ String ResourceFormatLoaderFont::get_resource_type(const String &p_path) const {
}
return "";
}
+
+#ifndef DISABLE_DEPRECATED
+
+RES ResourceFormatLoaderCompatFont::load(const String &p_path, const String &p_original_path, Error *r_error, bool p_use_sub_threads, float *r_progress, bool p_no_cache) {
+ if (r_error) {
+ *r_error = ERR_FILE_CANT_OPEN;
+ }
+
+ Ref<FontData> dfont;
+ dfont.instance();
+ dfont->load_resource(p_path);
+
+ Ref<Font> font;
+ font.instance();
+ font->add_data(dfont);
+
+ if (r_error) {
+ *r_error = OK;
+ }
+
+ return font;
+}
+
+void ResourceFormatLoaderCompatFont::get_recognized_extensions_for_type(const String &p_type, List<String> *p_extensions) const {
+ if (p_type == "BitmapFont") {
+ p_extensions->push_back("font");
+ p_extensions->push_back("fnt");
+ }
+}
+
+void ResourceFormatLoaderCompatFont::get_recognized_extensions(List<String> *p_extensions) const {
+}
+
+bool ResourceFormatLoaderCompatFont::handles_type(const String &p_type) const {
+ return (p_type == "Font");
+}
+
+String ResourceFormatLoaderCompatFont::get_resource_type(const String &p_path) const {
+ return "";
+}
+
+#endif /* DISABLE_DEPRECATED */