blob: 6a4eb7f5b44c5d0799544c53914e6adf7d159ff7 [file] [log] [blame]
// Copyright 2017 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 "public/platform/WebPointerEvent.h"
#include "public/platform/WebFloatPoint.h"
namespace blink {
namespace {
WebInputEvent::Type PointerEventTypeForTouchPointState(
WebTouchPoint::State state) {
switch (state) {
case WebTouchPoint::kStateReleased:
return WebInputEvent::Type::kPointerUp;
case WebTouchPoint::kStateCancelled:
return WebInputEvent::Type::kPointerCancel;
case WebTouchPoint::kStatePressed:
return WebInputEvent::Type::kPointerDown;
case WebTouchPoint::kStateMoved:
return WebInputEvent::Type::kPointerMove;
case WebTouchPoint::kStateStationary:
default:
NOTREACHED();
return WebInputEvent::Type::kUndefined;
}
}
} // namespace
WebPointerEvent::WebPointerEvent(const WebTouchEvent& touch_event,
const WebTouchPoint& touch_point)
: WebInputEvent(sizeof(WebPointerEvent)),
WebPointerProperties(touch_point),
// TODO(crbug.com/731725): This mapping needs a times by 2.
width(touch_point.radius_x),
height(touch_point.radius_y) {
// WebInutEvent attributes
SetFrameScale(touch_event.FrameScale());
SetFrameTranslate(touch_event.FrameTranslate());
SetTimeStampSeconds(touch_event.TimeStampSeconds());
SetType(PointerEventTypeForTouchPointState(touch_point.state));
SetModifiers(touch_event.GetModifiers());
// WebTouchEvent attributes
dispatch_type = touch_event.dispatch_type;
moved_beyond_slop_region = touch_event.moved_beyond_slop_region;
touch_start_or_first_touch_move = touch_event.touch_start_or_first_touch_move;
// WebTouchPoint attributes
rotation_angle = touch_point.rotation_angle;
}
WebPointerEvent::WebPointerEvent(WebInputEvent::Type type,
const WebMouseEvent& mouse_event)
: WebInputEvent(sizeof(WebPointerEvent)),
WebPointerProperties(mouse_event),
width(1),
height(1) {
DCHECK_GE(type, WebInputEvent::kPointerTypeFirst);
DCHECK_LE(type, WebInputEvent::kPointerTypeLast);
SetFrameScale(mouse_event.FrameScale());
SetFrameTranslate(mouse_event.FrameTranslate());
SetTimeStampSeconds(mouse_event.TimeStampSeconds());
SetType(type);
SetModifiers(mouse_event.GetModifiers());
}
WebPointerEvent WebPointerEvent::WebPointerEventInRootFrame() const {
WebPointerEvent transformed_event = *this;
transformed_event.width /= frame_scale_;
transformed_event.height /= frame_scale_;
transformed_event.movement_x /= frame_scale_;
transformed_event.movement_y /= frame_scale_;
transformed_event.position_in_widget_ =
WebFloatPoint((transformed_event.PositionInWidget().x / frame_scale_) +
frame_translate_.x,
(transformed_event.PositionInWidget().y / frame_scale_) +
frame_translate_.y);
return transformed_event;
}
} // namespace blink