Serenity Operating System
1/*
2 * Copyright (c) 2019-2020, Jesse Buhagiar <jooster669@gmail.com>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include "MonitorWidget.h"
10#include <LibCore/Timer.h>
11#include <LibEDID/EDID.h>
12#include <LibGUI/ColorInput.h>
13#include <LibGUI/ComboBox.h>
14#include <LibGUI/RadioButton.h>
15#include <LibGUI/SettingsWindow.h>
16#include <WindowServer/ScreenLayout.h>
17
18namespace DisplaySettings {
19
20class MonitorSettingsWidget final : public GUI::SettingsWindow::Tab {
21 C_OBJECT(MonitorSettingsWidget);
22
23public:
24 ~MonitorSettingsWidget() override
25 {
26 if (m_showing_screen_numbers)
27 show_screen_numbers(false);
28 }
29
30 virtual void apply_settings() override;
31 void show_screen_numbers(bool);
32
33protected:
34 void show_event(GUI::ShowEvent& event) override;
35 void hide_event(GUI::HideEvent& event) override;
36
37private:
38 MonitorSettingsWidget();
39
40 void create_frame();
41 void create_resolution_list();
42 void load_current_settings();
43 void selected_screen_index_or_resolution_changed();
44
45 size_t m_selected_screen_index { 0 };
46
47 WindowServer::ScreenLayout m_screen_layout;
48 Vector<DeprecatedString> m_screens;
49 Vector<Optional<EDID::Parser>> m_screen_edids;
50 Vector<Gfx::IntSize> m_resolutions;
51 Vector<DeprecatedString> m_resolution_strings;
52
53 RefPtr<DisplaySettings::MonitorWidget> m_monitor_widget;
54 RefPtr<GUI::ComboBox> m_screen_combo;
55 RefPtr<GUI::ComboBox> m_resolution_combo;
56 RefPtr<GUI::RadioButton> m_display_scale_radio_1x;
57 RefPtr<GUI::RadioButton> m_display_scale_radio_2x;
58 RefPtr<GUI::Label> m_dpi_label;
59
60 bool m_showing_screen_numbers { false };
61};
62
63}