123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- // Copyright 2014 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ui/events/event_modifiers.h"
- #include "ui/events/event.h"
- namespace ui {
- namespace {
- static const int kEventFlagFromModifiers[] = {
- EF_NONE, // MODIFIER_NONE,
- EF_SHIFT_DOWN, // MODIFIER_SHIFT
- EF_CONTROL_DOWN, // MODIFIER_CONTROL
- EF_ALT_DOWN, // MODIFIER_ALT
- EF_COMMAND_DOWN, // MODIFIER_COMMAND
- EF_ALTGR_DOWN, // MODIFIER_ALTGR
- EF_MOD3_DOWN, // MODIFIER_MOD3
- EF_CAPS_LOCK_ON, // MODIFIER_CAPS_LOCK
- EF_LEFT_MOUSE_BUTTON, // MODIFIER_LEFT_MOUSE_BUTTON
- EF_MIDDLE_MOUSE_BUTTON, // MODIFIER_MIDDLE_MOUSE_BUTTON
- EF_RIGHT_MOUSE_BUTTON, // MODIFIER_RIGHT_MOUSE_BUTTON
- EF_BACK_MOUSE_BUTTON, // MODIFIER_BACK_MOUSE_BUTTON
- EF_FORWARD_MOUSE_BUTTON, // MODIFIER_FORWARD_MOUSE_BUTTON
- };
- } // namespace
- EventModifiers::EventModifiers() {
- memset(modifiers_down_, 0, sizeof(modifiers_down_));
- }
- EventModifiers::~EventModifiers() {}
- void EventModifiers::UpdateModifier(unsigned int modifier, bool down) {
- DCHECK_LT(modifier, static_cast<unsigned int>(MODIFIER_NUM_MODIFIERS));
- if (down) {
- modifiers_down_[modifier]++;
- } else {
- // Ignore spurious modifier "up" events. This might happen if the
- // button is down during startup.
- if (modifiers_down_[modifier])
- modifiers_down_[modifier]--;
- }
- UpdateFlags(modifier);
- }
- void EventModifiers::UpdateModifierLock(unsigned int modifier, bool down) {
- DCHECK_LT(modifier, static_cast<unsigned int>(MODIFIER_NUM_MODIFIERS));
- if (down)
- modifier_flags_locked_ ^= kEventFlagFromModifiers[modifier];
- UpdateFlags(modifier);
- }
- void EventModifiers::SetModifierLock(unsigned int modifier, bool locked) {
- DCHECK_LT(modifier, static_cast<unsigned int>(MODIFIER_NUM_MODIFIERS));
- if (locked)
- modifier_flags_locked_ |= kEventFlagFromModifiers[modifier];
- else
- modifier_flags_locked_ &= ~kEventFlagFromModifiers[modifier];
- UpdateFlags(modifier);
- }
- void EventModifiers::UpdateFlags(unsigned int modifier) {
- int mask = kEventFlagFromModifiers[modifier];
- bool down = modifiers_down_[modifier] != 0;
- bool locked = (modifier_flags_locked_ & mask) != 0;
- if (down != locked)
- modifier_flags_ |= mask;
- else
- modifier_flags_ &= ~mask;
- }
- int EventModifiers::GetModifierFlags() {
- return modifier_flags_;
- }
- void EventModifiers::ResetKeyboardModifiers() {
- static const int kKeyboardModifiers[] = {MODIFIER_SHIFT, MODIFIER_CONTROL,
- MODIFIER_ALT, MODIFIER_COMMAND,
- MODIFIER_ALTGR, MODIFIER_MOD3};
- for (const int modifier : kKeyboardModifiers) {
- modifiers_down_[modifier] = 0;
- UpdateFlags(modifier);
- }
- }
- // static
- int EventModifiers::GetEventFlagFromModifier(unsigned int modifier) {
- return kEventFlagFromModifiers[modifier];
- }
- // static
- int EventModifiers::GetModifierFromEventFlag(int flag) {
- switch (flag) {
- case EF_SHIFT_DOWN:
- return MODIFIER_SHIFT;
- case EF_CONTROL_DOWN:
- return MODIFIER_CONTROL;
- case EF_ALT_DOWN:
- return MODIFIER_ALT;
- case EF_COMMAND_DOWN:
- return MODIFIER_COMMAND;
- case EF_ALTGR_DOWN:
- return MODIFIER_ALTGR;
- case EF_MOD3_DOWN:
- return MODIFIER_MOD3;
- case EF_CAPS_LOCK_ON:
- return MODIFIER_CAPS_LOCK;
- case EF_LEFT_MOUSE_BUTTON:
- return MODIFIER_LEFT_MOUSE_BUTTON;
- case EF_MIDDLE_MOUSE_BUTTON:
- return MODIFIER_MIDDLE_MOUSE_BUTTON;
- case EF_RIGHT_MOUSE_BUTTON:
- return MODIFIER_RIGHT_MOUSE_BUTTON;
- case EF_BACK_MOUSE_BUTTON:
- return MODIFIER_BACK_MOUSE_BUTTON;
- case EF_FORWARD_MOUSE_BUTTON:
- return MODIFIER_FORWARD_MOUSE_BUTTON;
- default:
- return MODIFIER_NONE;
- }
- }
- } // namespace ui
|