// 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 "sky/engine/core/events/PointerEvent.h"

namespace blink {

static AtomicString stringForType(WebInputEvent::Type type)
{
    if (type == WebInputEvent::PointerDown)
        return EventTypeNames::pointerdown;
    if (type == WebInputEvent::PointerUp)
        return EventTypeNames::pointerup;
    if (type == WebInputEvent::PointerMove)
        return EventTypeNames::pointermove;
    if (type == WebInputEvent::PointerCancel)
        return EventTypeNames::pointercancel;
    ASSERT_NOT_REACHED();
    return AtomicString();
}

static String stringForKind(WebPointerEvent::Kind kind)
{
    switch (kind) {
    case WebPointerEvent::Touch:
        return "touch";
    case WebPointerEvent::Mouse:
        return "mouse";
    case WebPointerEvent::Stylus:
        return "stylus";
    }
    ASSERT_NOT_REACHED();
    return String();
}

PointerEvent::~PointerEvent()
{
}

const AtomicString& PointerEvent::interfaceName() const
{
    return EventNames::PointerEvent;
}

PointerEvent::PointerEvent()
    : PointerEvent(AtomicString(), PointerEventInit())
{
}

PointerEvent::PointerEvent(const WebPointerEvent& event)
    : Event(stringForType(event.type), true, true)
    , m_pointer(event.pointer)
    , m_kind(stringForKind(event.kind))
    , m_x(event.x)
    , m_y(event.y)
    , m_dx(0)
    , m_dy(0)
    , m_buttons(event.buttons)
    , m_down(false)
    , m_primary(false)
    , m_obscured(false)
    , m_pressure(event.pressure)
    , m_pressureMin(event.pressureMin)
    , m_pressureMax(event.pressureMax)
    , m_distance(event.distance)
    , m_distanceMin(event.distanceMin)
    , m_distanceMax(event.distanceMax)
    , m_radiusMajor(event.radiusMajor)
    , m_radiusMinor(event.radiusMinor)
    , m_radiusMin(event.radiusMin)
    , m_radiusMax(event.radiusMax)
    , m_orientation(event.orientation)
    , m_tilt(event.tilt)
{
    m_timeStamp = event.timeStampMS;
}

PointerEvent::PointerEvent(const AtomicString& type, const PointerEventInit& initializer)
    : Event(type, initializer)
    , m_pointer(initializer.pointer)
    , m_kind(initializer.kind)
    , m_x(initializer.x)
    , m_y(initializer.y)
    , m_dx(initializer.dx)
    , m_dy(initializer.dy)
    , m_buttons(initializer.buttons)
    , m_down(initializer.down)
    , m_primary(initializer.primary)
    , m_obscured(initializer.obscured)
    , m_pressure(initializer.pressure)
    , m_pressureMin(initializer.pressureMin)
    , m_pressureMax(initializer.pressureMax)
    , m_distance(initializer.distance)
    , m_distanceMin(initializer.distanceMin)
    , m_distanceMax(initializer.distanceMax)
    , m_radiusMajor(initializer.radiusMajor)
    , m_radiusMinor(initializer.radiusMinor)
    , m_radiusMin(initializer.radiusMin)
    , m_radiusMax(initializer.radiusMax)
    , m_orientation(initializer.orientation)
    , m_tilt(initializer.tilt)
{
}

} // namespace blink
