// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_EXO_KEY_STATE_H_
#define COMPONENTS_EXO_KEY_STATE_H_
#include <tuple>
#include <variant>
#include "ui/events/keycodes/keyboard_codes.h"
namespace ash::mojom {
enum class CustomizableButton : int32_t;
}
namespace ui {
enum class DomCode : uint32_t;
}
namespace exo {
// Marks the type of physical code used to generate key events.
// ui::DomCode::NONE marks the absence of data.
using PhysicalCode = std::variant<ui::DomCode, ash::mojom::CustomizableButton>;
// Represents the current pressed key state.
struct KeyState {
ui::DomCode code;
bool consumed_by_ime;
ui::KeyboardCode key_code;
};
inline bool operator==(const KeyState& lhs, const KeyState& rhs) {
return lhs.code == rhs.code && lhs.consumed_by_ime == rhs.consumed_by_ime;
}
inline bool operator<(const KeyState& lhs, const KeyState& rhs) {
return std::tie(lhs.code, lhs.consumed_by_ime) <
std::tie(rhs.code, rhs.consumed_by_ime);
}
} // namespace exo
#endif // COMPONENTS_EXO_KEY_STATE_H_