CommonMenus.cpp 3.5 KB

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