Commit cb183afb authored by Yoichi Osato's avatar Yoichi Osato Committed by Commit Bot

Move the end of traversing LayoutObject to SelectionPaintRange member

Instead of calculating the stop LayoutObject, compute it in 
SelectionPaintRange constructor.

This is preparation for splitting SelectionState marking and
 invalidation.

Bug: 739062
Change-Id: I97083643ca9beb010f879b5c5048d71ce1783ed8
Reviewed-on: https://chromium-review.googlesource.com/577327Reviewed-by: default avatarYoshifumi Inoue <yosin@chromium.org>
Commit-Queue: Yoichi Osato <yoichio@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487789}
parent 69002de7
......@@ -42,6 +42,9 @@ SelectionPaintRange::SelectionPaintRange(LayoutObject* start_layout_object,
end_offset_(end_offset) {
DCHECK(start_layout_object_);
DCHECK(end_layout_object_);
traverse_stop_ = end_layout_object_->ChildAt(end_offset);
if (!traverse_stop_)
traverse_stop_ = end_layout_object_->NextInPreOrderAfterChildren();
if (start_layout_object_ != end_layout_object_)
return;
DCHECK_LT(start_offset_, end_offset_);
......@@ -79,12 +82,8 @@ SelectionPaintRange::Iterator::Iterator(const SelectionPaintRange* range) {
current_ = nullptr;
return;
}
range_ = range;
current_ = range->StartLayoutObject();
included_end_ = range->EndLayoutObject();
stop_ = range->EndLayoutObject()->ChildAt(range->EndOffset());
if (stop_)
return;
stop_ = range->EndLayoutObject()->NextInPreOrderAfterChildren();
}
LayoutObject* SelectionPaintRange::Iterator::operator*() const {
......@@ -94,9 +93,10 @@ LayoutObject* SelectionPaintRange::Iterator::operator*() const {
SelectionPaintRange::Iterator& SelectionPaintRange::Iterator::operator++() {
DCHECK(current_);
for (current_ = current_->NextInPreOrder(); current_ && current_ != stop_;
for (current_ = current_->NextInPreOrder();
current_ && current_ != range_->traverse_stop_;
current_ = current_->NextInPreOrder()) {
if (current_ == included_end_ || current_->CanBeSelectionLeaf())
if (current_->CanBeSelectionLeaf())
return *this;
}
......
......@@ -57,9 +57,8 @@ class SelectionPaintRange {
LayoutObject* operator*() const;
private:
const SelectionPaintRange* range_;
LayoutObject* current_;
const LayoutObject* included_end_;
const LayoutObject* stop_;
};
Iterator begin() const { return Iterator(this); };
Iterator end() const { return Iterator(nullptr); };
......@@ -84,6 +83,7 @@ class SelectionPaintRange {
int start_offset_ = -1;
LayoutObject* end_layout_object_ = nullptr;
int end_offset_ = -1;
LayoutObject* traverse_stop_ = nullptr;
};
class LayoutSelection final : public GarbageCollected<LayoutSelection> {
......
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