2009-03-01 Ojan Vafai <ojan@chromium.org>
authorlevin@chromium.org <levin@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 Mar 2009 00:41:53 +0000 (00:41 +0000)
committerlevin@chromium.org <levin@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 Mar 2009 00:41:53 +0000 (00:41 +0000)
        Reviewed by Eric Seidel.

        Bug 24251: Cleanup: replace positionForCoordinates with positionForPoint
        <https://bugs.webkit.org/show_bug.cgi?id=24251>

        Make RenderObject::positionForCoordinate non-virtual and
        RenderObject::positionForPoint virtual in preparation for
        removing positionFor* from RenderObject/RenderText.

        * page/Frame.cpp:
        (WebCore::Frame::visiblePositionForPoint):
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::positionForPoint):
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::positionForPoint):
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::positionForCoordinates):
        (WebCore::RenderObject::positionForPoint):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        * rendering/RenderText.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@41347 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 files changed:
WebCore/ChangeLog
WebCore/page/Frame.cpp
WebCore/rendering/RenderBR.cpp
WebCore/rendering/RenderBR.h
WebCore/rendering/RenderBlock.cpp
WebCore/rendering/RenderBlock.h
WebCore/rendering/RenderBox.cpp
WebCore/rendering/RenderBox.h
WebCore/rendering/RenderInline.cpp
WebCore/rendering/RenderInline.h
WebCore/rendering/RenderObject.cpp
WebCore/rendering/RenderObject.h
WebCore/rendering/RenderReplaced.cpp
WebCore/rendering/RenderReplaced.h
WebCore/rendering/RenderSVGInlineText.cpp
WebCore/rendering/RenderSVGInlineText.h
WebCore/rendering/RenderText.cpp
WebCore/rendering/RenderText.h
WebKit/mac/WebView/WebFrame.mm

index 4ff8ac7d4fbfea03cf6c8a18bf8454697c046e94..a881c59d7906a4b93a5367c721846c8f4acac09c 100644 (file)
@@ -1,3 +1,42 @@
+2009-03-01  Ojan Vafai  <ojan@chromium.org>
+
+        Reviewed by Eric Seidel.
+
+        Bug 24251: Cleanup: replace positionForCoordinates with positionForPoint
+        <https://bugs.webkit.org/show_bug.cgi?id=24251>
+        
+        Make RenderObject::positionForCoordinate non-virtual and
+        RenderObject::positionForPoint virtual in preparation for
+        removing positionFor* from RenderObject/RenderText.
+
+        * page/Frame.cpp:
+        (WebCore::Frame::visiblePositionForPoint):
+        * rendering/RenderBR.cpp:
+        (WebCore::RenderBR::positionForPoint):
+        * rendering/RenderBR.h:
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::positionForPoint):
+        * rendering/RenderBlock.h:
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::positionForPoint):
+        * rendering/RenderBox.h:
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::positionForPoint):
+        * rendering/RenderInline.h:
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::positionForCoordinates):
+        (WebCore::RenderObject::positionForPoint):
+        * rendering/RenderObject.h:
+        * rendering/RenderReplaced.cpp:
+        (WebCore::RenderReplaced::positionForPoint):
+        * rendering/RenderReplaced.h:
+        * rendering/RenderSVGInlineText.cpp:
+        (WebCore::RenderSVGInlineText::positionForPoint):
+        * rendering/RenderSVGInlineText.h:
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::positionForPoint):
+        * rendering/RenderText.h:
+
 2009-03-01  Larry Ewing  <lewing@novell.com>
 
         Reviewed by Alexey Proskuryakov.
index f6b60e531cc41fd3e0ce7dd101c452627222408d..24a7477ec3de1eddd9adf61476ad0eafcaecf496 100644 (file)
@@ -1713,7 +1713,7 @@ VisiblePosition Frame::visiblePositionForPoint(const IntPoint& framePoint)
     RenderObject* renderer = node->renderer();
     if (!renderer)
         return VisiblePosition();
-    VisiblePosition visiblePos = renderer->positionForCoordinates(result.localPoint().x(), result.localPoint().y());
+    VisiblePosition visiblePos = renderer->positionForPoint(result.localPoint());
     if (visiblePos.isNull())
         visiblePos = VisiblePosition(Position(node, 0));
     return visiblePos;
index fd7c06761a834cef66ebdd8547929f7d1a6df83b..d100b30f977f61da68c4aeba4c056f6f916f8da6 100644 (file)
@@ -94,7 +94,7 @@ unsigned RenderBR::caretMaxRenderedOffset() const
     return 1;
 }
 
-VisiblePosition RenderBR::positionForCoordinates(int /*x*/, int /*y*/)
+VisiblePosition RenderBR::positionForPoint(const IntPoint&)
 {
     return VisiblePosition(node(), 0, DOWNSTREAM);
 }
index f637384a055ee0ca48c1896a2299e5d084798c06..7eae8ea4077b974020c269a741647f392400270e 100644 (file)
@@ -55,7 +55,7 @@ public:
     virtual int caretMaxOffset() const;
     virtual unsigned caretMaxRenderedOffset() const;
 
-    virtual VisiblePosition positionForCoordinates(int x, int y);
+    virtual VisiblePosition positionForPoint(const IntPoint&);
 
 protected:
     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
index a3ff6c1002a738f9c0da797ba0c250c90a5bd09e..45bcb273493b25981cc57602318386c3e6d6a06e 100644 (file)
@@ -3466,20 +3466,20 @@ static VisiblePosition positionForPointWithInlineChildren(RenderBlock* block, co
     return VisiblePosition(block->node(), 0, DOWNSTREAM);
 }
 
-VisiblePosition RenderBlock::positionForCoordinates(int x, int y)
+VisiblePosition RenderBlock::positionForPoint(const IntPoint& point)
 {
     if (isTable())
-        return RenderBox::positionForCoordinates(x, y); 
+        return RenderBox::positionForPoint(point);
 
-    int contentsX = x;
-    int contentsY = y;
+    int contentsX = point.x();
+    int contentsY = point.y();
     offsetForContents(contentsX, contentsY);
     IntPoint pointInContents(contentsX, contentsY);
 
     if (isReplaced()) {
-        if (y < 0 || y < height() && x < 0)
+        if (point.y() < 0 || point.y() < height() && point.x() < 0)
             return VisiblePosition(node(), caretMinOffset(), DOWNSTREAM);
-        if (y >= height() || y >= 0 && x >= width())
+        if (point.y() >= height() || point.y() >= 0 && point.x() >= width())
             return VisiblePosition(node(), caretMaxOffset(), DOWNSTREAM);
     } 
 
@@ -3504,7 +3504,7 @@ VisiblePosition RenderBlock::positionForCoordinates(int x, int y)
 
     // We only get here if there are no, or only floated/positioned, or only
     // non-visible block children below the click.
-    return RenderBox::positionForCoordinates(x, y);
+    return RenderBox::positionForPoint(point);
 }
 
 void RenderBlock::offsetForContents(int& tx, int& ty) const
index 4c78ce4de56380023c0651b0cb3b12d8ab4ff88d..4d8f38682b4764a21b9905bf759c19e119202d32 100644 (file)
@@ -232,7 +232,7 @@ public:
 
     virtual bool isPointInOverflowControl(HitTestResult&, int x, int y, int tx, int ty);
 
-    virtual VisiblePosition positionForCoordinates(int x, int y);
+    virtual VisiblePosition positionForPoint(const IntPoint&);
     
     // Block flows subclass availableWidth to handle multi column layout (shrinking the width available to children when laying out.)
     virtual int availableWidth() const;
index ebe03aa26cdc4284d22efc13213c41677956e4ec..c17b0873cf405aa85948e07692bd41babd79645a 100644 (file)
@@ -2725,12 +2725,15 @@ bool RenderBox::isAfterContent(RenderObject* child) const
     return (child && child->style()->styleType() == AFTER && (!child->isText() || child->isBR()));
 }
 
-VisiblePosition RenderBox::positionForCoordinates(int xPos, int yPos)
+VisiblePosition RenderBox::positionForPoint(const IntPoint& point)
 {
     // no children...return this render object's element, if there is one, and offset 0
     if (!firstChild())
         return VisiblePosition(node(), 0, DOWNSTREAM);
-        
+
+    int xPos = point.x();
+    int yPos = point.y();
+
     if (isTable() && node()) {
         int right = contentWidth() + borderRight() + paddingRight() + borderLeft() + paddingLeft();
         int bottom = contentHeight() + borderTop() + paddingTop() + borderBottom() + paddingBottom();
index ed1860cb2c4c86995ec02f0488f9cd7350a454ca..cda9477e6efcb1c26f57f8e82836c6bfc0493384 100644 (file)
@@ -271,7 +271,7 @@ public:
 
     IntRect maskClipRect();
 
-    virtual VisiblePosition positionForCoordinates(int x, int y);
+    virtual VisiblePosition positionForPoint(const IntPoint&);
 
     void removeFloatingOrPositionedChildFromBlockLists();
     
index e3cfb3f3ddaca37261e772b8f8ea098a972dd239..c23fad1b535a52ed0b96b9f63959215225a3bf8b 100644 (file)
@@ -501,19 +501,19 @@ bool RenderInline::nodeAtPoint(const HitTestRequest& request, HitTestResult& res
     return m_lineBoxes.hitTest(this, request, result, x, y, tx, ty, hitTestAction);
 }
 
-VisiblePosition RenderInline::positionForCoordinates(int x, int y)
+VisiblePosition RenderInline::positionForPoint(const IntPoint& point)
 {
     // FIXME: Does not deal with relative positioned inlines (should it?)
     RenderBlock* cb = containingBlock();
     if (firstLineBox()) {
         // This inline actually has a line box.  We must have clicked in the border/padding of one of these boxes.  We
         // should try to find a result by asking our containing block.
-        return cb->positionForCoordinates(x, y);
+        return cb->positionForPoint(point);
     }
 
     // Translate the coords from the pre-anonymous block to the post-anonymous block.
-    int parentBlockX = cb->x() + x;
-    int parentBlockY = cb->y() + y;
+    int parentBlockX = cb->x() + point.x();
+    int parentBlockY = cb->y() + point.y();
     RenderBoxModelObject* c = continuation();
     while (c) {
         RenderBox* contBlock = c->isInline() ? c->containingBlock() : toRenderBlock(c);
@@ -522,7 +522,7 @@ VisiblePosition RenderInline::positionForCoordinates(int x, int y)
         c = toRenderBlock(c)->inlineContinuation();
     }
     
-    return RenderBoxModelObject::positionForCoordinates(x, y);
+    return RenderBoxModelObject::positionForPoint(point);
 }
 
 IntRect RenderInline::linesBoundingBox() const
index 396d7c6814efdf4bc936f60dae628179d910a8f5..f3be72aa341c090f7018b030f364e1f463c609ba 100644 (file)
@@ -83,7 +83,7 @@ public:
     virtual IntRect rectWithOutlineForRepaint(RenderBoxModelObject* repaintContainer, int outlineWidth);
     virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& rect, bool fixed);
 
-    virtual VisiblePosition positionForCoordinates(int x, int y);
+    virtual VisiblePosition positionForPoint(const IntPoint&);
 
     IntRect linesBoundingBox() const;
     
index cb6781bf26b248a7a7e7bf57ed32f19a1430a3bf..5d903a1f023317c12cb4803268d6e90e5307c96f 100644 (file)
@@ -1854,14 +1854,14 @@ void RenderObject::arenaDelete(RenderArena* arena, void* base)
     arena->free(*(size_t*)base, base);
 }
 
-VisiblePosition RenderObject::positionForCoordinates(int, int)
+VisiblePosition RenderObject::positionForCoordinates(int x, int y)
 {
-    return VisiblePosition(node(), caretMinOffset(), DOWNSTREAM);
+    return positionForPoint(IntPoint(x, y));
 }
 
-VisiblePosition RenderObject::positionForPoint(const IntPoint& point)
+VisiblePosition RenderObject::positionForPoint(const IntPoint&)
 {
-    return positionForCoordinates(point.x(), point.y());
+    return VisiblePosition(node(), caretMinOffset(), DOWNSTREAM);
 }
 
 void RenderObject::updateDragState(bool dragOn)
index 0bb38c87ae16c21cc423b3d395ea07a0b3b60949..a1dddd99dceb07d3b8c1c64ef02423face9102e1 100644 (file)
@@ -456,8 +456,8 @@ public:
     virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction);
     virtual void updateHitTestResult(HitTestResult&, const IntPoint&);
 
-    virtual VisiblePosition positionForCoordinates(int x, int y);
-    VisiblePosition positionForPoint(const IntPoint&);
+    VisiblePosition positionForCoordinates(int x, int y);
+    virtual VisiblePosition positionForPoint(const IntPoint&);
 
     virtual void dirtyLinesFromChangedChild(RenderObject*);
 
index 0ae594c27acc3601cfd12eed9e7d306d811b64cb..b94cf60577c6b060f00809495503fdc213a23a1b 100644 (file)
@@ -204,7 +204,7 @@ unsigned RenderReplaced::caretMaxRenderedOffset() const
     return 1; 
 }
 
-VisiblePosition RenderReplaced::positionForCoordinates(int xPos, int yPos)
+VisiblePosition RenderReplaced::positionForPoint(const IntPoint& point)
 {
     InlineBox* box = inlineBoxWrapper();
     if (!box)
@@ -217,19 +217,19 @@ VisiblePosition RenderReplaced::positionForCoordinates(int xPos, int yPos)
     int top = root->topOverflow();
     int bottom = root->nextRootBox() ? root->nextRootBox()->topOverflow() : root->bottomOverflow();
 
-    if (yPos + y() < top)
+    if (point.y() + y() < top)
         return VisiblePosition(node(), caretMinOffset(), DOWNSTREAM); // coordinates are above
     
-    if (yPos + y() >= bottom)
+    if (point.y() + y() >= bottom)
         return VisiblePosition(node(), caretMaxOffset(), DOWNSTREAM); // coordinates are below
     
     if (node()) {
-        if (xPos <= width() / 2)
+        if (point.x() <= width() / 2)
             return VisiblePosition(node(), 0, DOWNSTREAM);
         return VisiblePosition(node(), 1, DOWNSTREAM);
     }
 
-    return RenderBox::positionForCoordinates(xPos, yPos);
+    return RenderBox::positionForPoint(point);
 }
 
 IntRect RenderReplaced::selectionRectForRepaint(RenderBoxModelObject* repaintContainer, bool clipToVisibleContent)
index 606cb6c5065eac4b24112f1acfc1b4b9d6ea8d66..493744674a1d0d617b36aae0164cf1640cce39ae 100644 (file)
@@ -58,7 +58,7 @@ public:
     virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer);
 
     virtual unsigned caretMaxRenderedOffset() const;
-    virtual VisiblePosition positionForCoordinates(int x, int y);
+    virtual VisiblePosition positionForPoint(const IntPoint&);
     
     virtual bool canBeSelectionLeaf() const { return true; }
     virtual void setSelectionState(SelectionState);
index e1d44216920e370f1758ac9b5076803baa6816c3..bac4bf46ad7fbf56db9ed45af3cc7e51c9cf2e92 100644 (file)
@@ -147,7 +147,7 @@ IntRect RenderSVGInlineText::localCaretRect(InlineBox*, int, int*)
     return IntRect();
 }
 
-VisiblePosition RenderSVGInlineText::positionForCoordinates(int x, int y)
+VisiblePosition RenderSVGInlineText::positionForPoint(const IntPoint& point)
 {
     SVGInlineTextBox* textBox = static_cast<SVGInlineTextBox*>(firstTextBox());
 
@@ -169,7 +169,7 @@ VisiblePosition RenderSVGInlineText::positionForCoordinates(int x, int y)
     // end up returning the nearest offset in the last box, even if the
     // nearest offset to your click is contained in another box.
     for (SVGInlineTextBox* box = textBox; box; box = static_cast<SVGInlineTextBox*>(box->nextTextBox())) {
-        if (box->svgCharacterHitsPosition(x + object->x(), y + object->y(), closestOffsetInBox)) {
+        if (box->svgCharacterHitsPosition(point.x() + object->x(), point.y() + object->y(), closestOffsetInBox)) {
             // If we're not at the end/start of the box, stop looking for other selected boxes.
             if (box->direction() == LTR) {
                 if (closestOffsetInBox <= (int) box->end() + 1)
index 3d9473e2a4b6414ed876f59ef37de0bec19143b8..e7f776af25910c27466416f01ad282ac603a74c4 100644 (file)
@@ -45,7 +45,7 @@ public:
     virtual bool isSVGText() const { return true; }
 
     virtual IntRect localCaretRect(InlineBox*, int caretOffset, int* extraWidthToEndOfLine = 0);
-    virtual VisiblePosition positionForCoordinates(int x, int y);
+    virtual VisiblePosition positionForPoint(const IntPoint&);
 
     virtual void destroy();
 
index 08fb109acf66afe909b9fa746a92f69a272f4cd1..c9fa02615b22366270f6e218521fbcc00009c0c4 100644 (file)
@@ -312,7 +312,7 @@ InlineTextBox* RenderText::findNextInlineTextBox(int offset, int& pos) const
     return s;
 }
 
-VisiblePosition RenderText::positionForCoordinates(int x, int y)
+VisiblePosition RenderText::positionForPoint(const IntPoint& point)
 {
     if (!firstTextBox() || textLength() == 0)
         return VisiblePosition(node(), 0, DOWNSTREAM);
@@ -321,37 +321,37 @@ VisiblePosition RenderText::positionForCoordinates(int x, int y)
     int offset;
 
     // FIXME: We should be able to roll these special cases into the general cases in the loop below.
-    if (firstTextBox() && y <  firstTextBox()->root()->bottomOverflow() && x < firstTextBox()->m_x) {
+    if (firstTextBox() && point.y() <  firstTextBox()->root()->bottomOverflow() && point.x() < firstTextBox()->m_x) {
         // at the y coordinate of the first line or above
         // and the x coordinate is to the left of the first text box left edge
-        offset = firstTextBox()->offsetForPosition(x);
+        offset = firstTextBox()->offsetForPosition(point.x());
         return VisiblePosition(node(), offset + firstTextBox()->start(), DOWNSTREAM);
     }
-    if (lastTextBox() && y >= lastTextBox()->root()->topOverflow() && x >= lastTextBox()->m_x + lastTextBox()->m_width) {
+    if (lastTextBox() && point.y() >= lastTextBox()->root()->topOverflow() && point.x() >= lastTextBox()->m_x + lastTextBox()->m_width) {
         // at the y coordinate of the last line or below
         // and the x coordinate is to the right of the last text box right edge
-        offset = lastTextBox()->offsetForPosition(x);
+        offset = lastTextBox()->offsetForPosition(point.x());
         return VisiblePosition(node(), offset + lastTextBox()->start(), DOWNSTREAM);
     }
 
     InlineTextBox* lastBoxAbove = 0;
     for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) {
-        if (y >= box->root()->topOverflow()) {
+        if (point.y() >= box->root()->topOverflow()) {
             int bottom = box->root()->nextRootBox() ? box->root()->nextRootBox()->topOverflow() : box->root()->bottomOverflow();
-            if (y < bottom) {
-                offset = box->offsetForPosition(x);
+            if (point.y() < bottom) {
+                offset = box->offsetForPosition(point.x());
 
-                if (x == box->m_x)
+                if (point.x() == box->m_x)
                     // the x coordinate is equal to the left edge of this box
                     // the affinity must be downstream so the position doesn't jump back to the previous line
                     return VisiblePosition(node(), offset + box->start(), DOWNSTREAM);
 
-                if (x < box->m_x + box->m_width)
+                if (point.x() < box->m_x + box->m_width)
                     // and the x coordinate is to the left of the right edge of this box
                     // check to see if position goes in this box
                     return VisiblePosition(node(), offset + box->start(), offset > 0 ? VP_UPSTREAM_IF_POSSIBLE : DOWNSTREAM);
 
-                if (!box->prevOnLine() && x < box->m_x)
+                if (!box->prevOnLine() && point.x() < box->m_x)
                     // box is first on line
                     // and the x coordinate is to the left of the first text box left edge
                     return VisiblePosition(node(), offset + box->start(), DOWNSTREAM);
index 71b5408aa13e46d1c6ec20fbd30e0d4917596ef3..649f155876558ed7490d6fb32fc21a85b5f9f8ca 100644 (file)
@@ -61,7 +61,7 @@ public:
     virtual void absoluteQuads(Vector<FloatQuad>&, bool topLevel = true);
     virtual void absoluteQuadsForRange(Vector<FloatQuad>&, unsigned startOffset = 0, unsigned endOffset = UINT_MAX, bool useSelectionHeight = false);
 
-    virtual VisiblePosition positionForCoordinates(int x, int y);
+    virtual VisiblePosition positionForPoint(const IntPoint&);
 
     const UChar* characters() const { return m_text->characters(); }
     unsigned textLength() const { return m_text->length(); } // non virtual implementation of length()
index ef12bab1fe83569db7aaf45857226262ce869ab1..1605e2a5dc2367fb9357c1d9ecabe3645c23d0d1 100644 (file)
@@ -948,18 +948,8 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
 
 - (VisiblePosition)_visiblePositionForPoint:(NSPoint)point
 {
-    IntPoint outerPoint(point);
-    HitTestResult result = _private->coreFrame->eventHandler()->hitTestResultAtPoint(outerPoint, true);
-    Node* node = result.innerNode();
-    if (!node)
-        return VisiblePosition();
-    RenderObject* renderer = node->renderer();
-    if (!renderer)
-        return VisiblePosition();
-    VisiblePosition visiblePos = renderer->positionForCoordinates(result.localPoint().x(), result.localPoint().y());
-    if (visiblePos.isNull())
-        visiblePos = VisiblePosition(Position(node, 0));
-    return visiblePos;
+    // FIXME: Someone with access to Apple's sources could remove this needless wrapper call.
+    return _private->coreFrame->visiblePositionForPoint(IntPoint(point));
 }
 
 - (DOMRange *)_characterRangeAtPoint:(NSPoint)point