OLD | NEW |
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 1442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1453 bool isAnimating; | 1453 bool isAnimating; |
1454 | 1454 |
1455 if (shouldZoomOut) { | 1455 if (shouldZoomOut) { |
1456 scale = minimumPageScaleFactor(); | 1456 scale = minimumPageScaleFactor(); |
1457 IntPoint targetPosition = mainFrameImpl()->frameView()->rootFrameToConte
nts(pointInRootFrame); | 1457 IntPoint targetPosition = mainFrameImpl()->frameView()->rootFrameToConte
nts(pointInRootFrame); |
1458 isAnimating = startPageScaleAnimation(targetPosition, true, scale, doubl
eTapZoomAnimationDurationInSeconds); | 1458 isAnimating = startPageScaleAnimation(targetPosition, true, scale, doubl
eTapZoomAnimationDurationInSeconds); |
1459 } else { | 1459 } else { |
1460 isAnimating = startPageScaleAnimation(scroll, false, scale, doubleTapZoo
mAnimationDurationInSeconds); | 1460 isAnimating = startPageScaleAnimation(scroll, false, scale, doubleTapZoo
mAnimationDurationInSeconds); |
1461 } | 1461 } |
1462 | 1462 |
| 1463 // TODO(dglazkov): The only reason why we're using isAnimating and not just
checking for |
| 1464 // m_layerTreeView->hasPendingPageScaleAnimation() is because of fake page s
cale animation plumbing |
| 1465 // for testing, which doesn't actually initiate a page scale animation. |
1463 if (isAnimating) { | 1466 if (isAnimating) { |
1464 m_doubleTapZoomPageScaleFactor = scale; | 1467 m_doubleTapZoomPageScaleFactor = scale; |
1465 m_doubleTapZoomPending = true; | 1468 m_doubleTapZoomPending = true; |
1466 } | 1469 } |
1467 } | 1470 } |
1468 | 1471 |
1469 void WebViewImpl::zoomToFindInPageRect(const WebRect& rectInRootFrame) | 1472 void WebViewImpl::zoomToFindInPageRect(const WebRect& rectInRootFrame) |
1470 { | 1473 { |
1471 if (!mainFrameImpl()) | 1474 if (!mainFrameImpl()) |
1472 return; | 1475 return; |
(...skipping 1470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2943 return; | 2946 return; |
2944 | 2947 |
2945 // If a text field has focus, we need to make sure the selection controller | 2948 // If a text field has focus, we need to make sure the selection controller |
2946 // knows to remove selection from it. Otherwise, the text field is still | 2949 // knows to remove selection from it. Otherwise, the text field is still |
2947 // processing keyboard events even though focus has been moved to the page a
nd | 2950 // processing keyboard events even though focus has been moved to the page a
nd |
2948 // keystrokes get eaten as a result. | 2951 // keystrokes get eaten as a result. |
2949 if (oldFocusedElement->isContentEditable() || oldFocusedElement->isTextFormC
ontrol()) | 2952 if (oldFocusedElement->isContentEditable() || oldFocusedElement->isTextFormC
ontrol()) |
2950 localFrame->selection().clear(); | 2953 localFrame->selection().clear(); |
2951 } | 2954 } |
2952 | 2955 |
2953 bool WebViewImpl::scrollFocusedNodeIntoRect(const WebRect& rectInViewport) | 2956 // TODO(dglazkov): Remove and replace with Node:hasEditableStyle. |
| 2957 // http://crbug.com/612560 |
| 2958 static bool isElementEditable(const Element* element) |
| 2959 { |
| 2960 if (element->isContentEditable()) |
| 2961 return true; |
| 2962 |
| 2963 if (element->isTextFormControl()) { |
| 2964 const HTMLTextFormControlElement* input = toHTMLTextFormControlElement(e
lement); |
| 2965 if (!input->isDisabledOrReadOnly()) |
| 2966 return true; |
| 2967 } |
| 2968 |
| 2969 return equalIgnoringCase(element->getAttribute(HTMLNames::roleAttr), "textbo
x"); |
| 2970 } |
| 2971 |
| 2972 bool WebViewImpl::scrollFocusedEditableElementIntoRect(const WebRect& rectInView
port) |
2954 { | 2973 { |
2955 LocalFrame* frame = page()->mainFrame() && page()->mainFrame()->isLocalFrame
() | 2974 LocalFrame* frame = page()->mainFrame() && page()->mainFrame()->isLocalFrame
() |
2956 ? page()->deprecatedLocalMainFrame() : nullptr; | 2975 ? page()->deprecatedLocalMainFrame() : nullptr; |
2957 Element* element = focusedElement(); | 2976 Element* element = focusedElement(); |
2958 if (!frame || !frame->view() || !element) | 2977 if (!frame || !frame->view() || !element) |
2959 return false; | 2978 return false; |
2960 | 2979 |
| 2980 if (!isElementEditable(element)) |
| 2981 return false; |
| 2982 |
2961 element->document().updateStyleAndLayoutIgnorePendingStylesheets(); | 2983 element->document().updateStyleAndLayoutIgnorePendingStylesheets(); |
2962 | 2984 |
2963 bool zoomInToLegibleScale = m_webSettings->autoZoomFocusedNodeToLegibleScale
() | 2985 bool zoomInToLegibleScale = m_webSettings->autoZoomFocusedNodeToLegibleScale
() |
2964 && !page()->frameHost().visualViewport().shouldDisableDesktopWorkarounds
(); | 2986 && !page()->frameHost().visualViewport().shouldDisableDesktopWorkarounds
(); |
2965 | 2987 |
2966 if (zoomInToLegibleScale) { | 2988 if (zoomInToLegibleScale) { |
2967 // When deciding whether to zoom in on a focused text box, we should dec
ide not to | 2989 // When deciding whether to zoom in on a focused text box, we should dec
ide not to |
2968 // zoom in if the user won't be able to zoom out. e.g if the textbox is
within a | 2990 // zoom in if the user won't be able to zoom out. e.g if the textbox is
within a |
2969 // touch-action: none container the user can't zoom back out. | 2991 // touch-action: none container the user can't zoom back out. |
2970 TouchAction action = TouchActionUtil::computeEffectiveTouchAction(*eleme
nt); | 2992 TouchAction action = TouchActionUtil::computeEffectiveTouchAction(*eleme
nt); |
2971 if (!(action & TouchActionPinchZoom)) | 2993 if (!(action & TouchActionPinchZoom)) |
2972 zoomInToLegibleScale = false; | 2994 zoomInToLegibleScale = false; |
2973 } | 2995 } |
2974 | 2996 |
2975 float scale; | 2997 float scale; |
2976 IntPoint scroll; | 2998 IntPoint scroll; |
2977 bool needAnimation; | 2999 bool needAnimation; |
2978 computeScaleAndScrollForFocusedNode(element, zoomInToLegibleScale, scale, sc
roll, needAnimation); | 3000 computeScaleAndScrollForFocusedNode(element, zoomInToLegibleScale, scale, sc
roll, needAnimation); |
2979 if (needAnimation) | 3001 if (needAnimation) |
2980 return startPageScaleAnimation(scroll, false, scale, scrollAndScaleAnima
tionDurationInSeconds); | 3002 startPageScaleAnimation(scroll, false, scale, scrollAndScaleAnimationDur
ationInSeconds); |
2981 | 3003 |
2982 return false; | 3004 return true; |
2983 } | 3005 } |
2984 | 3006 |
2985 void WebViewImpl::smoothScroll(int targetX, int targetY, long durationMs) | 3007 void WebViewImpl::smoothScroll(int targetX, int targetY, long durationMs) |
2986 { | 3008 { |
2987 IntPoint targetPosition(targetX, targetY); | 3009 IntPoint targetPosition(targetX, targetY); |
2988 startPageScaleAnimation(targetPosition, false, pageScaleFactor(), (double)du
rationMs / 1000); | 3010 startPageScaleAnimation(targetPosition, false, pageScaleFactor(), (double)du
rationMs / 1000); |
2989 } | 3011 } |
2990 | 3012 |
2991 void WebViewImpl::computeScaleAndScrollForFocusedNode(Node* focusedNode, bool zo
omInToLegibleScale, float& newScale, IntPoint& newScroll, bool& needAnimation) | 3013 void WebViewImpl::computeScaleAndScrollForFocusedNode(Node* focusedNode, bool zo
omInToLegibleScale, float& newScale, IntPoint& newScroll, bool& needAnimation) |
2992 { | 3014 { |
(...skipping 1541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4534 { | 4556 { |
4535 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa
ctor rather than | 4557 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa
ctor rather than |
4536 // page's scale factor, which can be 1 in use-zoom-for-dsf mode. | 4558 // page's scale factor, which can be 1 in use-zoom-for-dsf mode. |
4537 if (!page()) | 4559 if (!page()) |
4538 return 1; | 4560 return 1; |
4539 | 4561 |
4540 return page()->deviceScaleFactor(); | 4562 return page()->deviceScaleFactor(); |
4541 } | 4563 } |
4542 | 4564 |
4543 } // namespace blink | 4565 } // namespace blink |
OLD | NEW |