Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: Source/WebKit/chromium/src/ChromeClientImpl.cpp

Issue 14813025: Refactor viewport initialization logic out of WebViewImpl. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix webkit_unit_tests Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 { 599 {
600 if (!m_webView->client()) 600 if (!m_webView->client())
601 return; 601 return;
602 WebTextDirection textDirection = (dir == RTL) ? 602 WebTextDirection textDirection = (dir == RTL) ?
603 WebTextDirectionRightToLeft : 603 WebTextDirectionRightToLeft :
604 WebTextDirectionLeftToRight; 604 WebTextDirectionLeftToRight;
605 m_webView->client()->setToolTipText( 605 m_webView->client()->setToolTipText(
606 tooltipText, textDirection); 606 tooltipText, textDirection);
607 } 607 }
608 608
609
610 static float calculateTargetDensityDPIFactor(const ViewportArguments& arguments, float deviceScaleFactor)
611 {
612 if (arguments.deprecatedTargetDensityDPI == ViewportArguments::ValueDeviceDP I)
613 return 1.0f / deviceScaleFactor;
614
615 float targetDPI = -1.0f;
616 if (arguments.deprecatedTargetDensityDPI == ViewportArguments::ValueLowDPI)
617 targetDPI = 120.0f;
618 else if (arguments.deprecatedTargetDensityDPI == ViewportArguments::ValueMed iumDPI)
619 targetDPI = 160.0f;
620 else if (arguments.deprecatedTargetDensityDPI == ViewportArguments::ValueHig hDPI)
621 targetDPI = 240.0f;
622 else if (arguments.deprecatedTargetDensityDPI != ViewportArguments::ValueAut o)
623 targetDPI = arguments.deprecatedTargetDensityDPI;
624 return targetDPI > 0 ? (deviceScaleFactor * 120.0f) / targetDPI : 1.0f;
625 }
626
627 static float getLayoutWidthForNonWideViewport(const ViewportArguments& arguments , const FloatSize& deviceSize, float initialScale)
628 {
629 return arguments.zoom == ViewportArguments::ValueAuto ? deviceSize.width() : deviceSize.width() / initialScale;
630 }
631
632 void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportArgumen ts& arguments) const 609 void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportArgumen ts& arguments) const
633 { 610 {
634 if (!m_webView->settings()->viewportEnabled() || !m_webView->isFixedLayoutMo deEnabled() || !m_webView->client() || !m_webView->page()) 611 m_webView->updatePageDefinedPageScaleConstraints(arguments);
635 return;
636
637 IntSize viewportSize = m_webView->size();
638 float deviceScaleFactor = m_webView->client()->screenInfo().deviceScaleFacto r;
639
640 // If the window size has not been set yet don't attempt to set the viewport .
641 if (!viewportSize.width() || !viewportSize.height())
642 return;
643
644 ViewportAttributes computed = arguments.resolve(viewportSize, viewportSize, m_webView->page()->settings()->layoutFallbackWidth());
645 restrictScaleFactorToInitialScaleIfNotUserScalable(computed);
646
647 if (m_webView->ignoreViewportTagMaximumScale()) {
648 computed.maximumScale = max(computed.maximumScale, m_webView->maxPageSca leFactor);
649 computed.userScalable = true;
650 }
651 float initialScale = computed.initialScale;
652 if (arguments.zoom == ViewportArguments::ValueAuto && !m_webView->settingsIm pl()->initializeAtMinimumPageScale()) {
653 if (arguments.width == ViewportArguments::ValueAuto
654 || (m_webView->settingsImpl()->useWideViewport()
655 && arguments.width != ViewportArguments::ValueAuto && arguments. width != ViewportArguments::ValueDeviceWidth))
656 computed.initialScale = 1.0f;
657 }
658 if (m_webView->settingsImpl()->supportDeprecatedTargetDensityDPI()) {
659 float targetDensityDPIFactor = calculateTargetDensityDPIFactor(arguments , deviceScaleFactor);
660 computed.initialScale *= targetDensityDPIFactor;
661 computed.minimumScale *= targetDensityDPIFactor;
662 computed.maximumScale *= targetDensityDPIFactor;
663
664 if (m_webView->settingsImpl()->useWideViewport() && arguments.width == V iewportArguments::ValueAuto && arguments.zoom != 1.0f)
665 computed.layoutSize.setWidth(m_webView->page()->settings()->layoutFa llbackWidth());
666 else {
667 if (!m_webView->settingsImpl()->useWideViewport())
668 computed.layoutSize.setWidth(getLayoutWidthForNonWideViewport(ar guments, viewportSize, initialScale));
669 if (!m_webView->settingsImpl()->useWideViewport() || arguments.width == ViewportArguments::ValueAuto || arguments.width == ViewportArguments::ValueD eviceWidth)
670 computed.layoutSize.scale(1.0f / targetDensityDPIFactor);
671 }
672 }
673
674 m_webView->setInitialPageScaleFactor(computed.initialScale);
675 m_webView->setFixedLayoutSize(flooredIntSize(computed.layoutSize));
676 m_webView->setDeviceScaleFactor(deviceScaleFactor);
677 m_webView->setPageScaleFactorLimits(computed.minimumScale, computed.maximumS cale);
678 } 612 }
679 613
680 void ChromeClientImpl::print(Frame* frame) 614 void ChromeClientImpl::print(Frame* frame)
681 { 615 {
682 if (m_webView->client()) 616 if (m_webView->client())
683 m_webView->client()->printPage(WebFrameImpl::fromFrame(frame)); 617 m_webView->client()->printPage(WebFrameImpl::fromFrame(frame));
684 } 618 }
685 619
686 #if ENABLE(INPUT_TYPE_COLOR) 620 #if ENABLE(INPUT_TYPE_COLOR)
687 PassOwnPtr<ColorChooser> ChromeClientImpl::createColorChooser(ColorChooserClient * chooserClient, const Color&) 621 PassOwnPtr<ColorChooser> ChromeClientImpl::createColorChooser(ColorChooserClient * chooserClient, const Color&)
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 { 1034 {
1101 } 1035 }
1102 1036
1103 void NavigatorContentUtilsClientImpl::registerProtocolHandler(const String& sche me, const String& baseURL, const String& url, const String& title) 1037 void NavigatorContentUtilsClientImpl::registerProtocolHandler(const String& sche me, const String& baseURL, const String& url, const String& title)
1104 { 1038 {
1105 m_webView->client()->registerProtocolHandler(scheme, baseURL, url, title); 1039 m_webView->client()->registerProtocolHandler(scheme, baseURL, url, title);
1106 } 1040 }
1107 #endif 1041 #endif
1108 1042
1109 } // namespace WebKit 1043 } // namespace WebKit
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698