# Event in Chromium
[Event](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=51;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) represents an input event in Chromium.
Let's see the types of Events.
## LocatedEvent
[LocatedEvent](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=345;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) is an event type which is based on the location information.
For example, the mouse event has a cursor position. Touchscreen events also have a position where the user touches.
This information is stored as [location_](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=423;drc=31fb07c05718d671d96c227855bfe97af9e3fb20).
`location_` is a position relative to the target window in the target window coordinate space. TO check the location on root window coordinates, you can refer to `root_location_`. This is against a screen for client, or against display.
There multiple types using location information.
Such events extends LocatedEvent to implement the details.
Followings are the examples.
### MouseEvent
[MouseEvent](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=433;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) is one of the LocatedEvent.
This event is dispatched by mouse but also by touchpad.
Mouse has [several buttons](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event_constants.h;l=41-45;drc=31fb07c05718d671d96c227855bfe97af9e3fb20).
Here's the list of the mouse button input that Chromium handles.
```cpp=
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;
```
It does contain not only the location, but also [`movement_`](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=590;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) and flags.
`movement_` is gfx::Vector2dF. It's raw mouse movement value reported from mouse hardware.
[Flags](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event_constants.h;l=75-99;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) can carry the information such as the click count (EF_IS_DOUBLE_CLICK, TD_IS_TRIPLE_CLICK).
Or EF_CURSOR_HIDE is set when the cursor is just hidden.
There are some special mouse events:
- [MouseWheelEvent](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=601;drc=31fb07c05718d671d96c227855bfe97af9e3fb20): Carries `offset_` and `tick_120ths_`.
- [ScrollEvent](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=977;drc=31fb07c05718d671d96c227855bfe97af9e3fb20): Carries `offset_`, `finger_count_`... ScrollEvent behaves differently depending on how many fingers are used to scroll.
### TouchEvent
[TouchEvent](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=657;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) is an event with finger touch on the screen or Pen (stylus).
TouchEvent is a bit similar to MouseEvent.
[PointerDetails](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/pointer_details.h;l=29;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) is used to describe the details for example how it is touched (twist, tangential_pressure).
### GestureEvent
[GestureEvent](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=1056;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) contains a `details_` whose type is [GestureEventDetails](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/gesture_event_details.h;l=22;drc=31fb07c05718d671d96c227855bfe97af9e3fb20).
GestureEvent holds a movement gesture like two fingers swipe.
The device using this input is touchpad or touchscreen. It's described in [GestureDeviceType](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event_constants.h;l=210;drc=31fb07c05718d671d96c227855bfe97af9e3fb20).
[Details](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/gesture_event_details.h;l=227;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) is a union of gestures, scroll_begin, scroll_update, scale, fling_velocity, first_finger_enclosing_rectangle, swip, tap_count or tap_down_count.
## KeyEvent
[KeyEvent](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=787;drc=31fb07c05718d671d96c227855bfe97af9e3fb20), on the other hand, does not have a location information.
Let's dig into the KeyEvent in the future.
## CancelModeEvent
[CancelModeEvent](https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event.h;l=336;drc=31fb07c05718d671d96c227855bfe97af9e3fb20) is an event to cancel everything.
Sent by the system to indicate any modal type operations should stop.