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

Clean up layout_selection.cc local functions.

This patch extracts MarkSelected at call sites since the function
used to be called not directly because of LayoutTextFragment.

This patch also shrinks ComputeNewPaintRange not to bring a hashset.
Then the hashset appears only at one function.

Bug: 889360

Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_layout_ng
Change-Id: I44a020ccf9172c6159bec5251a3ab3733b7d4868
Reviewed-on: https://chromium-review.googlesource.com/1244699Reviewed-by: default avatarXiaocheng Hu <xiaochengh@chromium.org>
Commit-Queue: Yoichi Osato <yoichio@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594568}
parent b2c61fdf
...@@ -445,14 +445,6 @@ static base::Optional<unsigned> ComputeEndOffset( ...@@ -445,14 +445,6 @@ static base::Optional<unsigned> ComputeEndOffset(
return ToText(node).length(); return ToText(node).length();
} }
static void MarkSelected(HeapHashSet<Member<const Node>>* selected_objects,
const Node& node,
SelectionState state) {
DCHECK(node.GetLayoutObject()->CanBeSelectionLeaf());
SetSelectionStateIfNeeded(node, state);
selected_objects->insert(&node);
}
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
// Position should be offset on text or before/after a break element. // Position should be offset on text or before/after a break element.
static bool IsPositionValidText(const Position& position) { static bool IsPositionValidText(const Position& position) {
...@@ -515,10 +507,9 @@ static base::Optional<unsigned> GetTextContentOffsetEnd( ...@@ -515,10 +507,9 @@ static base::Optional<unsigned> GetTextContentOffsetEnd(
return GetTextContentOffset(Position::AfterNode(node)); return GetTextContentOffset(Position::AfterNode(node));
} }
static NewPaintRangeAndSelectedNodes ComputeNewPaintRange( static SelectionPaintRange* ComputeNewPaintRange(
NewPaintRangeAndSelectedNodes* new_range) { const SelectionPaintRange& paint_range) {
const SelectionPaintRange& paint_range = *new_range->paint_range; DCHECK(!paint_range.IsNull());
DCHECK(!paint_range.IsNull()) << new_range;
const Node& start_node = *paint_range.start_node; const Node& start_node = *paint_range.start_node;
// If LayoutObject is not in NG, use legacy offset. // If LayoutObject is not in NG, use legacy offset.
...@@ -533,9 +524,8 @@ static NewPaintRangeAndSelectedNodes ComputeNewPaintRange( ...@@ -533,9 +524,8 @@ static NewPaintRangeAndSelectedNodes ComputeNewPaintRange(
? GetTextContentOffsetEnd(end_node, paint_range.end_offset) ? GetTextContentOffsetEnd(end_node, paint_range.end_offset)
: paint_range.end_offset; : paint_range.end_offset;
return {new SelectionPaintRange(*paint_range.start_node, start_offset, return new SelectionPaintRange(*paint_range.start_node, start_offset,
*paint_range.end_node, end_offset), *paint_range.end_node, end_offset);
std::move(new_range->selected_objects)};
} }
// ClampOffset modifies |offset| fixed in a range of |text_fragment| start/end // ClampOffset modifies |offset| fixed in a range of |text_fragment| start/end
...@@ -755,8 +745,10 @@ static NewPaintRangeAndSelectedNodes CalcSelectionRangeAndSetSelectionState( ...@@ -755,8 +745,10 @@ static NewPaintRangeAndSelectedNodes CalcSelectionRangeAndSetSelectionState(
// In this loop, |end_node| is pointing current last candidate // In this loop, |end_node| is pointing current last candidate
// LayoutObject and if it is not start and we find next, we mark the // LayoutObject and if it is not start and we find next, we mark the
// current one as kInside. // current one as kInside.
if (end_node != start_node) if (end_node != start_node) {
MarkSelected(&selected_objects, *end_node, SelectionState::kInside); SetSelectionStateIfNeeded(*end_node, SelectionState::kInside);
selected_objects.insert(end_node);
}
end_node = &node; end_node = &node;
} }
...@@ -772,18 +764,20 @@ static NewPaintRangeAndSelectedNodes CalcSelectionRangeAndSetSelectionState( ...@@ -772,18 +764,20 @@ static NewPaintRangeAndSelectedNodes CalcSelectionRangeAndSetSelectionState(
const base::Optional<unsigned> end_offset = const base::Optional<unsigned> end_offset =
ComputeEndOffset(*end_node, selection.EndPosition().ToOffsetInAnchor()); ComputeEndOffset(*end_node, selection.EndPosition().ToOffsetInAnchor());
if (start_node == end_node) { if (start_node == end_node) {
MarkSelected(&selected_objects, *start_node, SelectionState::kStartAndEnd); SetSelectionStateIfNeeded(*start_node, SelectionState::kStartAndEnd);
selected_objects.insert(start_node);
} else { } else {
MarkSelected(&selected_objects, *start_node, SelectionState::kStart); SetSelectionStateIfNeeded(*start_node, SelectionState::kStart);
MarkSelected(&selected_objects, *end_node, SelectionState::kEnd); selected_objects.insert(start_node);
SetSelectionStateIfNeeded(*end_node, SelectionState::kEnd);
selected_objects.insert(end_node);
} }
NewPaintRangeAndSelectedNodes new_range = {
new SelectionPaintRange(*start_node, start_offset, *end_node, end_offset),
std::move(selected_objects)};
SelectionPaintRange* new_range =
new SelectionPaintRange(*start_node, start_offset, *end_node, end_offset);
if (!RuntimeEnabledFeatures::LayoutNGEnabled()) if (!RuntimeEnabledFeatures::LayoutNGEnabled())
return new_range; return {new_range, std::move(selected_objects)};
return ComputeNewPaintRange(&new_range); return {ComputeNewPaintRange(*new_range), std::move(selected_objects)};
} }
void LayoutSelection::SetHasPendingSelection() { void LayoutSelection::SetHasPendingSelection() {
......
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