| 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 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 686 | 686 |
| 687 PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), even
t); | 687 PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), even
t); |
| 688 | 688 |
| 689 // Handle link highlighting outside the main switch to avoid getting lost in
the | 689 // Handle link highlighting outside the main switch to avoid getting lost in
the |
| 690 // complicated set of cases handled below. | 690 // complicated set of cases handled below. |
| 691 switch (event.type) { | 691 switch (event.type) { |
| 692 case WebInputEvent::GestureTapDown: | 692 case WebInputEvent::GestureTapDown: |
| 693 // Queue a highlight animation, then hand off to regular handler. | 693 // Queue a highlight animation, then hand off to regular handler. |
| 694 #if OS(LINUX) | 694 #if OS(LINUX) |
| 695 if (settingsImpl()->gestureTapHighlightEnabled()) | 695 if (settingsImpl()->gestureTapHighlightEnabled()) |
| 696 enableTapHighlight(platformEvent); | 696 enableTapHighlightAtPoint(platformEvent); |
| 697 #endif | 697 #endif |
| 698 break; | 698 break; |
| 699 case WebInputEvent::GestureTapCancel: | 699 case WebInputEvent::GestureTapCancel: |
| 700 case WebInputEvent::GestureTap: | 700 case WebInputEvent::GestureTap: |
| 701 case WebInputEvent::GestureLongPress: | 701 case WebInputEvent::GestureLongPress: |
| 702 if (m_linkHighlight) | 702 for (size_t i = 0; i < m_linkHighlights.size(); i++) |
| 703 m_linkHighlight->startHighlightAnimationIfNeeded(); | 703 m_linkHighlights[i]->startHighlightAnimationIfNeeded(); |
| 704 break; | 704 break; |
| 705 default: | 705 default: |
| 706 break; | 706 break; |
| 707 } | 707 } |
| 708 | 708 |
| 709 switch (event.type) { | 709 switch (event.type) { |
| 710 case WebInputEvent::GestureTap: { | 710 case WebInputEvent::GestureTap: { |
| 711 m_client->cancelScheduledContentIntents(); | 711 m_client->cancelScheduledContentIntents(); |
| 712 if (detectContentOnTouch(platformEvent.position())) { | 712 if (detectContentOnTouch(platformEvent.position())) { |
| 713 eventSwallowed = true; | 713 eventSwallowed = true; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 724 if (event.data.tap.width > 0 && !shouldDisableDesktopWorkarounds()) { | 724 if (event.data.tap.width > 0 && !shouldDisableDesktopWorkarounds()) { |
| 725 // FIXME: didTapMultipleTargets should just take a rect instead of | 725 // FIXME: didTapMultipleTargets should just take a rect instead of |
| 726 // an event. | 726 // an event. |
| 727 WebGestureEvent scaledEvent = event; | 727 WebGestureEvent scaledEvent = event; |
| 728 scaledEvent.x = event.x / pageScaleFactor(); | 728 scaledEvent.x = event.x / pageScaleFactor(); |
| 729 scaledEvent.y = event.y / pageScaleFactor(); | 729 scaledEvent.y = event.y / pageScaleFactor(); |
| 730 scaledEvent.data.tap.width = event.data.tap.width / pageScaleFactor(
); | 730 scaledEvent.data.tap.width = event.data.tap.width / pageScaleFactor(
); |
| 731 scaledEvent.data.tap.height = event.data.tap.height / pageScaleFacto
r(); | 731 scaledEvent.data.tap.height = event.data.tap.height / pageScaleFacto
r(); |
| 732 IntRect boundingBox(scaledEvent.x - scaledEvent.data.tap.width / 2,
scaledEvent.y - scaledEvent.data.tap.height / 2, scaledEvent.data.tap.width, sca
ledEvent.data.tap.height); | 732 IntRect boundingBox(scaledEvent.x - scaledEvent.data.tap.width / 2,
scaledEvent.y - scaledEvent.data.tap.height / 2, scaledEvent.data.tap.width, sca
ledEvent.data.tap.height); |
| 733 Vector<IntRect> goodTargets; | 733 Vector<IntRect> goodTargets; |
| 734 findGoodTouchTargets(boundingBox, mainFrameImpl()->frame(), goodTarg
ets); | 734 Vector<Node*> highlightNodes; |
| 735 findGoodTouchTargets(boundingBox, mainFrameImpl()->frame(), goodTarg
ets, highlightNodes); |
| 735 // FIXME: replace touch adjustment code when numberOfGoodTargets ==
1? | 736 // FIXME: replace touch adjustment code when numberOfGoodTargets ==
1? |
| 736 // Single candidate case is currently handled by: https://bugs.webki
t.org/show_bug.cgi?id=85101 | 737 // Single candidate case is currently handled by: https://bugs.webki
t.org/show_bug.cgi?id=85101 |
| 737 if (goodTargets.size() >= 2 && m_client && m_client->didTapMultipleT
argets(scaledEvent, goodTargets)) { | 738 if (goodTargets.size() >= 2 && m_client && m_client->didTapMultipleT
argets(scaledEvent, goodTargets)) { |
| 739 if (settingsImpl()->gestureTapHighlightEnabled()) |
| 740 enableTapHighlights(highlightNodes); |
| 738 eventSwallowed = true; | 741 eventSwallowed = true; |
| 739 eventCancelled = true; | 742 eventCancelled = true; |
| 740 break; | 743 break; |
| 741 } | 744 } |
| 742 } | 745 } |
| 743 | 746 |
| 744 eventSwallowed = mainFrameImpl()->frame()->eventHandler()->handleGesture
Event(platformEvent); | 747 eventSwallowed = mainFrameImpl()->frame()->eventHandler()->handleGesture
Event(platformEvent); |
| 745 | 748 |
| 746 if (m_selectPopup && m_selectPopup == selectPopup) { | 749 if (m_selectPopup && m_selectPopup == selectPopup) { |
| 747 // That tap triggered a select popup which is the same as the one th
at | 750 // That tap triggered a select popup which is the same as the one th
at |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1242 while (bestTouchNode && !invokesHandCursor(bestTouchNode, false, m_page->mai
nFrame())) | 1245 while (bestTouchNode && !invokesHandCursor(bestTouchNode, false, m_page->mai
nFrame())) |
| 1243 bestTouchNode = bestTouchNode->parentNode(); | 1246 bestTouchNode = bestTouchNode->parentNode(); |
| 1244 | 1247 |
| 1245 // We should pick the largest enclosing node with hand cursor set. | 1248 // We should pick the largest enclosing node with hand cursor set. |
| 1246 while (bestTouchNode && bestTouchNode->parentNode() && invokesHandCursor(bes
tTouchNode->parentNode(), false, m_page->mainFrame())) | 1249 while (bestTouchNode && bestTouchNode->parentNode() && invokesHandCursor(bes
tTouchNode->parentNode(), false, m_page->mainFrame())) |
| 1247 bestTouchNode = bestTouchNode->parentNode(); | 1250 bestTouchNode = bestTouchNode->parentNode(); |
| 1248 | 1251 |
| 1249 return bestTouchNode; | 1252 return bestTouchNode; |
| 1250 } | 1253 } |
| 1251 | 1254 |
| 1252 void WebViewImpl::enableTapHighlight(const PlatformGestureEvent& tapEvent) | 1255 void WebViewImpl::enableTapHighlightAtPoint(const PlatformGestureEvent& tapEvent
) |
| 1253 { | 1256 { |
| 1254 // Always clear any existing highlight when this is invoked, even if we don'
t get a new target to highlight. | |
| 1255 m_linkHighlight.clear(); | |
| 1256 | |
| 1257 Node* touchNode = bestTapNode(tapEvent); | 1257 Node* touchNode = bestTapNode(tapEvent); |
| 1258 | 1258 |
| 1259 if (!touchNode || !touchNode->renderer() || !touchNode->renderer()->enclosin
gLayer()) | 1259 Vector<Node*> highlightNodes; |
| 1260 return; | 1260 highlightNodes.append(touchNode); |
| 1261 | 1261 |
| 1262 Color highlightColor = touchNode->renderer()->style()->tapHighlightColor(); | 1262 enableTapHighlights(highlightNodes); |
| 1263 // Safari documentation for -webkit-tap-highlight-color says if the specifie
d color has 0 alpha, | 1263 } |
| 1264 // then tap highlighting is disabled. | |
| 1265 // http://developer.apple.com/library/safari/#documentation/appleapplication
s/reference/safaricssref/articles/standardcssproperties.html | |
| 1266 if (!highlightColor.alpha()) | |
| 1267 return; | |
| 1268 | 1264 |
| 1269 m_linkHighlight = LinkHighlight::create(touchNode, this); | 1265 void WebViewImpl::enableTapHighlights(Vector<Node*>& highlightNodes) |
| 1266 { |
| 1267 // Always clear any existing highlight when this is invoked, even if we |
| 1268 // don't get a new target to highlight. |
| 1269 m_linkHighlights.clear(); |
| 1270 |
| 1271 for (size_t i = 0; i < highlightNodes.size(); i++) { |
| 1272 Node* node = highlightNodes[i]; |
| 1273 |
| 1274 if (!node || !node->renderer() || !node->renderer()->enclosingLayer()) |
| 1275 return; |
| 1276 |
| 1277 Color highlightColor = node->renderer()->style()->tapHighlightColor(); |
| 1278 // Safari documentation for -webkit-tap-highlight-color says if the |
| 1279 // specified color has 0 alpha, then tap highlighting is disabled. |
| 1280 // http://developer.apple.com/library/safari/#documentation/appleapplica
tions/reference/safaricssref/articles/standardcssproperties.html |
| 1281 if (!highlightColor.alpha()) |
| 1282 continue; |
| 1283 |
| 1284 m_linkHighlights.append(LinkHighlight::create(node, this)); |
| 1285 } |
| 1270 } | 1286 } |
| 1271 | 1287 |
| 1272 void WebViewImpl::animateZoomAroundPoint(const IntPoint& point, AutoZoomType zoo
mType) | 1288 void WebViewImpl::animateZoomAroundPoint(const IntPoint& point, AutoZoomType zoo
mType) |
| 1273 { | 1289 { |
| 1274 if (!mainFrameImpl()) | 1290 if (!mainFrameImpl()) |
| 1275 return; | 1291 return; |
| 1276 | 1292 |
| 1277 float scale; | 1293 float scale; |
| 1278 WebPoint scroll; | 1294 WebPoint scroll; |
| 1279 bool isAnchor; | 1295 bool isAnchor; |
| (...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1742 } | 1758 } |
| 1743 } | 1759 } |
| 1744 | 1760 |
| 1745 void WebViewImpl::layout() | 1761 void WebViewImpl::layout() |
| 1746 { | 1762 { |
| 1747 TRACE_EVENT0("webkit", "WebViewImpl::layout"); | 1763 TRACE_EVENT0("webkit", "WebViewImpl::layout"); |
| 1748 PageWidgetDelegate::layout(m_page.get()); | 1764 PageWidgetDelegate::layout(m_page.get()); |
| 1749 if (m_layerTreeView) | 1765 if (m_layerTreeView) |
| 1750 m_layerTreeView->setBackgroundColor(backgroundColor()); | 1766 m_layerTreeView->setBackgroundColor(backgroundColor()); |
| 1751 | 1767 |
| 1752 if (m_linkHighlight) | 1768 for (size_t i = 0; i < m_linkHighlights.size(); i++) |
| 1753 m_linkHighlight->updateGeometry(); | 1769 m_linkHighlights[i]->updateGeometry(); |
| 1754 } | 1770 } |
| 1755 | 1771 |
| 1756 void WebViewImpl::enterForceCompositingMode(bool enter) | 1772 void WebViewImpl::enterForceCompositingMode(bool enter) |
| 1757 { | 1773 { |
| 1758 if (page()->settings()->forceCompositingMode() == enter) | 1774 if (page()->settings()->forceCompositingMode() == enter) |
| 1759 return; | 1775 return; |
| 1760 | 1776 |
| 1761 TRACE_EVENT1("webkit", "WebViewImpl::enterForceCompositingMode", "enter", en
ter); | 1777 TRACE_EVENT1("webkit", "WebViewImpl::enterForceCompositingMode", "enter", en
ter); |
| 1762 settingsImpl()->setForceCompositingMode(enter); | 1778 settingsImpl()->setForceCompositingMode(enter); |
| 1763 if (enter) { | 1779 if (enter) { |
| (...skipping 1827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3591 #ifndef NDEBUG | 3607 #ifndef NDEBUG |
| 3592 ASSERT(!m_observedNewNavigation | 3608 ASSERT(!m_observedNewNavigation |
| 3593 || m_page->mainFrame()->loader()->documentLoader() == m_newNavigationLoa
der); | 3609 || m_page->mainFrame()->loader()->documentLoader() == m_newNavigationLoa
der); |
| 3594 m_newNavigationLoader = 0; | 3610 m_newNavigationLoader = 0; |
| 3595 #endif | 3611 #endif |
| 3596 m_observedNewNavigation = false; | 3612 m_observedNewNavigation = false; |
| 3597 if (*isNewNavigation && !isNavigationWithinPage) | 3613 if (*isNewNavigation && !isNavigationWithinPage) |
| 3598 m_pageScaleConstraintsSet.setNeedsReset(true); | 3614 m_pageScaleConstraintsSet.setNeedsReset(true); |
| 3599 | 3615 |
| 3600 // Make sure link highlight from previous page is cleared. | 3616 // Make sure link highlight from previous page is cleared. |
| 3601 m_linkHighlight.clear(); | 3617 m_linkHighlights.clear(); |
| 3602 m_gestureAnimation.clear(); | 3618 m_gestureAnimation.clear(); |
| 3603 if (m_layerTreeView) | 3619 if (m_layerTreeView) |
| 3604 m_layerTreeView->didStopFlinging(); | 3620 m_layerTreeView->didStopFlinging(); |
| 3605 resetSavedScrollAndScaleState(); | 3621 resetSavedScrollAndScaleState(); |
| 3606 } | 3622 } |
| 3607 | 3623 |
| 3608 void WebViewImpl::layoutUpdated(WebFrameImpl* webframe) | 3624 void WebViewImpl::layoutUpdated(WebFrameImpl* webframe) |
| 3609 { | 3625 { |
| 3610 if (!m_client || webframe != mainFrameImpl()) | 3626 if (!m_client || webframe != mainFrameImpl()) |
| 3611 return; | 3627 return; |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4087 } | 4103 } |
| 4088 | 4104 |
| 4089 bool WebViewImpl::shouldDisableDesktopWorkarounds() | 4105 bool WebViewImpl::shouldDisableDesktopWorkarounds() |
| 4090 { | 4106 { |
| 4091 ViewportArguments arguments = mainFrameImpl()->frame()->document()->viewport
Arguments(); | 4107 ViewportArguments arguments = mainFrameImpl()->frame()->document()->viewport
Arguments(); |
| 4092 return arguments.width == ViewportArguments::ValueDeviceWidth || !arguments.
userZoom | 4108 return arguments.width == ViewportArguments::ValueDeviceWidth || !arguments.
userZoom |
| 4093 || (arguments.minZoom == arguments.maxZoom && arguments.minZoom != Viewp
ortArguments::ValueAuto); | 4109 || (arguments.minZoom == arguments.maxZoom && arguments.minZoom != Viewp
ortArguments::ValueAuto); |
| 4094 } | 4110 } |
| 4095 | 4111 |
| 4096 } // namespace WebKit | 4112 } // namespace WebKit |
| OLD | NEW |