Changeset 139177 in webkit


Ignore:
Timestamp:
Jan 9, 2013 1:37:34 AM (11 years ago)
Author:
mnaganov@chromium.org
Message:

[Chromium] When viewport is disabled, use display width in DIP pixels for the fallback width
https://bugs.webkit.org/show_bug.cgi?id=106021

This is to emulate 'UseWideViewport' setting of Android WebView properly.
'UseWideViewport' now corresponds to the 'viewportEnabled' setting.
When the value is false, "meta viewport" tag is ignored, and when calculating
layout width, display width in DIP pixels is used.

Reviewed by Adam Barth.

  • src/ChromeClientImpl.cpp:

(WebKit::ChromeClientImpl::dispatchViewportPropertiesDidChange):

  • src/WebViewImpl.cpp:

(WebKit::WebViewImpl::resize):
(WebKit::WebViewImpl::dipSize):
(WebKit):

  • src/WebViewImpl.h:

(WebCore):
(WebViewImpl):

Location:
trunk/Source/WebKit/chromium
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/chromium/ChangeLog

    r139165 r139177  
     12013-01-08  Mikhail Naganov  <mnaganov@chromium.org>
     2
     3        [Chromium] When viewport is disabled, use display width in DIP pixels for the fallback width
     4        https://bugs.webkit.org/show_bug.cgi?id=106021
     5
     6        This is to emulate 'UseWideViewport' setting of Android WebView properly.
     7        'UseWideViewport' now corresponds to the 'viewportEnabled' setting.
     8        When the value is false, "meta viewport" tag is ignored, and when calculating
     9        layout width, display width in DIP pixels is used.
     10
     11        Reviewed by Adam Barth.
     12
     13        * src/ChromeClientImpl.cpp:
     14        (WebKit::ChromeClientImpl::dispatchViewportPropertiesDidChange):
     15        * src/WebViewImpl.cpp:
     16        (WebKit::WebViewImpl::resize):
     17        (WebKit::WebViewImpl::dipSize):
     18        (WebKit):
     19        * src/WebViewImpl.h:
     20        (WebCore):
     21        (WebViewImpl):
     22
    1232013-01-08  Chris Rogers  <crogers@google.com>
    224
  • trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp

    r139078 r139177  
    621621{
    622622#if ENABLE(VIEWPORT)
    623     if (!m_webView->settings()->viewportEnabled() || !m_webView->isFixedLayoutModeEnabled() || !m_webView->client() || !m_webView->page())
     623    if (!m_webView->isFixedLayoutModeEnabled() || !m_webView->client() || !m_webView->page())
    624624        return;
    625625
     
    630630        return;
    631631
    632     Settings* settings = m_webView->page()->settings();
     632    int viewportWidthInDIPs = m_webView->dipSize().width();
     633    ViewportArguments effectiveViewportArguments;
     634    int effectiveFallbackWidth;
     635    if (m_webView->settings()->viewportEnabled()) {
     636        effectiveViewportArguments = arguments;
     637        effectiveFallbackWidth = std::max(m_webView->page()->settings()->layoutFallbackWidth(), viewportWidthInDIPs);
     638    } else {
     639        // This is for Android WebView to use layout width in device-independent pixels.
     640        // Once WebViewImpl on Android will start using DIP pixels size,
     641        // dispatchViewportPropertiesDidChange can bail out when viewport is disabled.
     642        effectiveViewportArguments = ViewportArguments();
     643        effectiveFallbackWidth = viewportWidthInDIPs;
     644    }
    633645    float devicePixelRatio = client->screenInfo().deviceScaleFactor;
    634646    // Call the common viewport computing logic in ViewportArguments.cpp.
    635647    ViewportAttributes computed = computeViewportAttributes(
    636         arguments, settings->layoutFallbackWidth(), deviceSize.width, deviceSize.height,
     648        effectiveViewportArguments, effectiveFallbackWidth, deviceSize.width, deviceSize.height,
    637649        devicePixelRatio, IntSize(deviceSize.width, deviceSize.height));
    638650
  • trunk/Source/WebKit/chromium/src/WebViewImpl.cpp

    r139139 r139177  
    15871587
    15881588#if ENABLE(VIEWPORT)
    1589     if (settings()->viewportEnabled()) {
    1590         // Fallback width is used to layout sites designed for desktop. The
    1591         // conventional size used by all mobile browsers is 980. When a mobile
    1592         // device has a particularly wide screen (such as a 10" tablet held in
    1593         // landscape), it can be larger.
    1594         const int standardFallbackWidth = 980;
    1595         int dpiIndependentViewportWidth = newSize.width / page()->deviceScaleFactor();
    1596         settings()->setLayoutFallbackWidth(std::max(standardFallbackWidth, dpiIndependentViewportWidth));
    1597 
    1598         ViewportArguments viewportArguments = mainFrameImpl()->frame()->document()->viewportArguments();
    1599         m_page->chrome()->client()->dispatchViewportPropertiesDidChange(viewportArguments);
    1600     }
     1589    ViewportArguments viewportArguments = mainFrameImpl()->frame()->document()->viewportArguments();
     1590    m_page->chrome()->client()->dispatchViewportPropertiesDidChange(viewportArguments);
    16011591#endif
    16021592
     
    31373127}
    31383128
     3129WebCore::FloatSize WebViewImpl::dipSize() const
     3130{
     3131    if (!page() || m_webSettings->applyDeviceScaleFactorInCompositor())
     3132        return FloatSize(m_size.width, m_size.height);
     3133
     3134    float deviceScaleFactor = page()->deviceScaleFactor();
     3135    return FloatSize(m_size.width / deviceScaleFactor, m_size.height / deviceScaleFactor);
     3136}
     3137
    31393138void WebViewImpl::performMediaPlayerAction(const WebMediaPlayerAction& action,
    31403139                                           const WebPoint& location)
  • trunk/Source/WebKit/chromium/src/WebViewImpl.h

    r139139 r139177  
    3636#include "DragClientImpl.h"
    3737#include "EditorClientImpl.h"
     38#include "FloatSize.h"
    3839#include "GraphicsContext3D.h"
    3940#include "GraphicsLayer.h"
     
    6566class Color;
    6667class DocumentLoader;
     68class FloatSize;
    6769class Frame;
    6870class GraphicsContext3D;
     
    239241    virtual WebSize fixedLayoutSize() const;
    240242    virtual void setFixedLayoutSize(const WebSize&);
     243    virtual WebCore::FloatSize dipSize() const;
    241244    virtual void enableAutoResizeMode(
    242245        const WebSize& minSize,
Note: See TracChangeset for help on using the changeset viewer.