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);
}