Commit d47244ce authored by kylixrd's avatar kylixrd Committed by Commit bot

Use the CHECK'd AsXXXEvent() methods on Event rather than the unsafe static_cast's.

Review-Url: https://codereview.chromium.org/2374213003
Cr-Commit-Position: refs/heads/master@{#422830}
parent 3b2ab07b
......@@ -288,6 +288,16 @@ bool Event::IsTouchPointerEvent() const {
EventPointerType::POINTER_TYPE_TOUCH;
}
CancelModeEvent* Event::AsCancelModeEvent() {
CHECK(IsCancelModeEvent());
return static_cast<CancelModeEvent*>(this);
}
const CancelModeEvent* Event::AsCancelModeEvent() const {
CHECK(IsCancelModeEvent());
return static_cast<const CancelModeEvent*>(this);
}
GestureEvent* Event::AsGestureEvent() {
CHECK(IsGestureEvent());
return static_cast<GestureEvent*>(this);
......
......@@ -30,6 +30,7 @@ class Transform;
}
namespace ui {
class CancelModeEvent;
class EventTarget;
class KeyEvent;
class LocatedEvent;
......@@ -107,6 +108,10 @@ class EVENTS_EXPORT Event {
bool IsAltGrDown() const { return (flags_ & EF_ALTGR_DOWN) != 0; }
bool IsCapsLockOn() const { return (flags_ & EF_CAPS_LOCK_ON) != 0; }
bool IsCancelModeEvent() const {
return type_ == ET_CANCEL_MODE;
}
bool IsKeyEvent() const {
return type_ == ET_KEY_PRESSED || type_ == ET_KEY_RELEASED;
}
......@@ -220,6 +225,12 @@ class EVENTS_EXPORT Event {
IsGestureEvent() || IsPointerEvent();
}
// Convenience methods to cast |this| to a CancelModeEvent.
// IsCancelModeEvent() must be true as a precondition to calling these
// methods.
CancelModeEvent* AsCancelModeEvent();
const CancelModeEvent* AsCancelModeEvent() const;
// Convenience methods to cast |this| to a GestureEvent. IsGestureEvent()
// must be true as a precondition to calling these methods.
GestureEvent* AsGestureEvent();
......
......@@ -21,20 +21,18 @@ EventHandler::~EventHandler() {
}
void EventHandler::OnEvent(Event* event) {
// TODO(tdanderson): Encapsulate static_casts in ui::Event for all
// event types.
if (event->IsKeyEvent())
OnKeyEvent(static_cast<KeyEvent*>(event));
OnKeyEvent(event->AsKeyEvent());
else if (event->IsMouseEvent())
OnMouseEvent(static_cast<MouseEvent*>(event));
OnMouseEvent(event->AsMouseEvent());
else if (event->IsScrollEvent())
OnScrollEvent(static_cast<ScrollEvent*>(event));
OnScrollEvent(event->AsScrollEvent());
else if (event->IsTouchEvent())
OnTouchEvent(static_cast<TouchEvent*>(event));
OnTouchEvent(event->AsTouchEvent());
else if (event->IsGestureEvent())
OnGestureEvent(event->AsGestureEvent());
else if (event->type() == ET_CANCEL_MODE)
OnCancelMode(static_cast<CancelModeEvent*>(event));
else if (event->IsCancelModeEvent())
OnCancelMode(event->AsCancelModeEvent());
}
void EventHandler::OnKeyEvent(KeyEvent* event) {
......
......@@ -32,9 +32,9 @@ class EventObserver {
void OnEvent(Event* event) {
if (event->IsMouseEvent()) {
if (event->type() == ET_MOUSEWHEEL) {
OnMouseWheelEvent(static_cast<MouseWheelEvent*>(event));
OnMouseWheelEvent(event->AsMouseWheelEvent());
} else {
OnMouseEvent(static_cast<MouseEvent*>(event));
OnMouseEvent(event->AsMouseEvent());
}
}
}
......
......@@ -160,7 +160,7 @@ bool DrmWindowHost::CanDispatchEvent(const PlatformEvent& ne) {
snapshot->current_mode()->size());
return display_bounds == bounds_;
} else if (event->IsLocatedEvent()) {
LocatedEvent* located_event = static_cast<LocatedEvent*>(event);
LocatedEvent* located_event = event->AsLocatedEvent();
return bounds_.Contains(located_event->location());
}
......@@ -174,7 +174,7 @@ uint32_t DrmWindowHost::DispatchEvent(const PlatformEvent& native_event) {
Event* event = static_cast<Event*>(native_event);
if (event->IsLocatedEvent()) {
// Make the event location relative to this window's origin.
LocatedEvent* located_event = static_cast<LocatedEvent*>(event);
LocatedEvent* located_event = event->AsLocatedEvent();
gfx::PointF location = located_event->location_f();
location -= gfx::Vector2dF(bounds_.OffsetFromOrigin());
located_event->set_location_f(location);
......
......@@ -86,7 +86,7 @@ TEST_F(WaylandPointerTest, Motion) {
ASSERT_TRUE(event);
ASSERT_TRUE(event->IsMouseEvent());
auto mouse_event = static_cast<MouseEvent*>(event.get());
auto mouse_event = event->AsMouseEvent();
EXPECT_EQ(ET_MOUSE_MOVED, mouse_event->type());
EXPECT_EQ(0, mouse_event->button_flags());
EXPECT_EQ(0, mouse_event->changed_button_flags());
......@@ -112,7 +112,7 @@ TEST_F(WaylandPointerTest, MotionDragged) {
ASSERT_TRUE(event);
ASSERT_TRUE(event->IsMouseEvent());
auto mouse_event = static_cast<MouseEvent*>(event.get());
auto mouse_event = event->AsMouseEvent();
EXPECT_EQ(ET_MOUSE_DRAGGED, mouse_event->type());
EXPECT_EQ(EF_MIDDLE_MOUSE_BUTTON, mouse_event->button_flags());
EXPECT_EQ(0, mouse_event->changed_button_flags());
......@@ -137,7 +137,7 @@ TEST_F(WaylandPointerTest, ButtonPress) {
ASSERT_TRUE(event);
ASSERT_TRUE(event->IsMouseEvent());
auto mouse_event = static_cast<MouseEvent*>(event.get());
auto mouse_event = event->AsMouseEvent();
EXPECT_EQ(ET_MOUSE_PRESSED, mouse_event->type());
EXPECT_EQ(EF_LEFT_MOUSE_BUTTON | EF_RIGHT_MOUSE_BUTTON,
mouse_event->button_flags());
......@@ -165,7 +165,7 @@ TEST_F(WaylandPointerTest, ButtonRelease) {
ASSERT_TRUE(event);
ASSERT_TRUE(event->IsMouseEvent());
auto mouse_event = static_cast<MouseEvent*>(event.get());
auto mouse_event = event->AsMouseEvent();
EXPECT_EQ(ET_MOUSE_RELEASED, mouse_event->type());
EXPECT_EQ(EF_LEFT_MOUSE_BUTTON | EF_BACK_MOUSE_BUTTON,
mouse_event->button_flags());
......@@ -192,7 +192,7 @@ TEST_F(WaylandPointerTest, AxisVertical) {
ASSERT_TRUE(event);
ASSERT_TRUE(event->IsMouseWheelEvent());
auto mouse_wheel_event = static_cast<MouseWheelEvent*>(event.get());
auto mouse_wheel_event = event->AsMouseWheelEvent();
EXPECT_EQ(gfx::Vector2d(0, -2 * MouseWheelEvent::kWheelDelta),
mouse_wheel_event->offset());
EXPECT_EQ(EF_RIGHT_MOUSE_BUTTON, mouse_wheel_event->button_flags());
......@@ -220,7 +220,7 @@ TEST_F(WaylandPointerTest, AxisHorizontal) {
ASSERT_TRUE(event);
ASSERT_TRUE(event->IsMouseWheelEvent());
auto mouse_wheel_event = static_cast<MouseWheelEvent*>(event.get());
auto mouse_wheel_event = event->AsMouseWheelEvent();
EXPECT_EQ(gfx::Vector2d(MouseWheelEvent::kWheelDelta, 0),
mouse_wheel_event->offset());
EXPECT_EQ(EF_LEFT_MOUSE_BUTTON, mouse_wheel_event->button_flags());
......
......@@ -94,7 +94,7 @@ TEST_F(WaylandWindowTest, DispatchEvent) {
window.DispatchEvent(&test_mouse_event);
ASSERT_TRUE(event);
ASSERT_TRUE(event->IsMouseEvent());
auto mouse_event = static_cast<MouseEvent*>(event.get());
auto mouse_event = event->AsMouseEvent();
EXPECT_EQ(mouse_event->location_f(), test_mouse_event.location_f());
EXPECT_EQ(mouse_event->root_location_f(), test_mouse_event.root_location_f());
EXPECT_EQ(mouse_event->time_stamp(), test_mouse_event.time_stamp());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment