Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Unified Diff: ui/aura/event.cc

Issue 10827145: Convert Aura to use ui::Event. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/aura/event.h ('k') | ui/aura/event_filter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/aura/event.cc
===================================================================
--- ui/aura/event.cc (revision 150582)
+++ ui/aura/event.cc (working copy)
@@ -1,479 +0,0 @@
-// 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.
-
-#include "ui/aura/event.h"
-
-#if defined(USE_X11)
-#include <X11/Xlib.h>
-#endif
-
-#include <cstring>
-
-#include "ui/aura/window.h"
-#include "ui/base/keycodes/keyboard_code_conversion.h"
-#include "ui/gfx/point3.h"
-#include "ui/gfx/interpolated_transform.h"
-#include "ui/gfx/transform.h"
-
-#if defined(OS_MACOSX)
-#include "ui/aura/event_mac.h"
-#endif
-
-#if defined(USE_X11)
-#include "ui/base/keycodes/keyboard_code_conversion_x.h"
-#endif
-
-namespace {
-
-base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) {
-#if defined(USE_X11)
- XEvent* copy = new XEvent;
- *copy = *event;
- return copy;
-#elif defined(OS_WIN)
- return event;
-#elif defined(OS_MACOSX)
- return aura::CopyNativeEvent(event);
-#else
- NOTREACHED() <<
- "Don't know how to copy base::NativeEvent for this platform";
-#endif
-}
-
-} // namespace
-
-namespace aura {
-
-Event::~Event() {
-#if defined(USE_X11)
- if (delete_native_event_)
- delete native_event_;
-#endif
-}
-
-bool Event::HasNativeEvent() const {
- base::NativeEvent null_event;
- std::memset(&null_event, 0, sizeof(null_event));
- return !!std::memcmp(&native_event_, &null_event, sizeof(null_event));
-}
-
-Event::Event(ui::EventType type, int flags)
- : type_(type),
- time_stamp_(base::Time::NowFromSystemTime() - base::Time()),
- flags_(flags),
- delete_native_event_(false) {
- Init();
-}
-
-Event::Event(const base::NativeEvent& native_event,
- ui::EventType type,
- int flags)
- : type_(type),
- time_stamp_(ui::EventTimeFromNative(native_event)),
- flags_(flags),
- delete_native_event_(false) {
- InitWithNativeEvent(native_event);
-}
-
-Event::Event(const Event& copy)
- : native_event_(copy.native_event_),
- type_(copy.type_),
- time_stamp_(copy.time_stamp_),
- flags_(copy.flags_),
- delete_native_event_(false) {
-}
-
-void Event::Init() {
- std::memset(&native_event_, 0, sizeof(native_event_));
-}
-
-void Event::InitWithNativeEvent(const base::NativeEvent& native_event) {
- native_event_ = native_event;
-}
-
-LocatedEvent::~LocatedEvent() {
-}
-
-LocatedEvent::LocatedEvent(const base::NativeEvent& native_event)
- : Event(native_event,
- ui::EventTypeFromNative(native_event),
- ui::EventFlagsFromNative(native_event)),
- location_(ui::EventLocationFromNative(native_event)),
- root_location_(location_) {
-}
-
-LocatedEvent::LocatedEvent(const LocatedEvent& model,
- Window* source,
- Window* target)
- : Event(model),
- location_(model.location_),
- root_location_(model.root_location_) {
- if (target && target != source)
- Window::ConvertPointToWindow(source, target, &location_);
-}
-
-LocatedEvent::LocatedEvent(ui::EventType type,
- const gfx::Point& location,
- const gfx::Point& root_location,
- int flags)
- : Event(type, flags),
- location_(location),
- root_location_(root_location) {
-}
-
-void LocatedEvent::UpdateForRootTransform(const ui::Transform& root_transform) {
- // Transform has to be done at root level.
- DCHECK_EQ(root_location_.x(), location_.x());
- DCHECK_EQ(root_location_.y(), location_.y());
- gfx::Point3f p(location_);
- root_transform.TransformPointReverse(p);
- root_location_ = location_ = p.AsPoint();
-}
-
-MouseEvent::MouseEvent(const base::NativeEvent& native_event)
- : LocatedEvent(native_event) {
- if (type() == ui::ET_MOUSE_PRESSED)
- SetClickCount(GetRepeatCount(*this));
-}
-
-MouseEvent::MouseEvent(const MouseEvent& model, Window* source, Window* target)
- : LocatedEvent(model, source, target) {
-}
-
-MouseEvent::MouseEvent(const MouseEvent& model,
- Window* source,
- Window* target,
- ui::EventType type,
- int flags)
- : LocatedEvent(model, source, target) {
- set_type(type);
- set_flags(flags);
-}
-
-MouseEvent::MouseEvent(ui::EventType type,
- const gfx::Point& location,
- const gfx::Point& root_location,
- int flags)
- : LocatedEvent(type, location, root_location, flags) {
-}
-
-// static
-bool MouseEvent::IsRepeatedClickEvent(
- const MouseEvent& event1,
- const MouseEvent& event2) {
- // These values match the Windows defaults.
- static const int kDoubleClickTimeMS = 500;
- static const int kDoubleClickWidth = 4;
- static const int kDoubleClickHeight = 4;
-
- if (event1.type() != ui::ET_MOUSE_PRESSED ||
- event2.type() != ui::ET_MOUSE_PRESSED)
- return false;
-
- // Compare flags, but ignore EF_IS_DOUBLE_CLICK to allow triple clicks.
- if ((event1.flags() & ~ui::EF_IS_DOUBLE_CLICK) !=
- (event2.flags() & ~ui::EF_IS_DOUBLE_CLICK))
- return false;
-
- base::TimeDelta time_difference = event2.time_stamp() - event1.time_stamp();
-
- if (time_difference.InMilliseconds() > kDoubleClickTimeMS)
- return false;
-
- if (abs(event2.x() - event1.x()) > kDoubleClickWidth / 2)
- return false;
-
- if (abs(event2.y() - event1.y()) > kDoubleClickHeight / 2)
- return false;
-
- return true;
-}
-
-// static
-int MouseEvent::GetRepeatCount(const MouseEvent& event) {
- int click_count = 1;
- if (last_click_event_) {
- if (IsRepeatedClickEvent(*last_click_event_, event))
- click_count = last_click_event_->GetClickCount() + 1;
- delete last_click_event_;
- }
- last_click_event_ = new MouseEvent(event, NULL, NULL);
- if (click_count > 3)
- click_count = 3;
- last_click_event_->SetClickCount(click_count);
- return click_count;
-}
-
-// static
-MouseEvent* MouseEvent::last_click_event_ = NULL;
-
-int MouseEvent::GetClickCount() const {
- if (type() != ui::ET_MOUSE_PRESSED)
- return 0;
-
- if (flags() & ui::EF_IS_TRIPLE_CLICK)
- return 3;
- else if (flags() & ui::EF_IS_DOUBLE_CLICK)
- return 2;
- else
- return 1;
-}
-
-void MouseEvent::SetClickCount(int click_count) {
- if (type() != ui::ET_MOUSE_PRESSED)
- return;
-
- DCHECK(click_count > 0);
- DCHECK(click_count <= 3);
-
- int f = flags();
- switch (click_count) {
- case 1:
- f &= ~ui::EF_IS_DOUBLE_CLICK;
- f &= ~ui::EF_IS_TRIPLE_CLICK;
- break;
- case 2:
- f |= ui::EF_IS_DOUBLE_CLICK;
- f &= ~ui::EF_IS_TRIPLE_CLICK;
- break;
- case 3:
- f &= ~ui::EF_IS_DOUBLE_CLICK;
- f |= ui::EF_IS_TRIPLE_CLICK;
- break;
- }
- set_flags(f);
-}
-
-TouchEvent::TouchEvent(const base::NativeEvent& native_event)
- : LocatedEvent(native_event),
- touch_id_(ui::GetTouchId(native_event)),
- radius_x_(ui::GetTouchRadiusX(native_event)),
- radius_y_(ui::GetTouchRadiusY(native_event)),
- rotation_angle_(ui::GetTouchAngle(native_event)),
- force_(ui::GetTouchForce(native_event)) {
-}
-
-TouchEvent::TouchEvent(const TouchEvent& model,
- Window* source,
- Window* target)
- : LocatedEvent(model, source, target),
- touch_id_(model.touch_id_),
- radius_x_(model.radius_x_),
- radius_y_(model.radius_y_),
- rotation_angle_(model.rotation_angle_),
- force_(model.force_) {
-}
-
-TouchEvent::TouchEvent(ui::EventType type,
- const gfx::Point& location,
- int touch_id,
- base::TimeDelta time_stamp)
- : LocatedEvent(type, location, location, 0),
- touch_id_(touch_id),
- radius_x_(0.0f),
- radius_y_(0.0f),
- rotation_angle_(0.0f),
- force_(0.0f) {
- set_time_stamp(time_stamp);
-}
-
-TouchEvent::~TouchEvent() {
-}
-
-void TouchEvent::UpdateForRootTransform(const ui::Transform& root_transform) {
- LocatedEvent::UpdateForRootTransform(root_transform);
- gfx::Point3f scale;
- ui::InterpolatedTransform::FactorTRS(root_transform, NULL, NULL, &scale);
- if (scale.x())
- radius_x_ /= scale.x();
- if (scale.y())
- radius_y_ /= scale.y();
-}
-
-ui::EventType TouchEvent::GetEventType() const {
- return type();
-}
-
-gfx::Point TouchEvent::GetLocation() const {
- return location();
-}
-
-int TouchEvent::GetTouchId() const {
- return touch_id_;
-}
-
-int TouchEvent::GetEventFlags() const {
- return flags();
-}
-
-base::TimeDelta TouchEvent::GetTimestamp() const {
- return time_stamp();
-}
-
-float TouchEvent::RadiusX() const {
- return radius_x_;
-}
-
-float TouchEvent::RadiusY() const {
- return radius_y_;
-}
-
-float TouchEvent::RotationAngle() const {
- return rotation_angle_;
-}
-
-float TouchEvent::Force() const {
- return force_;
-}
-
-KeyEvent::KeyEvent(const base::NativeEvent& native_event, bool is_char)
- : Event(native_event,
- ui::EventTypeFromNative(native_event),
- ui::EventFlagsFromNative(native_event)),
- key_code_(ui::KeyboardCodeFromNative(native_event)),
- is_char_(is_char),
- character_(0),
- unmodified_character_(0) {
-}
-
-KeyEvent::KeyEvent(ui::EventType type,
- ui::KeyboardCode key_code,
- int flags)
- : Event(type, flags),
- key_code_(key_code),
- is_char_(false),
- character_(ui::GetCharacterFromKeyCode(key_code, flags)),
- unmodified_character_(0) {
-}
-
-uint16 KeyEvent::GetCharacter() const {
- if (character_)
- return character_;
-
-#if defined(OS_WIN)
- return (native_event().message == WM_CHAR) ? key_code_ :
- ui::GetCharacterFromKeyCode(key_code_, flags());
-#elif defined(USE_X11)
- if (!native_event())
- return ui::GetCharacterFromKeyCode(key_code_, flags());
-
- DCHECK(native_event()->type == KeyPress ||
- native_event()->type == KeyRelease);
-
- uint16 ch = 0;
- if (!IsControlDown())
- ch = ui::GetCharacterFromXEvent(native_event());
- return ch ? ch : ui::GetCharacterFromKeyCode(key_code_, flags());
-#else
- NOTIMPLEMENTED();
- return 0;
-#endif
-}
-
-uint16 KeyEvent::GetUnmodifiedCharacter() const {
- if (unmodified_character_)
- return unmodified_character_;
-
-#if defined(OS_WIN)
- // Looks like there is no way to get unmodified character on Windows.
- return (native_event().message == WM_CHAR) ? key_code_ :
- ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN);
-#elif defined(USE_X11)
- if (!native_event())
- return ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN);
-
- DCHECK(native_event()->type == KeyPress ||
- native_event()->type == KeyRelease);
-
- static const unsigned int kIgnoredModifiers = ControlMask | LockMask |
- Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask;
-
- XKeyEvent copy = native_event()->xkey; // bit-wise copy is safe.
- // We can't use things like (native_event()->xkey.state & ShiftMask), as it
- // may mask out bits used by X11 internally.
- copy.state &= ~kIgnoredModifiers;
- uint16 ch = ui::GetCharacterFromXEvent(reinterpret_cast<XEvent*>(&copy));
- return ch ? ch :
- ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN);
-#else
- NOTIMPLEMENTED();
- return 0;
-#endif
-}
-
-KeyEvent* KeyEvent::Copy() {
- KeyEvent* copy = new KeyEvent(::CopyNativeEvent(native_event()), is_char());
-#if defined(USE_X11)
- copy->set_delete_native_event(true);
-#endif
- return copy;
-}
-
-TranslatedKeyEvent::TranslatedKeyEvent(const base::NativeEvent& native_event,
- bool is_char)
- : KeyEvent(native_event, is_char) {
- set_type(type() == ui::ET_KEY_PRESSED ?
- ui::ET_TRANSLATED_KEY_PRESS : ui::ET_TRANSLATED_KEY_RELEASE);
-}
-
-TranslatedKeyEvent::TranslatedKeyEvent(bool is_press,
- ui::KeyboardCode key_code,
- int flags)
- : KeyEvent((is_press ?
- ui::ET_TRANSLATED_KEY_PRESS : ui::ET_TRANSLATED_KEY_RELEASE),
- key_code,
- flags) {
-}
-
-void TranslatedKeyEvent::ConvertToKeyEvent() {
- set_type(type() == ui::ET_TRANSLATED_KEY_PRESS ?
- ui::ET_KEY_PRESSED : ui::ET_KEY_RELEASED);
-}
-
-ScrollEvent::ScrollEvent(const base::NativeEvent& native_event)
- : MouseEvent(native_event) {
- if (type() == ui::ET_SCROLL) {
- ui::GetScrollOffsets(native_event, &x_offset_, &y_offset_);
- double start, end;
- ui::GetGestureTimes(native_event, &start, &end);
- } else if (type() == ui::ET_SCROLL_FLING_START) {
- bool is_cancel;
- ui::GetFlingData(native_event, &x_offset_, &y_offset_, &is_cancel);
- }
-}
-
-GestureEvent::GestureEvent(ui::EventType type,
- int x,
- int y,
- int flags,
- base::Time time_stamp,
- const ui::GestureEventDetails& details,
- unsigned int touch_ids_bitfield)
- : LocatedEvent(type, gfx::Point(x, y), gfx::Point(x, y), flags),
- details_(details),
- touch_ids_bitfield_(touch_ids_bitfield) {
- set_time_stamp(base::TimeDelta::FromSeconds(time_stamp.ToDoubleT()));
-}
-
-GestureEvent::GestureEvent(const GestureEvent& model,
- Window* source,
- Window* target)
- : LocatedEvent(model, source, target),
- details_(model.details_),
- touch_ids_bitfield_(model.touch_ids_bitfield_) {
-}
-
-GestureEvent::~GestureEvent() {
-}
-
-int GestureEvent::GetLowestTouchId() const {
- if (touch_ids_bitfield_ == 0)
- return -1;
- int i = -1;
- // Find the index of the least significant 1 bit
- while (!(1 << ++i & touch_ids_bitfield_));
- return i;
-}
-
-} // namespace aura
« no previous file with comments | « ui/aura/event.h ('k') | ui/aura/event_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698