| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) | 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) |
| 3 * (C) 1997 Torben Weis (weis@kde.org) | 3 * (C) 1997 Torben Weis (weis@kde.org) |
| 4 * (C) 1998 Waldo Bastian (bastian@kde.org) | 4 * (C) 1998 Waldo Bastian (bastian@kde.org) |
| 5 * (C) 1999 Lars Knoll (knoll@kde.org) | 5 * (C) 1999 Lars Knoll (knoll@kde.org) |
| 6 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 6 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2013 Apple Inc. All r
ights reserved. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2013 Apple Inc. All r
ights reserved. |
| 8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 1483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1494 r[pos + 1].inColSpan = 0; | 1494 r[pos + 1].inColSpan = 0; |
| 1495 else | 1495 else |
| 1496 r[pos + 1].inColSpan = first + r[pos].inColSpan; | 1496 r[pos + 1].inColSpan = first + r[pos].inColSpan; |
| 1497 } else { | 1497 } else { |
| 1498 r[pos + 1].inColSpan = 0; | 1498 r[pos + 1].inColSpan = 0; |
| 1499 } | 1499 } |
| 1500 } | 1500 } |
| 1501 } | 1501 } |
| 1502 | 1502 |
| 1503 // Hit Testing | 1503 // Hit Testing |
| 1504 bool LayoutTableSection::nodeAtPoint(const HitTestRequest& request, HitTestResul
t& result, const HitTestLocation& locationInContainer, const LayoutPoint& accumu
latedOffset, HitTestAction action) | 1504 bool LayoutTableSection::nodeAtPoint(HitTestResult& result, const HitTestLocatio
n& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction acti
on) |
| 1505 { | 1505 { |
| 1506 // If we have no children then we have nothing to do. | 1506 // If we have no children then we have nothing to do. |
| 1507 if (!firstRow()) | 1507 if (!firstRow()) |
| 1508 return false; | 1508 return false; |
| 1509 | 1509 |
| 1510 // Table sections cannot ever be hit tested. Effectively they do not exist. | 1510 // Table sections cannot ever be hit tested. Effectively they do not exist. |
| 1511 // Just forward to our children always. | 1511 // Just forward to our children always. |
| 1512 LayoutPoint adjustedLocation = accumulatedOffset + location(); | 1512 LayoutPoint adjustedLocation = accumulatedOffset + location(); |
| 1513 | 1513 |
| 1514 if (hasOverflowClip() && !locationInContainer.intersects(overflowClipRect(ad
justedLocation))) | 1514 if (hasOverflowClip() && !locationInContainer.intersects(overflowClipRect(ad
justedLocation))) |
| 1515 return false; | 1515 return false; |
| 1516 | 1516 |
| 1517 if (hasOverflowingCell()) { | 1517 if (hasOverflowingCell()) { |
| 1518 for (LayoutTableRow* row = lastRow(); row; row = row->previousRow()) { | 1518 for (LayoutTableRow* row = lastRow(); row; row = row->previousRow()) { |
| 1519 // FIXME: We have to skip over inline flows, since they can show up
inside table rows | 1519 // FIXME: We have to skip over inline flows, since they can show up
inside table rows |
| 1520 // at the moment (a demoted inline <form> for example). If we ever i
mplement a | 1520 // at the moment (a demoted inline <form> for example). If we ever i
mplement a |
| 1521 // table-specific hit-test method (which we should do for performanc
e reasons anyway), | 1521 // table-specific hit-test method (which we should do for performanc
e reasons anyway), |
| 1522 // then we can remove this check. | 1522 // then we can remove this check. |
| 1523 if (!row->hasSelfPaintingLayer()) { | 1523 if (!row->hasSelfPaintingLayer()) { |
| 1524 LayoutPoint childPoint = flipForWritingModeForChild(row, adjuste
dLocation); | 1524 LayoutPoint childPoint = flipForWritingModeForChild(row, adjuste
dLocation); |
| 1525 if (row->nodeAtPoint(request, result, locationInContainer, child
Point, action)) { | 1525 if (row->nodeAtPoint(result, locationInContainer, childPoint, ac
tion)) { |
| 1526 updateHitTestResult(result, toLayoutPoint(locationInContaine
r.point() - childPoint)); | 1526 updateHitTestResult(result, toLayoutPoint(locationInContaine
r.point() - childPoint)); |
| 1527 return true; | 1527 return true; |
| 1528 } | 1528 } |
| 1529 } | 1529 } |
| 1530 } | 1530 } |
| 1531 return false; | 1531 return false; |
| 1532 } | 1532 } |
| 1533 | 1533 |
| 1534 recalcCellsIfNeeded(); | 1534 recalcCellsIfNeeded(); |
| 1535 | 1535 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1546 CellStruct& current = cellAt(hitRow, hitColumn); | 1546 CellStruct& current = cellAt(hitRow, hitColumn); |
| 1547 | 1547 |
| 1548 // If the cell is empty, there's nothing to do | 1548 // If the cell is empty, there's nothing to do |
| 1549 if (!current.hasCells()) | 1549 if (!current.hasCells()) |
| 1550 continue; | 1550 continue; |
| 1551 | 1551 |
| 1552 for (unsigned i = current.cells.size() ; i; ) { | 1552 for (unsigned i = current.cells.size() ; i; ) { |
| 1553 --i; | 1553 --i; |
| 1554 LayoutTableCell* cell = current.cells[i]; | 1554 LayoutTableCell* cell = current.cells[i]; |
| 1555 LayoutPoint cellPoint = flipForWritingModeForChild(cell, adjuste
dLocation); | 1555 LayoutPoint cellPoint = flipForWritingModeForChild(cell, adjuste
dLocation); |
| 1556 if (static_cast<LayoutObject*>(cell)->nodeAtPoint(request, resul
t, locationInContainer, cellPoint, action)) { | 1556 if (static_cast<LayoutObject*>(cell)->nodeAtPoint(result, locati
onInContainer, cellPoint, action)) { |
| 1557 updateHitTestResult(result, locationInContainer.point() - to
LayoutSize(cellPoint)); | 1557 updateHitTestResult(result, locationInContainer.point() - to
LayoutSize(cellPoint)); |
| 1558 return true; | 1558 return true; |
| 1559 } | 1559 } |
| 1560 } | 1560 } |
| 1561 if (!request.listBased()) | 1561 if (!result.hitTestRequest().listBased()) |
| 1562 break; | 1562 break; |
| 1563 } | 1563 } |
| 1564 if (!request.listBased()) | 1564 if (!result.hitTestRequest().listBased()) |
| 1565 break; | 1565 break; |
| 1566 } | 1566 } |
| 1567 | 1567 |
| 1568 return false; | 1568 return false; |
| 1569 } | 1569 } |
| 1570 | 1570 |
| 1571 void LayoutTableSection::removeCachedCollapsedBorders(const LayoutTableCell* cel
l) | 1571 void LayoutTableSection::removeCachedCollapsedBorders(const LayoutTableCell* cel
l) |
| 1572 { | 1572 { |
| 1573 if (!table()->collapseBorders()) | 1573 if (!table()->collapseBorders()) |
| 1574 return; | 1574 return; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1608 // FIXME: The table's direction should determine our row's direction, not th
e section's (see bug 96691). | 1608 // FIXME: The table's direction should determine our row's direction, not th
e section's (see bug 96691). |
| 1609 if (!style()->isLeftToRightDirection()) | 1609 if (!style()->isLeftToRightDirection()) |
| 1610 cellLocation.setX(table()->columnPositions()[table()->numEffCols()] - ta
ble()->columnPositions()[table()->colToEffCol(cell->col() + cell->colSpan())] +
horizontalBorderSpacing); | 1610 cellLocation.setX(table()->columnPositions()[table()->numEffCols()] - ta
ble()->columnPositions()[table()->colToEffCol(cell->col() + cell->colSpan())] +
horizontalBorderSpacing); |
| 1611 else | 1611 else |
| 1612 cellLocation.setX(table()->columnPositions()[effectiveColumn] + horizont
alBorderSpacing); | 1612 cellLocation.setX(table()->columnPositions()[effectiveColumn] + horizont
alBorderSpacing); |
| 1613 | 1613 |
| 1614 cell->setLogicalLocation(cellLocation); | 1614 cell->setLogicalLocation(cellLocation); |
| 1615 } | 1615 } |
| 1616 | 1616 |
| 1617 } // namespace blink | 1617 } // namespace blink |
| OLD | NEW |