blob: 9c97392692d7967ebc854feeb61e478688a11935 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// 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.
using EventFlags = int;
// Used to denote no flags explicitly
constexpr EventFlags EF_NONE = 0;
// Universally applicable status bits.
constexpr EventFlags EF_IS_SYNTHESIZED = 1 << 0;
// Modifier key state.
constexpr EventFlags EF_SHIFT_DOWN = 1 << 1;
constexpr EventFlags EF_CONTROL_DOWN = 1 << 2;
constexpr EventFlags EF_ALT_DOWN = 1 << 3;
// GUI Key (e.g. Command on OS X keyboards, Search on Chromebook keyboards,
// Windows on MS-oriented keyboards)
constexpr EventFlags EF_COMMAND_DOWN = 1 << 4;
// Function key.
constexpr EventFlags EF_FUNCTION_DOWN = 1 << 5;
constexpr EventFlags EF_ALTGR_DOWN = 1 << 6;
constexpr EventFlags EF_MOD3_DOWN = 1 << 7;
// Other keyboard states.
constexpr EventFlags EF_NUM_LOCK_ON = 1 << 8;
constexpr EventFlags EF_CAPS_LOCK_ON = 1 << 9;
constexpr EventFlags EF_SCROLL_LOCK_ON = 1 << 10;
// Mouse buttons.
constexpr EventFlags EF_LEFT_MOUSE_BUTTON = 1 << 11;
constexpr EventFlags EF_MIDDLE_MOUSE_BUTTON = 1 << 12;
constexpr EventFlags EF_RIGHT_MOUSE_BUTTON = 1 << 13;
constexpr EventFlags EF_BACK_MOUSE_BUTTON = 1 << 14;
constexpr EventFlags EF_FORWARD_MOUSE_BUTTON = 1 << 15;
constexpr EventFlags 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 BUILDFLAG(IS_APPLE)
constexpr EventFlags EF_PLATFORM_ACCELERATOR = EF_COMMAND_DOWN;
#else
constexpr EventFlags 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.
using KeyEventFlags = EventFlags;
// Key event fabricated by the underlying IME without a user action. (Linux X11
// only)
constexpr KeyEventFlags EF_IME_FABRICATED_KEY = 1 << 16;
constexpr KeyEventFlags EF_IS_REPEAT = 1 << 17;
// Do not remap; the event was created with the desired final values.
constexpr KeyEventFlags EF_FINAL = 1 << 18;
// Windows extended key (see WM_KEYDOWN doc)
constexpr KeyEventFlags EF_IS_EXTENDED_KEY = 1 << 19;
// Event was generated by a stylus button
constexpr KeyEventFlags EF_IS_STYLUS_BUTTON = 1 << 20;
#if BUILDFLAG(IS_CHROMEOS)
// Event was generated by customizing a button on a mouse or graphics tablet.
constexpr KeyEventFlags EF_IS_CUSTOMIZED_FROM_BUTTON = 1 << 21;
constexpr KeyEventFlags EF_MAX_KEY_EVENT_FLAGS_VALUE = (1 << 22) - 1;
#else
constexpr KeyEventFlags EF_MAX_KEY_EVENT_FLAGS_VALUE = (1 << 21) - 1;
#endif
// Flags specific to mouse events.
using MouseEventFlags = EventFlags;
constexpr MouseEventFlags EF_IS_DOUBLE_CLICK = 1 << 16;
constexpr MouseEventFlags EF_IS_TRIPLE_CLICK = 1 << 17;
constexpr MouseEventFlags EF_IS_NON_CLIENT = 1 << 18;
// Indicates this mouse event is generated from an unconsumed touch/gesture
// event.
constexpr MouseEventFlags EF_FROM_TOUCH = 1 << 19;
// Indicates this event was generated from touch accessibility mode.
constexpr MouseEventFlags EF_TOUCH_ACCESSIBILITY = 1 << 20;
// Indicates this mouse event is generated because the cursor was just hidden.
// This can be used to update hover state.
constexpr MouseEventFlags EF_CURSOR_HIDE = 1 << 21;
// Indicates this mouse event is from high precision touchpad and will come with
// a high precision delta.
constexpr MouseEventFlags EF_PRECISION_SCROLLING_DELTA = 1 << 22;
// Indicates this mouse event is generated when users is requesting to scroll by
// pages.
constexpr MouseEventFlags EF_SCROLL_BY_PAGE = 1 << 23;
// Indicates this mouse event is unadjusted mouse events that has unadjusted
// movement delta, i.e. is from WM_INPUT on Windows.
constexpr MouseEventFlags EF_UNADJUSTED_MOUSE = 1 << 24;
// Indicates this mouse event should not trigger mouse warping (which moves the
// mouse to another display when the mouse hits the window boundaries).
constexpr MouseEventFlags EF_NOT_SUITABLE_FOR_MOUSE_WARPING = 1 << 25;
// Flags specific to touch events.
using TouchEventFlags = EventFlags;
// Indicates this touch event is reserved for gesture recognition and
// should not be handled in the event handler.
constexpr TouchEventFlags EF_RESERVED_FOR_GESTURE = 1 << 26;
// These value match the Windows default.
constexpr int kDoubleClickTimeMs = 500;
// 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.
ER_FORCE_PROCESS_GESTURE =
1 << 3, // The event should be processed by gesture recognizer even if
// ER_HANDLED or ER_CONSUMED is set.
ER_SKIPPED =
1 << 4, // The event has been been handled, and it should not be
// propagated to other handlers but the dispatchers may decide to
// handle the event themselves. A handler should set the result
// to this if it wishes to stop the event from propagating
// further but does not take any action other than stopping it.
};
// 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,
};
enum EventDeviceId {
// Device ID for Touch, Mouse and Key Events.
ED_UNKNOWN_DEVICE = -1,
// Device ID for events injected through a remote connection (like CRD).
ED_REMOTE_INPUT_DEVICE = -2,
};
// 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_