Changeset 116632 in webkit


Ignore:
Timestamp:
May 10, 2012 5:20:04 AM (12 years ago)
Author:
kenneth@webkit.org
Message:

[Qt] Implement fit-to-width behaviour
https://bugs.webkit.org/show_bug.cgi?id=86085

Reviewed by Simon Hausmann.

Source/WebCore:

Add a method to get the minimum scale factor that contains the content
without showing any chrome background.

  • dom/ViewportArguments.cpp:

(WebCore::computeMinimumScaleFactorForContentContained):
(WebCore):

  • dom/ViewportArguments.h:

(WebCore):

Source/WebKit2:

We don't restrict the minimum scale to the layout viewport anymore,
but instead update the minimum scale when the content size changes.

  • UIProcess/API/qt/qquickwebview.cpp:

(QQuickWebViewFlickablePrivate::didChangeViewportProperties):
(QQuickWebViewFlickablePrivate::didChangeContentsSize):

  • UIProcess/API/qt/qwebviewportinfo.cpp:

(QWebViewportInfo::minimumScale):
(QWebViewportInfo::maximumScale):

  • UIProcess/qt/QtViewportInteractionEngine.h:

(QtViewportInteractionEngine):

Location:
trunk/Source
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r116629 r116632  
     12012-05-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>
     2
     3        [Qt] Implement fit-to-width behaviour
     4        https://bugs.webkit.org/show_bug.cgi?id=86085
     5
     6        Reviewed by Simon Hausmann.
     7
     8        Add a method to get the minimum scale factor that contains the content
     9        without showing any chrome background.
     10
     11        * dom/ViewportArguments.cpp:
     12        (WebCore::computeMinimumScaleFactorForContentContained):
     13        (WebCore):
     14        * dom/ViewportArguments.h:
     15        (WebCore):
     16
    1172012-05-10  MORITA Hajime  <morrita@google.com>
    218
  • trunk/Source/WebCore/dom/ViewportArguments.cpp

    r115998 r116632  
    186186}
    187187
     188float computeMinimumScaleFactorForContentContained(const ViewportAttributes& result, const IntSize& viewportSize, const IntSize& contentsSize)
     189{
     190    float availableWidth = viewportSize.width();
     191    float availableHeight = viewportSize.height();
     192
     193    if (result.devicePixelRatio != 1.0) {
     194        availableWidth /= result.devicePixelRatio;
     195        availableHeight /= result.devicePixelRatio;
     196    }
     197
     198    return max<float>(result.minimumScale, max(availableWidth / contentsSize.width(), availableHeight / contentsSize.height()));
     199}
     200
    188201void restrictMinimumScaleFactorToViewportSize(ViewportAttributes& result, IntSize visibleViewport)
    189202{
  • trunk/Source/WebCore/dom/ViewportArguments.h

    r115998 r116632  
    110110void restrictMinimumScaleFactorToViewportSize(ViewportAttributes& result, IntSize visibleViewport);
    111111void restrictScaleFactorToInitialScaleIfNotUserScalable(ViewportAttributes& result);
     112float computeMinimumScaleFactorForContentContained(const ViewportAttributes& result, const IntSize& viewportSize, const IntSize& contentSize);
    112113
    113114void setViewportFeature(const String& keyString, const String& valueString, Document*, void* data);
  • trunk/Source/WebKit2/ChangeLog

    r116626 r116632  
     12012-05-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>
     2
     3        [Qt] Implement fit-to-width behaviour
     4        https://bugs.webkit.org/show_bug.cgi?id=86085
     5
     6        Reviewed by Simon Hausmann.
     7
     8        We don't restrict the minimum scale to the layout viewport anymore,
     9        but instead update the minimum scale when the content size changes.
     10
     11        * UIProcess/API/qt/qquickwebview.cpp:
     12        (QQuickWebViewFlickablePrivate::didChangeViewportProperties):
     13        (QQuickWebViewFlickablePrivate::didChangeContentsSize):
     14        * UIProcess/API/qt/qwebviewportinfo.cpp:
     15        (QWebViewportInfo::minimumScale):
     16        (QWebViewportInfo::maximumScale):
     17        * UIProcess/qt/QtViewportInteractionEngine.h:
     18        (QtViewportInteractionEngine):
     19
    1202012-05-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
    221
  • trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp

    r116516 r116632  
    858858    Q_Q(QQuickWebView);
    859859
    860     QSize viewportSize = q->boundingRect().size().toSize();
    861 
    862860    // FIXME: Revise these when implementing fit-to-width.
    863861    WebCore::ViewportAttributes attr = newAttributes;
    864     WebCore::restrictMinimumScaleFactorToViewportSize(attr, viewportSize);
    865862    WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable(attr);
    866863
     
    950947{
    951948    Q_Q(QQuickWebView);
     949    QSize viewportSize = q->boundingRect().size().toSize();
     950
    952951    pageView->setContentsSize(newSize);
    953952    q->experimental()->viewportInfo()->didUpdateContentsSize();
     953
     954    float minimumScale = WebCore::computeMinimumScaleFactorForContentContained(attributes, viewportSize, newSize);
     955
     956    if (!qFuzzyCompare(minimumScale, attributes.minimumScale)) {
     957        interactionEngine->setCSSScaleBounds(minimumScale, attributes.maximumScale);
     958        q->experimental()->viewportInfo()->didUpdateViewportConstraints();
     959
     960        if (!interactionEngine->hadUserInteraction() && !pageIsSuspended)
     961            interactionEngine->setCSSScale(minimumScale);
     962    }
    954963}
    955964
  • trunk/Source/WebKit2/UIProcess/API/qt/qwebviewportinfo.cpp

    r115998 r116632  
    6363QVariant QWebViewportInfo::minimumScale() const
    6464{
     65    if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
     66        return interactionEngine->m_minimumScale;
     67
    6568    return m_webViewPrivate->attributes.minimumScale;
    6669}
     
    6871QVariant QWebViewportInfo::maximumScale() const
    6972{
     73    if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
     74        return interactionEngine->m_maximumScale;
     75
    7076    return m_webViewPrivate->attributes.maximumScale;
    7177}
  • trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h

    r115022 r116632  
    3535class QWheelEvent;
    3636QT_END_NAMESPACE
     37
     38class QWebViewportInfo;
    3739
    3840namespace WebKit {
     
    115117private:
    116118    friend class ViewportUpdateDeferrer;
    117     friend class QWebViewportInfo;
     119    friend class ::QWebViewportInfo;
    118120
    119121    QQuickWebView* const m_viewport;
Note: See TracChangeset for help on using the changeset viewer.