Serenity Operating System
at master 78 lines 3.6 kB view raw
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}