Index: mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc |
diff --git a/mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc b/mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc |
index a5292d3080a65e227efc918181cefe5e76a57a80..d7ae1f03ff456b8c419fbd67f9278b92b0f85281 100644 |
--- a/mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc |
+++ b/mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc |
@@ -6,6 +6,7 @@ |
#include "mojo/services/public/cpp/geometry/geometry_type_converters.h" |
#include "mojo/services/public/interfaces/input_events/input_events.mojom.h" |
+#include "ui/events/event_utils.h" |
#include "ui/events/keycodes/keyboard_codes.h" |
namespace mojo { |
@@ -99,9 +100,18 @@ EventPtr TypeConverter<EventPtr, ui::Event>::ConvertFrom( |
if (input.IsMouseEvent() || input.IsTouchEvent()) { |
const ui::LocatedEvent* located_event = |
static_cast<const ui::LocatedEvent*>(&input); |
- event->location = |
+ |
+ LocationDataPtr location_data(LocationData::New()); |
+ location_data->in_view_location = |
TypeConverter<PointPtr, gfx::Point>::ConvertFrom( |
located_event->location()); |
+ if (input.HasNativeEvent()) { |
+ location_data->screen_location = |
+ TypeConverter<PointPtr, gfx::Point>::ConvertFrom( |
+ ui::EventSystemLocationFromNative(input.native_event())); |
+ } |
+ |
+ event->location_data = location_data.Pass(); |
} |
if (input.IsTouchEvent()) { |
@@ -140,6 +150,14 @@ TypeConverter<EventPtr, scoped_ptr<ui::Event> >::ConvertTo( |
scoped_ptr<ui::Event> ui_event; |
ui::EventType ui_event_type = |
TypeConverter<EventType, ui::EventType>::ConvertTo(input->action); |
+ |
+ gfx::Point location; |
+ if (!input->location_data.is_null() && |
+ !input->location_data->in_view_location.is_null()) { |
+ location = TypeConverter<PointPtr, gfx::Point>::ConvertTo( |
+ input->location_data->in_view_location); |
+ } |
+ |
switch (input->action) { |
case ui::ET_KEY_PRESSED: |
case ui::ET_KEY_RELEASED: |
@@ -163,8 +181,6 @@ TypeConverter<EventPtr, scoped_ptr<ui::Event> >::ConvertTo( |
case EVENT_TYPE_MOUSE_MOVED: |
case EVENT_TYPE_MOUSE_ENTERED: |
case EVENT_TYPE_MOUSE_EXITED: { |
- const gfx::PointF location(TypeConverter<PointPtr, gfx::Point>::ConvertTo( |
- input->location)); |
// TODO: last flags isn't right. Need to send changed_flags. |
ui_event.reset(new ui::MouseEvent( |
ui_event_type, |
@@ -175,8 +191,6 @@ TypeConverter<EventPtr, scoped_ptr<ui::Event> >::ConvertTo( |
break; |
} |
case EVENT_TYPE_MOUSEWHEEL: { |
- const gfx::PointF location(TypeConverter<PointPtr, gfx::Point>::ConvertTo( |
- input->location)); |
const gfx::Vector2d offset(input->wheel_data->x_offset, |
input->wheel_data->y_offset); |
ui_event.reset(new ui::MouseWheelEvent(offset, |
@@ -190,7 +204,6 @@ TypeConverter<EventPtr, scoped_ptr<ui::Event> >::ConvertTo( |
case EVENT_TYPE_TOUCH_PRESSED: |
case EVENT_TYPE_TOUCH_CANCELLED: |
case EVENT_TYPE_TOUCH_RELEASED: { |
- gfx::Point location(input->location->x, input->location->y); |
ui_event.reset(new ui::TouchEvent( |
ui_event_type, |
location, |