// Copyright (c) 2012 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. #ifndef UI_EVENTS_EVENT_CONSTANTS_H_ #define UI_EVENTS_EVENT_CONSTANTS_H_ #include "build/build_config.h" namespace ui { // Event flags currently supported. It is OK to add values to the middle of // this list and/or reorder it, but make sure you also touch the various other // enums/constants that want to stay in sync with this. For example, // KeyEventFlags and MouseEventFlags should not overlap EventFlags. enum EventFlags { EF_NONE = 0, // Used to denote no flags explicitly // Universally applicable status bits. EF_IS_SYNTHESIZED = 1 << 0, // Modifier key state. EF_SHIFT_DOWN = 1 << 1, EF_CONTROL_DOWN = 1 << 2, EF_ALT_DOWN = 1 << 3, EF_COMMAND_DOWN = 1 << 4, // GUI Key (e.g. Command on OS X // keyboards, Search on Chromebook // keyboards, Windows on MS-oriented // keyboards) EF_FUNCTION_DOWN = 1 << 5, // Function key. EF_ALTGR_DOWN = 1 << 6, EF_MOD3_DOWN = 1 << 7, // Other keyboard states. EF_NUM_LOCK_ON = 1 << 8, EF_CAPS_LOCK_ON = 1 << 9, EF_SCROLL_LOCK_ON = 1 << 10, // Mouse buttons. EF_LEFT_MOUSE_BUTTON = 1 << 11, EF_MIDDLE_MOUSE_BUTTON = 1 << 12, EF_RIGHT_MOUSE_BUTTON = 1 << 13, EF_BACK_MOUSE_BUTTON = 1 << 14, EF_FORWARD_MOUSE_BUTTON = 1 << 15, EF_MOUSE_BUTTON = EF_LEFT_MOUSE_BUTTON | EF_MIDDLE_MOUSE_BUTTON | EF_RIGHT_MOUSE_BUTTON | EF_BACK_MOUSE_BUTTON | EF_FORWARD_MOUSE_BUTTON, // An artificial value used to bridge platform differences. // Many commands on Mac as Cmd+Key are the counterparts of // Ctrl+Key on other platforms. #if defined(OS_APPLE) EF_PLATFORM_ACCELERATOR = EF_COMMAND_DOWN, #else EF_PLATFORM_ACCELERATOR = EF_CONTROL_DOWN, #endif }; // Flags specific to key events. // WARNING: If you add or remove values make sure traits for serializing these // values are updated. enum KeyEventFlags { EF_IME_FABRICATED_KEY = 1 << 16, // Key event fabricated by the underlying // IME without a user action. // (Linux X11 only) EF_IS_REPEAT = 1 << 17, EF_FINAL = 1 << 18, // Do not remap; the event was created with // the desired final values. EF_IS_EXTENDED_KEY = 1 << 19, // Windows extended key (see WM_KEYDOWN doc) EF_IS_STYLUS_BUTTON = 1 << 20, // Event was generated by a stylus button EF_MAX_KEY_EVENT_FLAGS_VALUE = (1 << 21) - 1, }; // Flags specific to mouse events. enum MouseEventFlags { EF_IS_DOUBLE_CLICK = 1 << 16, EF_IS_TRIPLE_CLICK = 1 << 17, EF_IS_NON_CLIENT = 1 << 18, EF_FROM_TOUCH = 1 << 19, // Indicates this mouse event is generated // from an unconsumed touch/gesture event. EF_TOUCH_ACCESSIBILITY = 1 << 20, // Indicates this event was generated from // touch accessibility mode. EF_CURSOR_HIDE = 1 << 21, // Indicates this mouse event is generated // because the cursor was just hidden. This // can be used to update hover state. EF_PRECISION_SCROLLING_DELTA = // Indicates this mouse event is from high 1 << 22, // precision touchpad and will come with a // high precision delta. EF_SCROLL_BY_PAGE = 1 << 23, // Indicates this mouse event is generated // when users is requesting to scroll by // pages. EF_UNADJUSTED_MOUSE = 1 << 24, // Indicates this mouse event is unadjusted // mouse events that has unadjusted movement // delta, i.e. is from WM_INPUT on Windows. }; // Result of dispatching an event. enum EventResult { ER_UNHANDLED = 0, // The event hasn't been handled. The event can be // propagated to other handlers. ER_HANDLED = 1 << 0, // The event has already been handled, but it can // still be propagated to other handlers. ER_CONSUMED = 1 << 1, // The event has been handled, and it should not be // propagated to other handlers. ER_DISABLE_SYNC_HANDLING = 1 << 2, // The event shouldn't be handled synchronously. This // happens if the event is being handled // asynchronously, or if the event is invalid and // shouldn't be handled at all. }; // Phase of the event dispatch. enum EventPhase { EP_PREDISPATCH, EP_PRETARGET, EP_TARGET, EP_POSTTARGET, EP_POSTDISPATCH }; // Phase information used for a ScrollEvent. ScrollEventPhase is for scroll // stream from user gesture, EventMomentumPhase is for inertia scroll stream // after user gesture. enum class ScrollEventPhase { // Event has no phase information. eg. the Event is not in a scroll stream. kNone, // Event is the beginning of a scroll event stream. kBegan, // Event is a scroll event with phase information. kUpdate, // Event is the end of the current scroll event stream. kEnd, }; // Momentum phase information used for a ScrollEvent. enum class EventMomentumPhase { // Event is a non-momentum update to an event stream already begun. NONE, // Event is the beginning of an event stream that may result in momentum. // BEGAN vs MAY_BEGIN: // - BEGAN means we already know the inertia scroll stream must happen after // BEGAN event. On Windows touchpad, we sent this when receive the first // inertia scroll event or Direct Manipulation state change to INERTIA. // - MAY_BEGIN means the inertia scroll stream may happen after MAY_BEGIN // event. On Mac, we send this when receive releaseTouches, but we do not // know the inertia scroll stream will happen or not at that time. BEGAN, // Event maybe the beginning of an event stream that may result in momentum. // This state used on Mac. MAY_BEGIN, // Event is an update while in a momentum phase. A "begin" event for the // momentum phase portion of an event stream uses this also, but the scroll // offsets will be zero. INERTIAL_UPDATE, // Event marks the end of the current event stream. Note that this is also set // for events that are not a "stream", but indicate both the start and end of // the event (e.g. a mouse wheel tick). END, // EventMomentumPhase can only be BLOCKED when ScrollEventPhase is kEnd. Event // marks the end of the current event stream, when there will be no inertia // scrolling after the user gesture. ScrollEventPhase must simultaneously be // kEnd because that is when it is determined if an event stream that results // in momentum will begin or not. This phase is only used on Windows. BLOCKED, }; // Device ID for Touch and Key Events. enum EventDeviceId { ED_UNKNOWN_DEVICE = -1 }; // Pointing device type. enum class EventPointerType : int { kUnknown, kMouse, kPen, kTouch, kEraser, kMaxValue = kEraser, }; // Device type for gesture events. enum class GestureDeviceType : int { DEVICE_UNKNOWN = 0, DEVICE_TOUCHPAD, DEVICE_TOUCHSCREEN, }; } // namespace ui #endif // UI_EVENTS_EVENT_CONSTANTS_H_