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

Unified Diff: mojo/converters/input_events/input_events_type_converters.cc

Issue 1049993002: Get mojo_shell building inside chromium checkout. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix presubmit Created 5 years, 9 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 | « mojo/converters/input_events/input_events_type_converters.h ('k') | mojo/gles2/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/converters/input_events/input_events_type_converters.cc
diff --git a/mojo/converters/input_events/input_events_type_converters.cc b/mojo/converters/input_events/input_events_type_converters.cc
index f6be2f1a64e0e5ff93d5f612f67525e9f2767f88..300ec18e6162545a037db17d59e8decce651b043 100644
--- a/mojo/converters/input_events/input_events_type_converters.cc
+++ b/mojo/converters/input_events/input_events_type_converters.cc
@@ -16,6 +16,70 @@
#include "ui/events/keycodes/keyboard_codes.h"
namespace mojo {
+namespace {
+
+ui::EventType MojoMouseEventTypeToUIEvent(const EventPtr& event) {
+ DCHECK(!event->pointer_data.is_null());
+ DCHECK_EQ(POINTER_KIND_MOUSE, event->pointer_data->kind);
+ switch (event->action) {
+ case EVENT_TYPE_POINTER_DOWN:
+ return ui::ET_MOUSE_PRESSED;
+
+ case EVENT_TYPE_POINTER_UP:
+ return ui::ET_MOUSE_RELEASED;
+
+ case EVENT_TYPE_POINTER_MOVE:
+ DCHECK(event->pointer_data);
+ if (event->pointer_data->horizontal_wheel != 0 ||
+ event->pointer_data->vertical_wheel != 0) {
+ return ui::ET_MOUSEWHEEL;
+ }
+ if (event->flags &
+ (EVENT_FLAGS_LEFT_MOUSE_BUTTON | EVENT_FLAGS_MIDDLE_MOUSE_BUTTON |
+ EVENT_FLAGS_RIGHT_MOUSE_BUTTON)) {
+ return ui::ET_MOUSE_DRAGGED;
+ }
+ return ui::ET_MOUSE_MOVED;
+
+ default:
+ NOTREACHED();
+ }
+
+ return ui::ET_MOUSE_RELEASED;
+}
+
+ui::EventType MojoTouchEventTypeToUIEvent(const EventPtr& event) {
+ DCHECK(!event->pointer_data.is_null());
+ DCHECK_EQ(POINTER_KIND_TOUCH, event->pointer_data->kind);
+ switch (event->action) {
+ case EVENT_TYPE_POINTER_DOWN:
+ return ui::ET_TOUCH_PRESSED;
+
+ case EVENT_TYPE_POINTER_UP:
+ return ui::ET_TOUCH_RELEASED;
+
+ case EVENT_TYPE_POINTER_MOVE:
+ return ui::ET_TOUCH_MOVED;
+
+ case EVENT_TYPE_POINTER_CANCEL:
+ return ui::ET_TOUCH_CANCELLED;
+
+ default:
+ NOTREACHED();
+ }
+
+ return ui::ET_TOUCH_CANCELLED;
+}
+
+void SetPointerDataLocationFromEvent(const ui::LocatedEvent& located_event,
+ PointerData* pointer_data) {
+ pointer_data->x = located_event.location_f().x();
+ pointer_data->y = located_event.location_f().y();
+ pointer_data->screen_x = located_event.root_location_f().x();
+ pointer_data->screen_y = located_event.root_location_f().y();
+}
+
+} // namespace
COMPILE_ASSERT(static_cast<int32>(EVENT_FLAGS_NONE) ==
static_cast<int32>(ui::EF_NONE),
@@ -60,62 +124,80 @@ COMPILE_ASSERT(static_cast<int32>(EVENT_FLAGS_MOD3_DOWN) ==
// static
EventType TypeConverter<EventType, ui::EventType>::Convert(ui::EventType type) {
-#define MOJO_INPUT_EVENT_NAME(name) case ui::ET_##name: return EVENT_TYPE_##name
-
switch (type) {
-#include "mojo/converters/input_events/input_event_names.h"
- case ui::ET_LAST:
- NOTREACHED();
- break;
- }
+ case ui::ET_MOUSE_PRESSED:
+ case ui::ET_TOUCH_PRESSED:
+ return EVENT_TYPE_POINTER_DOWN;
-#undef MOJO_INPUT_EVENT_NAME
+ case ui::ET_MOUSE_DRAGGED:
+ case ui::ET_MOUSE_MOVED:
+ case ui::ET_MOUSE_ENTERED:
+ case ui::ET_MOUSE_EXITED:
+ case ui::ET_TOUCH_MOVED:
+ case ui::ET_MOUSEWHEEL:
+ return EVENT_TYPE_POINTER_MOVE;
- NOTREACHED();
- return EVENT_TYPE_UNKNOWN;
-}
+ case ui::ET_MOUSE_RELEASED:
+ case ui::ET_TOUCH_RELEASED:
+ return EVENT_TYPE_POINTER_UP;
-// static
-ui::EventType TypeConverter<ui::EventType, EventType>::Convert(EventType type) {
-#define MOJO_INPUT_EVENT_NAME(name) case EVENT_TYPE_##name: return ui::ET_##name
+ case ui::ET_TOUCH_CANCELLED:
+ return EVENT_TYPE_POINTER_CANCEL;
- switch (type) {
-#include "mojo/converters/input_events/input_event_names.h"
- }
+ case ui::ET_KEY_PRESSED:
+ return EVENT_TYPE_KEY_PRESSED;
-#undef MOJO_INPUT_EVENT_NAME
+ case ui::ET_KEY_RELEASED:
+ return EVENT_TYPE_KEY_RELEASED;
- NOTREACHED();
- return ui::ET_UNKNOWN;
+ default:
+ break;
+ }
+ return EVENT_TYPE_UNKNOWN;
}
-// static
EventPtr TypeConverter<EventPtr, ui::Event>::Convert(const ui::Event& input) {
- EventPtr event(Event::New());
- event->action = ConvertTo<EventType>(input.type());
+ const EventType type = ConvertTo<EventType>(input.type());
+ if (type == EVENT_TYPE_UNKNOWN)
+ return nullptr;
+
+ EventPtr event = Event::New();
+ event->action = type;
event->flags = EventFlags(input.flags());
event->time_stamp = input.time_stamp().ToInternalValue();
- if (input.IsMouseEvent() || input.IsTouchEvent()) {
+ PointerData pointer_data;
+ if (input.IsMouseEvent()) {
const ui::LocatedEvent* located_event =
static_cast<const ui::LocatedEvent*>(&input);
-
- LocationDataPtr location_data(LocationData::New());
- location_data->in_view_location = Point::From(located_event->location());
- if (input.HasNativeEvent()) {
- location_data->screen_location =
- Point::From(ui::EventSystemLocationFromNative(input.native_event()));
+ PointerDataPtr pointer_data(PointerData::New());
+ // TODO(sky): come up with a better way to handle this.
+ pointer_data->pointer_id = std::numeric_limits<int32>::max();
+ pointer_data->kind = POINTER_KIND_MOUSE;
+ SetPointerDataLocationFromEvent(*located_event, pointer_data.get());
+ if (input.IsMouseWheelEvent()) {
+ const ui::MouseWheelEvent* wheel_event =
+ static_cast<const ui::MouseWheelEvent*>(&input);
+ // This conversion assumes we're using the mojo meaning of these values:
+ // [-1 1].
+ pointer_data->horizontal_wheel =
+ static_cast<float>(wheel_event->x_offset()) / 100.0f;
+ pointer_data->vertical_wheel =
+ static_cast<float>(wheel_event->y_offset()) / 100.0f;
}
-
- event->location_data = location_data.Pass();
- }
-
- if (input.IsTouchEvent()) {
+ event->pointer_data = pointer_data.Pass();
+ } else if (input.IsTouchEvent()) {
const ui::TouchEvent* touch_event =
static_cast<const ui::TouchEvent*>(&input);
- TouchDataPtr touch_data(TouchData::New());
- touch_data->pointer_id = touch_event->touch_id();
- event->touch_data = touch_data.Pass();
+ PointerDataPtr pointer_data(PointerData::New());
+ pointer_data->pointer_id = touch_event->touch_id();
+ pointer_data->kind = POINTER_KIND_TOUCH;
+ SetPointerDataLocationFromEvent(*touch_event, pointer_data.get());
+ pointer_data->radius_major = touch_event->radius_x();
+ pointer_data->radius_minor = touch_event->radius_y();
+ pointer_data->pressure = touch_event->force();
+ pointer_data->orientation = touch_event->rotation_angle();
+ event->pointer_data = pointer_data.Pass();
} else if (input.IsKeyEvent()) {
const ui::KeyEvent* key_event = static_cast<const ui::KeyEvent*>(&input);
KeyDataPtr key_data(KeyData::New());
@@ -138,15 +220,7 @@ EventPtr TypeConverter<EventPtr, ui::Event>::Convert(const ui::Event& input) {
key_data->text = key_event->GetText();
key_data->unmodified_text = key_event->GetUnmodifiedText();
}
-
event->key_data = key_data.Pass();
- } else if (input.IsMouseWheelEvent()) {
- const ui::MouseWheelEvent* wheel_event =
- static_cast<const ui::MouseWheelEvent*>(&input);
- MouseWheelDataPtr wheel_data(MouseWheelData::New());
- wheel_data->x_offset = wheel_event->x_offset();
- wheel_data->y_offset = wheel_event->y_offset();
- event->wheel_data = wheel_data.Pass();
}
return event.Pass();
}
@@ -160,18 +234,17 @@ EventPtr TypeConverter<EventPtr, ui::KeyEvent>::Convert(
// static
scoped_ptr<ui::Event> TypeConverter<scoped_ptr<ui::Event>, EventPtr>::Convert(
const EventPtr& input) {
- scoped_ptr<ui::Event> ui_event;
- ui::EventType ui_event_type = ConvertTo<ui::EventType>(input->action);
-
- gfx::Point location;
- if (!input->location_data.is_null() &&
- !input->location_data->in_view_location.is_null()) {
- location = input->location_data->in_view_location.To<gfx::Point>();
+ gfx::PointF location;
+ gfx::PointF screen_location;
+ if (!input->pointer_data.is_null()) {
+ location.SetPoint(input->pointer_data->x, input->pointer_data->y);
+ screen_location.SetPoint(input->pointer_data->screen_x,
+ input->pointer_data->screen_y);
}
switch (input->action) {
- case ui::ET_KEY_PRESSED:
- case ui::ET_KEY_RELEASED: {
+ case EVENT_TYPE_KEY_PRESSED:
+ case EVENT_TYPE_KEY_RELEASED: {
scoped_ptr<ui::KeyEvent> key_event;
if (input->key_data->is_char) {
key_event.reset(new ui::KeyEvent(
@@ -181,9 +254,10 @@ scoped_ptr<ui::Event> TypeConverter<scoped_ptr<ui::Event>, EventPtr>::Convert(
input->flags));
} else {
key_event.reset(new ui::KeyEvent(
- ui_event_type,
- static_cast<ui::KeyboardCode>(
- input->key_data->key_code),
+ input->action == EVENT_TYPE_KEY_PRESSED ? ui::ET_KEY_PRESSED
+ : ui::ET_KEY_RELEASED,
+
+ static_cast<ui::KeyboardCode>(input->key_data->key_code),
input->flags));
}
key_event->SetExtendedKeyEventData(scoped_ptr<ui::ExtendedKeyEventData>(
@@ -192,54 +266,43 @@ scoped_ptr<ui::Event> TypeConverter<scoped_ptr<ui::Event>, EventPtr>::Convert(
input->key_data->text,
input->key_data->unmodified_text)));
key_event->set_platform_keycode(input->key_data->native_key_code);
- ui_event = key_event.Pass();
- break;
- }
- case EVENT_TYPE_MOUSE_PRESSED:
- case EVENT_TYPE_MOUSE_DRAGGED:
- case EVENT_TYPE_MOUSE_RELEASED:
- case EVENT_TYPE_MOUSE_MOVED:
- case EVENT_TYPE_MOUSE_ENTERED:
- case EVENT_TYPE_MOUSE_EXITED: {
- // TODO: last flags isn't right. Need to send changed_flags.
- ui_event.reset(new ui::MouseEvent(
- ui_event_type,
- location,
- location,
- ui::EventFlags(input->flags),
- ui::EventFlags(input->flags)));
- break;
+ return key_event.Pass();
}
- case EVENT_TYPE_MOUSEWHEEL: {
- const gfx::Vector2d offset(input->wheel_data->x_offset,
- input->wheel_data->y_offset);
- ui_event.reset(new ui::MouseWheelEvent(offset,
- location,
- location,
- ui::EventFlags(input->flags),
- ui::EventFlags(input->flags)));
- break;
- }
- case EVENT_TYPE_TOUCH_MOVED:
- case EVENT_TYPE_TOUCH_PRESSED:
- case EVENT_TYPE_TOUCH_CANCELLED:
- case EVENT_TYPE_TOUCH_RELEASED: {
- ui_event.reset(new ui::TouchEvent(
- ui_event_type,
- location,
- ui::EventFlags(input->flags),
- input->touch_data->pointer_id,
- base::TimeDelta::FromInternalValue(input->time_stamp),
- 0.f, 0.f, 0.f, 0.f));
- break;
+ case EVENT_TYPE_POINTER_DOWN:
+ case EVENT_TYPE_POINTER_UP:
+ case EVENT_TYPE_POINTER_MOVE:
+ case EVENT_TYPE_POINTER_CANCEL: {
+ if (input->pointer_data->kind == POINTER_KIND_MOUSE) {
+ // TODO: last flags isn't right. Need to send changed_flags.
+ scoped_ptr<ui::MouseEvent> event(new ui::MouseEvent(
+ MojoMouseEventTypeToUIEvent(input), location, screen_location,
+ ui::EventTimeForNow(), ui::EventFlags(input->flags),
+ ui::EventFlags(input->flags)));
+ if (event->IsMouseWheelEvent()) {
+ // This conversion assumes we're using the mojo meaning of these
+ // values: [-1 1].
+ scoped_ptr<ui::MouseEvent> wheel_event(new ui::MouseWheelEvent(
+ *event,
+ static_cast<int>(input->pointer_data->horizontal_wheel * 100),
+ static_cast<int>(input->pointer_data->vertical_wheel * 100)));
+ event = wheel_event.Pass();
+ }
+ return event.Pass();
+ }
+ scoped_ptr<ui::TouchEvent> touch_event(new ui::TouchEvent(
+ MojoTouchEventTypeToUIEvent(input), location,
+ ui::EventFlags(input->flags), input->pointer_data->pointer_id,
+ base::TimeDelta::FromInternalValue(input->time_stamp),
+ input->pointer_data->radius_major, input->pointer_data->radius_minor,
+ input->pointer_data->orientation, input->pointer_data->pressure));
+ touch_event->set_root_location(screen_location);
+ return touch_event.Pass();
}
default:
- // TODO: support other types.
- // NOTIMPLEMENTED();
- ;
+ NOTIMPLEMENTED();
}
// TODO: need to support time_stamp.
- return ui_event.Pass();
+ return nullptr;
}
} // namespace mojo
« no previous file with comments | « mojo/converters/input_events/input_events_type_converters.h ('k') | mojo/gles2/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698