QtFlickProvider::QtFlickProvider(QQuickWebView* viewItem, QQuickWebPage* pageItem) : QObject(viewItem) { ASSERT(viewItem); ASSERT(pageItem); QDeclarativeEngine* engine = qmlEngine(viewItem); QDeclarativeContext* context = qmlContext(viewItem); ASSERT(engine); ASSERT(context); QDeclarativeComponent component(engine, viewItem); // Create the internal Flickable instance dynamically. // We only use public QML API so that we do not depend // on private API of the QtDeclarative module. component.setData(QByteArrayLiteral("import QtQuick 2.0\nFlickable {}"), QUrl()); m_flickable = qobject_cast<QQuickItem*>(component.create(context)); QMetaProperty content = resolveMetaProperty(m_flickable, "contentItem"); m_contentItem = content.read(m_flickable).value<QQuickItem*>(); ASSERT(m_contentItem); // Resolve meta methods and properties of the Flickable instance. m_returnToBoundsMethod = resolveMetaMethod(m_flickable, "returnToBounds()"); m_cancelFlickMethod = resolveMetaMethod(m_flickable, "cancelFlick()"); m_contentWidth = resolveMetaProperty(m_flickable, "contentWidth"); m_contentHeight = resolveMetaProperty(m_flickable, "contentHeight"); m_contentX = resolveMetaProperty(m_flickable, "contentX"); m_contentY = resolveMetaProperty(m_flickable, "contentY"); m_moving = resolveMetaProperty(m_flickable, "moving"); m_dragging = resolveMetaProperty(m_flickable, "dragging"); m_flicking = resolveMetaProperty(m_flickable, "flicking"); m_flickableData = resolveMetaProperty(m_flickable, "flickableData"); // Set the viewItem as the parent of the flickable instance // and reparent the page so it is placed on the flickable contentItem. m_flickable->setParentItem(viewItem); pageItem->setParentItem(m_contentItem); // Propagate flickable signals. connect(m_flickable, SIGNAL(movementStarted()), SIGNAL(movementStarted()), Qt::DirectConnection); connect(m_flickable, SIGNAL(movementEnded()), SIGNAL(movementEnded()), Qt::DirectConnection); connect(m_flickable, SIGNAL(flickingChanged()), SIGNAL(flickingChanged()), Qt::DirectConnection); connect(m_flickable, SIGNAL(draggingChanged()), SIGNAL(draggingChanged()), Qt::DirectConnection); connect(m_flickable, SIGNAL(contentWidthChanged()), SIGNAL(contentWidthChanged()), Qt::DirectConnection); connect(m_flickable, SIGNAL(contentHeightChanged()), SIGNAL(contentHeightChanged()), Qt::DirectConnection); connect(m_flickable, SIGNAL(contentXChanged()), SIGNAL(contentXChanged()), Qt::DirectConnection); connect(m_flickable, SIGNAL(contentYChanged()), SIGNAL(contentYChanged()), Qt::DirectConnection); }
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); }
PageViewportControllerClientQt::PageViewportControllerClientQt(QQuickWebView* viewportItem, QQuickWebPage* pageItem) : m_viewportItem(viewportItem) , m_pageItem(pageItem) , m_scaleAnimation(new ScaleAnimation(this)) , m_pinchStartScale(-1) , m_lastCommittedScale(-1) , m_zoomOutScale(0) , m_isUserInteracting(false) , m_ignoreViewportChanges(false) { 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_viewportItem, SIGNAL(contentXChanged()), SLOT(pageItemPositionChanged())); connect(m_viewportItem, SIGNAL(contentYChanged()), SLOT(pageItemPositionChanged())); connect(m_scaleAnimation, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), SLOT(scaleAnimationStateChanged(QAbstractAnimation::State, QAbstractAnimation::State))); }