QtViewportHandler::QtViewportHandler(WebKit::WebPageProxy* proxy, QQuickWebView* viewportItem, QQuickWebPage* pageItem) : m_webPageProxy(proxy) , m_viewportItem(viewportItem) , m_pageItem(pageItem) , m_allowsUserScaling(false) , m_minimumScale(1) , m_maximumScale(1) , m_devicePixelRatio(1) , m_suspendCount(0) , m_hasSuspendedContent(false) , m_hadUserInteraction(false) , m_scaleAnimation(new ScaleAnimation(this)) , m_pinchStartScale(-1) , m_lastCommittedScale(-1) , m_zoomOutScale(0.0) { m_scaleAnimation->setDuration(kScaleAnimationDurationMillis); m_scaleAnimation->setEasingCurve(QEasingCurve::OutCubic); connect(m_viewportItem, SIGNAL(movementStarted()), SLOT(flickMoveStarted()), Qt::DirectConnection); connect(m_viewportItem, SIGNAL(movementEnded()), SLOT(flickMoveEnded()), Qt::DirectConnection); connect(m_scaleAnimation, SIGNAL(valueChanged(QVariant)), SLOT(scaleAnimationValueChanged(QVariant)), Qt::DirectConnection); connect(m_scaleAnimation, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), SLOT(scaleAnimationStateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), Qt::DirectConnection); }
QtViewportInteractionEngine::QtViewportInteractionEngine(QQuickWebView* viewport, QQuickWebPage* content) : m_viewport(viewport) , m_content(content) , m_suspendCount(0) , m_hasSuspendedContent(false) , m_hadUserInteraction(false) , m_scaleAnimation(new ScaleAnimation(this)) , m_pinchStartScale(-1) { reset(); connect(m_content, SIGNAL(widthChanged()), SLOT(itemSizeChanged()), Qt::DirectConnection); connect(m_content, SIGNAL(heightChanged()), SLOT(itemSizeChanged()), Qt::DirectConnection); connect(m_viewport, SIGNAL(movementStarted()), SLOT(flickableMoveStarted()), Qt::DirectConnection); connect(m_viewport, SIGNAL(movementEnded()), SLOT(flickableMoveEnded()), Qt::DirectConnection); connect(m_scaleAnimation, SIGNAL(valueChanged(QVariant)), SLOT(scaleAnimationValueChanged(QVariant)), Qt::DirectConnection); connect(m_scaleAnimation, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), SLOT(scaleAnimationStateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), Qt::DirectConnection); }
QtViewportInteractionEngine::QtViewportInteractionEngine(const QQuickWebView* viewport, QQuickWebPage* content) : m_viewport(viewport) , m_content(content) , m_suspendCount(0) , m_scaleAnimation(new ScaleAnimation(this)) , m_pinchStartScale(-1) { reset(); QScrollerProperties properties = scroller()->scrollerProperties(); // The QtPanGestureRecognizer is responsible for recognizing the gesture // thus we need to disable the drag start distance. properties.setScrollMetric(QScrollerProperties::DragStartDistance, 0.0); // Set some default QScroller constrains to mimic the physics engine of the N9 browser. properties.setScrollMetric(QScrollerProperties::AxisLockThreshold, 0.66); properties.setScrollMetric(QScrollerProperties::ScrollingCurve, QEasingCurve(QEasingCurve::OutExpo)); properties.setScrollMetric(QScrollerProperties::DecelerationFactor, 0.05); properties.setScrollMetric(QScrollerProperties::MaximumVelocity, 0.635); properties.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, 0.33); properties.setScrollMetric(QScrollerProperties::OvershootScrollDistanceFactor, 0.33); scroller()->setScrollerProperties(properties); connect(m_content, SIGNAL(widthChanged()), this, SLOT(itemSizeChanged()), Qt::DirectConnection); connect(m_content, SIGNAL(heightChanged()), this, SLOT(itemSizeChanged()), Qt::DirectConnection); connect(m_scaleAnimation, SIGNAL(valueChanged(QVariant)), SLOT(scaleAnimationValueChanged(QVariant)), Qt::DirectConnection); connect(m_scaleAnimation, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), SLOT(scaleAnimationStateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), Qt::DirectConnection); connect(scroller(), SIGNAL(stateChanged(QScroller::State)), SLOT(scrollStateChanged(QScroller::State)), Qt::DirectConnection); }