Index: webkit/plugins/ppapi/event_conversion.cc |
=================================================================== |
--- webkit/plugins/ppapi/event_conversion.cc (revision 90976) |
+++ webkit/plugins/ppapi/event_conversion.cc (working copy) |
@@ -4,6 +4,7 @@ |
#include "webkit/plugins/ppapi/event_conversion.h" |
+#include "base/basictypes.h" |
#include "base/i18n/char_iterator.h" |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
@@ -11,9 +12,11 @@ |
#include "base/utf_string_conversions.h" |
#include "base/utf_string_conversion_utils.h" |
#include "ppapi/c/pp_input_event.h" |
+#include "ppapi/shared_impl/input_event_impl.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
#include "webkit/plugins/ppapi/common.h" |
+using ppapi::InputEventData; |
using WebKit::WebInputEvent; |
using WebKit::WebKeyboardEvent; |
using WebKit::WebMouseEvent; |
@@ -57,30 +60,28 @@ |
// Generates a PP_InputEvent with the fields common to all events, as well as |
// the event type from the given web event. Event-specific fields will be zero |
// initialized. |
-PP_InputEvent GetPPEventWithCommonFieldsAndType( |
- const WebInputEvent& web_event) { |
- PP_InputEvent result; |
- memset(&result, 0, sizeof(PP_InputEvent)); |
- result.type = ConvertEventTypes(web_event.type); |
+InputEventData GetEventWithCommonFieldsAndType(const WebInputEvent& web_event) { |
+ InputEventData result; |
+ result.event_type = ConvertEventTypes(web_event.type); |
// TODO(brettw) http://code.google.com/p/chromium/issues/detail?id=57448 |
// This should use a tick count rather than the wall clock time that WebKit |
// uses. |
- result.time_stamp = web_event.timeStampSeconds; |
+ result.event_time_stamp = web_event.timeStampSeconds; |
return result; |
} |
void AppendKeyEvent(const WebInputEvent& event, |
- std::vector<PP_InputEvent>* pp_events) { |
+ std::vector<InputEventData>* result_events) { |
const WebKeyboardEvent& key_event = |
reinterpret_cast<const WebKeyboardEvent&>(event); |
dmichael (off chromium)
2011/07/01 20:04:19
static_cast
brettw
2011/07/01 21:14:52
Done.
|
- PP_InputEvent result = GetPPEventWithCommonFieldsAndType(event); |
- result.u.key.modifier = key_event.modifiers; |
- result.u.key.key_code = key_event.windowsKeyCode; |
- pp_events->push_back(result); |
+ InputEventData result = GetEventWithCommonFieldsAndType(event); |
+ result.event_modifiers = key_event.modifiers; |
+ result.key_code = key_event.windowsKeyCode; |
+ result_events->push_back(result); |
} |
void AppendCharEvent(const WebInputEvent& event, |
- std::vector<PP_InputEvent>* pp_events) { |
+ std::vector<InputEventData>* result_events) { |
const WebKeyboardEvent& key_event = |
reinterpret_cast<const WebKeyboardEvent&>(event); |
@@ -98,21 +99,17 @@ |
// Make a separate PP_InputEvent for each Unicode character in the input. |
base::i18n::UTF16CharIterator iter(key_event.text, utf16_char_count); |
while (!iter.end()) { |
- PP_InputEvent result = GetPPEventWithCommonFieldsAndType(event); |
- result.u.character.modifier = key_event.modifiers; |
+ InputEventData result = GetEventWithCommonFieldsAndType(event); |
+ result.event_modifiers = key_event.modifiers; |
+ base::WriteUnicodeCharacter(iter.get(), &result.character_text); |
- std::string utf8_char; |
- base::WriteUnicodeCharacter(iter.get(), &utf8_char); |
- base::strlcpy(result.u.character.text, utf8_char.c_str(), |
- sizeof(result.u.character.text)); |
- |
- pp_events->push_back(result); |
+ result_events->push_back(result); |
iter.Advance(); |
} |
} |
void AppendMouseEvent(const WebInputEvent& event, |
- std::vector<PP_InputEvent>* pp_events) { |
+ std::vector<InputEventData>* result_events) { |
COMPILE_ASSERT(static_cast<int>(WebMouseEvent::ButtonNone) == |
static_cast<int>(PP_INPUTEVENT_MOUSEBUTTON_NONE), |
MouseNone); |
@@ -128,29 +125,31 @@ |
const WebMouseEvent& mouse_event = |
reinterpret_cast<const WebMouseEvent&>(event); |
- PP_InputEvent result = GetPPEventWithCommonFieldsAndType(event); |
- result.u.mouse.modifier = mouse_event.modifiers; |
- result.u.mouse.button = |
- static_cast<PP_InputEvent_MouseButton>(mouse_event.button); |
- result.u.mouse.x = static_cast<float>(mouse_event.x); |
- result.u.mouse.y = static_cast<float>(mouse_event.y); |
- result.u.mouse.click_count = mouse_event.clickCount; |
- pp_events->push_back(result); |
+ InputEventData result = GetEventWithCommonFieldsAndType(event); |
+ result.event_modifiers = mouse_event.modifiers; |
+ if (mouse_event.type == WebInputEvent::MouseDown || |
+ mouse_event.type == WebInputEvent::MouseUp) { |
+ result.mouse_button = |
+ static_cast<PP_InputEvent_MouseButton>(mouse_event.button); |
+ } |
+ result.mouse_position.x = mouse_event.x; |
+ result.mouse_position.y = mouse_event.y; |
+ result.mouse_click_count = mouse_event.clickCount; |
+ result_events->push_back(result); |
} |
void AppendMouseWheelEvent(const WebInputEvent& event, |
- std::vector<PP_InputEvent>* pp_events) { |
+ std::vector<InputEventData>* result_events) { |
const WebMouseWheelEvent& mouse_wheel_event = |
reinterpret_cast<const WebMouseWheelEvent&>(event); |
- PP_InputEvent result = GetPPEventWithCommonFieldsAndType(event); |
- result.u.wheel.modifier = mouse_wheel_event.modifiers; |
- result.u.wheel.delta_x = mouse_wheel_event.deltaX; |
- result.u.wheel.delta_y = mouse_wheel_event.deltaY; |
- result.u.wheel.wheel_ticks_x = mouse_wheel_event.wheelTicksX; |
- result.u.wheel.wheel_ticks_y = mouse_wheel_event.wheelTicksY; |
- result.u.wheel.scroll_by_page = |
- BoolToPPBool(!!mouse_wheel_event.scrollByPage); |
- pp_events->push_back(result); |
+ InputEventData result = GetEventWithCommonFieldsAndType(event); |
+ result.event_modifiers = mouse_wheel_event.modifiers; |
+ result.wheel_delta.x = mouse_wheel_event.deltaX; |
+ result.wheel_delta.y = mouse_wheel_event.deltaY; |
+ result.wheel_ticks.x = mouse_wheel_event.wheelTicksX; |
+ result.wheel_ticks.y = mouse_wheel_event.wheelTicksY; |
+ result.wheel_scroll_by_page = mouse_wheel_event.scrollByPage; |
+ result_events->push_back(result); |
} |
WebKeyboardEvent* BuildKeyEvent(const PP_InputEvent& event) { |
@@ -244,12 +243,64 @@ |
return mouse_wheel_event; |
} |
+void InputEventDataToPPInputEvent(const InputEventData& data, |
+ PP_InputEvent* result) { |
+ memset(result, 0, sizeof(PP_InputEvent)); |
+ result->type = data.event_type; |
+ result->time_stamp = data.event_time_stamp; |
+ |
+ switch (data.event_type) { |
+ case PP_INPUTEVENT_TYPE_MOUSEDOWN: |
+ case PP_INPUTEVENT_TYPE_MOUSEUP: |
+ case PP_INPUTEVENT_TYPE_MOUSEMOVE: |
+ case PP_INPUTEVENT_TYPE_MOUSEENTER: |
+ case PP_INPUTEVENT_TYPE_MOUSELEAVE: |
+ case PP_INPUTEVENT_TYPE_CONTEXTMENU: |
+ result->u.mouse.modifier = data.event_modifiers; |
+ result->u.mouse.button = data.mouse_button; |
+ result->u.mouse.x = static_cast<float>(data.mouse_position.x); |
+ result->u.mouse.y = static_cast<float>(data.mouse_position.y); |
+ result->u.mouse.click_count = data.mouse_click_count; |
+ break; |
+ case PP_INPUTEVENT_TYPE_MOUSEWHEEL: |
+ result->u.wheel.modifier = data.event_modifiers; |
+ result->u.wheel.delta_x = data.wheel_delta.x; |
+ result->u.wheel.delta_y = data.wheel_delta.y; |
+ result->u.wheel.wheel_ticks_x = data.wheel_ticks.x; |
+ result->u.wheel.wheel_ticks_y = data.wheel_ticks.y; |
+ break; |
+ case PP_INPUTEVENT_TYPE_RAWKEYDOWN: |
+ case PP_INPUTEVENT_TYPE_KEYDOWN: |
+ case PP_INPUTEVENT_TYPE_KEYUP: |
+ result->u.key.modifier = data.event_modifiers; |
+ result->u.key.key_code = data.key_code; |
+ break; |
+ case PP_INPUTEVENT_TYPE_CHAR: |
+ result->u.character.modifier = data.event_modifiers; |
+ base::strlcpy(result->u.character.text, data.character_text.c_str(), |
+ arraysize(result->u.character.text)); |
+ break; |
+ case PP_INPUTEVENT_TYPE_UNDEFINED: |
+ break; |
+ } |
+} |
+ |
} // namespace |
void CreatePPEvent(const WebInputEvent& event, |
std::vector<PP_InputEvent>* pp_events) { |
- pp_events->clear(); |
+ std::vector<InputEventData> data; |
+ CreateInputEventData(event, &data); |
+ pp_events->resize(data.size()); |
+ for (size_t i = 0; i < data.size(); i++) |
+ InputEventDataToPPInputEvent(data[i], &(*pp_events)[i]); |
+} |
+ |
+void CreateInputEventData(const WebInputEvent& event, |
+ std::vector<InputEventData>* result) { |
+ result->clear(); |
+ |
switch (event.type) { |
case WebInputEvent::MouseDown: |
case WebInputEvent::MouseUp: |
@@ -257,18 +308,18 @@ |
case WebInputEvent::MouseEnter: |
case WebInputEvent::MouseLeave: |
case WebInputEvent::ContextMenu: |
- AppendMouseEvent(event, pp_events); |
+ AppendMouseEvent(event, result); |
break; |
case WebInputEvent::MouseWheel: |
- AppendMouseWheelEvent(event, pp_events); |
+ AppendMouseWheelEvent(event, result); |
break; |
case WebInputEvent::RawKeyDown: |
case WebInputEvent::KeyDown: |
case WebInputEvent::KeyUp: |
- AppendKeyEvent(event, pp_events); |
+ AppendKeyEvent(event, result); |
break; |
case WebInputEvent::Char: |
- AppendCharEvent(event, pp_events); |
+ AppendCharEvent(event, result); |
break; |
case WebInputEvent::Undefined: |
default: |
@@ -305,5 +356,28 @@ |
return web_input_event.release(); |
} |
+PP_InputEvent_Class ClassifyInputEvent(WebInputEvent::Type type) { |
+ switch (type) { |
+ case WebInputEvent::MouseDown: |
+ case WebInputEvent::MouseUp: |
+ case WebInputEvent::MouseMove: |
+ case WebInputEvent::MouseEnter: |
+ case WebInputEvent::MouseLeave: |
+ case WebInputEvent::ContextMenu: |
+ return PP_INPUTEVENT_CLASS_MOUSE; |
+ case WebInputEvent::MouseWheel: |
+ return PP_INPUTEVENT_CLASS_WHEEL; |
+ case WebInputEvent::RawKeyDown: |
+ case WebInputEvent::KeyDown: |
+ case WebInputEvent::KeyUp: |
+ case WebInputEvent::Char: |
+ return PP_INPUTEVENT_CLASS_KEYBOARD; |
+ case WebInputEvent::Undefined: |
+ default: |
+ NOTREACHED(); |
+ return PP_InputEvent_Class(0); |
+ } |
+} |
+ |
} // namespace ppapi |
} // namespace webkit |