summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-05-21 18:55:30 +0200
committerAndreas Kling <kling@serenityos.org>2021-05-21 20:15:51 +0200
commit8ac0d4abe19d6ad8428cea24ec22af5745c1161d (patch)
tree5b3844195e0b8530a2265aa764db9adc786af4e0
parentc778130d638f8787e611b8092082ea2c1dc9681f (diff)
downloadserenity-8ac0d4abe19d6ad8428cea24ec22af5745c1161d.zip
DisplaySettings: Add "Fonts" tab
This allows you to view, edit, and apply changes to the system fonts.
-rw-r--r--Userland/Applications/DisplaySettings/CMakeLists.txt3
-rw-r--r--Userland/Applications/DisplaySettings/FontSettings.gml77
-rw-r--r--Userland/Applications/DisplaySettings/FontSettingsWidget.cpp57
-rw-r--r--Userland/Applications/DisplaySettings/FontSettingsWidget.h25
-rw-r--r--Userland/Applications/DisplaySettings/main.cpp4
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));