void LineBreaker::skipLeadingWhitespace(InlineBidiResolver& resolver, LineInfo& lineInfo, LineWidth& width) { while (!resolver.position().atEnd() && !requiresLineBox(resolver.position(), lineInfo, LeadingWhitespace)) { LineLayoutItem lineLayoutItem = resolver.position().getLineLayoutItem(); if (lineLayoutItem.isOutOfFlowPositioned()) { setStaticPositions(m_block, LineLayoutBox(lineLayoutItem), width.indentText()); if (lineLayoutItem.style()->isOriginalDisplayInlineType()) { resolver.runs().addRun(createRun(0, 1, LineLayoutItem(lineLayoutItem), resolver)); lineInfo.incrementRunsFromLeadingWhitespace(); } } else if (lineLayoutItem.isFloating()) { m_block.insertFloatingObject(LineLayoutBox(lineLayoutItem)); m_block.positionNewFloats(&width); } resolver.position().increment(&resolver); } resolver.commitExplicitEmbedding(resolver.runs()); }
bool LineBoxList::rangeIntersectsRect(LineLayoutBoxModel layoutObject, LayoutUnit logicalTop, LayoutUnit logicalBottom, const CullRect& cullRect, const LayoutPoint& offset) const { LineLayoutBox block; if (layoutObject.isBox()) block = LineLayoutBox(layoutObject); else block = layoutObject.containingBlock(); LayoutUnit physicalStart = block.flipForWritingMode(logicalTop); LayoutUnit physicalEnd = block.flipForWritingMode(logicalBottom); LayoutUnit physicalExtent = absoluteValue(physicalEnd - physicalStart); physicalStart = std::min(physicalStart, physicalEnd); if (layoutObject.style()->isHorizontalWritingMode()) { physicalStart += offset.y(); return cullRect.intersectsVerticalRange(physicalStart, physicalStart + physicalExtent); } else { physicalStart += offset.x(); return cullRect.intersectsHorizontalRange(physicalStart, physicalStart + physicalExtent); } }