blob: 7c7b65d7fa6e81a0fa428d03849b6184138d82e5 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stdint.h>
#include "pdf/ppapi_migration/input_event_conversions.h"
#include "base/notreached.h"
#include "pdf/ppapi_migration/geometry_conversions.h"
#include "ppapi/cpp/input_event.h"
#include "ppapi/cpp/var.h"
#include "ui/gfx/geometry/point_conversions.h"
namespace {
chrome_pdf::InputEventType GetEventType(const PP_InputEvent_Type& input_type) {
switch (input_type) {
case PP_INPUTEVENT_TYPE_MOUSEDOWN:
return chrome_pdf::InputEventType::kMouseDown;
case PP_INPUTEVENT_TYPE_MOUSEUP:
return chrome_pdf::InputEventType::kMouseUp;
case PP_INPUTEVENT_TYPE_MOUSEMOVE:
return chrome_pdf::InputEventType::kMouseMove;
case PP_INPUTEVENT_TYPE_MOUSEENTER:
return chrome_pdf::InputEventType::kMouseEnter;
case PP_INPUTEVENT_TYPE_MOUSELEAVE:
return chrome_pdf::InputEventType::kMouseLeave;
case PP_INPUTEVENT_TYPE_WHEEL:
return chrome_pdf::InputEventType::kWheel;
case PP_INPUTEVENT_TYPE_RAWKEYDOWN:
return chrome_pdf::InputEventType::kRawKeyDown;
case PP_INPUTEVENT_TYPE_KEYDOWN:
return chrome_pdf::InputEventType::kKeyDown;
case PP_INPUTEVENT_TYPE_KEYUP:
return chrome_pdf::InputEventType::kKeyUp;
case PP_INPUTEVENT_TYPE_CHAR:
return chrome_pdf::InputEventType::kChar;
case PP_INPUTEVENT_TYPE_CONTEXTMENU:
return chrome_pdf::InputEventType::kContextMenu;
case PP_INPUTEVENT_TYPE_IME_COMPOSITION_START:
return chrome_pdf::InputEventType::kImeCompositionStart;
case PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE:
return chrome_pdf::InputEventType::kImeCompositionUpdate;
case PP_INPUTEVENT_TYPE_IME_COMPOSITION_END:
return chrome_pdf::InputEventType::kImeCompositionEnd;
case PP_INPUTEVENT_TYPE_IME_TEXT:
return chrome_pdf::InputEventType::kImeText;
case PP_INPUTEVENT_TYPE_TOUCHSTART:
return chrome_pdf::InputEventType::kTouchStart;
case PP_INPUTEVENT_TYPE_TOUCHMOVE:
return chrome_pdf::InputEventType::kTouchMove;
case PP_INPUTEVENT_TYPE_TOUCHEND:
return chrome_pdf::InputEventType::kTouchEnd;
case PP_INPUTEVENT_TYPE_TOUCHCANCEL:
return chrome_pdf::InputEventType::kTouchCancel;
default:
NOTREACHED();
return chrome_pdf::InputEventType::kNone;
}
}
chrome_pdf::InputEventMouseButtonType GetInputEventMouseButtonType(
const PP_InputEvent_MouseButton& mouse_button_type) {
switch (mouse_button_type) {
case PP_INPUTEVENT_MOUSEBUTTON_LEFT:
return chrome_pdf::InputEventMouseButtonType::kLeft;
case PP_INPUTEVENT_MOUSEBUTTON_MIDDLE:
return chrome_pdf::InputEventMouseButtonType::kMiddle;
case PP_INPUTEVENT_MOUSEBUTTON_RIGHT:
return chrome_pdf::InputEventMouseButtonType::kRight;
default:
return chrome_pdf::InputEventMouseButtonType::kNone;
}
}
bool IsKeyboardEventType(chrome_pdf::InputEventType event_type) {
switch (event_type) {
case chrome_pdf::InputEventType::kRawKeyDown:
case chrome_pdf::InputEventType::kKeyDown:
case chrome_pdf::InputEventType::kKeyUp:
case chrome_pdf::InputEventType::kChar:
return true;
default:
return false;
}
}
bool IsMouseEventType(chrome_pdf::InputEventType event_type) {
switch (event_type) {
case chrome_pdf::InputEventType::kMouseDown:
case chrome_pdf::InputEventType::kMouseUp:
case chrome_pdf::InputEventType::kMouseMove:
case chrome_pdf::InputEventType::kMouseEnter:
case chrome_pdf::InputEventType::kMouseLeave:
return true;
default:
return false;
}
}
bool IsTouchEventType(chrome_pdf::InputEventType event_type) {
switch (event_type) {
case chrome_pdf::InputEventType::kTouchStart:
case chrome_pdf::InputEventType::kTouchMove:
case chrome_pdf::InputEventType::kTouchEnd:
case chrome_pdf::InputEventType::kTouchCancel:
return true;
default:
return false;
}
}
} // namespace
namespace chrome_pdf {
InputEvent::InputEvent(InputEventType event_type,
double time_stamp,
uint32_t modifiers)
: event_type_(event_type), time_stamp_(time_stamp), modifiers_(modifiers) {}
InputEvent::InputEvent(const InputEvent& other) = default;
InputEvent& InputEvent::operator=(const InputEvent& other) = default;
InputEvent::~InputEvent() = default;
KeyboardInputEvent::KeyboardInputEvent(InputEventType event_type,
double time_stamp,
uint32_t modifiers,
uint32_t keyboard_code,
const std::string& key_char)
: InputEvent(event_type, time_stamp, modifiers),
keyboard_code_(keyboard_code),
key_char_(key_char) {
DCHECK(IsKeyboardEventType(GetEventType()));
}
KeyboardInputEvent::KeyboardInputEvent(const KeyboardInputEvent& other) =
default;
KeyboardInputEvent& KeyboardInputEvent::operator=(
const KeyboardInputEvent& other) = default;
KeyboardInputEvent::~KeyboardInputEvent() = default;
MouseInputEvent::MouseInputEvent(InputEventType event_type,
double time_stamp,
uint32_t modifiers,
InputEventMouseButtonType mouse_button_type,
const gfx::Point& point,
int32_t click_count,
const gfx::Point& movement)
: InputEvent(event_type, time_stamp, modifiers),
mouse_button_type_(mouse_button_type),
point_(point),
click_count_(click_count),
movement_(movement) {
DCHECK(IsMouseEventType(GetEventType()));
}
MouseInputEvent::MouseInputEvent(const MouseInputEvent& other) = default;
MouseInputEvent& MouseInputEvent::operator=(const MouseInputEvent& other) =
default;
MouseInputEvent::~MouseInputEvent() = default;
TouchInputEvent::TouchInputEvent(InputEventType event_type,
double time_stamp,
uint32_t modifiers,
const gfx::PointF& target_touch_point,
int32_t touch_count)
: InputEvent(event_type, time_stamp, modifiers),
target_touch_point_(target_touch_point),
touch_count_(touch_count) {
DCHECK(IsTouchEventType(GetEventType()));
}
TouchInputEvent::TouchInputEvent(const TouchInputEvent& other) = default;
TouchInputEvent& TouchInputEvent::operator=(const TouchInputEvent& other) =
default;
TouchInputEvent::~TouchInputEvent() = default;
NoneInputEvent::NoneInputEvent()
: InputEvent(InputEventType::kNone, 0, kInputEventModifierNone) {}
NoneInputEvent::NoneInputEvent(const NoneInputEvent& other) = default;
NoneInputEvent& NoneInputEvent::operator=(const NoneInputEvent& other) =
default;
NoneInputEvent::~NoneInputEvent() = default;
KeyboardInputEvent GetKeyboardInputEvent(const pp::KeyboardInputEvent& event) {
return KeyboardInputEvent(GetEventType(event.GetType()), event.GetTimeStamp(),
event.GetModifiers(), event.GetKeyCode(),
event.GetCharacterText().AsString());
}
MouseInputEvent GetMouseInputEvent(const pp::MouseInputEvent& event) {
return MouseInputEvent(
GetEventType(event.GetType()), event.GetTimeStamp(), event.GetModifiers(),
GetInputEventMouseButtonType(event.GetButton()),
PointFromPPPoint(event.GetPosition()), event.GetClickCount(),
PointFromPPPoint(event.GetMovement()));
}
TouchInputEvent GetTouchInputEvent(const pp::TouchInputEvent& event) {
pp::FloatPoint point =
event.GetTouchByIndex(PP_TOUCHLIST_TYPE_TARGETTOUCHES, 0).position();
return TouchInputEvent(GetEventType(event.GetType()), event.GetTimeStamp(),
event.GetModifiers(), PointFFromPPFloatPoint(point),
event.GetTouchCount(PP_TOUCHLIST_TYPE_TARGETTOUCHES));
}
} // namespace chrome_pdf