| Index: mojo/services/html_viewer/blink_input_events_type_converters.cc
|
| diff --git a/mojo/services/html_viewer/blink_input_events_type_converters.cc b/mojo/services/html_viewer/blink_input_events_type_converters.cc
|
| index 542b13f77ef4398ee466fdc3c474b154ceda52d4..7ff8d9c1966de691a97893902cd723a2451bee02 100644
|
| --- a/mojo/services/html_viewer/blink_input_events_type_converters.cc
|
| +++ b/mojo/services/html_viewer/blink_input_events_type_converters.cc
|
| @@ -4,9 +4,10 @@
|
|
|
| #include "mojo/services/html_viewer/blink_input_events_type_converters.h"
|
|
|
| +#include "base/logging.h"
|
| #include "base/time/time.h"
|
| +#include "mojo/services/public/interfaces/input_events/input_event_constants.mojom.h"
|
| #include "third_party/WebKit/public/web/WebInputEvent.h"
|
| -#include "ui/events/event_constants.h"
|
|
|
| namespace mojo {
|
| namespace {
|
| @@ -17,48 +18,54 @@ const int kPixelsPerTick = 53;
|
| int EventFlagsToWebEventModifiers(int flags) {
|
| int modifiers = 0;
|
|
|
| - if (flags & ui::EF_SHIFT_DOWN)
|
| + if (flags & mojo::EVENT_FLAGS_SHIFT_DOWN)
|
| modifiers |= blink::WebInputEvent::ShiftKey;
|
| - if (flags & ui::EF_CONTROL_DOWN)
|
| + if (flags & mojo::EVENT_FLAGS_CONTROL_DOWN)
|
| modifiers |= blink::WebInputEvent::ControlKey;
|
| - if (flags & ui::EF_ALT_DOWN)
|
| + if (flags & mojo::EVENT_FLAGS_ALT_DOWN)
|
| modifiers |= blink::WebInputEvent::AltKey;
|
| // TODO(beng): MetaKey/META_MASK
|
| - if (flags & ui::EF_LEFT_MOUSE_BUTTON)
|
| + if (flags & mojo::EVENT_FLAGS_LEFT_MOUSE_BUTTON)
|
| modifiers |= blink::WebInputEvent::LeftButtonDown;
|
| - if (flags & ui::EF_MIDDLE_MOUSE_BUTTON)
|
| + if (flags & mojo::EVENT_FLAGS_MIDDLE_MOUSE_BUTTON)
|
| modifiers |= blink::WebInputEvent::MiddleButtonDown;
|
| - if (flags & ui::EF_RIGHT_MOUSE_BUTTON)
|
| + if (flags & mojo::EVENT_FLAGS_RIGHT_MOUSE_BUTTON)
|
| modifiers |= blink::WebInputEvent::RightButtonDown;
|
| - if (flags & ui::EF_CAPS_LOCK_DOWN)
|
| + if (flags & mojo::EVENT_FLAGS_CAPS_LOCK_DOWN)
|
| modifiers |= blink::WebInputEvent::CapsLockOn;
|
| return modifiers;
|
| }
|
|
|
| int EventFlagsToWebInputEventModifiers(int flags) {
|
| return
|
| - (flags & ui::EF_SHIFT_DOWN ? blink::WebInputEvent::ShiftKey : 0) |
|
| - (flags & ui::EF_CONTROL_DOWN ? blink::WebInputEvent::ControlKey : 0) |
|
| - (flags & ui::EF_CAPS_LOCK_DOWN ? blink::WebInputEvent::CapsLockOn : 0) |
|
| - (flags & ui::EF_ALT_DOWN ? blink::WebInputEvent::AltKey : 0);
|
| + (flags & mojo::EVENT_FLAGS_SHIFT_DOWN ?
|
| + blink::WebInputEvent::ShiftKey : 0) |
|
| + (flags & mojo::EVENT_FLAGS_CONTROL_DOWN ?
|
| + blink::WebInputEvent::ControlKey : 0) |
|
| + (flags & mojo::EVENT_FLAGS_CAPS_LOCK_DOWN ?
|
| + blink::WebInputEvent::CapsLockOn : 0) |
|
| + (flags & mojo::EVENT_FLAGS_ALT_DOWN ?
|
| + blink::WebInputEvent::AltKey : 0);
|
| }
|
|
|
| // TODO(erg): This function is extremely hacky and should only be accepted
|
| // since this is demo code which won't live very long. Actually calculating
|
| // this accurately would require the native X11 event so we could get accurate
|
| -// key codes via XKeyEventToWindowsKeyCode() and ui::GetCharacterFromXEvent().
|
| +// key codes via XKeyEventToWindowsKeyCode() and mojo::GetCharacterFromXEvent().
|
| // That option is closed to us, and thus, hack.
|
| int32_t MakeHackyText(int32_t key_code, int flags) {
|
| - if (!(flags & ui::EF_SHIFT_DOWN) && key_code >= 'A' && key_code <= 'Z')
|
| + if (!(flags & mojo::EVENT_FLAGS_SHIFT_DOWN) && key_code >= 'A' &&
|
| + key_code <= 'Z') {
|
| key_code = key_code + ('a' - 'A');
|
| + }
|
|
|
| return key_code;
|
| }
|
|
|
| int GetClickCount(int flags) {
|
| - if (flags & ui::EF_IS_TRIPLE_CLICK)
|
| + if (flags & mojo::MOUSE_EVENT_FLAGS_IS_TRIPLE_CLICK)
|
| return 3;
|
| - else if (flags & ui::EF_IS_DOUBLE_CLICK)
|
| + else if (flags & mojo::MOUSE_EVENT_FLAGS_IS_DOUBLE_CLICK)
|
| return 2;
|
|
|
| return 1;
|
| @@ -78,31 +85,42 @@ TypeConverter<EventPtr, scoped_ptr<blink::WebInputEvent> >::ConvertTo(
|
| event->action == EVENT_TYPE_MOUSE_MOVED ||
|
| event->action == EVENT_TYPE_MOUSE_DRAGGED) {
|
| scoped_ptr<blink::WebMouseEvent> web_event(new blink::WebMouseEvent);
|
| - web_event->x = event->location->x;
|
| - web_event->y = event->location->y;
|
| + web_event->x = event->location_data->in_view_location->x;
|
| + web_event->y = event->location_data->in_view_location->y;
|
| +
|
| + // TODO(erg): Remove this if check once we can rely on screen_location
|
| + // actually being passed to us. As written today, getting the screen
|
| + // location from ui::Event objects can only be done by querying the
|
| + // underlying native events, so all synthesized events don't have screen
|
| + // locations.
|
| + if (!event->location_data->screen_location.is_null()) {
|
| + web_event->globalX = event->location_data->screen_location->x;
|
| + web_event->globalY = event->location_data->screen_location->y;
|
| + }
|
|
|
| web_event->modifiers = EventFlagsToWebEventModifiers(event->flags);
|
| web_event->timeStampSeconds =
|
| base::TimeDelta::FromInternalValue(event->time_stamp).InSecondsF();
|
|
|
| web_event->button = blink::WebMouseEvent::ButtonNone;
|
| - if (event->flags & ui::EF_LEFT_MOUSE_BUTTON)
|
| + if (event->flags & mojo::EVENT_FLAGS_LEFT_MOUSE_BUTTON)
|
| web_event->button = blink::WebMouseEvent::ButtonLeft;
|
| - if (event->flags & ui::EF_MIDDLE_MOUSE_BUTTON)
|
| + if (event->flags & mojo::EVENT_FLAGS_MIDDLE_MOUSE_BUTTON)
|
| web_event->button = blink::WebMouseEvent::ButtonMiddle;
|
| - if (event->flags & ui::EF_RIGHT_MOUSE_BUTTON)
|
| + if (event->flags & mojo::EVENT_FLAGS_RIGHT_MOUSE_BUTTON)
|
| web_event->button = blink::WebMouseEvent::ButtonRight;
|
|
|
| switch (event->action) {
|
| case EVENT_TYPE_MOUSE_PRESSED:
|
| web_event->type = blink::WebInputEvent::MouseDown;
|
| - web_event->clickCount = GetClickCount(event->flags);
|
| break;
|
| case EVENT_TYPE_MOUSE_RELEASED:
|
| web_event->type = blink::WebInputEvent::MouseUp;
|
| - web_event->clickCount = GetClickCount(event->flags);
|
| break;
|
| case EVENT_TYPE_MOUSE_ENTERED:
|
| + web_event->type = blink::WebInputEvent::MouseLeave;
|
| + web_event->button = blink::WebMouseEvent::ButtonNone;
|
| + break;
|
| case EVENT_TYPE_MOUSE_EXITED:
|
| case EVENT_TYPE_MOUSE_MOVED:
|
| case EVENT_TYPE_MOUSE_DRAGGED:
|
| @@ -113,6 +131,8 @@ TypeConverter<EventPtr, scoped_ptr<blink::WebInputEvent> >::ConvertTo(
|
| break;
|
| }
|
|
|
| + web_event->clickCount = GetClickCount(event->flags);
|
| +
|
| return web_event.PassAs<blink::WebInputEvent>();
|
| } else if ((event->action == EVENT_TYPE_KEY_PRESSED ||
|
| event->action == EVENT_TYPE_KEY_RELEASED) &&
|
| @@ -163,10 +183,16 @@ TypeConverter<EventPtr, scoped_ptr<blink::WebInputEvent> >::ConvertTo(
|
| web_event->timeStampSeconds =
|
| base::TimeDelta::FromInternalValue(event->time_stamp).InSecondsF();
|
|
|
| - web_event->x = event->location->x;
|
| - web_event->y = event->location->y;
|
| + web_event->x = event->location_data->in_view_location->x;
|
| + web_event->y = event->location_data->in_view_location->y;
|
| +
|
| + // TODO(erg): Remove this null check as parallel to above.
|
| + if (!event->location_data->screen_location.is_null()) {
|
| + web_event->globalX = event->location_data->screen_location->x;
|
| + web_event->globalY = event->location_data->screen_location->y;
|
| + }
|
|
|
| - if ((event->flags & ui::EF_SHIFT_DOWN) != 0 &&
|
| + if ((event->flags & mojo::EVENT_FLAGS_SHIFT_DOWN) != 0 &&
|
| event->wheel_data->x_offset == 0) {
|
| web_event->deltaX = event->wheel_data->y_offset;
|
| web_event->deltaY = 0;
|
|
|