#include <limits>
#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+using base::StringAppendF;
+using base::SStringPrintf;
using blink::WebGestureEvent;
using blink::WebInputEvent;
using blink::WebKeyboardEvent;
using blink::WebMouseEvent;
using blink::WebMouseWheelEvent;
using blink::WebTouchEvent;
+using blink::WebTouchPoint;
using std::numeric_limits;
namespace content {
const int kInvalidTouchIndex = -1;
+void ApppendEventDetails(const WebKeyboardEvent& event, std::string* result) {
+ StringAppendF(result,
+ "{\n WinCode: %d\n NativeCode: %d\n IsSystem: %d\n"
+ " Text: %s\n UnmodifiedText: %s\n KeyIdentifier: %s\n}",
+ event.windowsKeyCode,
+ event.nativeKeyCode,
+ event.isSystemKey,
+ reinterpret_cast<const char*>(event.text),
+ reinterpret_cast<const char*>(event.unmodifiedText),
+ reinterpret_cast<const char*>(event.keyIdentifier));
+}
+
+void ApppendEventDetails(const WebMouseEvent& event, std::string* result) {
+ StringAppendF(result,
+ "{\n Button: %d\n Pos: (%d, %d)\n WindowPos: (%d, %d)\n"
+ " GlobalPos: (%d, %d)\n Movement: (%d, %d)\n Clicks: %d\n}",
+ event.button,
+ event.x,
+ event.y,
+ event.windowX,
+ event.windowY,
+ event.globalX,
+ event.globalY,
+ event.movementX,
+ event.movementY,
+ event.clickCount);
+}
+
+void ApppendEventDetails(const WebMouseWheelEvent& event, std::string* result) {
+ StringAppendF(result,
+ "{\n Delta: (%f, %f)\n WheelTicks: (%f, %f)\n Accel: (%f, %f)\n"
+ " ScrollByPage: %d\n HasPreciseScrollingDeltas: %d\n"
+ " Phase: (%d, %d)\n CanRubberband: (%d, %d)\n}",
+ event.deltaX,
+ event.deltaY,
+ event.wheelTicksX,
+ event.wheelTicksY,
+ event.accelerationRatioX,
+ event.accelerationRatioY,
+ event.scrollByPage,
+ event.hasPreciseScrollingDeltas,
+ event.phase,
+ event.momentumPhase,
+ event.canRubberbandLeft,
+ event.canRubberbandRight);
+}
+
+void ApppendEventDetails(const WebGestureEvent& event, std::string* result) {
+ StringAppendF(result,
+ "{\n Pos: (%d, %d)\n GlobalPos: (%d, %d)\n SourceDevice: %d\n"
+ " RawData: (%f, %f, %f, %f)\n}",
+ event.x,
+ event.y,
+ event.globalX,
+ event.globalY,
+ event.sourceDevice,
+ event.data.scrollUpdate.deltaX,
+ event.data.scrollUpdate.deltaY,
+ event.data.scrollUpdate.velocityX,
+ event.data.scrollUpdate.velocityY);
+}
+
+void ApppendTouchPointDetails(const WebTouchPoint& point, std::string* result) {
+ StringAppendF(result,
+ " (ID: %d, State: %d, ScreenPos: (%f, %f), Pos: (%f, %f),"
+ " Radius: (%f, %f), Rot: %f, Force: %f),\n",
+ point.id,
+ point.state,
+ point.screenPosition.x,
+ point.screenPosition.y,
+ point.position.x,
+ point.position.y,
+ point.radiusX,
+ point.radiusY,
+ point.rotationAngle,
+ point.force);
+}
+
+void ApppendEventDetails(const WebTouchEvent& event, std::string* result) {
+ StringAppendF(result,
+ "{\n Touches: %u, Cancelable: %d,\n[\n",
+ event.touchesLength,
+ event.cancelable);
+ for (unsigned i = 0; i < event.touchesLength; ++i)
+ ApppendTouchPointDetails(event.touches[i], result);
+ result->append(" ]\n}");
+}
+
bool CanCoalesce(const WebKeyboardEvent& event_to_coalesce,
const WebKeyboardEvent& event) {
return false;
}
}
+struct WebInputEventToString {
+ template <class EventType>
+ bool Execute(const WebInputEvent& event, std::string* result) const {
+ SStringPrintf(result, "%s (Time: %lf, Modifiers: %d)\n",
+ WebInputEventTraits::GetName(event.type),
+ event.timeStampSeconds,
+ event.modifiers);
+ const EventType& typed_event = static_cast<const EventType&>(event);
+ ApppendEventDetails(typed_event, result);
+ return true;
+ }
+};
+
struct WebInputEventSize {
template <class EventType>
bool Execute(WebInputEvent::Type /* type */, size_t* type_size) const {
return "";
}
+std::string WebInputEventTraits::ToString(const WebInputEvent& event) {
+ std::string result;
+ Apply(WebInputEventToString(), event.type, event, &result);
+ return result;
+}
+
size_t WebInputEventTraits::GetSize(WebInputEvent::Type type) {
size_t size = 0;
Apply(WebInputEventSize(), type, type, &size);