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

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

Issue 2723663002: Refactor DocumentMarkerController (Closed)
Patch Set: Make requested changes, rebase (HashMap::remove() => HashMap::erase()) Created 3 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 m_details(TextCompositionMarkerDetails::create(underlineColor, 159 m_details(TextCompositionMarkerDetails::create(underlineColor,
160 thick, 160 thick,
161 backgroundColor)) {} 161 backgroundColor)) {}
162 162
163 DocumentMarker::DocumentMarker(const DocumentMarker& marker) 163 DocumentMarker::DocumentMarker(const DocumentMarker& marker)
164 : m_type(marker.type()), 164 : m_type(marker.type()),
165 m_startOffset(marker.startOffset()), 165 m_startOffset(marker.startOffset()),
166 m_endOffset(marker.endOffset()), 166 m_endOffset(marker.endOffset()),
167 m_details(marker.details()) {} 167 m_details(marker.details()) {}
168 168
169 DocumentMarker::ShiftMarkerResult DocumentMarker::getShiftedMarkerPosition(
170 unsigned offset,
171 unsigned oldLength,
172 unsigned newLength) const {
173 ShiftMarkerResult result;
174 result.newStartOffset = startOffset();
175 result.newEndOffset = endOffset();
176 result.shouldRemoveMarker = false;
177
178 // algorithm inspired by https://dom.spec.whatwg.org/#concept-cd-replace
179 // but with some changes
180 if (startOffset() > offset) {
181 // Deviation from the concept-cd-replace algorithm: < instead of <= in
182 // the next line
183 if (startOffset() < offset + oldLength) {
184 // Marker start was in the replaced text. Move to end of new text
185 // (Deviation from the concept-cd-replace algorithm: that algorithm
186 // would move to the beginning of the new text here)
187 result.newStartOffset = offset + newLength;
188 } else {
189 // Marker start was after the replaced text. Shift by length
190 // difference
191 result.newStartOffset = startOffset() + newLength - oldLength;
192 }
193 }
194
195 if (endOffset() > offset) {
196 // Deviation from the concept-cd-replace algorithm: < instead of <= in
197 // the next line
198 if (endOffset() < offset + oldLength) {
199 // Marker end was in the replaced text. Move to beginning of new text
200 result.newEndOffset = offset;
201 } else {
202 // Marker end was after the replaced text. Shift by length difference
203 result.newEndOffset = endOffset() + newLength - oldLength;
204 }
205 }
206
207 if (result.newStartOffset >= result.newEndOffset)
208 result.shouldRemoveMarker = true;
209
210 return result;
211 }
212
169 void DocumentMarker::shiftOffsets(int delta) { 213 void DocumentMarker::shiftOffsets(int delta) {
170 m_startOffset += delta; 214 m_startOffset += delta;
171 m_endOffset += delta; 215 m_endOffset += delta;
172 } 216 }
173 217
174 void DocumentMarker::setActiveMatch(bool active) { 218 void DocumentMarker::setActiveMatch(bool active) {
175 m_details = DocumentMarkerTextMatch::create(active); 219 m_details = DocumentMarkerTextMatch::create(active);
176 } 220 }
177 221
178 const String& DocumentMarker::description() const { 222 const String& DocumentMarker::description() const {
(...skipping 29 matching lines...) Expand all
208 toTextCompositionMarkerDetails(m_details.get())) 252 toTextCompositionMarkerDetails(m_details.get()))
209 return details->backgroundColor(); 253 return details->backgroundColor();
210 return Color::transparent; 254 return Color::transparent;
211 } 255 }
212 256
213 DEFINE_TRACE(DocumentMarker) { 257 DEFINE_TRACE(DocumentMarker) {
214 visitor->trace(m_details); 258 visitor->trace(m_details);
215 } 259 }
216 260
217 } // namespace blink 261 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698