Title: [168539] branches/safari-538.34-branch/Source/WebKit2
Revision
168539
Author
lforsch...@apple.com
Date
2014-05-09 11:19:38 -0700 (Fri, 09 May 2014)

Log Message

Merged r168499.  

Modified Paths

Diff

Modified: branches/safari-538.34-branch/Source/WebKit2/ChangeLog (168538 => 168539)


--- branches/safari-538.34-branch/Source/WebKit2/ChangeLog	2014-05-09 18:17:12 UTC (rev 168538)
+++ branches/safari-538.34-branch/Source/WebKit2/ChangeLog	2014-05-09 18:19:38 UTC (rev 168539)
@@ -1,3 +1,28 @@
+2014-05-09  Lucas Forschler  <lforsch...@apple.com>
+
+        Merge r168499
+
+    2014-05-08  Beth Dakin  <bda...@apple.com>
+
+            REGRESSION (r168053): Phone number detection boxes are wrong when scrolled
+            https://bugs.webkit.org/show_bug.cgi?id=132706
+            -and corresponding-
+            <rdar://problem/16787957>
+
+            Reviewed by Tim Horton.
+
+            We need to paint the boxes in Document coordinates. Range::boundingRect() was 
+            giving us a point that took scroll position into account, and that’s not what we 
+            want. Here we use Range::textQuads() instead so that we can get something in 
+            Document coordinates, and then we need to convert that up to the main Document’s 
+            coordinates.
+            * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
+            (WebKit::textQuadsToBoundingRectForRange):
+            (WebKit::TelephoneNumberOverlayController::drawRect):
+
+            The telephone click function wants a point in Window coordinates.
+            (WebKit::TelephoneNumberOverlayController::mouseEvent):
+
 2014-05-08  Lucas Forschler  <lforsch...@apple.com>
 
         Merge r168477

Modified: branches/safari-538.34-branch/Source/WebKit2/WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm (168538 => 168539)


--- branches/safari-538.34-branch/Source/WebKit2/WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm	2014-05-09 18:17:12 UTC (rev 168538)
+++ branches/safari-538.34-branch/Source/WebKit2/WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm	2014-05-09 18:19:38 UTC (rev 168539)
@@ -29,6 +29,7 @@
 #if ENABLE(TELEPHONE_NUMBER_DETECTION) && PLATFORM(MAC)
 
 #import <WebCore/Document.h>
+#import <WebCore/FloatQuad.h>
 #import <WebCore/FrameView.h>
 #import <WebCore/GraphicsContext.h>
 #import <WebCore/MainFrame.h>
@@ -55,6 +56,17 @@
 
 namespace WebKit {
 
+static IntRect textQuadsToBoundingRectForRange(Range& range)
+{
+    Vector<FloatQuad> textQuads;
+    range.textQuads(textQuads);
+    FloatRect boundingRect;
+    size_t size = textQuads.size();
+    for (size_t i = 0; i < size; ++i)
+        boundingRect.unite(textQuads[i].boundingBox());
+    return enclosingIntRect(boundingRect);
+}
+
 void TelephoneNumberOverlayController::drawRect(PageOverlay* overlay, WebCore::GraphicsContext& graphicsContext, const WebCore::IntRect& dirtyRect)
 {
     if (m_currentSelectionRanges.isEmpty())
@@ -67,14 +79,17 @@
     for (auto& range : m_currentSelectionRanges) {
         // FIXME: This will choke if the range wraps around the edge of the view.
         // What should we do in that case?
-        IntRect rect = enclosingIntRect(range->boundingRect());
+        IntRect rect = textQuadsToBoundingRectForRange(*range);
 
         // Convert to the main document's coordinate space.
+        // FIXME: It's a little crazy to call contentsToWindow and then windowToContents in order to get the right coordinate space.
+        // We should consider adding conversion functions to ScrollView for contentsToDocument(). Right now, contentsToRootView() is
+        // not equivalent to what we need when you have a topContentInset or a header banner.
         FrameView* viewForRange = range->ownerDocument().view();
         if (!viewForRange)
             return;
         FrameView& mainFrameView = *m_webPage->corePage()->mainFrame().view();
-        rect.setLocation(mainFrameView.convertChildToSelf(viewForRange, rect.location()));
+        rect.setLocation(mainFrameView.windowToContents(viewForRange->contentsToWindow(rect.location())));
 
         CGRect cgRects[] = { (CGRect)rect };
 
@@ -122,7 +137,7 @@
 bool TelephoneNumberOverlayController::mouseEvent(PageOverlay*, const WebMouseEvent& event)
 {
     IntPoint mousePosition = m_webPage->corePage()->mainFrame().view()->rootViewToContents(event.position());
-    
+
     // If this event has nothing to do with the left button, it clears the current mouse down tracking and we're done processing it.
     if (event.button() != WebMouseEvent::LeftButton) {
         clearMouseDownInformation();
@@ -138,7 +153,7 @@
         // If the mouse lifted while still over the highlight button that it went down on, then that is a click.
         Boolean onButton;
         if (DDHighlightPointIsOnHighlight(currentNumber->highlight(), (CGPoint)mousePosition, &onButton) && onButton) {
-            handleTelephoneClick(currentNumber.get(), mousePosition);
+            handleTelephoneClick(currentNumber.get(), m_webPage->corePage()->mainFrame().view()->contentsToWindow(mousePosition));
             
             return true;
         }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to