diff --git a/Userland/Libraries/LibGUI/CMakeLists.txt b/Userland/Libraries/LibGUI/CMakeLists.txt index 1cbccbd494..65fd641497 100644 --- a/Userland/Libraries/LibGUI/CMakeLists.txt +++ b/Userland/Libraries/LibGUI/CMakeLists.txt @@ -29,6 +29,7 @@ set(SOURCES CommandPalette.cpp CommonActions.cpp CommonLocationsProvider.cpp + CommonMenus.cpp ConnectionToWindowManagerServer.cpp ConnectionToWindowServer.cpp Desktop.cpp diff --git a/Userland/Libraries/LibGUI/CommonMenus.cpp b/Userland/Libraries/LibGUI/CommonMenus.cpp new file mode 100644 index 0000000000..5b1194808d --- /dev/null +++ b/Userland/Libraries/LibGUI/CommonMenus.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2022, the SerenityOS developers. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include +#include + +namespace GUI { + +namespace CommonMenus { + +ErrorOr> make_accessibility_menu(ColorFilterer& filterer) +{ + auto default_accessibility_action = TRY(Action::try_create_checkable("Unimpaired", { Mod_AltGr, Key_1 }, [&](auto&) { + filterer.set_color_filter(nullptr); + })); + auto pratanopia_accessibility_action = TRY(Action::try_create_checkable("Protanopia", { Mod_AltGr, Key_2 }, [&](auto&) { + filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_protanopia()); + })); + auto pratanomaly_accessibility_action = TRY(Action::try_create_checkable("Protanomaly", { Mod_AltGr, Key_3 }, [&](auto&) { + filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_protanomaly()); + })); + auto tritanopia_accessibility_action = TRY(Action::try_create_checkable("Tritanopia", { Mod_AltGr, Key_4 }, [&](auto&) { + filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_tritanopia()); + })); + auto tritanomaly_accessibility_action = TRY(Action::try_create_checkable("Tritanomaly", { Mod_AltGr, Key_5 }, [&](auto&) { + filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_tritanomaly()); + })); + auto deuteranopia_accessibility_action = TRY(Action::try_create_checkable("Deuteranopia", { Mod_AltGr, Key_6 }, [&](auto&) { + filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_deuteranopia()); + })); + auto deuteranomaly_accessibility_action = TRY(Action::try_create_checkable("Deuteranomaly", { Mod_AltGr, Key_7 }, [&](auto&) { + filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_deuteranomaly()); + })); + auto achromatopsia_accessibility_action = TRY(Action::try_create_checkable("Achromatopsia", { Mod_AltGr, Key_8 }, [&](auto&) { + filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_achromatopsia()); + })); + auto achromatomaly_accessibility_action = TRY(Action::try_create_checkable("Achromatomaly", { Mod_AltGr, Key_9 }, [&](auto&) { + filterer.set_color_filter(Gfx::ColorBlindnessFilter::create_achromatomaly()); + })); + + default_accessibility_action->set_checked(true); + + auto group = TRY(try_make()); + group->set_exclusive(true); + group->add_action(*default_accessibility_action); + group->add_action(*pratanopia_accessibility_action); + group->add_action(*pratanomaly_accessibility_action); + group->add_action(*tritanopia_accessibility_action); + group->add_action(*tritanomaly_accessibility_action); + group->add_action(*deuteranopia_accessibility_action); + group->add_action(*deuteranomaly_accessibility_action); + group->add_action(*achromatopsia_accessibility_action); + group->add_action(*achromatomaly_accessibility_action); + (void)group.leak_ptr(); + + auto menu = TRY(Menu::try_create("&Accessibility")); + menu->add_action(default_accessibility_action); + menu->add_action(pratanopia_accessibility_action); + menu->add_action(pratanomaly_accessibility_action); + menu->add_action(tritanopia_accessibility_action); + menu->add_action(tritanomaly_accessibility_action); + menu->add_action(deuteranopia_accessibility_action); + menu->add_action(deuteranomaly_accessibility_action); + menu->add_action(achromatopsia_accessibility_action); + menu->add_action(achromatomaly_accessibility_action); + + return menu; +} + +} + +} diff --git a/Userland/Libraries/LibGUI/Menu.h b/Userland/Libraries/LibGUI/Menu.h index 84defebcab..226c746cdf 100644 --- a/Userland/Libraries/LibGUI/Menu.h +++ b/Userland/Libraries/LibGUI/Menu.h @@ -10,12 +10,19 @@ #include #include #include +#include #include #include #include namespace GUI { +namespace CommonMenus { + +ErrorOr> make_accessibility_menu(GUI::ColorFilterer&); + +}; + class Menu final : public Core::Object { C_OBJECT(Menu) public: