void RenderTableRow::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset) { ASSERT(hasSelfPaintingLayer()); paintOutlineForRowIfNeeded(paintInfo, paintOffset); for (RenderTableCell* cell = firstCell(); cell; cell = cell->nextCell()) { // Paint the row background behind the cell. if (paintInfo.phase == PaintPhaseBlockBackground || paintInfo.phase == PaintPhaseChildBlockBackground) cell->paintBackgroundsBehindCell(paintInfo, paintOffset, this); if (!cell->hasSelfPaintingLayer()) cell->paint(paintInfo, paintOffset); } }
// Hit Testing bool RenderTableRow::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction action) { // Table rows cannot ever be hit tested. Effectively they do not exist. // Just forward to our children always. for (RenderTableCell* cell = lastCell(); cell; cell = cell->previousCell()) { // FIXME: We have to skip over inline flows, since they can show up inside table rows // at the moment (a demoted inline <form> for example). If we ever implement a // table-specific hit-test method (which we should do for performance reasons anyway), // then we can remove this check. if (!cell->hasSelfPaintingLayer()) { LayoutPoint cellPoint = flipForWritingModeForChild(cell, accumulatedOffset); if (cell->nodeAtPoint(request, result, locationInContainer, cellPoint, action)) { updateHitTestResult(result, locationInContainer.point() - toLayoutSize(cellPoint)); return true; } } } return false; }