Commit b710f969 authored by Yoshifumi Inoue's avatar Yoshifumi Inoue Committed by Commit Bot

Make LayoutText::AbsoluteQuadsForRange() to utilize NGInlineCursor

This patch makes |LayoutText::AbsoluteQuadsForRange()| to utilize
|NGInlineCursor| for prepration of migrating to |NGFragmentItem|.

Bug: 982194
Change-Id: I53a0fc41f6d9dc52823949382864aa3c7f91211a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1910988
Auto-Submit: Yoshifumi Inoue <yosin@chromium.org>
Commit-Queue: Koji Ishii <kojii@chromium.org>
Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714456}
parent 95e2b614
...@@ -562,21 +562,19 @@ void LayoutText::AbsoluteQuadsForRange(Vector<FloatQuad>& quads, ...@@ -562,21 +562,19 @@ void LayoutText::AbsoluteQuadsForRange(Vector<FloatQuad>& quads,
// Find fragments that have text for the specified range. // Find fragments that have text for the specified range.
DCHECK_LE(start, end); DCHECK_LE(start, end);
auto fragments = NGPaintFragment::InlineFragmentsFor(this);
const LayoutBlock* block_for_flipping = nullptr; const LayoutBlock* block_for_flipping = nullptr;
if (UNLIKELY(HasFlippedBlocksWritingMode())) if (UNLIKELY(HasFlippedBlocksWritingMode()))
block_for_flipping = ContainingBlock(); block_for_flipping = ContainingBlock();
for (const NGPaintFragment* fragment : fragments) { NGInlineCursor cursor;
const auto& text_fragment = for (cursor.MoveTo(*this); cursor; cursor.MoveToNextForSameLayoutObject()) {
To<NGPhysicalTextFragment>(fragment->PhysicalFragment()); const unsigned start_offset = cursor.CurrentTextStartOffset();
if (start > text_fragment.EndOffset() || const unsigned end_offset = cursor.CurrentTextEndOffset();
end < text_fragment.StartOffset()) if (start > end_offset || end < start_offset)
continue; continue;
const unsigned clamped_start = const unsigned clamped_start = std::max(start, start_offset);
std::max(start, text_fragment.StartOffset()); const unsigned clamped_end = std::min(end, end_offset);
const unsigned clamped_end = std::min(end, text_fragment.EndOffset()); PhysicalRect rect = cursor.CurrentLocalRect(clamped_start, clamped_end);
PhysicalRect rect = text_fragment.LocalRect(clamped_start, clamped_end); rect.Move(cursor.CurrentOffset());
rect.Move(fragment->InlineOffsetToContainerBox());
const FloatQuad quad = LocalRectToAbsoluteQuad(rect); const FloatQuad quad = LocalRectToAbsoluteQuad(rect);
if (clamped_start < clamped_end) { if (clamped_start < clamped_end) {
quads.push_back(quad); quads.push_back(quad);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment