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

Side by Side Diff: Source/web/WebViewImpl.cpp

Issue 584833003: Made double-tap zoom work in pinch virtual viewport mode. (Blink-side) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: TODO->FIXME Created 6 years, 3 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 2896 matching lines...) Expand 10 before | Expand all | Expand 10 after
2907 { 2907 {
2908 return m_pageScaleConstraintsSet.finalConstraints().clampToConstraints(scale Factor); 2908 return m_pageScaleConstraintsSet.finalConstraints().clampToConstraints(scale Factor);
2909 } 2909 }
2910 2910
2911 IntPoint WebViewImpl::clampOffsetAtScale(const IntPoint& offset, float scale) 2911 IntPoint WebViewImpl::clampOffsetAtScale(const IntPoint& offset, float scale)
2912 { 2912 {
2913 FrameView* view = mainFrameImpl()->frameView(); 2913 FrameView* view = mainFrameImpl()->frameView();
2914 if (!view) 2914 if (!view)
2915 return offset; 2915 return offset;
2916 2916
2917 return view->clampOffsetAtScale(offset, scale); 2917 if (!pinchVirtualViewportEnabled())
2918 return view->clampOffsetAtScale(offset, scale);
2919
2920 return page()->frameHost().pinchViewport().clampDocumentOffsetAtScale(offset , scale);
2918 } 2921 }
2919 2922
2920 bool WebViewImpl::pinchVirtualViewportEnabled() const 2923 bool WebViewImpl::pinchVirtualViewportEnabled() const
2921 { 2924 {
2922 ASSERT(page()); 2925 ASSERT(page());
2923 return page()->settings().pinchVirtualViewportEnabled(); 2926 return page()->settings().pinchVirtualViewportEnabled();
2924 } 2927 }
2925 2928
2926 void WebViewImpl::setPinchViewportOffset(const WebFloatPoint& offset) 2929 void WebViewImpl::setPinchViewportOffset(const WebFloatPoint& offset)
2927 { 2930 {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2966 // Order is important: pinch viewport location is clamped based on 2969 // Order is important: pinch viewport location is clamped based on
2967 // main frame scroll position and pinch viewport scale. 2970 // main frame scroll position and pinch viewport scale.
2968 2971
2969 view->setScrollOffset(mainFrameOrigin); 2972 view->setScrollOffset(mainFrameOrigin);
2970 2973
2971 setPageScaleFactor(scaleFactor); 2974 setPageScaleFactor(scaleFactor);
2972 2975
2973 page()->frameHost().pinchViewport().setLocation(pinchViewportOrigin); 2976 page()->frameHost().pinchViewport().setLocation(pinchViewportOrigin);
2974 } 2977 }
2975 2978
2979 void WebViewImpl::setPageScaleFactorAndLocation(float scaleFactor, const FloatPo int& location)
2980 {
2981 ASSERT(pinchVirtualViewportEnabled());
2982 ASSERT(page());
2983
2984 page()->frameHost().pinchViewport().setScaleAndLocation(
2985 clampPageScaleFactorToLimits(scaleFactor),
2986 location);
2987 deviceOrPageScaleFactorChanged();
2988 }
2989
2976 void WebViewImpl::setPageScaleFactor(float scaleFactor) 2990 void WebViewImpl::setPageScaleFactor(float scaleFactor)
2977 { 2991 {
2978 ASSERT(page()); 2992 ASSERT(page());
2979 2993
2980 scaleFactor = clampPageScaleFactorToLimits(scaleFactor); 2994 scaleFactor = clampPageScaleFactorToLimits(scaleFactor);
2981 if (scaleFactor == pageScaleFactor()) 2995 if (scaleFactor == pageScaleFactor())
2982 return; 2996 return;
2983 2997
2984 // TODO(bokan): Old-style pinch path. Remove when we're migrated to 2998 // FIXME(bokan): Old-style pinch path. Remove when we're migrated to
2985 // virtual viewport pinch. 2999 // virtual viewport pinch.
2986 if (!pinchVirtualViewportEnabled()) { 3000 if (!pinchVirtualViewportEnabled()) {
2987 IntPoint scrollOffset(mainFrame()->scrollOffset().width, mainFrame()->sc rollOffset().height); 3001 IntPoint scrollOffset(mainFrame()->scrollOffset().width, mainFrame()->sc rollOffset().height);
2988 setPageScaleFactor(scaleFactor, scrollOffset); 3002 setPageScaleFactor(scaleFactor, scrollOffset);
2989 return; 3003 return;
2990 } 3004 }
2991 3005
2992 page()->frameHost().pinchViewport().setScale(scaleFactor); 3006 page()->frameHost().pinchViewport().setScale(scaleFactor);
2993 deviceOrPageScaleFactorChanged(); 3007 deviceOrPageScaleFactorChanged();
2994 } 3008 }
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
3250 return m_pageScaleConstraintsSet.finalConstraints().minimumScale; 3264 return m_pageScaleConstraintsSet.finalConstraints().minimumScale;
3251 } 3265 }
3252 3266
3253 float WebViewImpl::maximumPageScaleFactor() const 3267 float WebViewImpl::maximumPageScaleFactor() const
3254 { 3268 {
3255 return m_pageScaleConstraintsSet.finalConstraints().maximumScale; 3269 return m_pageScaleConstraintsSet.finalConstraints().maximumScale;
3256 } 3270 }
3257 3271
3258 void WebViewImpl::resetScrollAndScaleState() 3272 void WebViewImpl::resetScrollAndScaleState()
3259 { 3273 {
3260 // TODO: This is done by the pinchViewport().reset() call below and can be r emoved when 3274 // FIXME(bokan): This is done by the pinchViewport().reset() call below and
3261 // the new pinch path is the only one. 3275 // can be removed when the new pinch path is the only one.
3262 setPageScaleFactor(1); 3276 setPageScaleFactor(1);
3263 updateMainFrameScrollPosition(IntPoint(), true); 3277 updateMainFrameScrollPosition(IntPoint(), true);
3264 page()->frameHost().pinchViewport().reset(); 3278 page()->frameHost().pinchViewport().reset();
3265 3279
3266 if (!page()->mainFrame()->isLocalFrame()) 3280 if (!page()->mainFrame()->isLocalFrame())
3267 return; 3281 return;
3268 3282
3269 // Clear out the values for the current history item. This will prevent the history item from clobbering the 3283 // Clear out the values for the current history item. This will prevent the history item from clobbering the
3270 // value determined during page scale initialization, which may be less than 1. 3284 // value determined during page scale initialization, which may be less than 1.
3271 page()->deprecatedLocalMainFrame()->loader().clearScrollPositionAndViewState (); 3285 page()->deprecatedLocalMainFrame()->loader().clearScrollPositionAndViewState ();
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
4186 4200
4187 if (frameView->scrollPosition() == scrollPosition) 4201 if (frameView->scrollPosition() == scrollPosition)
4188 return; 4202 return;
4189 4203
4190 bool oldProgrammaticScroll = frameView->inProgrammaticScroll(); 4204 bool oldProgrammaticScroll = frameView->inProgrammaticScroll();
4191 frameView->setInProgrammaticScroll(programmaticScroll); 4205 frameView->setInProgrammaticScroll(programmaticScroll);
4192 frameView->notifyScrollPositionChanged(scrollPosition); 4206 frameView->notifyScrollPositionChanged(scrollPosition);
4193 frameView->setInProgrammaticScroll(oldProgrammaticScroll); 4207 frameView->setInProgrammaticScroll(oldProgrammaticScroll);
4194 } 4208 }
4195 4209
4210 void WebViewImpl::applyViewportDeltas(
4211 const WebSize& pinchViewportDelta,
4212 const WebSize& mainFrameDelta,
4213 float pageScaleDelta,
4214 float topControlsDelta)
4215 {
4216 ASSERT(pinchVirtualViewportEnabled());
4217
4218 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
4219 return;
4220
4221 setTopControlsContentOffset(m_topControlsContentOffset + topControlsDelta);
4222
4223 FloatPoint pinchViewportOffset = page()->frameHost().pinchViewport().visible Rect().location();
4224 pinchViewportOffset.move(pinchViewportDelta.width, pinchViewportDelta.height );
4225 setPageScaleFactorAndLocation(pageScaleFactor() * pageScaleDelta, pinchViewp ortOffset);
4226
4227 if (pageScaleDelta != 1)
4228 m_doubleTapZoomPending = false;
4229
4230 IntPoint mainFrameScrollOffset = IntPoint(mainFrame()->scrollOffset());
4231 mainFrameScrollOffset.move(mainFrameDelta.width, mainFrameDelta.height);
4232 updateMainFrameScrollPosition(mainFrameScrollOffset, false);
4233 }
4234
4196 void WebViewImpl::applyViewportDeltas(const WebSize& scrollDelta, float pageScal eDelta, float topControlsDelta) 4235 void WebViewImpl::applyViewportDeltas(const WebSize& scrollDelta, float pageScal eDelta, float topControlsDelta)
4197 { 4236 {
4198 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 4237 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
4199 return; 4238 return;
4200 4239
4201 setTopControlsContentOffset(m_topControlsContentOffset + topControlsDelta); 4240 setTopControlsContentOffset(m_topControlsContentOffset + topControlsDelta);
4202 4241
4203 if (pinchVirtualViewportEnabled()) {
4204 if (pageScaleDelta != 1) {
4205 // When the virtual viewport is enabled, offsets are already set for us.
4206 setPageScaleFactor(pageScaleFactor() * pageScaleDelta);
4207 m_doubleTapZoomPending = false;
4208 }
4209
4210 return;
4211 }
4212
4213 // TODO(bokan): Old pinch path only - virtual viewport pinch scrolls are aut omatically updated via GraphicsLayer::DidScroll.
4214 // this should be removed once old pinch is removed.
4215 if (pageScaleDelta == 1) { 4242 if (pageScaleDelta == 1) {
4216 TRACE_EVENT_INSTANT2("blink", "WebViewImpl::applyScrollAndScale::scrollB y", "x", scrollDelta.width, "y", scrollDelta.height); 4243 TRACE_EVENT_INSTANT2("blink", "WebViewImpl::applyScrollAndScale::scrollB y", "x", scrollDelta.width, "y", scrollDelta.height);
4217 WebSize webScrollOffset = mainFrame()->scrollOffset(); 4244 WebSize webScrollOffset = mainFrame()->scrollOffset();
4218 IntPoint scrollOffset(webScrollOffset.width + scrollDelta.width, webScro llOffset.height + scrollDelta.height); 4245 IntPoint scrollOffset(webScrollOffset.width + scrollDelta.width, webScro llOffset.height + scrollDelta.height);
4219 updateMainFrameScrollPosition(scrollOffset, false); 4246 updateMainFrameScrollPosition(scrollOffset, false);
4220 } else { 4247 } else {
4221 // The page scale changed, so apply a scale and scroll in a single 4248 // The page scale changed, so apply a scale and scroll in a single
4222 // operation. 4249 // operation.
4223 WebSize scrollOffset = mainFrame()->scrollOffset(); 4250 WebSize scrollOffset = mainFrame()->scrollOffset();
4224 scrollOffset.width += scrollDelta.width; 4251 scrollOffset.width += scrollDelta.width;
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
4373 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints(); 4400 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints();
4374 4401
4375 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 4402 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
4376 return false; 4403 return false;
4377 4404
4378 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width 4405 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width
4379 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1); 4406 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1);
4380 } 4407 }
4381 4408
4382 } // namespace blink 4409 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698