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

Side by Side Diff: third_party/WebKit/Source/core/editing/VisibleSelection.cpp

Issue 1645713002: Revert of Introduce SelectionAdjuster to adjust selections between DOM tree version and composed tree version (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 unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/editing/VisibleSelection.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 // |mostBackwardCaretPosition()|. However, we are here during 104 // |mostBackwardCaretPosition()|. However, we are here during
105 // |Node::removeChild()|. 105 // |Node::removeChild()|.
106 start.anchorNode()->updateDistribution(); 106 start.anchorNode()->updateDistribution();
107 end.anchorNode()->updateDistribution(); 107 end.anchorNode()->updateDistribution();
108 if (mostBackwardCaretPosition(start) == mostBackwardCaretPosition(end)) 108 if (mostBackwardCaretPosition(start) == mostBackwardCaretPosition(end))
109 return CaretSelection; 109 return CaretSelection;
110 return RangeSelection; 110 return RangeSelection;
111 } 111 }
112 112
113 template <typename Strategy> 113 template <typename Strategy>
114 VisibleSelectionTemplate<Strategy>::VisibleSelectionTemplate(
115 const PositionTemplate<Strategy>& base,
116 const PositionTemplate<Strategy>& extent,
117 const PositionTemplate<Strategy>& start,
118 const PositionTemplate<Strategy>& end,
119 TextAffinity affinity,
120 bool isDirectional)
121 : m_base(base)
122 , m_extent(extent)
123 , m_start(start)
124 , m_end(end)
125 , m_affinity(affinity)
126 , m_changeObserver(nullptr) // Observer is associated with only one VisibleS election, so this should not be copied.
127 , m_selectionType(computeSelectionType(start, end))
128 , m_baseIsFirst(base.isNull() || base.compareTo(extent) <= 0)
129 , m_isDirectional(isDirectional)
130 {
131 ASSERT(base.isNull() == extent.isNull());
132 ASSERT(base.isNull() == start.isNull());
133 ASSERT(base.isNull() == end.isNull());
134 ASSERT(start.isNull() || start.compareTo(end) <= 0);
135 }
136
137 template <typename Strategy>
114 VisibleSelectionTemplate<Strategy>::VisibleSelectionTemplate(const VisibleSelect ionTemplate<Strategy>& other) 138 VisibleSelectionTemplate<Strategy>::VisibleSelectionTemplate(const VisibleSelect ionTemplate<Strategy>& other)
115 : m_base(other.m_base) 139 : m_base(other.m_base)
116 , m_extent(other.m_extent) 140 , m_extent(other.m_extent)
117 , m_start(other.m_start) 141 , m_start(other.m_start)
118 , m_end(other.m_end) 142 , m_end(other.m_end)
119 , m_affinity(other.m_affinity) 143 , m_affinity(other.m_affinity)
120 , m_changeObserver(nullptr) // Observer is associated with only one VisibleS election, so this should not be copied. 144 , m_changeObserver(nullptr) // Observer is associated with only one VisibleS election, so this should not be copied.
121 , m_selectionType(other.m_selectionType) 145 , m_selectionType(other.m_selectionType)
122 , m_baseIsFirst(other.m_baseIsFirst) 146 , m_baseIsFirst(other.m_baseIsFirst)
123 , m_isDirectional(other.m_isDirectional) 147 , m_isDirectional(other.m_isDirectional)
(...skipping 10 matching lines...) Expand all
134 m_start = other.m_start; 158 m_start = other.m_start;
135 m_end = other.m_end; 159 m_end = other.m_end;
136 m_affinity = other.m_affinity; 160 m_affinity = other.m_affinity;
137 m_changeObserver = nullptr; 161 m_changeObserver = nullptr;
138 m_selectionType = other.m_selectionType; 162 m_selectionType = other.m_selectionType;
139 m_baseIsFirst = other.m_baseIsFirst; 163 m_baseIsFirst = other.m_baseIsFirst;
140 m_isDirectional = other.m_isDirectional; 164 m_isDirectional = other.m_isDirectional;
141 return *this; 165 return *this;
142 } 166 }
143 167
168 template <typename Strategy>
169 VisibleSelectionTemplate<Strategy> VisibleSelectionTemplate<Strategy>::createWit houtValidation(const PositionTemplate<Strategy>& base, const PositionTemplate<St rategy>& extent, const PositionTemplate<Strategy>& start, const PositionTemplate <Strategy>& end, TextAffinity affinity, bool isDirectional)
170 {
171 return VisibleSelectionTemplate<Strategy>(base, extent, start, end, affinity , isDirectional);
172 }
173
144 #if !ENABLE(OILPAN) 174 #if !ENABLE(OILPAN)
145 template <typename Strategy> 175 template <typename Strategy>
146 VisibleSelectionTemplate<Strategy>::~VisibleSelectionTemplate() 176 VisibleSelectionTemplate<Strategy>::~VisibleSelectionTemplate()
147 { 177 {
148 didChange(); 178 didChange();
149 } 179 }
150 #endif 180 #endif
151 181
152 template <typename Strategy> 182 template <typename Strategy>
153 VisibleSelectionTemplate<Strategy> VisibleSelectionTemplate<Strategy>::selection FromContentsOfNode(Node* node) 183 VisibleSelectionTemplate<Strategy> VisibleSelectionTemplate<Strategy>::selection FromContentsOfNode(Node* node)
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 return positionBeforeNode(ancestor); 736 return positionBeforeNode(ancestor);
707 return positionAfterNode(ancestor); 737 return positionAfterNode(ancestor);
708 } 738 }
709 739
710 if (Node* firstChild = treeScope.rootNode().firstChild()) 740 if (Node* firstChild = treeScope.rootNode().firstChild())
711 return positionBeforeNode(firstChild); 741 return positionBeforeNode(firstChild);
712 742
713 return Position(); 743 return Position();
714 } 744 }
715 745
716 // TODO(yosin): We should move 746 static VisibleSelection computeSelectionToAvoidCrossingShadowBoundaries(const Vi sibleSelection& selection)
717 // |SelectionAdjuster::adjustSelectionToAvoidCrossingShadowBoundaries()| to
718 // "SelectionAdjuster.cpp"
719 void SelectionAdjuster::adjustSelectionToAvoidCrossingShadowBoundaries(VisibleSe lection* selection)
720 { 747 {
721 // Note: |m_selectionType| isn't computed yet. 748 // Note: |m_selectionType| isn't computed yet.
722 ASSERT(selection->base().isNotNull()); 749 ASSERT(selection.base().isNotNull());
723 ASSERT(selection->extent().isNotNull()); 750 ASSERT(selection.extent().isNotNull());
724 ASSERT(selection->start().isNotNull()); 751 ASSERT(selection.start().isNotNull());
725 ASSERT(selection->end().isNotNull()); 752 ASSERT(selection.end().isNotNull());
726 753
727 // TODO(hajimehoshi): Checking treeScope is wrong when a node is 754 // TODO(hajimehoshi): Checking treeScope is wrong when a node is
728 // distributed, but we leave it as it is for backward compatibility. 755 // distributed, but we leave it as it is for backward compatibility.
729 if (selection->start().anchorNode()->treeScope() == selection->end().anchorN ode()->treeScope()) 756 if (selection.start().anchorNode()->treeScope() == selection.end().anchorNod e()->treeScope())
730 return; 757 return selection;
731 758
732 if (selection->isBaseFirst()) { 759 if (selection.isBaseFirst()) {
733 const Position& newEnd = adjustPositionForEnd(selection->end(), selectio n->start().computeContainerNode()); 760 const Position newEnd = adjustPositionForEnd(selection.end(), selection. start().computeContainerNode());
734 selection->m_extent = newEnd; 761 return VisibleSelection::createWithoutValidation(selection.base(), newEn d, selection.start(), newEnd, selection.affinity(), selection.isDirectional());
735 selection->m_end = newEnd;
736 return;
737 } 762 }
738 763
739 const Position& newStart = adjustPositionForStart(selection->start(), select ion->end().computeContainerNode()); 764 const Position newStart = adjustPositionForStart(selection.start(), selectio n.end().computeContainerNode());
740 selection->m_extent = newStart; 765 return VisibleSelection::createWithoutValidation(selection.base(), newStart, newStart, selection.end(), selection.affinity(), selection.isDirectional());
741 selection->m_start = newStart;
742 } 766 }
743 767
744 // TODO(yosin): We should move
745 // |SelectionAdjuster::adjustSelectionToAvoidCrossingShadowBoundaries()| to
746 // "SelectionAdjuster.cpp"
747 // This function is called twice. The first is called when |m_start| and |m_end| 768 // This function is called twice. The first is called when |m_start| and |m_end|
748 // or |m_extent| are same, and the second when |m_start| and |m_end| are changed 769 // or |m_extent| are same, and the second when |m_start| and |m_end| are changed
749 // after downstream/upstream. 770 // after downstream/upstream.
750 void SelectionAdjuster::adjustSelectionToAvoidCrossingShadowBoundaries(VisibleSe lectionInComposedTree* selection) 771 static VisibleSelectionInComposedTree computeSelectionToAvoidCrossingShadowBound aries(const VisibleSelectionInComposedTree& selection)
751 { 772 {
752 Node* const shadowHostStart = enclosingShadowHostForStart(selection->start() ); 773 Node* shadowHostStart = enclosingShadowHostForStart(selection.start());
753 Node* const shadowHostEnd = enclosingShadowHostForEnd(selection->end()); 774 Node* shadowHostEnd = enclosingShadowHostForEnd(selection.end());
754 if (shadowHostStart == shadowHostEnd) 775 if (shadowHostStart == shadowHostEnd)
755 return; 776 return selection;
756 777
757 if (selection->isBaseFirst()) { 778 if (selection.isBaseFirst()) {
758 Node* const shadowHost = shadowHostStart ? shadowHostStart : shadowHostE nd; 779 Node* shadowHost = shadowHostStart ? shadowHostStart : shadowHostEnd;
759 const PositionInComposedTree& newEnd = adjustPositionInComposedTreeForEn d(selection->end(), shadowHost); 780 const PositionInComposedTree newEnd = adjustPositionInComposedTreeForEnd (selection.end(), shadowHost);
760 selection->m_extent = newEnd; 781 return VisibleSelectionInComposedTree::createWithoutValidation(selection .base(), newEnd, selection.start(), newEnd, selection.affinity(), selection.isDi rectional());
761 selection->m_end = newEnd;
762 return;
763 } 782 }
764 Node* const shadowHost = shadowHostEnd ? shadowHostEnd : shadowHostStart; 783 Node* shadowHost = shadowHostEnd ? shadowHostEnd : shadowHostStart;
765 const PositionInComposedTree& newStart = adjustPositionInComposedTreeForStar t(selection->start(), shadowHost); 784 const PositionInComposedTree newStart = adjustPositionInComposedTreeForStart (selection.start(), shadowHost);
766 selection->m_extent = newStart; 785 return VisibleSelectionInComposedTree::createWithoutValidation(selection.bas e(), newStart, newStart, selection.end(), selection.affinity(), selection.isDire ctional());
767 selection->m_start = newStart;
768 } 786 }
769 787
770 template <typename Strategy> 788 template <typename Strategy>
771 void VisibleSelectionTemplate<Strategy>::adjustSelectionToAvoidCrossingShadowBou ndaries() 789 void VisibleSelectionTemplate<Strategy>::adjustSelectionToAvoidCrossingShadowBou ndaries()
772 { 790 {
773 if (m_base.isNull() || m_start.isNull() || m_base.isNull()) 791 if (m_base.isNull() || m_start.isNull() || m_base.isNull())
774 return; 792 return;
775 SelectionAdjuster::adjustSelectionToAvoidCrossingShadowBoundaries(this); 793 *this = computeSelectionToAvoidCrossingShadowBoundaries(*this);
776 } 794 }
777 795
778 static Element* lowestEditableAncestor(Node* node) 796 static Element* lowestEditableAncestor(Node* node)
779 { 797 {
780 while (node) { 798 while (node) {
781 if (node->hasEditableStyle()) 799 if (node->hasEditableStyle())
782 return node->rootEditableElement(); 800 return node->rootEditableElement();
783 if (isHTMLBodyElement(*node)) 801 if (isHTMLBodyElement(*node))
784 break; 802 break;
785 node = node->parentNode(); 803 node = node->parentNode();
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 { 1147 {
1130 sel.showTreeForThis(); 1148 sel.showTreeForThis();
1131 } 1149 }
1132 1150
1133 void showTree(const blink::VisibleSelectionInComposedTree* sel) 1151 void showTree(const blink::VisibleSelectionInComposedTree* sel)
1134 { 1152 {
1135 if (sel) 1153 if (sel)
1136 sel->showTreeForThis(); 1154 sel->showTreeForThis();
1137 } 1155 }
1138 #endif 1156 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/editing/VisibleSelection.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698