| 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 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 return; | 572 return; |
| 573 | 573 |
| 574 m_page->contextMenuController().clearContextMenu(); | 574 m_page->contextMenuController().clearContextMenu(); |
| 575 | 575 |
| 576 PlatformMouseEventBuilder pme(mainFrameImpl()->frameView(), event); | 576 PlatformMouseEventBuilder pme(mainFrameImpl()->frameView(), event); |
| 577 | 577 |
| 578 // Find the right target frame. See issue 1186900. | 578 // Find the right target frame. See issue 1186900. |
| 579 HitTestResult result = hitTestResultForWindowPos(pme.position()); | 579 HitTestResult result = hitTestResultForWindowPos(pme.position()); |
| 580 Frame* targetFrame; | 580 Frame* targetFrame; |
| 581 if (result.innerNonSharedNode()) | 581 if (result.innerNonSharedNode()) |
| 582 targetFrame = result.innerNonSharedNode()->document()->frame(); | 582 targetFrame = result.innerNonSharedNode()->document().frame(); |
| 583 else | 583 else |
| 584 targetFrame = m_page->focusController().focusedOrMainFrame(); | 584 targetFrame = m_page->focusController().focusedOrMainFrame(); |
| 585 | 585 |
| 586 #if OS(WINDOWS) | 586 #if OS(WINDOWS) |
| 587 targetFrame->view()->setCursor(pointerCursor()); | 587 targetFrame->view()->setCursor(pointerCursor()); |
| 588 #endif | 588 #endif |
| 589 | 589 |
| 590 m_contextMenuAllowed = true; | 590 m_contextMenuAllowed = true; |
| 591 targetFrame->eventHandler()->sendContextMenuEvent(pme); | 591 targetFrame->eventHandler()->sendContextMenuEvent(pme); |
| 592 m_contextMenuAllowed = false; | 592 m_contextMenuAllowed = false; |
| (...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1079 if (!node) | 1079 if (!node) |
| 1080 return WebRect(); | 1080 return WebRect(); |
| 1081 | 1081 |
| 1082 // Find the block type node based on the hit node. | 1082 // Find the block type node based on the hit node. |
| 1083 while (node && (!node->renderer() || node->renderer()->isInline())) | 1083 while (node && (!node->renderer() || node->renderer()->isInline())) |
| 1084 node = node->parentNode(); | 1084 node = node->parentNode(); |
| 1085 | 1085 |
| 1086 // Return the bounding box in the window coordinate system. | 1086 // Return the bounding box in the window coordinate system. |
| 1087 if (node) { | 1087 if (node) { |
| 1088 IntRect rect = node->Node::pixelSnappedBoundingBox(); | 1088 IntRect rect = node->Node::pixelSnappedBoundingBox(); |
| 1089 Frame* frame = node->document()->frame(); | 1089 Frame* frame = node->document().frame(); |
| 1090 return frame->view()->contentsToWindow(rect); | 1090 return frame->view()->contentsToWindow(rect); |
| 1091 } | 1091 } |
| 1092 return WebRect(); | 1092 return WebRect(); |
| 1093 } | 1093 } |
| 1094 | 1094 |
| 1095 WebRect WebViewImpl::widenRectWithinPageBounds(const WebRect& source, int target
Margin, int minimumMargin) | 1095 WebRect WebViewImpl::widenRectWithinPageBounds(const WebRect& source, int target
Margin, int minimumMargin) |
| 1096 { | 1096 { |
| 1097 WebSize maxSize; | 1097 WebSize maxSize; |
| 1098 if (mainFrame()) | 1098 if (mainFrame()) |
| 1099 maxSize = mainFrame()->contentsSize(); | 1099 maxSize = mainFrame()->contentsSize(); |
| (...skipping 1181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2281 if (!selection) | 2281 if (!selection) |
| 2282 return false; | 2282 return false; |
| 2283 | 2283 |
| 2284 if (selection->isCaret()) | 2284 if (selection->isCaret()) |
| 2285 anchor = focus = selection->absoluteCaretBounds(); | 2285 anchor = focus = selection->absoluteCaretBounds(); |
| 2286 else { | 2286 else { |
| 2287 RefPtr<Range> selectedRange = frame->selection()->toNormalizedRange(); | 2287 RefPtr<Range> selectedRange = frame->selection()->toNormalizedRange(); |
| 2288 if (!selectedRange) | 2288 if (!selectedRange) |
| 2289 return false; | 2289 return false; |
| 2290 | 2290 |
| 2291 RefPtr<Range> range(Range::create(selectedRange->startContainer()->docum
ent(), | 2291 RefPtr<Range> range(Range::create(&selectedRange->startContainer()->docu
ment(), |
| 2292 selectedRange->startContainer(), | 2292 selectedRange->startContainer(), |
| 2293 selectedRange->startOffset(), | 2293 selectedRange->startOffset(), |
| 2294 selectedRange->startContainer(), | 2294 selectedRange->startContainer(), |
| 2295 selectedRange->startOffset())); | 2295 selectedRange->startOffset())); |
| 2296 anchor = frame->editor().firstRectForRange(range.get()); | 2296 anchor = frame->editor().firstRectForRange(range.get()); |
| 2297 | 2297 |
| 2298 range = Range::create(selectedRange->endContainer()->document(), | 2298 range = Range::create(&selectedRange->endContainer()->document(), |
| 2299 selectedRange->endContainer(), | 2299 selectedRange->endContainer(), |
| 2300 selectedRange->endOffset(), | 2300 selectedRange->endOffset(), |
| 2301 selectedRange->endContainer(), | 2301 selectedRange->endContainer(), |
| 2302 selectedRange->endOffset()); | 2302 selectedRange->endOffset()); |
| 2303 focus = frame->editor().firstRectForRange(range.get()); | 2303 focus = frame->editor().firstRectForRange(range.get()); |
| 2304 } | 2304 } |
| 2305 | 2305 |
| 2306 IntRect scaledAnchor(frame->view()->contentsToWindow(anchor)); | 2306 IntRect scaledAnchor(frame->view()->contentsToWindow(anchor)); |
| 2307 IntRect scaledFocus(frame->view()->contentsToWindow(focus)); | 2307 IntRect scaledFocus(frame->view()->contentsToWindow(focus)); |
| 2308 scaledAnchor.scale(pageScaleFactor()); | 2308 scaledAnchor.scale(pageScaleFactor()); |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2664 float scale; | 2664 float scale; |
| 2665 IntPoint scroll; | 2665 IntPoint scroll; |
| 2666 bool needAnimation; | 2666 bool needAnimation; |
| 2667 computeScaleAndScrollForFocusedNode(element, scale, scroll, needAnimation); | 2667 computeScaleAndScrollForFocusedNode(element, scale, scroll, needAnimation); |
| 2668 if (needAnimation) | 2668 if (needAnimation) |
| 2669 startPageScaleAnimation(scroll, false, scale, scrollAndScaleAnimationDur
ationInSeconds); | 2669 startPageScaleAnimation(scroll, false, scale, scrollAndScaleAnimationDur
ationInSeconds); |
| 2670 } | 2670 } |
| 2671 | 2671 |
| 2672 void WebViewImpl::computeScaleAndScrollForFocusedNode(Node* focusedNode, float&
newScale, IntPoint& newScroll, bool& needAnimation) | 2672 void WebViewImpl::computeScaleAndScrollForFocusedNode(Node* focusedNode, float&
newScale, IntPoint& newScroll, bool& needAnimation) |
| 2673 { | 2673 { |
| 2674 focusedNode->document()->updateLayoutIgnorePendingStylesheets(); | 2674 focusedNode->document().updateLayoutIgnorePendingStylesheets(); |
| 2675 | 2675 |
| 2676 // 'caret' is rect encompassing the blinking cursor. | 2676 // 'caret' is rect encompassing the blinking cursor. |
| 2677 IntRect textboxRect = focusedNode->document()->view()->contentsToWindow(pixe
lSnappedIntRect(focusedNode->Node::boundingBox())); | 2677 IntRect textboxRect = focusedNode->document().view()->contentsToWindow(pixel
SnappedIntRect(focusedNode->Node::boundingBox())); |
| 2678 WebRect caret, unusedEnd; | 2678 WebRect caret, unusedEnd; |
| 2679 selectionBounds(caret, unusedEnd); | 2679 selectionBounds(caret, unusedEnd); |
| 2680 IntRect unscaledCaret = caret; | 2680 IntRect unscaledCaret = caret; |
| 2681 unscaledCaret.scale(1 / pageScaleFactor()); | 2681 unscaledCaret.scale(1 / pageScaleFactor()); |
| 2682 caret = unscaledCaret; | 2682 caret = unscaledCaret; |
| 2683 | 2683 |
| 2684 // Pick a scale which is reasonably readable. This is the scale at which | 2684 // Pick a scale which is reasonably readable. This is the scale at which |
| 2685 // the caret height will become minReadableCaretHeight (adjusted for dpi | 2685 // the caret height will become minReadableCaretHeight (adjusted for dpi |
| 2686 // and font scale factor). | 2686 // and font scale factor). |
| 2687 float targetScale = 1; | 2687 float targetScale = 1; |
| (...skipping 1439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4127 } | 4127 } |
| 4128 | 4128 |
| 4129 bool WebViewImpl::shouldDisableDesktopWorkarounds() | 4129 bool WebViewImpl::shouldDisableDesktopWorkarounds() |
| 4130 { | 4130 { |
| 4131 ViewportArguments arguments = mainFrameImpl()->frame()->document()->viewport
Arguments(); | 4131 ViewportArguments arguments = mainFrameImpl()->frame()->document()->viewport
Arguments(); |
| 4132 return arguments.width == ViewportArguments::ValueDeviceWidth || !arguments.
userZoom | 4132 return arguments.width == ViewportArguments::ValueDeviceWidth || !arguments.
userZoom |
| 4133 || (arguments.minZoom == arguments.maxZoom && arguments.minZoom != Viewp
ortArguments::ValueAuto); | 4133 || (arguments.minZoom == arguments.maxZoom && arguments.minZoom != Viewp
ortArguments::ValueAuto); |
| 4134 } | 4134 } |
| 4135 | 4135 |
| 4136 } // namespace WebKit | 4136 } // namespace WebKit |
| OLD | NEW |