| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ASH_ACCELERATORS_ACCELERATOR_ALIAS_CONVERTER_H_ |
| #define ASH_ACCELERATORS_ACCELERATOR_ALIAS_CONVERTER_H_ |
| |
| #include <optional> |
| #include <vector> |
| |
| #include "ash/ash_export.h" |
| #include "ui/base/accelerators/accelerator.h" |
| |
| namespace ui { |
| struct KeyboardDevice; |
| } |
| |
| namespace ash { |
| |
| // AcceleratorAliasConverter class creates alias for given accelerators, |
| // including top row key alias, six pack key alias and reversed six pack key, |
| // etc. |
| class ASH_EXPORT AcceleratorAliasConverter { |
| public: |
| AcceleratorAliasConverter() = default; |
| AcceleratorAliasConverter(const AcceleratorAliasConverter&) = delete; |
| AcceleratorAliasConverter& operator=(const AcceleratorAliasConverter&) = |
| delete; |
| ~AcceleratorAliasConverter() = default; |
| |
| // Create accelerator alias when the accelerator contains a top row key, |
| // six pack key or reversed six pack key. For |top_row_key|, replace the base |
| // accelerator with top-row remapped accelerator. For |six_pack_key| and |
| // |reversed_six_pack_key|, show both the base accelerator and the remapped |
| // accelerator. Use a vector here since it may display two accelerators. |
| std::vector<ui::Accelerator> CreateAcceleratorAlias( |
| const ui::Accelerator& accelerator) const; |
| |
| private: |
| // Create accelerator alias for |top_row_key| for the given |keyboard|. |
| std::optional<ui::Accelerator> CreateTopRowAliases( |
| const ui::KeyboardDevice& keyboard, |
| const ui::Accelerator& accelerator) const; |
| |
| // Create accelerator alias for |function_key| for the given |keyboard|. |
| std::optional<ui::Accelerator> CreateFunctionKeyAliases( |
| const ui::KeyboardDevice& keyboard, |
| const ui::Accelerator& accelerator) const; |
| |
| // Create accelerator alias for |six_pack_key|. Result could be either zero or |
| // one alias found. Use a vector to be more consistent and cleaner. |
| std::vector<ui::Accelerator> CreateSixPackAliases( |
| const ui::Accelerator& accelerator, |
| std::optional<int> device_id) const; |
| |
| // Create accelerator alias for |capslock| for the given |keyboard|. |
| std::optional<ui::Accelerator> CreateCapsLockAliases( |
| const ui::KeyboardDevice& keyboard, |
| const ui::Accelerator& accelerator) const; |
| |
| // Create accelerator alias for extended function keys (F11+) for the |
| // given `keyboard`. |
| std::optional<ui::Accelerator> CreateExtendedFKeysAliases( |
| const ui::KeyboardDevice& keyboard, |
| const ui::Accelerator& accelerator, |
| std::optional<int> device_id) const; |
| |
| // Given a list of accelerators, filter out those accelerators that have |
| // unsupported keys. Return a list of filtered accelerators with supported |
| // keys only. |
| std::vector<ui::Accelerator> FilterAliasBySupportedKeys( |
| const std::vector<ui::Accelerator>& accelerators) const; |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_ACCELERATORS_ACCELERATOR_ALIAS_CONVERTER_H_ |