blob: de54b4e6cffe83e6d161f61a5e31320ded13b0f0 [file] [log] [blame]
// Copyright 2015 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_EVENTS_POINTER_EVENT_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_EVENTS_POINTER_EVENT_H_
#include "third_party/blink/public/common/input/pointer_id.h"
#include "third_party/blink/renderer/core/events/mouse_event.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"
namespace blink {
class PointerEventInit;
class CORE_EXPORT PointerEvent : public MouseEvent {
DEFINE_WRAPPERTYPEINFO();
public:
static PointerEvent* Create(
const AtomicString& type,
const PointerEventInit* initializer,
base::TimeTicks platform_time_stamp = base::TimeTicks::Now(),
MouseEvent::SyntheticEventType synthetic_event_type =
kRealOrIndistinguishable,
WebMenuSourceType menu_source_type = kMenuSourceNone) {
return MakeGarbageCollected<PointerEvent>(
type, initializer, platform_time_stamp, synthetic_event_type,
menu_source_type);
}
PointerEvent(const AtomicString&,
const PointerEventInit*,
base::TimeTicks platform_time_stamp,
MouseEvent::SyntheticEventType synthetic_event_type,
WebMenuSourceType menu_source_type = kMenuSourceNone);
PointerId pointerId() const { return pointer_id_; }
double width() const { return width_; }
double height() const { return height_; }
float pressure() const { return pressure_; }
int32_t tiltX() const { return tilt_x_; }
int32_t tiltY() const { return tilt_y_; }
double azimuthAngle() const { return azimuth_angle_; }
double altitudeAngle() const { return altitude_angle_; }
float tangentialPressure() const { return tangential_pressure_; }
int32_t twist() const { return twist_; }
const String& pointerType() const { return pointer_type_; }
bool isPrimary() const { return is_primary_; }
int16_t button() const override { return RawButton(); }
bool IsMouseEvent() const override;
bool IsPointerEvent() const override;
double screenX() const override {
if (ShouldHaveIntegerCoordinates())
return MouseEvent::screenX();
return screen_location_.X();
}
double screenY() const override {
if (ShouldHaveIntegerCoordinates())
return MouseEvent::screenY();
return screen_location_.Y();
}
double clientX() const override {
if (ShouldHaveIntegerCoordinates())
return MouseEvent::clientX();
return client_location_.X();
}
double clientY() const override {
if (ShouldHaveIntegerCoordinates())
return MouseEvent::clientY();
return client_location_.Y();
}
double pageX() const override {
if (ShouldHaveIntegerCoordinates())
return MouseEvent::pageX();
return page_location_.X();
}
double pageY() const override {
if (ShouldHaveIntegerCoordinates())
return MouseEvent::pageY();
return page_location_.Y();
}
double offsetX() const override;
double offsetY() const override;
void ReceivedTarget() override;
// Always return null for fromElement and toElement because these fields
// (inherited from MouseEvents) are non-standard.
Node* fromElement() const final;
Node* toElement() const final;
HeapVector<Member<PointerEvent>> getCoalescedEvents();
HeapVector<Member<PointerEvent>> getPredictedEvents();
base::TimeTicks OldestPlatformTimeStamp() const;
DispatchEventResult DispatchEvent(EventDispatcher&) override;
void Trace(Visitor*) const override;
private:
bool ShouldHaveIntegerCoordinates() const;
PointerId pointer_id_;
double width_;
double height_;
float pressure_;
int32_t tilt_x_;
int32_t tilt_y_;
double azimuth_angle_;
double altitude_angle_;
float tangential_pressure_;
int32_t twist_;
String pointer_type_;
bool is_primary_;
bool coalesced_events_targets_dirty_;
bool predicted_events_targets_dirty_;
HeapVector<Member<PointerEvent>> coalesced_events_;
HeapVector<Member<PointerEvent>> predicted_events_;
};
template <>
struct DowncastTraits<PointerEvent> {
static bool AllowFrom(const Event& event) { return event.IsPointerEvent(); }
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_EVENTS_POINTER_EVENT_H_