bool QtPinchGestureRecognizer::update(const QTouchEvent::TouchPoint& point1, const QTouchEvent::TouchPoint& point2)
{
    const qreal currentFingerDistance = QLineF(point1.screenPos(), point2.screenPos()).length();
    switch (m_state) {
    case NoGesture:
        m_initialFingerDistance = currentFingerDistance;
        m_state = GestureRecognitionStarted;
        return false;
    case GestureRecognitionStarted: {
        const qreal pinchDistance = qAbs(currentFingerDistance - m_initialFingerDistance);
        if (pinchDistance < pinchInitialTriggerDistanceThreshold)
            return false;
        m_state = GestureRecognized;
        if (viewportController())
            viewportController()->pinchGestureStarted(computePinchCenter(point1, point2));

        // We reset the initial span distance to the current distance of the
        // touch points in order to avoid the jump caused by the events which
        // were skipped between the recognition start and the actual recognition.
        m_initialFingerDistance = currentFingerDistance;

        // fall through
    }
    case GestureRecognized:
        const qreal totalScaleFactor = currentFingerDistance / m_initialFingerDistance;
        const QPointF touchCenterInViewCoordinates = computePinchCenter(point1, point2);
        if (viewportController())
            viewportController()->pinchGestureRequestUpdate(touchCenterInViewCoordinates, totalScaleFactor);
        return true;
        break;
    }

    ASSERT_NOT_REACHED();
    return false;
}
void QtPinchGestureRecognizer::cancel()
{
    if (m_state == NoGesture)
        return;

    if (viewportController())
        viewportController()->pinchGestureCancelled();
    reset();
}
void QtPinchGestureRecognizer::finish()
{
    if (m_state == NoGesture)
        return;

    if (viewportController())
        viewportController()->pinchGestureEnded();
    reset();
}
Ejemplo n.º 4
0
GLContext* ThreadedCompositor::glContext()
{
    if (m_context)
        return m_context.get();

#if PLATFORM(GBM)
    RELEASE_ASSERT(is<PlatformDisplayGBM>(PlatformDisplay::sharedDisplay()));
    m_surface = GBMSurface::create(IntSize(viewportController()->visibleContentsRect().size()), *this);
    if (!m_surface)
        return 0;

    setNativeSurfaceHandleForCompositing(0);
    m_context = m_surface->createGLContext();
#endif

#if PLATFORM(BCM_RPI)
    RELEASE_ASSERT(is<PlatformDisplayBCMRPi>(PlatformDisplay::sharedDisplay()));

    IntSize size(viewportController()->visibleContentsRect().size());
    m_surface = downcast<PlatformDisplayBCMRPi>(PlatformDisplay::sharedDisplay()).createSurface(size,
        m_compositingManager.createBCMElement(size.width(), size.height()));
    if (!m_surface)
        return nullptr;

    setNativeSurfaceHandleForCompositing(0);
    m_context = m_surface->createGLContext();
#endif

#if PLATFORM(BCM_NEXUS)
    RELEASE_ASSERT(is<PlatformDisplayBCMNexus>(PlatformDisplay::sharedDisplay()));

    IntSize size(viewportController()->visibleContentsRect().size());
    m_surface = downcast<PlatformDisplayBCMNexus>(PlatformDisplay::sharedDisplay()).createSurface(size,
        m_compositingManager.createBCMNexusElement(size.width(), size.height()));
    if (!m_surface)
        return nullptr;

    setNativeSurfaceHandleForCompositing(0);
    m_context = m_surface->createGLContext();
#endif

#if PLATFORM(INTEL_CE)
    RELEASE_ASSERT(is<PlatformDisplayIntelCE>(PlatformDisplay::sharedDisplay()));

    IntSize size(viewportController()->visibleContentsRect().size());
    m_surface = downcast<PlatformDisplayIntelCE>(PlatformDisplay::sharedDisplay()).createSurface(size,
        m_compositingManager.createIntelCEElement(size.width(), size.height()));
    if (!m_surface)
        return nullptr;

    setNativeSurfaceHandleForCompositing(0);
    m_context = m_surface->createGLContext();
#endif

    return m_context.get();
}
Ejemplo n.º 5
0
void ThreadedCompositor::didChangeVisibleRect()
{
    FloatRect visibleRect = viewportController()->visibleContentsRect();
    float scale = viewportController()->pageScaleFactor();
    callOnMainThread([=] {
        m_client->setVisibleContentsRect(visibleRect, FloatPoint::zero(), scale);
    });

    scheduleDisplayImmediately();
}
Ejemplo n.º 6
0
void ThreadedCompositor::didChangeVisibleRect()
{
    FloatRect visibleRect = viewportController()->visibleContentsRect();
    float scale = viewportController()->pageScaleFactor();
    RefPtr<ThreadedCompositor> protector(this);
    RunLoop::main().dispatch([protector, visibleRect, scale] {
        protector->m_client->setVisibleContentsRect(visibleRect, FloatPoint::zero(), scale);
    });

    scheduleDisplayImmediately();
}
Ejemplo n.º 7
0
void ThreadedCompositor::renderLayerTree()
{
    if (!m_scene)
        return;

    if (!ensureGLContext())
        return;

    FloatRect clipRect(0, 0, m_viewportSize.width(), m_viewportSize.height());

    TransformationMatrix viewportTransform;
    FloatPoint scrollPostion = viewportController()->visibleContentsRect().location();
    viewportTransform.scale(viewportController()->pageScaleFactor() * m_deviceScaleFactor);
    viewportTransform.translate(-scrollPostion.x(), -scrollPostion.y());

    m_scene->paintToCurrentGLContext(viewportTransform, 1, clipRect, Color::white, false, scrollPostion);

    glContext()->swapBuffers();
}
Ejemplo n.º 8
0
void ThreadedCompositor::renderLayerTree()
{
    if (!m_scene)
        return;

    if (!ensureGLContext())
        return;

    FloatRect clipRect(0, 0, m_viewportSize.width(), m_viewportSize.height());

    TransformationMatrix viewportTransform;
    FloatPoint scrollPostion = viewportController()->visibleContentsRect().location();
    viewportTransform.scale(viewportController()->pageScaleFactor());
    viewportTransform.translate(-scrollPostion.x(), -scrollPostion.y());

    m_scene->paintToCurrentGLContext(viewportTransform, 1, clipRect, Color::white, false, scrollPostion);

#if PLATFORM(BCM_RPI)
    auto bufferExport = m_surface->lockFrontBuffer();
    m_compositingManager.commitBCMBuffer(bufferExport);
#endif

#if PLATFORM(BCM_NEXUS)
    auto bufferExport = m_surface->lockFrontBuffer();
    m_compositingManager.commitBCMNexusBuffer(bufferExport);
#endif

#if PLATFORM(INTEL_CE)
    auto bufferExport = m_surface->lockFrontBuffer();
    m_compositingManager.commitIntelCEBuffer(bufferExport);
#endif

    glContext()->swapBuffers();

#if PLATFORM(GBM)
    auto bufferExport = m_surface->lockFrontBuffer();
    m_compositingManager.commitPrimeBuffer(bufferExport);
#endif
}