Changeset 88195 in webkit
- Timestamp:
- Jun 6, 2011 3:13:08 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r88193 r88195 1 2011-06-06 Emil A Eklund <eae@chromium.org> 2 3 Reviewed by Eric Seidel. 4 5 Convert hitTest to IntPoint 6 https://bugs.webkit.org/show_bug.cgi?id=62144 7 8 Covered by existing tests. 9 10 * rendering/InlineBox.cpp: 11 (WebCore::InlineBox::nodeAtPoint): 12 * rendering/RenderBlock.cpp: 13 (WebCore::RenderBlock::hitTestFloats): 14 (WebCore::RenderBlock::hitTestContents): 15 * rendering/RenderInline.cpp: 16 (WebCore::RenderInline::nodeAtPoint): 17 * rendering/RenderLayer.cpp: 18 (WebCore::RenderLayer::hitTestContents): 19 * rendering/RenderLayer.h: 20 (WebCore::RenderLayer::renderBoxLocation): 21 (WebCore::RenderLayer::renderBoxX): 22 (WebCore::RenderLayer::renderBoxY): 23 * rendering/RenderLineBoxList.cpp: 24 (WebCore::RenderLineBoxList::hitTest): 25 * rendering/RenderLineBoxList.h: 26 * rendering/RenderObject.cpp: 27 (WebCore::RenderObject::hitTest): 28 * rendering/RenderObject.h: 29 1 30 2011-06-06 Levi Weintraub <leviw@chromium.org> 2 31 -
trunk/Source/WebCore/rendering/InlineBox.cpp
r87964 r88195 226 226 // own stacking context. (See Appendix E.2, section 6.4 on inline block/table elements in the CSS2.1 227 227 // specification.) 228 return renderer()->hitTest(request, result, pointInContainer, tx, ty);228 return renderer()->hitTest(request, result, pointInContainer, IntPoint(tx, ty)); 229 229 } 230 230 -
trunk/Source/WebCore/rendering/RenderBlock.cpp
r88190 r88195 3974 3974 int yOffset = yPositionForFloatIncludingMargin(floatingObject) - floatingObject->m_renderer->y(); 3975 3975 IntPoint childPoint = flipFloatForWritingMode(floatingObject, IntPoint(tx + xOffset, ty + yOffset)); 3976 if (floatingObject->m_renderer->hitTest(request, result, pointInContainer, childPoint .x(), childPoint.y())) {3976 if (floatingObject->m_renderer->hitTest(request, result, pointInContainer, childPoint)) { 3977 3977 updateHitTestResult(result, pointInContainer - toSize(childPoint)); 3978 3978 return true; … … 4035 4035 if (childrenInline() && !isTable()) { 4036 4036 // We have to hit-test our line boxes. 4037 if (m_lineBoxes.hitTest(this, request, result, pointInContainer, tx, ty, hitTestAction))4037 if (m_lineBoxes.hitTest(this, request, result, pointInContainer, IntPoint(tx, ty), hitTestAction)) 4038 4038 return true; 4039 4039 } else { -
trunk/Source/WebCore/rendering/RenderInline.cpp
r88190 r88195 715 715 const IntPoint& pointInContainer, int tx, int ty, HitTestAction hitTestAction) 716 716 { 717 return m_lineBoxes.hitTest(this, request, result, pointInContainer, tx, ty, hitTestAction);717 return m_lineBoxes.hitTest(this, request, result, pointInContainer, IntPoint(tx, ty), hitTestAction); 718 718 } 719 719 -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r88183 r88195 3138 3138 { 3139 3139 if (!renderer()->hitTest(request, result, hitTestPoint, 3140 layerBounds.x() - renderBoxX(), 3141 layerBounds.y() - renderBoxY(), 3140 toPoint(layerBounds.location() - renderBoxLocation()), 3142 3141 hitTestFilter)) { 3143 3142 // It's wrong to set innerNode, but then claim that you didn't hit anything, unless it is -
trunk/Source/WebCore/rendering/RenderLayer.h
r88178 r88195 460 460 void setLastChild(RenderLayer* last) { m_last = last; } 461 461 462 int renderBoxX() const { return renderer()->isBox() ? toRenderBox(renderer())->x() : 0; } 463 int renderBoxY() const { return renderer()->isBox() ? toRenderBox(renderer())->y() : 0; } 462 IntPoint renderBoxLocation() const { return renderer()->isBox() ? toRenderBox(renderer())->location() : IntPoint(); } 463 int renderBoxX() const { return renderBoxLocation().x(); } 464 int renderBoxY() const { return renderBoxLocation().y(); } 464 465 465 466 void collectLayers(Vector<RenderLayer*>*&, Vector<RenderLayer*>*&); -
trunk/Source/WebCore/rendering/RenderLineBoxList.cpp
r88190 r88195 275 275 276 276 277 bool RenderLineBoxList::hitTest(RenderBoxModelObject* renderer, const HitTestRequest& request, HitTestResult& result, const IntPoint& pointInContainer, int tx, int ty, HitTestAction hitTestAction) const277 bool RenderLineBoxList::hitTest(RenderBoxModelObject* renderer, const HitTestRequest& request, HitTestResult& result, const IntPoint& pointInContainer, const IntPoint& accumulatedOffset, HitTestAction hitTestAction) const 278 278 { 279 279 if (hitTestAction != HitTestForeground) … … 290 290 IntRect(pointInContainer.x() - result.leftPadding(), pointInContainer.y(), result.rightPadding() + result.leftPadding() + 1, 1); 291 291 292 if (!anyLineIntersectsRect(renderer, rect, IntPoint(tx, ty)))292 if (!anyLineIntersectsRect(renderer, rect, accumulatedOffset)) 293 293 return false; 294 294 … … 298 298 for (InlineFlowBox* curr = lastLineBox(); curr; curr = curr->prevLineBox()) { 299 299 RootInlineBox* root = curr->root(); 300 if (rangeIntersectsRect(renderer, curr->logicalTopVisualOverflow(root->lineTop()), curr->logicalBottomVisualOverflow(root->lineBottom()), rect, IntPoint(tx, ty))) {301 bool inside = curr->nodeAtPoint(request, result, pointInContainer, tx, ty, root->lineTop(), root->lineBottom());300 if (rangeIntersectsRect(renderer, curr->logicalTopVisualOverflow(root->lineTop()), curr->logicalBottomVisualOverflow(root->lineBottom()), rect, accumulatedOffset)) { 301 bool inside = curr->nodeAtPoint(request, result, pointInContainer, accumulatedOffset.x(), accumulatedOffset.y(), root->lineTop(), root->lineBottom()); 302 302 if (inside) { 303 renderer->updateHitTestResult(result, pointInContainer - IntSize(tx, ty));303 renderer->updateHitTestResult(result, toPoint(pointInContainer - accumulatedOffset)); 304 304 return true; 305 305 } -
trunk/Source/WebCore/rendering/RenderLineBoxList.h
r87825 r88195 65 65 66 66 void paint(RenderBoxModelObject*, PaintInfo&, int x, int y) const; 67 bool hitTest(RenderBoxModelObject*, const HitTestRequest&, HitTestResult&, const IntPoint& pointInContainer, int tx, int ty, HitTestAction) const;67 bool hitTest(RenderBoxModelObject*, const HitTestRequest&, HitTestResult&, const IntPoint& pointInContainer, const IntPoint& accumulatedOffset, HitTestAction) const; 68 68 69 69 private: -
trunk/Source/WebCore/rendering/RenderObject.cpp
r87738 r88195 2143 2143 } 2144 2144 2145 bool RenderObject::hitTest(const HitTestRequest& request, HitTestResult& result, const IntPoint& pointInContainer, int tx, int ty, HitTestFilter hitTestFilter)2145 bool RenderObject::hitTest(const HitTestRequest& request, HitTestResult& result, const IntPoint& pointInContainer, const IntPoint& accumulatedOffset, HitTestFilter hitTestFilter) 2146 2146 { 2147 2147 bool inside = false; 2148 2148 if (hitTestFilter != HitTestSelf) { 2149 2149 // First test the foreground layer (lines and inlines). 2150 inside = nodeAtPoint(request, result, pointInContainer, tx, ty, HitTestForeground);2150 inside = nodeAtPoint(request, result, pointInContainer, accumulatedOffset.x(), accumulatedOffset.y(), HitTestForeground); 2151 2151 2152 2152 // Test floats next. 2153 2153 if (!inside) 2154 inside = nodeAtPoint(request, result, pointInContainer, tx, ty, HitTestFloat);2154 inside = nodeAtPoint(request, result, pointInContainer, accumulatedOffset.x(), accumulatedOffset.y(), HitTestFloat); 2155 2155 2156 2156 // Finally test to see if the mouse is in the background (within a child block's background). 2157 2157 if (!inside) 2158 inside = nodeAtPoint(request, result, pointInContainer, tx, ty, HitTestChildBlockBackgrounds);2158 inside = nodeAtPoint(request, result, pointInContainer, accumulatedOffset.x(), accumulatedOffset.y(), HitTestChildBlockBackgrounds); 2159 2159 } 2160 2160 2161 2161 // See if the mouse is inside us but not any of our descendants 2162 2162 if (hitTestFilter != HitTestDescendants && !inside) 2163 inside = nodeAtPoint(request, result, pointInContainer, tx, ty, HitTestBlockBackground);2163 inside = nodeAtPoint(request, result, pointInContainer, accumulatedOffset.x(), accumulatedOffset.y(), HitTestBlockBackground); 2164 2164 2165 2165 return inside; -
trunk/Source/WebCore/rendering/RenderObject.h
r87738 r88195 546 546 #endif 547 547 548 bool hitTest(const HitTestRequest&, HitTestResult&, const IntPoint& , int tx, int ty, HitTestFilter = HitTestAll);548 bool hitTest(const HitTestRequest&, HitTestResult&, const IntPoint& pointInContainer, const IntPoint& accumulatedOffset, HitTestFilter = HitTestAll); 549 549 virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const IntPoint& pointInContainer, int tx, int ty, HitTestAction); 550 550 virtual void updateHitTestResult(HitTestResult&, const IntPoint&);
Note: See TracChangeset
for help on using the changeset viewer.