diff options
author | Andreas Kling <kling@serenityos.org> | 2021-05-21 18:55:30 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-05-21 20:15:51 +0200 |
commit | 8ac0d4abe19d6ad8428cea24ec22af5745c1161d (patch) | |
tree | 5b3844195e0b8530a2265aa764db9adc786af4e0 | |
parent | c778130d638f8787e611b8092082ea2c1dc9681f (diff) | |
download | serenity-8ac0d4abe19d6ad8428cea24ec22af5745c1161d.zip |
DisplaySettings: Add "Fonts" tab
This allows you to view, edit, and apply changes to the system fonts.
5 files changed, 166 insertions, 0 deletions
diff --git a/Userland/Applications/DisplaySettings/CMakeLists.txt b/Userland/Applications/DisplaySettings/CMakeLists.txt index 294e5521ad..f794ebcce2 100644 --- a/Userland/Applications/DisplaySettings/CMakeLists.txt +++ b/Userland/Applications/DisplaySettings/CMakeLists.txt @@ -1,9 +1,12 @@ compile_gml(MonitorSettings.gml MonitorSettingsGML.h monitor_settings_window_gml) compile_gml(BackgroundSettings.gml BackgroundSettingsGML.h background_settings_gml) +compile_gml(FontSettings.gml FontSettingsGML.h font_settings_gml) set(SOURCES BackgroundSettingsGML.h BackgroundSettingsWidget.cpp + FontSettingsGML.h + FontSettingsWidget.cpp MonitorSettingsWidget.cpp MonitorSettingsGML.h MonitorWidget.cpp diff --git a/Userland/Applications/DisplaySettings/FontSettings.gml b/Userland/Applications/DisplaySettings/FontSettings.gml new file mode 100644 index 0000000000..8231dee770 --- /dev/null +++ b/Userland/Applications/DisplaySettings/FontSettings.gml @@ -0,0 +1,77 @@ +@GUI::Widget { + fill_with_background_color: true + + layout: @GUI::VerticalBoxLayout { + margins: [8, 8, 8, 8] + spacing: 8 + } + + @GUI::Widget { + shrink_to_fit: true + + layout: @GUI::HorizontalBoxLayout { + spacing: 6 + } + + @GUI::Label { + fixed_width: 100 + text: "Default font:" + text_alignment: "CenterLeft" + } + + @GUI::Frame { + background_color: "white" + fill_with_background_color: true + + layout: @GUI::VerticalBoxLayout { + } + + @GUI::Label { + name: "default_font_label" + text: "Katica 10 400" + } + } + + @GUI::Button { + text: "..." + name: "default_font_button" + fixed_width: 30 + } + } + + @GUI::Widget { + shrink_to_fit: true + + layout: @GUI::HorizontalBoxLayout { + spacing: 6 + } + + @GUI::Label { + fixed_width: 100 + text: "Fixed-width font:" + text_alignment: "CenterLeft" + } + + @GUI::Frame { + background_color: "white" + fill_with_background_color: true + + layout: @GUI::VerticalBoxLayout { + } + + @GUI::Label { + name: "fixed_width_font_label" + text: "Csilla 10 400" + } + } + + @GUI::Button { + text: "..." + name: "fixed_width_font_button" + fixed_width: 30 + } + } + + @GUI::Widget { + } +} diff --git a/Userland/Applications/DisplaySettings/FontSettingsWidget.cpp b/Userland/Applications/DisplaySettings/FontSettingsWidget.cpp new file mode 100644 index 0000000000..4702fa1d70 --- /dev/null +++ b/Userland/Applications/DisplaySettings/FontSettingsWidget.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "FontSettingsWidget.h" +#include <Applications/DisplaySettings/FontSettingsGML.h> +#include <LibGUI/Button.h> +#include <LibGUI/FontPicker.h> +#include <LibGUI/Label.h> +#include <LibGUI/WindowServerConnection.h> +#include <LibGfx/FontDatabase.h> + +namespace DisplaySettings { + +FontSettingsWidget::FontSettingsWidget() +{ + load_from_gml(font_settings_gml); + + auto& default_font_label = *find_descendant_of_type_named<GUI::Label>("default_font_label"); + auto& default_font_button = *find_descendant_of_type_named<GUI::Button>("default_font_button"); + auto& fixed_width_font_label = *find_descendant_of_type_named<GUI::Label>("fixed_width_font_label"); + auto& fixed_width_font_button = *find_descendant_of_type_named<GUI::Button>("fixed_width_font_button"); + + default_font_label.set_font(Gfx::FontDatabase::default_font()); + fixed_width_font_label.set_font(Gfx::FontDatabase::default_fixed_width_font()); + + default_font_button.on_click = [this, &default_font_label] { + auto font_picker = GUI::FontPicker::construct(window(), &default_font_label.font(), false); + if (font_picker->exec() == GUI::Dialog::ExecOK) { + default_font_label.set_font(font_picker->font()); + default_font_label.set_text(font_picker->font()->qualified_name()); + } + }; + + fixed_width_font_button.on_click = [this, &fixed_width_font_label] { + auto font_picker = GUI::FontPicker::construct(window(), &fixed_width_font_label.font(), false); + if (font_picker->exec() == GUI::Dialog::ExecOK) { + fixed_width_font_label.set_font(font_picker->font()); + fixed_width_font_label.set_text(font_picker->font()->qualified_name()); + } + }; +} + +FontSettingsWidget::~FontSettingsWidget() +{ +} + +void FontSettingsWidget::apply_settings() +{ + auto& default_font_label = *find_descendant_of_type_named<GUI::Label>("default_font_label"); + auto& fixed_width_font_label = *find_descendant_of_type_named<GUI::Label>("fixed_width_font_label"); + GUI::WindowServerConnection::the().set_system_fonts(default_font_label.text(), fixed_width_font_label.text()); +} + +} diff --git a/Userland/Applications/DisplaySettings/FontSettingsWidget.h b/Userland/Applications/DisplaySettings/FontSettingsWidget.h new file mode 100644 index 0000000000..f8cb0ab91c --- /dev/null +++ b/Userland/Applications/DisplaySettings/FontSettingsWidget.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <LibGUI/Widget.h> + +namespace DisplaySettings { + +class FontSettingsWidget : public GUI::Widget { + C_OBJECT(FontSettingsWidget); + +public: + virtual ~FontSettingsWidget() override; + + void apply_settings(); + +private: + FontSettingsWidget(); +}; + +} diff --git a/Userland/Applications/DisplaySettings/main.cpp b/Userland/Applications/DisplaySettings/main.cpp index 963a6a909b..e05b2eb340 100644 --- a/Userland/Applications/DisplaySettings/main.cpp +++ b/Userland/Applications/DisplaySettings/main.cpp @@ -6,6 +6,7 @@ */ #include "BackgroundSettingsWidget.h" +#include "FontSettingsWidget.h" #include "MonitorSettingsWidget.h" #include <LibGUI/Action.h> #include <LibGUI/Application.h> @@ -49,6 +50,7 @@ int main(int argc, char** argv) auto& tab_widget = main_widget.add<GUI::TabWidget>(); auto& background_settings_widget = tab_widget.add_tab<DisplaySettings::BackgroundSettingsWidget>("Background"); + auto& font_settings_widget = tab_widget.add_tab<DisplaySettings::FontSettingsWidget>("Fonts"); auto& monitor_settings_widget = tab_widget.add_tab<DisplaySettings::MonitorSettingsWidget>("Monitor"); auto& button_container = main_widget.add<GUI::Widget>(); @@ -62,6 +64,7 @@ int main(int argc, char** argv) ok_button.on_click = [&] { background_settings_widget.apply_settings(); monitor_settings_widget.apply_settings(); + font_settings_widget.apply_settings(); app->quit(); }; @@ -76,6 +79,7 @@ int main(int argc, char** argv) apply_button.on_click = [&] { background_settings_widget.apply_settings(); monitor_settings_widget.apply_settings(); + font_settings_widget.apply_settings(); }; window->set_icon(app_icon.bitmap_for_size(16)); |