Chromium Code Reviews| Index: Source/web/WebViewImpl.cpp |
| diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp |
| index 9b391cec8c9f0540418c969ed2b2ad10b806c74f..fe61b41580036964ec1c7c469faa1c898418d8f4 100644 |
| --- a/Source/web/WebViewImpl.cpp |
| +++ b/Source/web/WebViewImpl.cpp |
| @@ -399,6 +399,8 @@ WebViewImpl::WebViewImpl(WebViewClient* client) |
| , m_contextMenuAllowed(false) |
| , m_doingDragAndDrop(false) |
| , m_ignoreInputEvents(false) |
| + , m_emulatedDeviceScaleFactor(0) |
| + , m_rootLayerScale(0) |
|
aelias_OOO_until_Jul13
2013/10/01 08:08:51
Let's make rootLayerScale default to 1 instead.
dgozman
2013/10/01 15:26:34
Done.
|
| , m_suppressNextKeypressEvent(false) |
| , m_imeAcceptEvents(true) |
| , m_operationsAllowed(WebDragOperationNone) |
| @@ -1712,13 +1714,11 @@ void WebViewImpl::resize(const WebSize& newSize) |
| WebDevToolsAgentPrivate* agentPrivate = devToolsAgentPrivate(); |
| if (agentPrivate) |
| agentPrivate->webViewResized(newSize); |
| - if (!agentPrivate || !agentPrivate->metricsOverridden()) { |
| - WebFrameImpl* webFrame = mainFrameImpl(); |
| - if (webFrame->frameView()) { |
| - webFrame->frameView()->resize(m_size); |
| - if (m_pinchViewports) |
| - m_pinchViewports->setViewportSize(m_size); |
| - } |
| + WebFrameImpl* webFrame = mainFrameImpl(); |
| + if (webFrame->frameView()) { |
| + webFrame->frameView()->resize(m_size); |
| + if (m_pinchViewports) |
| + m_pinchViewports->setViewportSize(m_size); |
| } |
| if (settings()->viewportEnabled() && !m_fixedLayoutSizeLock) { |
| @@ -2912,7 +2912,7 @@ void WebViewImpl::setDeviceScaleFactor(float scaleFactor) |
| page()->setDeviceScaleFactor(scaleFactor); |
| if (m_layerTreeView) |
| - m_layerTreeView->setDeviceScaleFactor(scaleFactor); |
| + updateLayerTreeDeviceScaleFactor(); |
| } |
| bool WebViewImpl::isFixedLayoutModeEnabled() const |
| @@ -3762,6 +3762,17 @@ void WebViewImpl::setIgnoreInputEvents(bool newValue) |
| m_ignoreInputEvents = newValue; |
| } |
| +void WebViewImpl::setDeviceEmulationParameters(bool enabled, float deviceScaleFactor, float rootLayerScale) |
|
aelias_OOO_until_Jul13
2013/10/01 08:08:51
The other args are ignored when enabled = false wh
|
| +{ |
| + m_emulatedDeviceScaleFactor = enabled ? deviceScaleFactor : 0; |
| + m_rootLayerScale = enabled ? rootLayerScale : 0; |
| + if (mainFrameImpl()) |
| + mainFrameImpl()->setInputEventsScaleFactorForEmulation(enabled ? rootLayerScale : 1); |
| + if (page() && m_layerTreeView) |
| + updateLayerTreeDeviceScaleFactor(); |
| + updateRootLayerTransform(); |
| +} |
| + |
| void WebViewImpl::addPageOverlay(WebPageOverlay* overlay, int zOrder) |
| { |
| if (!m_pageOverlays) |
| @@ -3872,6 +3883,8 @@ void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer) |
| setIsAcceleratedCompositingActive(layer); |
| + updateRootLayerTransform(); |
| + |
| if (m_layerTreeView) { |
| if (m_rootLayer) { |
| m_layerTreeView->setRootLayer(*m_rootLayer); |
| @@ -3994,7 +4007,7 @@ void WebViewImpl::setIsAcceleratedCompositingActive(bool active) |
| bool visible = page()->visibilityState() == PageVisibilityStateVisible; |
| m_layerTreeView->setVisible(visible); |
| - m_layerTreeView->setDeviceScaleFactor(page()->deviceScaleFactor()); |
| + updateLayerTreeDeviceScaleFactor(); |
| m_layerTreeView->setPageScaleFactorAndLimits(pageScaleFactor(), minimumPageScaleFactor(), maximumPageScaleFactor()); |
| m_layerTreeView->setBackgroundColor(backgroundColor()); |
| m_layerTreeView->setHasTransparentBackground(isTransparent()); |
| @@ -4079,6 +4092,25 @@ void WebViewImpl::updateLayerTreeViewport() |
| m_layerTreeView->setPageScaleFactorAndLimits(pageScaleFactor(), minimumPageScaleFactor(), maximumPageScaleFactor()); |
| } |
| +void WebViewImpl::updateLayerTreeDeviceScaleFactor() |
| +{ |
| + ASSERT(page()); |
| + ASSERT(m_layerTreeView); |
| + |
| + float deviceScaleFactor = m_emulatedDeviceScaleFactor ? m_emulatedDeviceScaleFactor : page()->deviceScaleFactor(); |
| + m_layerTreeView->setDeviceScaleFactor(deviceScaleFactor); |
| +} |
| + |
| +void WebViewImpl::updateRootLayerTransform() |
| +{ |
| + if (m_rootGraphicsLayer) { |
| + WebCore::TransformationMatrix transform; |
| + if (m_rootLayerScale) |
| + transform = transform.scale(m_rootLayerScale); |
| + m_rootGraphicsLayer->setChildrenTransform(transform); |
| + } |
| +} |
| + |
| void WebViewImpl::selectAutofillSuggestionAtIndex(unsigned listIndex) |
| { |
| if (m_autofillPopupClient && listIndex < m_autofillPopupClient->getSuggestionsCount()) |