| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
| 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. |
| 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 1502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1513 updateHitTestResult(result, locationInContainer.point() - localOffset); | 1513 updateHitTestResult(result, locationInContainer.point() - localOffset); |
| 1514 // FIXME: isPointInOverflowControl() doesn't handle rect-based tests yet
. | 1514 // FIXME: isPointInOverflowControl() doesn't handle rect-based tests yet
. |
| 1515 if (result.addNodeToListBasedTestResult(nodeForHitTest(), locationInCont
ainer) == StopHitTesting) | 1515 if (result.addNodeToListBasedTestResult(nodeForHitTest(), locationInCont
ainer) == StopHitTesting) |
| 1516 return true; | 1516 return true; |
| 1517 } | 1517 } |
| 1518 return LayoutBox::nodeAtPoint(result, locationInContainer, accumulatedOffset
, hitTestAction); | 1518 return LayoutBox::nodeAtPoint(result, locationInContainer, accumulatedOffset
, hitTestAction); |
| 1519 } | 1519 } |
| 1520 | 1520 |
| 1521 bool LayoutBlock::hitTestChildren(HitTestResult& result, const HitTestLocation&
locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction hitTest
Action) | 1521 bool LayoutBlock::hitTestChildren(HitTestResult& result, const HitTestLocation&
locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction hitTest
Action) |
| 1522 { | 1522 { |
| 1523 // TODO(pdr): We should also check for css clip in the !isSelfPaintingLayer | 1523 ASSERT(!childrenInline()); |
| 1524 // case, similar to overflow clip below. | |
| 1525 if (hasOverflowClip() && !hasSelfPaintingLayer()) { | |
| 1526 if (!locationInContainer.intersects(overflowClipRect(accumulatedOffset,
ExcludeOverlayScrollbarSizeForHitTesting))) | |
| 1527 return false; | |
| 1528 if (style()->hasBorderRadius()) { | |
| 1529 LayoutRect borderRect = borderBoxRect(); | |
| 1530 borderRect.moveBy(accumulatedOffset); | |
| 1531 if (!locationInContainer.intersects(style()->getRoundedInnerBorderFo
r(borderRect))) | |
| 1532 return false; | |
| 1533 } | |
| 1534 } | |
| 1535 | |
| 1536 // A control clip can also clip out child hit testing. | |
| 1537 if (hasControlClip() && !locationInContainer.intersects(controlClipRect(accu
mulatedOffset))) | |
| 1538 return false; | |
| 1539 | |
| 1540 LayoutPoint scrolledOffset(hasOverflowClip() ? accumulatedOffset - scrolledC
ontentOffset() : accumulatedOffset); | 1524 LayoutPoint scrolledOffset(hasOverflowClip() ? accumulatedOffset - scrolledC
ontentOffset() : accumulatedOffset); |
| 1541 if (childrenInline() && !isTable()) { | 1525 HitTestAction childHitTest = hitTestAction; |
| 1542 if (m_lineBoxes.hitTest(LineLayoutBoxModel(this), result, locationInCont
ainer, scrolledOffset, hitTestAction)) { | 1526 if (hitTestAction == HitTestChildBlockBackgrounds) |
| 1527 childHitTest = HitTestChildBlockBackground; |
| 1528 for (LayoutBox* child = lastChildBox(); child; child = child->previousSiblin
gBox()) { |
| 1529 LayoutPoint childPoint = flipForWritingModeForChild(child, scrolledOffse
t); |
| 1530 if (!child->hasSelfPaintingLayer() && !child->isFloating() && !child->is
ColumnSpanAll() && child->nodeAtPoint(result, locationInContainer, childPoint, c
hildHitTest)) { |
| 1543 updateHitTestResult(result, flipForWritingMode(toLayoutPoint(locatio
nInContainer.point() - accumulatedOffset))); | 1531 updateHitTestResult(result, flipForWritingMode(toLayoutPoint(locatio
nInContainer.point() - accumulatedOffset))); |
| 1544 return true; | 1532 return true; |
| 1545 } | 1533 } |
| 1546 } else { | |
| 1547 HitTestAction childHitTest = hitTestAction; | |
| 1548 if (hitTestAction == HitTestChildBlockBackgrounds) | |
| 1549 childHitTest = HitTestChildBlockBackground; | |
| 1550 for (LayoutBox* child = lastChildBox(); child; child = child->previousSi
blingBox()) { | |
| 1551 LayoutPoint childPoint = flipForWritingModeForChild(child, scrolledO
ffset); | |
| 1552 if (!child->hasSelfPaintingLayer() && !child->isFloating() && !child
->isColumnSpanAll() && child->nodeAtPoint(result, locationInContainer, childPoin
t, childHitTest)) { | |
| 1553 updateHitTestResult(result, flipForWritingMode(toLayoutPoint(loc
ationInContainer.point() - accumulatedOffset))); | |
| 1554 return true; | |
| 1555 } | |
| 1556 } | |
| 1557 } | 1534 } |
| 1558 | 1535 |
| 1559 if (hitTestAction == HitTestFloat && hitTestFloats(result, locationInContain
er, scrolledOffset)) | |
| 1560 return true; | |
| 1561 | |
| 1562 return false; | 1536 return false; |
| 1563 } | 1537 } |
| 1564 | 1538 |
| 1565 Position LayoutBlock::positionForBox(InlineBox *box, bool start) const | 1539 Position LayoutBlock::positionForBox(InlineBox *box, bool start) const |
| 1566 { | 1540 { |
| 1567 if (!box) | 1541 if (!box) |
| 1568 return Position(); | 1542 return Position(); |
| 1569 | 1543 |
| 1570 if (!box->getLineLayoutItem().nonPseudoNode()) | 1544 if (!box->getLineLayoutItem().nonPseudoNode()) |
| 1571 return Position::editingPositionOf(nonPseudoNode(), start ? caretMinOffs
et() : caretMaxOffset()); | 1545 return Position::editingPositionOf(nonPseudoNode(), start ? caretMinOffs
et() : caretMaxOffset()); |
| (...skipping 995 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2567 for (TrackedLayoutBoxListHashSet::const_iterator it = positionedDescenda
ntSet->begin(); it != end; ++it) { | 2541 for (TrackedLayoutBoxListHashSet::const_iterator it = positionedDescenda
ntSet->begin(); it != end; ++it) { |
| 2568 LayoutBox* currBox = *it; | 2542 LayoutBox* currBox = *it; |
| 2569 ASSERT(!currBox->needsLayout()); | 2543 ASSERT(!currBox->needsLayout()); |
| 2570 } | 2544 } |
| 2571 } | 2545 } |
| 2572 } | 2546 } |
| 2573 | 2547 |
| 2574 #endif | 2548 #endif |
| 2575 | 2549 |
| 2576 } // namespace blink | 2550 } // namespace blink |
| OLD | NEW |