You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-08 12:40:44 +00:00
Fix regressions from Font refactor
Fixes `p_font.is_null()` errors due to incorrect resource type used. Fixes code editor font not set correctly, and OpenType features applied to the wrong font.
This commit is contained in:
@@ -1638,16 +1638,13 @@ void CodeTextEditor::_apply_settings_change() {
|
|||||||
font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size");
|
font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size");
|
||||||
int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures");
|
int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures");
|
||||||
|
|
||||||
Ref<Font> fb = text_editor->get_theme_font(SNAME("font"));
|
Ref<FontVariation> fc = text_editor->get_theme_font(SNAME("font"));
|
||||||
Ref<FontVariation> fc = fb;
|
if (fc.is_valid()) {
|
||||||
if (fc.is_null()) {
|
|
||||||
fc.instantiate();
|
|
||||||
fc->set_base_font(fb);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (ot_mode) {
|
switch (ot_mode) {
|
||||||
case 1: { // Disable ligatures.
|
case 1: { // Disable ligatures.
|
||||||
fc->set_opentype_features(Dictionary());
|
Dictionary ftrs;
|
||||||
|
ftrs[TS->name_to_tag("calt")] = 0;
|
||||||
|
fc->set_opentype_features(ftrs);
|
||||||
} break;
|
} break;
|
||||||
case 2: { // Custom.
|
case 2: { // Custom.
|
||||||
Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(",");
|
Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(",");
|
||||||
@@ -1668,7 +1665,7 @@ void CodeTextEditor::_apply_settings_change() {
|
|||||||
fc->set_opentype_features(ftrs);
|
fc->set_opentype_features(ftrs);
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
text_editor->add_theme_font_override("font", fc);
|
}
|
||||||
|
|
||||||
text_editor->set_code_hint_draw_below(EDITOR_GET("text_editor/completion/put_callhint_tooltip_below_current_line"));
|
text_editor->set_code_hint_draw_below(EDITOR_GET("text_editor/completion/put_callhint_tooltip_below_current_line"));
|
||||||
|
|
||||||
@@ -1870,15 +1867,13 @@ CodeTextEditor::CodeTextEditor() {
|
|||||||
text_editor->set_v_size_flags(SIZE_EXPAND_FILL);
|
text_editor->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
|
||||||
int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures");
|
int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures");
|
||||||
Ref<Font> fb = text_editor->get_theme_font(SNAME("font"));
|
Ref<FontVariation> fc = text_editor->get_theme_font(SNAME("font"));
|
||||||
Ref<FontVariation> fc = fb;
|
if (fc.is_valid()) {
|
||||||
if (fc.is_null()) {
|
|
||||||
fc.instantiate();
|
|
||||||
fc->set_base_font(fb);
|
|
||||||
}
|
|
||||||
switch (ot_mode) {
|
switch (ot_mode) {
|
||||||
case 1: { // Disable ligatures.
|
case 1: { // Disable ligatures.
|
||||||
fc->set_opentype_features(Dictionary());
|
Dictionary ftrs;
|
||||||
|
ftrs[TS->name_to_tag("calt")] = 0;
|
||||||
|
fc->set_opentype_features(ftrs);
|
||||||
} break;
|
} break;
|
||||||
case 2: { // Custom.
|
case 2: { // Custom.
|
||||||
Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(",");
|
Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(",");
|
||||||
@@ -1899,6 +1894,7 @@ CodeTextEditor::CodeTextEditor() {
|
|||||||
fc->set_opentype_features(ftrs);
|
fc->set_opentype_features(ftrs);
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
text_editor->add_theme_font_override("font", fc);
|
text_editor->add_theme_font_override("font", fc);
|
||||||
|
|
||||||
text_editor->set_draw_line_numbers(true);
|
text_editor->set_draw_line_numbers(true);
|
||||||
|
|||||||
@@ -164,11 +164,6 @@ void editor_register_fonts(Ref<Theme> p_theme) {
|
|||||||
default_font_bold_msdf->set_fallbacks(fallbacks_bold);
|
default_font_bold_msdf->set_fallbacks(fallbacks_bold);
|
||||||
|
|
||||||
Ref<FontFile> default_font_mono = load_internal_font(_font_JetBrainsMono_Regular, _font_JetBrainsMono_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
|
Ref<FontFile> default_font_mono = load_internal_font(_font_JetBrainsMono_Regular, _font_JetBrainsMono_Regular_size, font_hinting, font_antialiased, true, font_subpixel_positioning);
|
||||||
{
|
|
||||||
Dictionary opentype_features_mono;
|
|
||||||
opentype_features_mono["calt"] = 0;
|
|
||||||
default_font_mono->set_opentype_feature_overrides(opentype_features_mono); // Disable contextual alternates (coding ligatures).
|
|
||||||
}
|
|
||||||
default_font_mono->set_fallbacks(fallbacks);
|
default_font_mono->set_fallbacks(fallbacks);
|
||||||
|
|
||||||
// Init base font configs and load custom fonts.
|
// Init base font configs and load custom fonts.
|
||||||
@@ -276,24 +271,46 @@ void editor_register_fonts(Ref<Theme> p_theme) {
|
|||||||
EditorSettings::get_singleton()->set_manually("interface/editor/code_font", "");
|
EditorSettings::get_singleton()->set_manually("interface/editor/code_font", "");
|
||||||
mono_fc->set_base_font(default_font_mono);
|
mono_fc->set_base_font(default_font_mono);
|
||||||
}
|
}
|
||||||
|
|
||||||
String code_font_custom_variations = EditorSettings::get_singleton()->get("interface/editor/code_font_custom_variations");
|
|
||||||
Dictionary variations_mono;
|
|
||||||
if (!code_font_custom_variations.is_empty()) {
|
|
||||||
Vector<String> variation_tags = code_font_custom_variations.split(",");
|
|
||||||
for (int i = 0; i < variation_tags.size(); i++) {
|
|
||||||
Vector<String> subtag_a = variation_tags[i].split("=");
|
|
||||||
if (subtag_a.size() == 2) {
|
|
||||||
variations_mono[TS->name_to_tag(subtag_a[0])] = subtag_a[1].to_float();
|
|
||||||
} else if (subtag_a.size() == 1) {
|
|
||||||
variations_mono[TS->name_to_tag(subtag_a[0])] = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mono_fc->set_variation_opentype(variations_mono);
|
|
||||||
}
|
|
||||||
mono_fc->set_spacing(TextServer::SPACING_TOP, -EDSCALE);
|
mono_fc->set_spacing(TextServer::SPACING_TOP, -EDSCALE);
|
||||||
mono_fc->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE);
|
mono_fc->set_spacing(TextServer::SPACING_BOTTOM, -EDSCALE);
|
||||||
|
|
||||||
|
Ref<FontVariation> mono_other_fc = mono_fc->duplicate();
|
||||||
|
|
||||||
|
// Enable contextual alternates (coding ligatures) and custom features for the source editor font.
|
||||||
|
int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures");
|
||||||
|
switch (ot_mode) {
|
||||||
|
case 1: { // Disable ligatures.
|
||||||
|
Dictionary ftrs;
|
||||||
|
ftrs[TS->name_to_tag("calt")] = 0;
|
||||||
|
mono_fc->set_opentype_features(ftrs);
|
||||||
|
} break;
|
||||||
|
case 2: { // Custom.
|
||||||
|
Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(",");
|
||||||
|
Dictionary ftrs;
|
||||||
|
for (int i = 0; i < subtag.size(); i++) {
|
||||||
|
Vector<String> subtag_a = subtag[i].split("=");
|
||||||
|
if (subtag_a.size() == 2) {
|
||||||
|
ftrs[TS->name_to_tag(subtag_a[0])] = subtag_a[1].to_int();
|
||||||
|
} else if (subtag_a.size() == 1) {
|
||||||
|
ftrs[TS->name_to_tag(subtag_a[0])] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mono_fc->set_opentype_features(ftrs);
|
||||||
|
} break;
|
||||||
|
default: { // Default.
|
||||||
|
Dictionary ftrs;
|
||||||
|
ftrs[TS->name_to_tag("calt")] = 1;
|
||||||
|
mono_fc->set_opentype_features(ftrs);
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Disable contextual alternates (coding ligatures).
|
||||||
|
Dictionary ftrs;
|
||||||
|
ftrs[TS->name_to_tag("calt")] = 0;
|
||||||
|
mono_other_fc->set_opentype_features(ftrs);
|
||||||
|
}
|
||||||
|
|
||||||
Ref<FontVariation> italic_fc = default_fc->duplicate();
|
Ref<FontVariation> italic_fc = default_fc->duplicate();
|
||||||
italic_fc->set_variation_transform(Transform2D(1.0, 0.2, 0.0, 1.0, 0.0, 0.0));
|
italic_fc->set_variation_transform(Transform2D(1.0, 0.2, 0.0, 1.0, 0.0, 0.0));
|
||||||
|
|
||||||
@@ -359,11 +376,11 @@ void editor_register_fonts(Ref<Theme> p_theme) {
|
|||||||
p_theme->set_font("source", "EditorFonts", mono_fc);
|
p_theme->set_font("source", "EditorFonts", mono_fc);
|
||||||
|
|
||||||
p_theme->set_font_size("expression_size", "EditorFonts", (int(EDITOR_GET("interface/editor/code_font_size")) - 1) * EDSCALE);
|
p_theme->set_font_size("expression_size", "EditorFonts", (int(EDITOR_GET("interface/editor/code_font_size")) - 1) * EDSCALE);
|
||||||
p_theme->set_font("expression", "EditorFonts", mono_fc);
|
p_theme->set_font("expression", "EditorFonts", mono_other_fc);
|
||||||
|
|
||||||
p_theme->set_font_size("output_source_size", "EditorFonts", int(EDITOR_GET("run/output/font_size")) * EDSCALE);
|
p_theme->set_font_size("output_source_size", "EditorFonts", int(EDITOR_GET("run/output/font_size")) * EDSCALE);
|
||||||
p_theme->set_font("output_source", "EditorFonts", mono_fc);
|
p_theme->set_font("output_source", "EditorFonts", mono_other_fc);
|
||||||
|
|
||||||
p_theme->set_font_size("status_source_size", "EditorFonts", default_font_size);
|
p_theme->set_font_size("status_source_size", "EditorFonts", default_font_size);
|
||||||
p_theme->set_font("status_source", "EditorFonts", mono_fc);
|
p_theme->set_font("status_source", "EditorFonts", mono_other_fc);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3697,7 +3697,7 @@ void CanvasItemEditor::_draw_transform_message() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<FontFile> font = get_theme_font(SNAME("font"), SNAME("Label"));
|
Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
|
||||||
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
|
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
|
||||||
Point2 msgpos = Point2(RULER_WIDTH + 5 * EDSCALE, viewport->get_size().y - 20 * EDSCALE);
|
Point2 msgpos = Point2(RULER_WIDTH + 5 * EDSCALE, viewport->get_size().y - 20 * EDSCALE);
|
||||||
viewport->draw_string(font, msgpos + Point2(1, 1), transform_message, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8));
|
viewport->draw_string(font, msgpos + Point2(1, 1), transform_message, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8));
|
||||||
|
|||||||
@@ -2081,7 +2081,7 @@ Ref<Font> RichTextLabel::_find_font(Item *p_item) {
|
|||||||
fontitem = fontitem->parent;
|
fontitem = fontitem->parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ref<FontFile>();
|
return Ref<Font>();
|
||||||
}
|
}
|
||||||
|
|
||||||
int RichTextLabel::_find_font_size(Item *p_item) {
|
int RichTextLabel::_find_font_size(Item *p_item) {
|
||||||
@@ -4002,7 +4002,7 @@ void RichTextLabel::append_text(const String &p_bbcode) {
|
|||||||
if (subtag_a.size() == 2) {
|
if (subtag_a.size() == 2) {
|
||||||
if (subtag_a[0] == "name" || subtag_a[0] == "n") {
|
if (subtag_a[0] == "name" || subtag_a[0] == "n") {
|
||||||
String fnt = subtag_a[1];
|
String fnt = subtag_a[1];
|
||||||
Ref<Font> font_data = ResourceLoader::load(fnt, "FontFile");
|
Ref<Font> font_data = ResourceLoader::load(fnt, "Font");
|
||||||
if (font_data.is_valid()) {
|
if (font_data.is_valid()) {
|
||||||
fc->set_base_font(font_data);
|
fc->set_base_font(font_data);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user