Merge pull request #19930 from Alexander-Alekseev/non-existent_font_fallback_2

Fallback to default font if main/code font path doesn't exist
This commit is contained in:
Max Hilbrunner 2018-07-10 15:50:16 +02:00 committed by GitHub
commit c3c7391ebb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 3 deletions

View File

@ -31,6 +31,7 @@
#include "editor_fonts.h" #include "editor_fonts.h"
#include "builtin_fonts.gen.h" #include "builtin_fonts.gen.h"
#include "core/os/dir_access.h"
#include "editor_scale.h" #include "editor_scale.h"
#include "editor_settings.h" #include "editor_settings.h"
#include "scene/resources/default_theme/default_theme.h" #include "scene/resources/default_theme/default_theme.h"
@ -114,28 +115,34 @@ static Ref<BitmapFont> make_font(int p_height, int p_ascent, int p_valign, int p
MAKE_FALLBACKS(m_name); MAKE_FALLBACKS(m_name);
void editor_register_fonts(Ref<Theme> p_theme) { void editor_register_fonts(Ref<Theme> p_theme) {
DirAccess *dir = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
/* Custom font */ /* Custom font */
DynamicFontData::Hinting font_hinting = (DynamicFontData::Hinting)(int)EditorSettings::get_singleton()->get("interface/editor/main_font_hinting"); DynamicFontData::Hinting font_hinting = (DynamicFontData::Hinting)(int)EditorSettings::get_singleton()->get("interface/editor/main_font_hinting");
String custom_font_path = EditorSettings::get_singleton()->get("interface/editor/main_font"); String custom_font_path = EditorSettings::get_singleton()->get("interface/editor/main_font");
Ref<DynamicFontData> CustomFont; Ref<DynamicFontData> CustomFont;
if (custom_font_path.length() > 0) { if (custom_font_path.length() > 0 && dir->file_exists(custom_font_path)) {
CustomFont.instance(); CustomFont.instance();
CustomFont->set_hinting(font_hinting); CustomFont->set_hinting(font_hinting);
CustomFont->set_font_path(custom_font_path); CustomFont->set_font_path(custom_font_path);
CustomFont->set_force_autohinter(true); //just looks better..i think? CustomFont->set_force_autohinter(true); //just looks better..i think?
} else {
EditorSettings::get_singleton()->set_manually("interface/editor/main_font", "");
} }
/* Custom Bold font */ /* Custom Bold font */
String custom_font_path_bold = EditorSettings::get_singleton()->get("interface/editor/main_font_bold"); String custom_font_path_bold = EditorSettings::get_singleton()->get("interface/editor/main_font_bold");
Ref<DynamicFontData> CustomFontBold; Ref<DynamicFontData> CustomFontBold;
if (custom_font_path_bold.length() > 0) { if (custom_font_path_bold.length() > 0 && dir->file_exists(custom_font_path_bold)) {
CustomFontBold.instance(); CustomFontBold.instance();
CustomFontBold->set_hinting(font_hinting); CustomFontBold->set_hinting(font_hinting);
CustomFontBold->set_font_path(custom_font_path_bold); CustomFontBold->set_font_path(custom_font_path_bold);
CustomFontBold->set_force_autohinter(true); //just looks better..i think? CustomFontBold->set_force_autohinter(true); //just looks better..i think?
} else {
EditorSettings::get_singleton()->set_manually("interface/editor/main_font_bold", "");
} }
/* Custom source code font */ /* Custom source code font */
@ -143,12 +150,16 @@ void editor_register_fonts(Ref<Theme> p_theme) {
String custom_font_path_source = EditorSettings::get_singleton()->get("interface/editor/code_font"); String custom_font_path_source = EditorSettings::get_singleton()->get("interface/editor/code_font");
DynamicFontData::Hinting font_source_hinting = (DynamicFontData::Hinting)(int)EditorSettings::get_singleton()->get("interface/editor/code_font_hinting"); DynamicFontData::Hinting font_source_hinting = (DynamicFontData::Hinting)(int)EditorSettings::get_singleton()->get("interface/editor/code_font_hinting");
Ref<DynamicFontData> CustomFontSource; Ref<DynamicFontData> CustomFontSource;
if (custom_font_path_source.length() > 0) { if (custom_font_path_source.length() > 0 && dir->file_exists(custom_font_path_source)) {
CustomFontSource.instance(); CustomFontSource.instance();
CustomFontSource->set_hinting(font_source_hinting); CustomFontSource->set_hinting(font_source_hinting);
CustomFontSource->set_font_path(custom_font_path_source); CustomFontSource->set_font_path(custom_font_path_source);
} else {
EditorSettings::get_singleton()->set_manually("interface/editor/code_font", "");
} }
memdelete(dir);
/* Droid Sans */ /* Droid Sans */
Ref<DynamicFontData> DefaultFont; Ref<DynamicFontData> DefaultFont;