Changeset 147529 in webkit
- Timestamp:
- Apr 3, 2013 2:19:11 AM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r147526 r147529 1 2013-04-03 Mikhail Naganov <mnaganov@chromium.org> 2 3 [Chromium] Implement target-densityDpi viewport property emulation 4 https://bugs.webkit.org/show_bug.cgi?id=110835 5 6 The value is only used in the Chromium port, when the corresponding 7 setting is enabled. 8 9 This is needed for supporting existing WebView-based applications 10 that rely on this property. 11 12 Reviewed by Adam Barth. 13 14 * dom/ViewportArguments.cpp: 15 (WebCore::findTargetDensityDPIValue): 16 (WebCore): 17 (WebCore::setViewportFeature): 18 * dom/ViewportArguments.h: 19 (WebCore::ViewportArguments::ViewportArguments): 20 (ViewportArguments): 21 (WebCore::ViewportArguments::operator==): 22 1 23 2013-04-03 Mike West <mkwst@chromium.org> 2 24 -
trunk/Source/WebCore/dom/ViewportArguments.cpp
r144949 r147529 383 383 } 384 384 385 static float findTargetDensityDPIValue(const String& keyString, const String& valueString, Document* document) 386 { 387 if (equalIgnoringCase(valueString, "device-dpi")) 388 return ViewportArguments::ValueDeviceDPI; 389 if (equalIgnoringCase(valueString, "low-dpi")) 390 return ViewportArguments::ValueLowDPI; 391 if (equalIgnoringCase(valueString, "medium-dpi")) 392 return ViewportArguments::ValueMediumDPI; 393 if (equalIgnoringCase(valueString, "high-dpi")) 394 return ViewportArguments::ValueHighDPI; 395 396 bool ok; 397 float value = numericPrefix(keyString, valueString, document, &ok); 398 if (!ok || value < 70 || value > 400) 399 return ViewportArguments::ValueAuto; 400 401 return value; 402 } 403 385 404 void setViewportFeature(const String& keyString, const String& valueString, Document* document, void* data) 386 405 { … … 399 418 else if (keyString == "user-scalable") 400 419 arguments->userZoom = findUserScalableValue(keyString, valueString, document); 401 else if (keyString == "target-densitydpi") 420 else if (keyString == "target-densitydpi") { 421 arguments->deprecatedTargetDensityDPI = findTargetDensityDPIValue(keyString, valueString, document); 402 422 reportViewportWarning(document, TargetDensityDpiUnsupported, String(), String()); 403 else423 } else 404 424 reportViewportWarning(document, UnrecognizedViewportArgumentKeyError, keyString, String()); 405 425 } -
trunk/Source/WebCore/dom/ViewportArguments.h
r139275 r147529 74 74 ValueDeviceHeight = -3, 75 75 ValuePortrait = -4, 76 ValueLandscape = -5 76 ValueLandscape = -5, 77 ValueDeviceDPI = -6, 78 ValueLowDPI = -7, 79 ValueMediumDPI = -8, 80 ValueHighDPI = -9 77 81 }; 78 82 … … 90 94 , userZoom(ValueAuto) 91 95 , orientation(ValueAuto) 96 , deprecatedTargetDensityDPI(ValueAuto) 92 97 { 93 98 } … … 107 112 float userZoom; 108 113 float orientation; 114 float deprecatedTargetDensityDPI; // Only used for Android WebView 109 115 110 116 bool operator==(const ViewportArguments& other) const … … 122 128 && maxZoom == other.maxZoom 123 129 && userZoom == other.userZoom 124 && orientation == other.orientation; 130 && orientation == other.orientation 131 && deprecatedTargetDensityDPI == other.deprecatedTargetDensityDPI; 125 132 } 126 133 -
trunk/Source/WebKit/chromium/ChangeLog
r147520 r147529 1 2013-04-03 Mikhail Naganov <mnaganov@chromium.org> 2 3 [Chromium] Implement target-densityDpi viewport property emulation 4 https://bugs.webkit.org/show_bug.cgi?id=110835 5 6 The value is only used in the Chromium port, when the corresponding 7 setting is enabled. 8 9 This is needed for supporting existing WebView-based applications 10 that rely on this property. 11 12 Reviewed by Adam Barth. 13 14 * public/WebSettings.h: 15 (WebSettings): 16 * src/ChromeClientImpl.cpp: 17 (WebKit): 18 (WebKit::calculateTargetDensityDPIFactor): 19 (WebKit::ChromeClientImpl::dispatchViewportPropertiesDidChange): 20 * src/WebSettingsImpl.cpp: 21 (WebKit::WebSettingsImpl::WebSettingsImpl): 22 (WebKit::WebSettingsImpl::setSupportDeprecatedTargetDensityDPI): 23 (WebKit): 24 * src/WebSettingsImpl.h: 25 (WebSettingsImpl): 26 (WebKit::WebSettingsImpl::supportDeprecatedTargetDensityDPI): 27 * tests/WebFrameTest.cpp: 28 * tests/data/viewport-target-densitydpi-high.html: Added. 29 1 30 2013-04-02 James Craig <james@cookiecrook.com> 2 31 -
trunk/Source/WebKit/chromium/public/WebSettings.h
r146917 r147529 154 154 virtual void setSmartInsertDeleteEnabled(bool) = 0; 155 155 virtual void setStandardFontFamily(const WebString&, UScriptCode = USCRIPT_COMMON) = 0; 156 virtual void setSupportDeprecatedTargetDensityDPI(bool) = 0; 156 157 virtual void setSupportsMultipleWindows(bool) = 0; 157 158 virtual void setSyncXHRInDocumentsEnabled(bool) = 0; -
trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp
r147357 r147529 625 625 } 626 626 627 628 static float calculateTargetDensityDPIFactor(const ViewportArguments& arguments, float deviceScaleFactor) 629 { 630 float targetDPI = -1.0f; 631 if (arguments.deprecatedTargetDensityDPI == ViewportArguments::ValueLowDPI) 632 targetDPI = 120.0f; 633 else if (arguments.deprecatedTargetDensityDPI == ViewportArguments::ValueMediumDPI) 634 targetDPI = 160.0f; 635 else if (arguments.deprecatedTargetDensityDPI == ViewportArguments::ValueHighDPI) 636 targetDPI = 240.0f; 637 else if (arguments.deprecatedTargetDensityDPI != ViewportArguments::ValueAuto && arguments.deprecatedTargetDensityDPI != ViewportArguments::ValueDeviceDPI) 638 targetDPI = arguments.deprecatedTargetDensityDPI; 639 return targetDPI > 0 ? (deviceScaleFactor * 120.0f) / targetDPI : 1.0f; 640 } 641 627 642 void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportArguments& arguments) const 628 643 { … … 647 662 if (arguments.zoom == ViewportArguments::ValueAuto && !m_webView->settingsImpl()->initializeAtMinimumPageScale()) 648 663 computed.initialScale = 1.0f; 664 665 if (m_webView->settingsImpl()->supportDeprecatedTargetDensityDPI()) { 666 float targetDensityDPIFactor = calculateTargetDensityDPIFactor(arguments, deviceScaleFactor); 667 computed.initialScale *= targetDensityDPIFactor; 668 computed.minimumScale *= targetDensityDPIFactor; 669 computed.maximumScale *= targetDensityDPIFactor; 670 computed.layoutSize.scale(1.0f / targetDensityDPIFactor); 671 } 649 672 650 673 m_webView->setInitialPageScaleFactor(computed.initialScale); -
trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp
r146924 r147529 58 58 , m_deferredImageDecodingEnabled(false) 59 59 , m_doubleTapToZoomEnabled(false) 60 , m_supportDeprecatedTargetDensityDPI(false) 60 61 { 61 62 ASSERT(settings); … … 195 196 } 196 197 198 void WebSettingsImpl::setSupportDeprecatedTargetDensityDPI(bool supportDeprecatedTargetDensityDPI) 199 { 200 m_supportDeprecatedTargetDensityDPI = supportDeprecatedTargetDensityDPI; 201 } 202 197 203 void WebSettingsImpl::setSupportsMultipleWindows(bool supportsMultipleWindows) 198 204 { -
trunk/Source/WebKit/chromium/src/WebSettingsImpl.h
r146917 r147529 150 150 virtual void setSmartInsertDeleteEnabled(bool); 151 151 virtual void setStandardFontFamily(const WebString&, UScriptCode = USCRIPT_COMMON); 152 virtual void setSupportDeprecatedTargetDensityDPI(bool); 152 153 virtual void setSupportsMultipleWindows(bool); 153 154 virtual void setSyncXHRInDocumentsEnabled(bool); … … 181 182 bool doubleTapToZoomEnabled() const { return m_doubleTapToZoomEnabled; } 182 183 bool perTilePaintingEnabled() const { return m_perTilePaintingEnabled; } 184 bool supportDeprecatedTargetDensityDPI() const { return m_supportDeprecatedTargetDensityDPI; } 183 185 184 186 private: … … 194 196 bool m_doubleTapToZoomEnabled; 195 197 bool m_perTilePaintingEnabled; 198 bool m_supportDeprecatedTargetDensityDPI; 196 199 }; 197 200 -
trunk/Source/WebKit/chromium/tests/WebFrameTest.cpp
r147357 r147529 574 574 EXPECT_EQ(980, webViewImpl->mainFrameImpl()->frameView()->contentsSize().width()); 575 575 } 576 577 TEST_F(WebFrameTest, targetDensityDpiHigh) 578 { 579 registerMockedHttpURLLoad("viewport-target-densitydpi-high.html"); 580 581 FixedLayoutTestWebViewClient client; 582 client.m_screenInfo.deviceScaleFactor = 4.0f / 3.0f; 583 int viewportWidth = 640; 584 int viewportHeight = 480; 585 586 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-target-densitydpi-high.html", true, 0, &client); 587 m_webView->settings()->setApplyDeviceScaleFactorInCompositor(true); 588 m_webView->settings()->setApplyPageScaleFactorInCompositor(true); 589 m_webView->enableFixedLayoutMode(true); 590 m_webView->settings()->setViewportEnabled(true); 591 m_webView->settings()->setSupportDeprecatedTargetDensityDPI(true); 592 m_webView->resize(WebSize(viewportWidth, viewportHeight)); 593 594 // high-dpi = 240, device-dpi = 160 595 EXPECT_EQ(viewportWidth * (240.0f / 160.0f), m_webView->fixedLayoutSize().width); 596 EXPECT_EQ(viewportHeight * (240.0f / 160.0f), m_webView->fixedLayoutSize().height); 597 EXPECT_EQ(160.0f / 240.0f, m_webView->pageScaleFactor()); 598 } 576 599 #endif 577 600
Note: See TracChangeset
for help on using the changeset viewer.