Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: third_party/WebKit/Source/core/editing/SelectionEditor.cpp

Issue 1640913002: Revert of Move SelectionAdjust to its own file (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 bc36df3dc1fa2a2e5330d32334f994ed5ed1c740..fbd247d8673b518839b7918501dded9b9b179955 100644
--- a/third_party/WebKit/Source/core/editing/SelectionEditor.cpp
+++ b/third_party/WebKit/Source/core/editing/SelectionEditor.cpp
@@ -27,7 +27,6 @@
#include "core/editing/EditingUtilities.h"
#include "core/editing/Editor.h"
-#include "core/editing/SelectionAdjuster.h"
#include "core/events/Event.h"
#include "core/frame/LocalFrame.h"
#include "core/frame/Settings.h"
@@ -96,6 +95,83 @@
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();
+ 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());
+ 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();
+}
+
+static bool isCrossingShadowBoundaries(const VisibleSelectionInComposedTree& selection)
+{
+ if (!selection.isRange())
+ return false;
+ TreeScope& treeScope = selection.base().anchorNode()->treeScope();
+ return selection.extent().anchorNode()->treeScope() != treeScope
+ || selection.start().anchorNode()->treeScope() != treeScope
+ || 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();
+ return;
+ }
+
+ const Position& base = toPositionInDOMTree(selectionInComposedTree.base());
+ const Position& extent = toPositionInDOMTree(selectionInComposedTree.extent());
+
+ if (isCrossingShadowBoundaries(selectionInComposedTree)) {
+ *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();
}
void SelectionEditor::resetXPosForVerticalArrowNavigation()

Powered by Google App Engine
This is Rietveld 408576698