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/markers/DocumentMarkerController.cpp

Issue 2833043002: [DMC #1.93] Make DocumentMarkerController::AddMarker() take a pointer instead of a const ref (Closed)
Patch Set: Remove dep Created 3 years, 7 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/markers/DocumentMarkerController.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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
7 * reserved. 7 * reserved.
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 } 89 }
90 90
91 void DocumentMarkerController::AddMarker(const Position& start, 91 void DocumentMarkerController::AddMarker(const Position& start,
92 const Position& end, 92 const Position& end,
93 DocumentMarker::MarkerType type, 93 DocumentMarker::MarkerType type,
94 const String& description) { 94 const String& description) {
95 // Use a TextIterator to visit the potentially multiple nodes the range 95 // Use a TextIterator to visit the potentially multiple nodes the range
96 // covers. 96 // covers.
97 for (TextIterator marked_text(start, end); !marked_text.AtEnd(); 97 for (TextIterator marked_text(start, end); !marked_text.AtEnd();
98 marked_text.Advance()) { 98 marked_text.Advance()) {
99 AddMarker( 99 AddMarker(marked_text.CurrentContainer(),
100 marked_text.CurrentContainer(), 100 new DocumentMarker(
101 DocumentMarker(type, marked_text.StartOffsetInCurrentContainer(), 101 type, marked_text.StartOffsetInCurrentContainer(),
102 marked_text.EndOffsetInCurrentContainer(), description)); 102 marked_text.EndOffsetInCurrentContainer(), description));
103 } 103 }
104 } 104 }
105 105
106 void DocumentMarkerController::AddTextMatchMarker( 106 void DocumentMarkerController::AddTextMatchMarker(
107 const EphemeralRange& range, 107 const EphemeralRange& range,
108 DocumentMarker::MatchStatus match_status) { 108 DocumentMarker::MatchStatus match_status) {
109 DCHECK(!document_->NeedsLayoutTreeUpdate()); 109 DCHECK(!document_->NeedsLayoutTreeUpdate());
110 110
111 // Use a TextIterator to visit the potentially multiple nodes the range 111 // Use a TextIterator to visit the potentially multiple nodes the range
112 // covers. 112 // covers.
113 for (TextIterator marked_text(range.StartPosition(), range.EndPosition()); 113 for (TextIterator marked_text(range.StartPosition(), range.EndPosition());
114 !marked_text.AtEnd(); marked_text.Advance()) { 114 !marked_text.AtEnd(); marked_text.Advance()) {
115 AddMarker(marked_text.CurrentContainer(), 115 AddMarker(marked_text.CurrentContainer(),
116 DocumentMarker(marked_text.StartOffsetInCurrentContainer(), 116 new DocumentMarker(marked_text.StartOffsetInCurrentContainer(),
117 marked_text.EndOffsetInCurrentContainer(), 117 marked_text.EndOffsetInCurrentContainer(),
118 match_status)); 118 match_status));
119 } 119 }
120 // Don't invalidate tickmarks here. TextFinder invalidates tickmarks using a 120 // Don't invalidate tickmarks here. TextFinder invalidates tickmarks using a
121 // throttling algorithm. crbug.com/6819. 121 // throttling algorithm. crbug.com/6819.
122 } 122 }
123 123
124 void DocumentMarkerController::AddCompositionMarker(const Position& start, 124 void DocumentMarkerController::AddCompositionMarker(const Position& start,
125 const Position& end, 125 const Position& end,
126 Color underline_color, 126 Color underline_color,
127 bool thick, 127 bool thick,
128 Color background_color) { 128 Color background_color) {
129 DCHECK(!document_->NeedsLayoutTreeUpdate()); 129 DCHECK(!document_->NeedsLayoutTreeUpdate());
130 130
131 for (TextIterator marked_text(start, end); !marked_text.AtEnd(); 131 for (TextIterator marked_text(start, end); !marked_text.AtEnd();
132 marked_text.Advance()) 132 marked_text.Advance()) {
133 AddMarker(marked_text.CurrentContainer(), 133 AddMarker(marked_text.CurrentContainer(),
134 DocumentMarker(marked_text.StartOffsetInCurrentContainer(), 134 new DocumentMarker(marked_text.StartOffsetInCurrentContainer(),
135 marked_text.EndOffsetInCurrentContainer(), 135 marked_text.EndOffsetInCurrentContainer(),
136 underline_color, thick, background_color)); 136 underline_color, thick, background_color));
137 }
137 } 138 }
138 139
139 void DocumentMarkerController::PrepareForDestruction() { 140 void DocumentMarkerController::PrepareForDestruction() {
140 Clear(); 141 Clear();
141 } 142 }
142 143
143 void DocumentMarkerController::RemoveMarkers( 144 void DocumentMarkerController::RemoveMarkers(
144 TextIterator& marked_text, 145 TextIterator& marked_text,
145 DocumentMarker::MarkerTypes marker_types) { 146 DocumentMarker::MarkerTypes marker_types) {
146 for (; !marked_text.AtEnd(); marked_text.Advance()) { 147 for (; !marked_text.AtEnd(); marked_text.Advance()) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 } else { 183 } else {
183 marker.NullifyRenderedRect(); 184 marker.NullifyRenderedRect();
184 } 185 }
185 range->Dispose(); 186 range->Dispose();
186 } 187 }
187 188
188 // Markers are stored in order sorted by their start offset. 189 // Markers are stored in order sorted by their start offset.
189 // Markers of the same type do not overlap each other. 190 // Markers of the same type do not overlap each other.
190 191
191 void DocumentMarkerController::AddMarker(Node* node, 192 void DocumentMarkerController::AddMarker(Node* node,
192 const DocumentMarker& new_marker) { 193 DocumentMarker* new_marker) {
193 DCHECK_GE(new_marker.EndOffset(), new_marker.StartOffset()); 194 DCHECK_GE(new_marker->EndOffset(), new_marker->StartOffset());
194 if (new_marker.EndOffset() == new_marker.StartOffset()) 195 if (new_marker->EndOffset() == new_marker->StartOffset())
195 return; 196 return;
196 197
197 possibly_existing_marker_types_.Add(new_marker.GetType()); 198 possibly_existing_marker_types_.Add(new_marker->GetType());
198 199
199 Member<MarkerLists>& markers = 200 Member<MarkerLists>& markers =
200 markers_.insert(node, nullptr).stored_value->value; 201 markers_.insert(node, nullptr).stored_value->value;
201 if (!markers) { 202 if (!markers) {
202 markers = new MarkerLists; 203 markers = new MarkerLists;
203 markers->Grow(DocumentMarker::kMarkerTypeIndexesCount); 204 markers->Grow(DocumentMarker::kMarkerTypeIndexesCount);
204 } 205 }
205 206
206 const DocumentMarker::MarkerType new_marker_type = new_marker.GetType(); 207 const DocumentMarker::MarkerType new_marker_type = new_marker->GetType();
207 if (!ListForType(markers, new_marker_type)) 208 if (!ListForType(markers, new_marker_type))
208 ListForType(markers, new_marker_type) = new MarkerList; 209 ListForType(markers, new_marker_type) = new MarkerList;
209 210
210 Member<MarkerList>& list = ListForType(markers, new_marker_type); 211 Member<MarkerList>& list = ListForType(markers, new_marker_type);
211 DocumentMarkerListEditor::AddMarker(list, &new_marker); 212 DocumentMarkerListEditor::AddMarker(list, new_marker);
212 213
213 // repaint the affected node 214 // repaint the affected node
214 if (node->GetLayoutObject()) { 215 if (node->GetLayoutObject()) {
215 node->GetLayoutObject()->SetShouldDoFullPaintInvalidation( 216 node->GetLayoutObject()->SetShouldDoFullPaintInvalidation(
216 kPaintInvalidationDocumentMarkerChange); 217 kPaintInvalidationDocumentMarkerChange);
217 } 218 }
218 } 219 }
219 220
220 // Moves markers from src_node to dst_node. Markers are moved if their start 221 // Moves markers from src_node to dst_node. Markers are moved if their start
221 // offset is less than length. Markers that run past that point are truncated. 222 // offset is less than length. Markers that run past that point are truncated.
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 } 739 }
739 740
740 } // namespace blink 741 } // namespace blink
741 742
742 #ifndef NDEBUG 743 #ifndef NDEBUG
743 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { 744 void showDocumentMarkers(const blink::DocumentMarkerController* controller) {
744 if (controller) 745 if (controller)
745 controller->ShowMarkers(); 746 controller->ShowMarkers();
746 } 747 }
747 #endif 748 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698