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

Unified Diff: Source/web/WebViewImpl.cpp

Issue 19281007: Allow zoom-in to a target rect when tapping multiple targets. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: Source/web/WebViewImpl.cpp
diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp
index eaa7eab729498ecb75673326c935e7de35609570..b740f41eb7a656fac47ef05e46f6342135d4d3fa 100644
--- a/Source/web/WebViewImpl.cpp
+++ b/Source/web/WebViewImpl.cpp
@@ -190,6 +190,8 @@ static const float doubleTapZoomContentMinimumMargin = 2;
static const double doubleTapZoomAnimationDurationInSeconds = 0.25;
static const float doubleTapZoomAlreadyLegibleRatio = 1.2f;
+static const double multipleTargetsZoomAnimationDurationInSeconds = 0.25;
+
// Constants for viewport anchoring on resize.
static const float viewportAnchorXCoord = 0.5f;
static const float viewportAnchorYCoord = 0;
@@ -773,7 +775,7 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
case WebInputEvent::GestureDoubleTap:
if (m_webSettings->doubleTapToZoomEnabled() && minimumPageScaleFactor() != maximumPageScaleFactor()) {
m_client->cancelScheduledContentIntents();
- animateZoomAroundPoint(platformEvent.position(), DoubleTap);
+ animateZoomToRect(WebRect(platformEvent.position().x(), platformEvent.position().y(), 0, 0), DoubleTap);
}
// GestureDoubleTap is currently only used by Android for zooming. For WebCore,
// GestureTap with tap count = 2 is used instead. So we drop GestureDoubleTap here.
@@ -1134,7 +1136,9 @@ void WebViewImpl::computeScaleAndScrollForHitRect(const WebRect& hitRect, AutoZo
int padding = (zoomType == DoubleTap) ? touchPointPadding : nonUserInitiatedPointPadding;
if (targetRect.isEmpty())
targetRect.width = targetRect.height = padding;
- WebRect rect = computeBlockBounds(targetRect, zoomType);
+ WebRect rect = targetRect;
+ if (zoomType != MultipleTargets)
+ rect = computeBlockBounds(targetRect, zoomType);
if (zoomType == FindInPage && rect.isEmpty()) {
// Keep current scale (no need to scroll as x,y will normally already
// be visible). FIXME: Revisit this if it isn't always true.
@@ -1274,30 +1278,41 @@ void WebViewImpl::enableTapHighlight(const PlatformGestureEvent& tapEvent)
m_linkHighlight = LinkHighlight::create(touchNode, this);
}
-void WebViewImpl::animateZoomAroundPoint(const IntPoint& point, AutoZoomType zoomType)
+bool WebViewImpl::animateZoomToRect(const IntRect& rect, AutoZoomType zoomType)
{
if (!mainFrameImpl())
- return;
+ return false;
float scale;
WebPoint scroll;
bool isAnchor;
- WebPoint webPoint = point;
- computeScaleAndScrollForHitRect(WebRect(webPoint.x, webPoint.y, 0, 0), zoomType, scale, scroll, isAnchor);
+ WebRect webRect = rect;
+ computeScaleAndScrollForHitRect(webRect, zoomType, scale, scroll, isAnchor);
+
+ if (zoomType == MultipleTargets && scale <= pageScaleFactor())
+ return false;
bool isDoubleTap = (zoomType == DoubleTap);
- double durationInSeconds = isDoubleTap ? doubleTapZoomAnimationDurationInSeconds : 0;
+ double durationInSeconds = isDoubleTap ? doubleTapZoomAnimationDurationInSeconds :
+ zoomType == MultipleTargets ? multipleTargetsZoomAnimationDurationInSeconds : 0;
+
bool isAnimating = startPageScaleAnimation(scroll, isAnchor, scale, durationInSeconds);
if (isDoubleTap && isAnimating) {
m_doubleTapZoomPageScaleFactor = scale;
m_doubleTapZoomPending = true;
}
+ return true;
}
void WebViewImpl::zoomToFindInPageRect(const WebRect& rect)
{
- animateZoomAroundPoint(IntRect(rect).center(), FindInPage);
+ animateZoomToRect(rect, FindInPage);
jochen (gone - plz use gerrit) 2013/07/16 10:05:24 this is a slight change in behavior, no? Is this i
+}
+
+bool WebViewImpl::zoomToMultipleTargetsRect(const WebRect& rect)
+{
+ return animateZoomToRect(rect, MultipleTargets);
}
void WebViewImpl::numberOfWheelEventHandlersChanged(unsigned numberOfWheelHandlers)
« no previous file with comments | « Source/web/WebViewImpl.h ('k') | public/web/WebView.h » ('j') | public/web/WebView.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698