Browse Source

DisplaySettings: Add "Fonts" tab

This allows you to view, edit, and apply changes to the system fonts.
Andreas Kling 4 years ago
parent
commit
8ac0d4abe1

+ 3 - 0
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

+ 77 - 0
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 {
+    }
+}

+ 57 - 0
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());
+}
+
+}

+ 25 - 0
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();
+};
+
+}

+ 4 - 0
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));