diff --git a/po/POTFILES b/po/POTFILES index 44a5228c6..c0b6b5220 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -5,6 +5,7 @@ src/Translations.vala src/Views/Appearance.vala src/Views/Dock.vala src/Views/Multitasking.vala +src/Views/Text.vala src/Views/Wallpaper.vala src/Widgets/SolidColorContainer.vala src/Widgets/WallpaperContainer.vala diff --git a/src/Plug.vala b/src/Plug.vala index ce776b766..fec7f070b 100644 --- a/src/Plug.vala +++ b/src/Plug.vala @@ -34,6 +34,7 @@ public class PantheonShell.Plug : Switchboard.Plug { settings.set ("desktop/appearance", "appearance"); settings.set ("desktop/dock", "dock"); settings.set ("desktop/multitasking", "multitasking"); + settings.set ("desktop/text", "text"); // DEPRECATED settings.set ("desktop/wallpaper", "wallpaper"); @@ -54,12 +55,13 @@ public class PantheonShell.Plug : Switchboard.Plug { wallpaper_view = new Wallpaper (this); var multitasking = new Multitasking (); + var appearance = new Appearance (); + var text = new Text (); stack = new Gtk.Stack (); stack.add_titled (wallpaper_view, "wallpaper", _("Wallpaper")); - - var appearance = new Appearance (); stack.add_titled (appearance, "appearance", _("Appearance")); + stack.add_titled (text, "text", _("Text")); if (GLib.Environment.find_program_in_path ("plank") != null) { var dock = new Dock (); @@ -101,6 +103,9 @@ public class PantheonShell.Plug : Switchboard.Plug { case "dock": stack.set_visible_child_name ("dock"); break; + case "text": + stack.set_visible_child_name ("text"); + break; case "multitasking": stack.set_visible_child_name ("multitasking"); break; @@ -120,8 +125,9 @@ public class PantheonShell.Plug : Switchboard.Plug { search_results.set ("%s → %s".printf (display_name, _("Appearance")), "appearance"); search_results.set ("%s → %s → %s".printf (display_name, _("Appearance"), _("Dark style")), "appearance"); search_results.set ("%s → %s → %s".printf (display_name, _("Appearance"), _("Accent color")), "appearance"); - search_results.set ("%s → %s → %s".printf (display_name, _("Appearance"), _("Text size")), "appearance"); - search_results.set ("%s → %s → %s".printf (display_name, _("Appearance"), _("Dyslexia-friendly text")), "appearance"); + search_results.set ("%s → %s".printf (display_name, _("Text")), "text"); + search_results.set ("%s → %s → %s".printf (display_name, _("Text"), _("Size")), "text"); + search_results.set ("%s → %s → %s".printf (display_name, _("Text"), _("Dyslexia-friendly")), "text"); search_results.set ("%s → %s".printf (display_name, _("Multitasking")), "multitasking"); search_results.set ("%s → %s → %s".printf (display_name, _("Multitasking"), _("Hot Corners")), "multitasking"); search_results.set ("%s → %s → %s".printf (display_name, _("Multitasking"), _("Move windows to a new workspace")), "multitasking"); diff --git a/src/Views/Appearance.vala b/src/Views/Appearance.vala index adad65ad5..bc422e1af 100644 --- a/src/Views/Appearance.vala +++ b/src/Views/Appearance.vala @@ -22,20 +22,6 @@ public class PantheonShell.Appearance : Gtk.Grid { private const string INTERFACE_SCHEMA = "org.gnome.desktop.interface"; private const string STYLESHEET_KEY = "gtk-theme"; private const string STYLESHEET_PREFIX = "io.elementary.stylesheet."; - private const string TEXT_SIZE_KEY = "text-scaling-factor"; - - private const string DYSLEXIA_KEY = "dyslexia-friendly-support"; - private const string FONT_KEY = "font-name"; - private const string DOCUMENT_FONT_KEY = "document-font-name"; - private const string MONOSPACE_FONT_KEY = "monospace-font-name"; - - private const string OD_REG_FONT = "OpenDyslexic Regular 9"; - private const string OD_DOC_FONT = "OpenDyslexic Regular 10"; - private const string OD_MON_FONT = "OpenDyslexicMono Regular 10"; - - private const double[] TEXT_SCALE = {0.75, 1, 1.25, 1.5}; - - private Granite.Widgets.ModeButton text_size_modebutton; private enum AccentColor { NO_PREFERENCE, @@ -178,48 +164,6 @@ public class PantheonShell.Appearance : Gtk.Grid { schedule_grid.add (to_label); schedule_grid.add (to_time); - var text_size_label = new Gtk.Label (_("Text size:")) { - halign = Gtk.Align.END, - margin_top = 24 - }; - - text_size_modebutton = new Granite.Widgets.ModeButton () { - margin_top = 24 - }; - text_size_modebutton.append_text (_("Small")); - text_size_modebutton.append_text (_("Default")); - text_size_modebutton.append_text (_("Large")); - text_size_modebutton.append_text (_("Larger")); - - var dyslexia_font_label = new Gtk.Label (_("Dyslexia-friendly text:")) { - halign = Gtk.Align.END - }; - - var dyslexia_font_switch = new Gtk.Switch () { - halign = Gtk.Align.START - }; - - var dyslexia_font_description_label = new Gtk.Label ( - _("Bottom-heavy shapes and increased character spacing can help improve legibility and reading speed.") - ) { - max_width_chars = 60, - wrap = true, - xalign = 0 - }; - dyslexia_font_description_label.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL); - - /* Rows 0 to 3 are for the dark style UI that gets attached only if we - * can connect to the DBus API - * - * Row 4 and 5 are for accent color UI that gets constructed only if the - * current stylesheet is supported (begins with the STYLESHEET_PREFIX) - */ - attach (text_size_label, 0, 8); - attach (text_size_modebutton, 1, 8, 2); - attach (dyslexia_font_label, 0, 9); - attach (dyslexia_font_switch, 1, 9); - attach (dyslexia_font_description_label, 1, 10, 2); - Pantheon.AccountsService? pantheon_act = null; string? user_path = null; @@ -412,22 +356,6 @@ public class PantheonShell.Appearance : Gtk.Grid { attach (accent_grid, 1, 4, 2); attach (accent_info, 1, 5, 2); } - - update_text_size_modebutton (interface_settings); - - interface_settings.changed.connect (() => { - update_text_size_modebutton (interface_settings); - }); - - text_size_modebutton.mode_changed.connect (() => { - set_text_scale (interface_settings, text_size_modebutton.selected); - }); - - dyslexia_font_switch.set_active (update_dyslexia_font_switch (interface_settings)); - - dyslexia_font_switch.state_set.connect (() => { - toggle_dyslexia_support (interface_settings, dyslexia_font_switch.get_active () ); - }); } private class PrefersAccentColorButton : Gtk.RadioButton { @@ -474,55 +402,6 @@ public class PantheonShell.Appearance : Gtk.Grid { } } - private void toggle_dyslexia_support (GLib.Settings interface_settings, bool state) { - if (state == true) { - interface_settings.set_string (FONT_KEY, OD_REG_FONT); - interface_settings.set_string (DOCUMENT_FONT_KEY, OD_DOC_FONT); - interface_settings.set_string (MONOSPACE_FONT_KEY, OD_MON_FONT); - } - else { - interface_settings.reset (FONT_KEY); - interface_settings.reset (DOCUMENT_FONT_KEY); - interface_settings.reset (MONOSPACE_FONT_KEY); - } - } - - private bool update_dyslexia_font_switch (GLib.Settings interface_settings) { - var interface_font = interface_settings.get_string (FONT_KEY); - var document_font = interface_settings.get_string (DOCUMENT_FONT_KEY); - var monospace_font = interface_settings.get_string (MONOSPACE_FONT_KEY); - - if (interface_font == OD_REG_FONT || document_font == OD_DOC_FONT || monospace_font == OD_MON_FONT ) { - return true; - } - - else { - return false; - } - } - - private int get_text_scale (GLib.Settings interface_settings) { - double text_scaling_factor = interface_settings.get_double (TEXT_SIZE_KEY); - - if (text_scaling_factor <= TEXT_SCALE[0]) { - return 0; - } else if (text_scaling_factor <= TEXT_SCALE[1]) { - return 1; - } else if (text_scaling_factor <= TEXT_SCALE[2]) { - return 2; - } else { - return 3; - } - } - - private void set_text_scale (GLib.Settings interface_settings, int option) { - interface_settings.set_double (TEXT_SIZE_KEY, TEXT_SCALE[option]); - } - - private void update_text_size_modebutton (GLib.Settings interface_settings) { - text_size_modebutton.set_active (get_text_scale (interface_settings)); - } - private static DateTime double_date_time (double dbl) { var hours = (int) dbl; var minutes = (int) Math.round ((dbl - hours) * 60); diff --git a/src/Views/Text.vala b/src/Views/Text.vala new file mode 100644 index 000000000..509cb3815 --- /dev/null +++ b/src/Views/Text.vala @@ -0,0 +1,121 @@ +/* +* Copyright 2021 elementary, Inc. (https://elementary.io) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public +* License as published by the Free Software Foundation; either +* version 3 of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public +* License along with this program; if not, write to the +* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +* Boston, MA 02110-1301 USA +* +*/ + +public class PantheonShell.Text : Gtk.Grid { + private const string TEXT_SIZE_KEY = "text-scaling-factor"; + + private const string DYSLEXIA_KEY = "dyslexia-friendly-support"; + private const string FONT_KEY = "font-name"; + private const string DOCUMENT_FONT_KEY = "document-font-name"; + private const string MONOSPACE_FONT_KEY = "monospace-font-name"; + + private const string OD_REG_FONT = "OpenDyslexic Regular 9"; + private const string OD_DOC_FONT = "OpenDyslexic Regular 10"; + private const string OD_MON_FONT = "OpenDyslexicMono Regular 10"; + + private const double[] TEXT_SCALE = {0.75, 1, 1.25, 1.5}; + + private Granite.Widgets.ModeButton text_size_modebutton; + + construct { + var text_size_label = new Gtk.Label (_("Size:")) { + halign = Gtk.Align.END + }; + + text_size_modebutton = new Granite.Widgets.ModeButton (); + text_size_modebutton.append_text (_("Small")); + text_size_modebutton.append_text (_("Default")); + text_size_modebutton.append_text (_("Large")); + text_size_modebutton.append_text (_("Larger")); + + var dyslexia_font_label = new Gtk.Label (_("Dyslexia-friendly:")) { + halign = Gtk.Align.END, + margin_top = 18 + }; + + var dyslexia_font_switch = new Gtk.Switch () { + halign = Gtk.Align.START, + margin_top = 18 + }; + + var dyslexia_font_description_label = new Gtk.Label ( + _("Bottom-heavy shapes and increased character spacing can help improve legibility and reading speed.") + ) { + max_width_chars = 60, + wrap = true, + xalign = 0 + }; + dyslexia_font_description_label.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL); + + column_spacing = 12; + halign = Gtk.Align.CENTER; + row_spacing = 6; + margin_start = margin_end = 12; + margin_bottom = 24; + attach (text_size_label, 0, 0); + attach (text_size_modebutton, 1, 0, 2); + attach (dyslexia_font_label, 0, 1); + attach (dyslexia_font_switch, 1, 1); + attach (dyslexia_font_description_label, 1, 2, 2); + + var interface_settings = new Settings ("org.gnome.desktop.interface"); + var interface_font = interface_settings.get_string (FONT_KEY); + var document_font = interface_settings.get_string (DOCUMENT_FONT_KEY); + var monospace_font = interface_settings.get_string (MONOSPACE_FONT_KEY); + + text_size_modebutton.set_active (get_text_scale (interface_settings)); + + interface_settings.changed.connect (() => { + text_size_modebutton.set_active (get_text_scale (interface_settings)); + }); + + text_size_modebutton.mode_changed.connect (() => { + interface_settings.set_double (TEXT_SIZE_KEY, TEXT_SCALE[text_size_modebutton.selected]); + }); + + dyslexia_font_switch.active = interface_font == OD_REG_FONT || document_font == OD_DOC_FONT || monospace_font == OD_MON_FONT; + + dyslexia_font_switch.state_set.connect (() => { + if (dyslexia_font_switch.active) { + interface_settings.set_string (FONT_KEY, OD_REG_FONT); + interface_settings.set_string (DOCUMENT_FONT_KEY, OD_DOC_FONT); + interface_settings.set_string (MONOSPACE_FONT_KEY, OD_MON_FONT); + } else { + interface_settings.reset (FONT_KEY); + interface_settings.reset (DOCUMENT_FONT_KEY); + interface_settings.reset (MONOSPACE_FONT_KEY); + } + }); + } + + private int get_text_scale (GLib.Settings interface_settings) { + double text_scaling_factor = interface_settings.get_double (TEXT_SIZE_KEY); + + if (text_scaling_factor <= TEXT_SCALE[0]) { + return 0; + } else if (text_scaling_factor <= TEXT_SCALE[1]) { + return 1; + } else if (text_scaling_factor <= TEXT_SCALE[2]) { + return 2; + } else { + return 3; + } + } +} diff --git a/src/meson.build b/src/meson.build index 259c0bf2c..842882288 100644 --- a/src/meson.build +++ b/src/meson.build @@ -6,6 +6,7 @@ plug_files = files( 'Views/Appearance.vala', 'Views/Dock.vala', 'Views/Multitasking.vala', + 'Views/Text.vala', 'Views/Wallpaper.vala', 'Widgets/SolidColorContainer.vala', 'Widgets/WallpaperContainer.vala',