diff options
Diffstat (limited to 'editor/code_editor.cpp')
-rw-r--r-- | editor/code_editor.cpp | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 272de725c8..73059464be 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -1636,31 +1636,39 @@ void CodeTextEditor::_apply_settings_change() { _update_text_editor_theme(); font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size"); - 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 = fb; + if (fc.is_null()) { + fc.instantiate(); + fc->set_base_font(fb); + } + switch (ot_mode) { case 1: { // Disable ligatures. - text_editor->clear_opentype_features(); - text_editor->set_opentype_feature("calt", 0); + fc->set_opentype_features(Dictionary()); } break; case 2: { // Custom. - text_editor->clear_opentype_features(); 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) { - text_editor->set_opentype_feature(subtag_a[0], subtag_a[1].to_int()); + ftrs[TS->name_to_tag(subtag_a[0])] = subtag_a[1].to_int(); } else if (subtag_a.size() == 1) { - text_editor->set_opentype_feature(subtag_a[0], 1); + ftrs[TS->name_to_tag(subtag_a[0])] = 1; } } + fc->set_opentype_features(ftrs); } break; default: { // Default. - text_editor->clear_opentype_features(); - text_editor->set_opentype_feature("calt", 1); + Dictionary ftrs; + ftrs[TS->name_to_tag("calt")] = 1; + fc->set_opentype_features(ftrs); } 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")); @@ -1862,29 +1870,36 @@ CodeTextEditor::CodeTextEditor() { text_editor->set_v_size_flags(SIZE_EXPAND_FILL); 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 = fb; + if (fc.is_null()) { + fc.instantiate(); + fc->set_base_font(fb); + } switch (ot_mode) { case 1: { // Disable ligatures. - text_editor->clear_opentype_features(); - text_editor->set_opentype_feature("calt", 0); + fc->set_opentype_features(Dictionary()); } break; case 2: { // Custom. - text_editor->clear_opentype_features(); 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) { - text_editor->set_opentype_feature(subtag_a[0], subtag_a[1].to_int()); + ftrs[TS->name_to_tag(subtag_a[0])] = subtag_a[1].to_int(); } else if (subtag_a.size() == 1) { - text_editor->set_opentype_feature(subtag_a[0], 1); + ftrs[TS->name_to_tag(subtag_a[0])] = 1; } } + fc->set_opentype_features(ftrs); } break; default: { // Default. - text_editor->clear_opentype_features(); - text_editor->set_opentype_feature("calt", 1); + Dictionary ftrs; + ftrs[TS->name_to_tag("calt")] = 1; + fc->set_opentype_features(ftrs); } break; } + text_editor->add_theme_font_override("font", fc); text_editor->set_draw_line_numbers(true); text_editor->set_highlight_matching_braces_enabled(true); |