| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_ARC_INPUT_OVERLAY_UTIL_H_ |
| #define CHROME_BROWSER_ASH_ARC_INPUT_OVERLAY_UTIL_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "ash/game_dashboard/game_dashboard_utils.h" |
| #include "ash/public/cpp/arc_game_controls_flag.h" |
| #include "chrome/browser/ash/arc/input_overlay/constants.h" |
| #include "chrome/browser/ash/arc/input_overlay/db/proto/app_data.pb.h" |
| #include "ui/events/keycodes/dom/dom_code.h" |
| |
| namespace aura { |
| class Window; |
| } // namespace aura |
| |
| namespace ui { |
| class KeyEvent; |
| } // namespace ui |
| |
| namespace views { |
| class View; |
| } // namespace views |
| |
| namespace arc::input_overlay { |
| |
| using ash::game_dashboard_utils::IsFlagChanged; |
| using ash::game_dashboard_utils::IsFlagSet; |
| using ash::game_dashboard_utils::UpdateFlag; |
| |
| class Action; |
| class InputElement; |
| |
| // Gets the event flags for the modifier domcode. Return ui::DomCode::NONE if |
| // `code` is not modifier DomCode. |
| int ModifierDomCodeToEventFlag(ui::DomCode code); |
| bool IsSameDomCode(ui::DomCode a, ui::DomCode b); |
| // Convert mouse action strings to enum values. |
| MouseAction ConvertToMouseActionEnum(const std::string& mouse_action); |
| |
| // Return the input binding filtered by `binding_option` in `action`. |
| InputElement* GetInputBindingByBindingOption(Action* action, |
| BindingOption binding_option); |
| |
| // Return the current running version of Game controls. If it is not set, it's |
| // Alpha version. Otherwise, it is AlphaV2+ version. |
| std::string GetCurrentSystemVersion(); |
| |
| // Reset the focus to `view`. |
| void ResetFocusTo(views::View* view); |
| |
| // Return true if `code` is not allowed to bind. |
| bool IsReservedDomCode(ui::DomCode code); |
| |
| // Returns true if `key_event` has event flags from `Ctrl`, `Shift`, `Alt` or |
| // `Search`. |
| // Because "modifier key + regular key" may conflict with system shortcut keys, |
| // it is not supported currently in Game Controls. This is called when only key |
| // pressed event is received. Because if key `G` is pressed first and then press |
| // `Ctrl` key, `Action` binded by key `G` has already injected touch event(s) |
| // before `Ctrl` key is pressed. Then releasing key `G` while `Ctrl` key is |
| // still pressed, `Action` binded by key `G` should also be released. |
| bool ContainShortcutEventFlags(const ui::KeyEvent* key_event); |
| |
| // Turn `flag` on or off for `window` property `ash::kArcGameControlsFlagsKey`. |
| void UpdateFlagAndProperty(aura::Window* window, |
| ash::ArcGameControlsFlag flag, |
| bool turn_on); |
| |
| } // namespace arc::input_overlay |
| |
| #endif // CHROME_BROWSER_ASH_ARC_INPUT_OVERLAY_UTIL_H_ |