Serenity Operating System
1/*
2 * Copyright (c) 2022, the SerenityOS developers.
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <LibGUI/Action.h>
8#include <LibGUI/ActionGroup.h>
9#include <LibGUI/ColorFilterer.h>
10#include <LibGUI/Menu.h>
11#include <LibGfx/Filters/ColorBlindnessFilter.h>
12
13namespace GUI {
14
15namespace CommonMenus {
16
17ErrorOr<NonnullRefPtr<Menu>> make_accessibility_menu(ColorFilterer& filterer)
18{
19 auto default_accessibility_action = TRY(Action::try_create_checkable("Unimpaired", { Mod_AltGr, Key_1 }, [&](auto&) {
20 filterer.set_color_filter(nullptr);
21 }));
22 auto pratanopia_accessibility_action = TRY(Action::try_create_checkable("Protanopia", { Mod_AltGr, Key_2 }, [&](auto&) {
23 filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_protanopia());
24 }));
25 auto pratanomaly_accessibility_action = TRY(Action::try_create_checkable("Protanomaly", { Mod_AltGr, Key_3 }, [&](auto&) {
26 filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_protanomaly());
27 }));
28 auto tritanopia_accessibility_action = TRY(Action::try_create_checkable("Tritanopia", { Mod_AltGr, Key_4 }, [&](auto&) {
29 filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_tritanopia());
30 }));
31 auto tritanomaly_accessibility_action = TRY(Action::try_create_checkable("Tritanomaly", { Mod_AltGr, Key_5 }, [&](auto&) {
32 filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_tritanomaly());
33 }));
34 auto deuteranopia_accessibility_action = TRY(Action::try_create_checkable("Deuteranopia", { Mod_AltGr, Key_6 }, [&](auto&) {
35 filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_deuteranopia());
36 }));
37 auto deuteranomaly_accessibility_action = TRY(Action::try_create_checkable("Deuteranomaly", { Mod_AltGr, Key_7 }, [&](auto&) {
38 filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_deuteranomaly());
39 }));
40 auto achromatopsia_accessibility_action = TRY(Action::try_create_checkable("Achromatopsia", { Mod_AltGr, Key_8 }, [&](auto&) {
41 filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_achromatopsia());
42 }));
43 auto achromatomaly_accessibility_action = TRY(Action::try_create_checkable("Achromatomaly", { Mod_AltGr, Key_9 }, [&](auto&) {
44 filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_achromatomaly());
45 }));
46
47 default_accessibility_action->set_checked(true);
48
49 auto group = TRY(try_make<ActionGroup>());
50 group->set_exclusive(true);
51 group->add_action(*default_accessibility_action);
52 group->add_action(*pratanopia_accessibility_action);
53 group->add_action(*pratanomaly_accessibility_action);
54 group->add_action(*tritanopia_accessibility_action);
55 group->add_action(*tritanomaly_accessibility_action);
56 group->add_action(*deuteranopia_accessibility_action);
57 group->add_action(*deuteranomaly_accessibility_action);
58 group->add_action(*achromatopsia_accessibility_action);
59 group->add_action(*achromatomaly_accessibility_action);
60 (void)group.leak_ptr();
61
62 auto menu = TRY(Menu::try_create("&Accessibility"));
63 menu->add_action(default_accessibility_action);
64 menu->add_action(pratanopia_accessibility_action);
65 menu->add_action(pratanomaly_accessibility_action);
66 menu->add_action(tritanopia_accessibility_action);
67 menu->add_action(tritanomaly_accessibility_action);
68 menu->add_action(deuteranopia_accessibility_action);
69 menu->add_action(deuteranomaly_accessibility_action);
70 menu->add_action(achromatopsia_accessibility_action);
71 menu->add_action(achromatomaly_accessibility_action);
72
73 return menu;
74}
75
76}
77
78}