diff --git a/data/io.elementary.code.gschema.xml b/data/io.elementary.code.gschema.xml index 0cfce65a0..50e07056b 100644 --- a/data/io.elementary.code.gschema.xml +++ b/data/io.elementary.code.gschema.xml @@ -162,6 +162,11 @@ Remember the last focused document. Restore the focused document from a previous session when opening Code. + + true + Embolden the high contrast theme + Always use bold font when using the high contrast style scheme + '' The active project path. diff --git a/src/Utils.vala b/src/Utils.vala index 54f9c20a4..b59368152 100644 --- a/src/Utils.vala +++ b/src/Utils.vala @@ -29,7 +29,7 @@ namespace Scratch.Utils { /* Ported (with corrections and improvements) from libdazzle * (https://gitlab.gnome.org/GNOME/libdazzle/-/blob/master/src/util/dzl-pango.c) */ - public string pango_font_description_to_css (Pango.FontDescription font_descr) { + public string pango_font_description_to_css (Pango.FontDescription font_descr, bool embolden = false) { var sb = new StringBuilder (""); var mask = font_descr.get_set_fields (); if (Pango.FontMask.FAMILY in mask) { @@ -75,7 +75,7 @@ namespace Scratch.Utils { } if (Pango.FontMask.WEIGHT in mask) { - var weight = ((int)(font_descr.get_weight () / 100 * 100)).clamp (100, 900); + var weight = ((int)((font_descr.get_weight () + (embolden ? 500 : 0)) / 100 * 100)).clamp (100, 900); sb.append_printf ("font-weight: %i;", weight); } diff --git a/src/Widgets/HeaderBar.vala b/src/Widgets/HeaderBar.vala index 9f95e1368..636e7f1f0 100644 --- a/src/Widgets/HeaderBar.vala +++ b/src/Widgets/HeaderBar.vala @@ -164,6 +164,11 @@ public class Scratch.HeaderBar : Hdy.HeaderBar { }; style_color_button (color_button_dark, STYLE_SCHEME_DARK); + var embolden_switch = new Granite.SwitchModelButton (_("Use Bold Font")) { + margin_bottom = 6 + }; + + var color_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 3) { homogeneous = true, margin_top = 6, @@ -173,8 +178,11 @@ public class Scratch.HeaderBar : Hdy.HeaderBar { color_box.add (color_button_light); color_box.add (color_button_dark); + var theme_box = new Gtk.Box (VERTICAL, 0); + theme_box.add (color_box); + var color_revealer = new Gtk.Revealer (); - color_revealer.add (color_box); + color_revealer.add (theme_box); var menu_separator = new Gtk.Separator (Gtk.Orientation.HORIZONTAL) { margin_bottom = 3, @@ -225,6 +233,7 @@ public class Scratch.HeaderBar : Hdy.HeaderBar { menu_box.add (new Gtk.Separator (Gtk.Orientation.HORIZONTAL)); menu_box.add (follow_system_switchmodelbutton); menu_box.add (color_revealer); + menu_box.add (embolden_switch); menu_box.add (panels_box); menu_box.add (menu_separator); menu_box.add (preferences_menuitem); @@ -277,6 +286,7 @@ public class Scratch.HeaderBar : Hdy.HeaderBar { GLib.BindingFlags.SYNC_CREATE | BindingFlags.INVERT_BOOLEAN ); + Scratch.settings.bind ( "follow-system-style", follow_system_switchmodelbutton, @@ -284,6 +294,13 @@ public class Scratch.HeaderBar : Hdy.HeaderBar { SettingsBindFlags.DEFAULT ); + Scratch.settings.bind ( + "embolden-highcontrast", + embolden_switch, + "active", + SettingsBindFlags.DEFAULT + ); + var gtk_settings = Gtk.Settings.get_default (); switch (Scratch.settings.get_string ("style-scheme")) { diff --git a/src/Widgets/SourceView.vala b/src/Widgets/SourceView.vala index 23188acc8..06e962877 100644 --- a/src/Widgets/SourceView.vala +++ b/src/Widgets/SourceView.vala @@ -279,7 +279,6 @@ namespace Scratch.Widgets { space_drawer.enable_matrix = true; update_draw_spaces (); - tab_width = (uint) Scratch.settings.get_int ("indent-width"); if (Scratch.settings.get_boolean ("line-wrap")) { set_wrap_mode (Gtk.WrapMode.WORD); @@ -287,8 +286,6 @@ namespace Scratch.Widgets { set_wrap_mode (Gtk.WrapMode.NONE); } - update_font (); - if (settings.get_boolean ("follow-system-style")) { var system_prefers_dark = Granite.Settings.get_default ().prefers_color_scheme == Granite.Settings.ColorScheme.DARK; if (system_prefers_dark) { @@ -303,6 +300,8 @@ namespace Scratch.Widgets { git_diff_gutter_renderer.set_style_scheme (source_buffer.style_scheme); style_changed (source_buffer.style_scheme); + + update_font (); } private void update_font () { @@ -312,15 +311,13 @@ namespace Scratch.Widgets { font = Scratch.settings.get_string ("font"); } + var font_description = Pango.FontDescription.from_string (font); + var embolden = Scratch.settings.get_boolean ("embolden-highcontrast"); /* Convert font description to css equivalent and apply to the .view node */ - var font_css = string.join (" ", - ".view {", - Scratch.Utils.pango_font_description_to_css (Pango.FontDescription.from_string (font)), - "}" - ); - + var font_css = Scratch.Utils.pango_font_description_to_css (font_description, embolden); + var view_font_css = string.join (" ", ".view {", font_css, "}"); try { - font_css_provider.load_from_data (font_css); + font_css_provider.load_from_data (view_font_css); } catch (Error e) { critical (e.message); }