blob: 5b8d1521966ee759627c497a363cfc4c404dca39 [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.
#include "core/events/PointerEvent.h"
#include "core/dom/Element.h"
#include "core/events/EventDispatcher.h"
namespace blink {
PointerEvent::PointerEvent(const AtomicString& type,
const PointerEventInit& initializer)
: MouseEvent(type, initializer),
m_pointerId(0),
m_width(0),
m_height(0),
m_pressure(0),
m_tiltX(0),
m_tiltY(0),
m_tangentialPressure(0),
m_twist(0),
m_isPrimary(false) {
if (initializer.hasPointerId())
m_pointerId = initializer.pointerId();
if (initializer.hasWidth())
m_width = initializer.width();
if (initializer.hasHeight())
m_height = initializer.height();
if (initializer.hasPressure())
m_pressure = initializer.pressure();
if (initializer.hasTiltX())
m_tiltX = initializer.tiltX();
if (initializer.hasTiltY())
m_tiltY = initializer.tiltY();
if (initializer.hasTangentialPressure())
m_tangentialPressure = initializer.tangentialPressure();
if (initializer.hasTwist())
m_twist = initializer.twist();
if (initializer.hasPointerType())
m_pointerType = initializer.pointerType();
if (initializer.hasIsPrimary())
m_isPrimary = initializer.isPrimary();
if (initializer.hasCoalescedEvents()) {
for (auto coalescedEvent : initializer.coalescedEvents())
m_coalescedEvents.push_back(coalescedEvent);
}
}
bool PointerEvent::isMouseEvent() const {
return false;
}
bool PointerEvent::isPointerEvent() const {
return true;
}
EventDispatchMediator* PointerEvent::createMediator() {
return PointerEventDispatchMediator::create(this);
}
HeapVector<Member<PointerEvent>> PointerEvent::getCoalescedEvents() const {
return m_coalescedEvents;
}
DEFINE_TRACE(PointerEvent) {
visitor->trace(m_coalescedEvents);
MouseEvent::trace(visitor);
}
PointerEventDispatchMediator* PointerEventDispatchMediator::create(
PointerEvent* pointerEvent) {
return new PointerEventDispatchMediator(pointerEvent);
}
PointerEventDispatchMediator::PointerEventDispatchMediator(
PointerEvent* pointerEvent)
: EventDispatchMediator(pointerEvent) {}
PointerEvent& PointerEventDispatchMediator::event() const {
return toPointerEvent(EventDispatchMediator::event());
}
DispatchEventResult PointerEventDispatchMediator::dispatchEvent(
EventDispatcher& dispatcher) const {
if (event().type().isEmpty())
return DispatchEventResult::NotCanceled; // Shouldn't happen.
DCHECK(!event().target() || event().target() != event().relatedTarget());
event().eventPath().adjustForRelatedTarget(dispatcher.node(),
event().relatedTarget());
return dispatcher.dispatch();
}
} // namespace blink