1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
// 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_
|