Changeset 184681 in webkit


Ignore:
Timestamp:
May 20, 2015 5:52:33 PM (9 years ago)
Author:
enrica@apple.com
Message:

[iOS] Using CSS viewport units causes incorrect layout.
https://bugs.webkit.org/show_bug.cgi?id=145225
rdar://problem/20924495

Reviewed by Benjamin Poulain.

Source/WebCore:

  • page/ViewportConfiguration.cpp:

(WebCore::ViewportConfiguration::initialScaleFromSize):
(WebCore::ViewportConfiguration::initialScale):
(WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):

  • page/ViewportConfiguration.h:

(WebCore::ViewportConfiguration::initialScaleFromSize):
(WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):

Source/WebKit2:

  • WebProcess/WebPage/ios/WebPageIOS.mm:

(WebKit::WebPage::updateViewportSizeForCSSViewportUnits):

Location:
trunk/Source
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r184676 r184681  
     12015-05-20  Enrica Casucci  <enrica@apple.com>
     2
     3        [iOS] Using CSS viewport units causes incorrect layout.
     4        https://bugs.webkit.org/show_bug.cgi?id=145225
     5        rdar://problem/20924495
     6
     7        Reviewed by Benjamin Poulain.
     8
     9        * page/ViewportConfiguration.cpp:
     10        (WebCore::ViewportConfiguration::initialScaleFromSize):
     11        (WebCore::ViewportConfiguration::initialScale):
     12        (WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):
     13        * page/ViewportConfiguration.h:
     14        (WebCore::ViewportConfiguration::initialScaleFromSize):
     15        (WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):
     16
    1172015-05-20  Chris Fleizach  <cfleizach@apple.com>
    218
  • trunk/Source/WebCore/page/ViewportConfiguration.cpp

    r184654 r184681  
    137137}
    138138
    139 double ViewportConfiguration::initialScale() const
     139double ViewportConfiguration::initialScaleFromSize(double width, double height, bool shouldIgnoreScalingConstraints) const
    140140{
    141141    ASSERT(!constraintsAreAllRelative(m_configuration));
     
    143143    // If the document has specified its own initial scale, use it regardless.
    144144    // This is guaranteed to be sanity checked already, so no need for MIN/MAX.
    145     if (m_configuration.initialScaleIsSet && !shouldIgnoreScalingConstraints())
     145    if (m_configuration.initialScaleIsSet && !shouldIgnoreScalingConstraints)
    146146        return m_configuration.initialScale;
    147147
     
    149149    // We want a scale small enough to fit the document width-wise.
    150150    const FloatSize& minimumLayoutSize = m_minimumLayoutSize;
    151     double width = m_contentSize.width() > 0 ? m_contentSize.width() : layoutWidth();
    152151    double initialScale = 0;
    153152    if (width > 0 && !shouldIgnoreVerticalScalingConstraints())
     
    155154
    156155    // Prevent the initial scale from shrinking to a height smaller than our view's minimum height.
    157     double height = m_contentSize.height() > 0 ? m_contentSize.height() : layoutHeight();
    158156    if (height > 0 && height * initialScale < minimumLayoutSize.height() && !shouldIgnoreHorizontalScalingConstraints())
    159157        initialScale = minimumLayoutSize.height() / height;
    160     return std::min(std::max(initialScale, shouldIgnoreScalingConstraints() ? m_defaultConfiguration.minimumScale : m_configuration.minimumScale), m_configuration.maximumScale);
     158    return std::min(std::max(initialScale, shouldIgnoreScalingConstraints ? m_defaultConfiguration.minimumScale : m_configuration.minimumScale), m_configuration.maximumScale);
     159}
     160
     161double ViewportConfiguration::initialScale() const
     162{
     163    return initialScaleFromSize(m_contentSize.width() > 0 ? m_contentSize.width() : layoutWidth(), m_contentSize.height() > 0 ? m_contentSize.height() : layoutHeight(), shouldIgnoreScalingConstraints());
     164}
     165
     166double ViewportConfiguration::initialScaleIgnoringContentSize() const
     167{
     168    return initialScaleFromSize(layoutWidth(), layoutHeight(), false);
    161169}
    162170
  • trunk/Source/WebCore/page/ViewportConfiguration.h

    r184654 r184681  
    8585    WEBCORE_EXPORT IntSize layoutSize() const;
    8686    WEBCORE_EXPORT double initialScale() const;
     87    WEBCORE_EXPORT double initialScaleIgnoringContentSize() const;
    8788    WEBCORE_EXPORT double minimumScale() const;
    8889    double maximumScale() const { return m_configuration.maximumScale; }
     
    104105    void updateConfiguration();
    105106    double viewportArgumentsLength(double length) const;
     107    double initialScaleFromSize(double width, double height, bool shouldIgnoreScalingConstraints) const;
    106108    int layoutWidth() const;
    107109    int layoutHeight() const;
  • trunk/Source/WebKit2/ChangeLog

    r184679 r184681  
     12015-05-20  Enrica Casucci  <enrica@apple.com>
     2
     3        [iOS] Using CSS viewport units causes incorrect layout.
     4        https://bugs.webkit.org/show_bug.cgi?id=145225
     5        rdar://problem/20924495
     6
     7        Reviewed by Benjamin Poulain.
     8
     9        * WebProcess/WebPage/ios/WebPageIOS.mm:
     10        (WebKit::WebPage::updateViewportSizeForCSSViewportUnits):
     11
    1122015-05-20  Tim Horton  <timothy_horton@apple.com>
    213
  • trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm

    r183909 r184681  
    27112711
    27122712    FrameView& frameView = *mainFrameView();
    2713     largestUnobscuredRect.scale(1 / m_viewportConfiguration.initialScale());
     2713    largestUnobscuredRect.scale(1 / m_viewportConfiguration.initialScaleIgnoringContentSize());
    27142714    frameView.setViewportSizeForCSSViewportUnits(roundedIntSize(largestUnobscuredRect));
    27152715}
Note: See TracChangeset for help on using the changeset viewer.