| Index: third_party/WebKit/Source/core/editing/SelectionEditor.cpp
|
| diff --git a/third_party/WebKit/Source/core/editing/SelectionEditor.cpp b/third_party/WebKit/Source/core/editing/SelectionEditor.cpp
|
| index fbd247d8673b518839b7918501dded9b9b179955..baf61a1fd182d9fa587e6f104c189bc2655df8d1 100644
|
| --- a/third_party/WebKit/Source/core/editing/SelectionEditor.cpp
|
| +++ b/third_party/WebKit/Source/core/editing/SelectionEditor.cpp
|
| @@ -87,46 +87,35 @@
|
| return;
|
| }
|
|
|
| - SelectionAdjuster::adjustSelectionInComposedTree(&m_selectionInComposedTree, m_selection);
|
| + adjustVisibleSelectionInComposedTree();
|
| }
|
|
|
| void SelectionEditor::setVisibleSelection(const VisibleSelectionInComposedTree& newSelection, FrameSelection::SetSelectionOptions options)
|
| {
|
| ASSERT(!(options & FrameSelection::DoNotAdjustInComposedTree));
|
| m_selectionInComposedTree = newSelection;
|
| - SelectionAdjuster::adjustSelectionInDOMTree(&m_selection, m_selectionInComposedTree);
|
| -}
|
| -
|
| -// TODO(yosin): We should move
|
| -// |SelectionAdjuster::adjustSelectionInComposedTree()| to
|
| -// "SelectionAdjuster.cpp"
|
| -// Updates |selectionInComposedTree| to match with |selection|.
|
| -void SelectionAdjuster::adjustSelectionInComposedTree(VisibleSelectionInComposedTree* selectionInComposedTree, const VisibleSelection& selection)
|
| -{
|
| - if (selection.isNone()) {
|
| - *selectionInComposedTree = VisibleSelectionInComposedTree();
|
| + adjustVisibleSelectionInDOMTree();
|
| +}
|
| +
|
| +// Updates |m_selectionInComposedTree| to match with |m_selection|.
|
| +void SelectionEditor::adjustVisibleSelectionInComposedTree()
|
| +{
|
| + if (m_selection.isNone()) {
|
| + m_selectionInComposedTree = VisibleSelectionInComposedTree();
|
| return;
|
| }
|
|
|
| - const PositionInComposedTree& base = toPositionInComposedTree(selection.base());
|
| - const PositionInComposedTree& extent = toPositionInComposedTree(selection.extent());
|
| - const PositionInComposedTree& position1 = toPositionInComposedTree(selection.start());
|
| - const PositionInComposedTree& position2 = toPositionInComposedTree(selection.end());
|
| + const PositionInComposedTree base = toPositionInComposedTree(m_selection.base());
|
| + const PositionInComposedTree extent = toPositionInComposedTree(m_selection.extent());
|
| + const PositionInComposedTree position1 = toPositionInComposedTree(m_selection.start());
|
| + const PositionInComposedTree position2 = toPositionInComposedTree(m_selection.end());
|
| position1.anchorNode()->updateDistribution();
|
| position2.anchorNode()->updateDistribution();
|
| - selectionInComposedTree->m_base = base;
|
| - selectionInComposedTree->m_extent = extent;
|
| - selectionInComposedTree->m_affinity = selection.m_affinity;
|
| - selectionInComposedTree->m_isDirectional = selection.m_isDirectional;
|
| - selectionInComposedTree->m_baseIsFirst = base.isNull() || base.compareTo(extent) <= 0;
|
| if (position1.compareTo(position2) <= 0) {
|
| - selectionInComposedTree->m_start = position1;
|
| - selectionInComposedTree->m_end = position2;
|
| - } else {
|
| - selectionInComposedTree->m_start = position2;
|
| - selectionInComposedTree->m_end = position1;
|
| - }
|
| - selectionInComposedTree->updateSelectionType();
|
| + m_selectionInComposedTree = VisibleSelectionInComposedTree::createWithoutValidation(base, extent, position1, position2, m_selection.affinity(), m_selection.isDirectional());
|
| + return;
|
| + }
|
| + m_selectionInComposedTree = VisibleSelectionInComposedTree::createWithoutValidation(base, extent, position2, position1, m_selection.affinity(), m_selection.isDirectional());
|
| }
|
|
|
| static bool isCrossingShadowBoundaries(const VisibleSelectionInComposedTree& selection)
|
| @@ -139,39 +128,30 @@
|
| || selection.end().anchorNode()->treeScope() != treeScope;
|
| }
|
|
|
| -// TODO(yosin): We should move
|
| -// |SelectionAdjuster::adjustSelectionInDOMTree()| to
|
| -// "SelectionAdjuster.cpp"
|
| -void SelectionAdjuster::adjustSelectionInDOMTree(VisibleSelection* selection, const VisibleSelectionInComposedTree& selectionInComposedTree)
|
| -{
|
| - if (selectionInComposedTree.isNone()) {
|
| - *selection = VisibleSelection();
|
| +void SelectionEditor::adjustVisibleSelectionInDOMTree()
|
| +{
|
| + if (m_selectionInComposedTree.isNone()) {
|
| + m_selection = VisibleSelection();
|
| return;
|
| }
|
|
|
| - const Position& base = toPositionInDOMTree(selectionInComposedTree.base());
|
| - const Position& extent = toPositionInDOMTree(selectionInComposedTree.extent());
|
| -
|
| - if (isCrossingShadowBoundaries(selectionInComposedTree)) {
|
| - *selection = VisibleSelection(base, extent);
|
| + const Position base = toPositionInDOMTree(m_selectionInComposedTree.base());
|
| + const Position extent = toPositionInDOMTree(m_selectionInComposedTree.extent());
|
| +
|
| + if (isCrossingShadowBoundaries(m_selectionInComposedTree)) {
|
| + m_selection = VisibleSelection(base, extent);
|
| return;
|
| }
|
|
|
| - const Position& position1 = toPositionInDOMTree(selectionInComposedTree.start());
|
| - const Position& position2 = toPositionInDOMTree(selectionInComposedTree.end());
|
| - selection->m_base = base;
|
| - selection->m_extent = extent;
|
| - selection->m_affinity = selectionInComposedTree.m_affinity;
|
| - selection->m_isDirectional = selectionInComposedTree.m_isDirectional;
|
| - selection->m_baseIsFirst = base.isNull() || base.compareTo(extent) <= 0;
|
| - if (position1.compareTo(position2) <= 0) {
|
| - selection->m_start = position1;
|
| - selection->m_end = position2;
|
| - } else {
|
| - selection->m_start = position2;
|
| - selection->m_end = position1;
|
| - }
|
| - selection->updateSelectionType();
|
| + const Position start = toPositionInDOMTree(m_selectionInComposedTree.start());
|
| + const Position end = toPositionInDOMTree(m_selectionInComposedTree.end());
|
| + const TextAffinity affinity = m_selectionInComposedTree.affinity();
|
| + const bool isDirectional = m_selectionInComposedTree.isDirectional();
|
| + if (start.compareTo(end) <= 0) {
|
| + m_selection = VisibleSelection::createWithoutValidation(base, extent, start, end, affinity, isDirectional);
|
| + return;
|
| + }
|
| + m_selection = VisibleSelection::createWithoutValidation(base, extent, end, start, affinity, isDirectional);
|
| }
|
|
|
| void SelectionEditor::resetXPosForVerticalArrowNavigation()
|
|
|