Exemplo n.º 1
0
PlatformTouchEvent::PlatformTouchEvent(QTouchEvent* event)
{
    switch (event->type()) {
    case QEvent::TouchBegin: m_type = TouchStart; break;
    case QEvent::TouchUpdate: m_type = TouchMove; break;
    case QEvent::TouchEnd: m_type = TouchEnd; break;
    }
    const QList<QTouchEvent::TouchPoint>& points = event->touchPoints();
    for (int i = 0; i < points.count(); ++i)
        m_touchPoints.append(PlatformTouchPoint(points.at(i)));
}
PlatformTouchEvent::PlatformTouchEvent(QTouchEvent* event)
{
    switch (event->type()) {
    case QEvent::TouchBegin: m_type = TouchStart; break;
    case QEvent::TouchUpdate: m_type = TouchMove; break;
    case QEvent::TouchEnd: m_type = TouchEnd; break;
    }
    const QList<QTouchEvent::TouchPoint>& points = event->touchPoints();
    for (int i = 0; i < points.count(); ++i)
        m_touchPoints.append(PlatformTouchPoint(points.at(i)));

    m_ctrlKey = (event->modifiers() & Qt::ControlModifier);
    m_altKey = (event->modifiers() & Qt::AltModifier);
    m_shiftKey = (event->modifiers() & Qt::ShiftModifier);
    m_metaKey = (event->modifiers() & Qt::MetaModifier);
}
PlatformTouchEvent::PlatformTouchEvent(BlackBerry::Platform::TouchEvent* event)
    : PlatformEvent(touchEventType(event), event->shiftActive(), event->ctrlActive(), event->altActive(), false, currentTime())
    , m_rotation(0)
    , m_scale(1)
    , m_doubleTap(false)
    , m_touchHold(false)
{
    for (unsigned i = 0; i < event->m_points.size(); ++i)
        m_touchPoints.append(PlatformTouchPoint(event->m_points[i]));

    if (event->isPinch()) {
        m_rotation = event->pinchData().m_angle * 180 / M_PI;
        m_scale = event->pinchData().m_scale;
    }

    m_doubleTap = event->isDoubleTap();
    m_touchHold = event->isTouchHold();
}
PlatformTouchEvent::PlatformTouchEvent(JNIEnv* env, jint id, jobject touchData,
        jboolean shift, jboolean ctrl, jboolean alt, jboolean meta, jfloat timestamp)
{
    switch (id) {
    case com_sun_webkit_event_WCTouchEvent_TOUCH_START:
        m_type = PlatformEvent::TouchStart;
        break;
    case com_sun_webkit_event_WCTouchEvent_TOUCH_MOVE:
        m_type = PlatformEvent::TouchMove;
        break;
    case com_sun_webkit_event_WCTouchEvent_TOUCH_END:
        m_type = PlatformEvent::TouchEnd;
        break;
    }

    ASSERT(touchData);

    jint* p(static_cast<jint*>(env->GetDirectBufferAddress(touchData)));
    // each touch datum has 6 int (4-byte) items
    long count(env->GetDirectBufferCapacity(touchData) / 6 / 4);
    for (long i=0; i<count; i++) {
        jint id = *p++;
        jint state = *p++;
        jint x = *p++;
        jint y = *p++;
        jint sx = *p++;
        jint sy = *p++;
        m_touchPoints.append(PlatformTouchPoint(id,
                PlatformTouchPoint::State(state),
                IntPoint(x, y),
                IntPoint(sx, sy)));
    }

    m_timestamp = timestamp;
    m_modifiers = 0;
    if (shift)
        m_modifiers |= ShiftKey;
    if (ctrl)
        m_modifiers |= CtrlKey;
    if (alt)
        m_modifiers |= AltKey;
    if (meta)
        m_modifiers |= MetaKey;
}