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

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

Issue 2781623010: Add DocumentMarker::clone() (Closed)
Patch Set: Remove dependency that's messing with trybots Created 3 years, 8 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) 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 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 list.clear(); 374 list.clear();
375 ++emptyListsCount; 375 ++emptyListsCount;
376 continue; 376 continue;
377 } 377 }
378 if (!markerTypes.contains((*list->begin())->type())) 378 if (!markerTypes.contains((*list->begin())->type()))
379 continue; 379 continue;
380 unsigned endOffset = startOffset + length; 380 unsigned endOffset = startOffset + length;
381 MarkerList::iterator startPos = 381 MarkerList::iterator startPos =
382 std::upper_bound(list->begin(), list->end(), startOffset, endsBefore); 382 std::upper_bound(list->begin(), list->end(), startOffset, endsBefore);
383 for (MarkerList::iterator i = startPos; i != list->end();) { 383 for (MarkerList::iterator i = startPos; i != list->end();) {
384 DocumentMarker marker(*i->get()); 384 const DocumentMarker& marker(*i->get());
385 385
386 // markers are returned in order, so stop if we are now past the specified 386 // markers are returned in order, so stop if we are now past the specified
387 // range 387 // range
388 if (marker.startOffset() >= endOffset) 388 if (marker.startOffset() >= endOffset)
389 break; 389 break;
390 390
391 // at this point we know that marker and target intersect in some way 391 // at this point we know that marker and target intersect in some way
392 docDirty = true; 392 docDirty = true;
393 393
394 // pitch the old marker 394 // pitch the old marker
395 list->erase(i - list->begin()); 395 list->erase(i - list->begin());
396 396
397 if (shouldRemovePartiallyOverlappingMarker) { 397 if (shouldRemovePartiallyOverlappingMarker) {
398 // Stop here. Don't add resulting slices back. 398 // Stop here. Don't add resulting slices back.
399 continue; 399 continue;
400 } 400 }
401 401
402 // add either of the resulting slices that are left after removing target 402 // add either of the resulting slices that are left after removing target
403 if (startOffset > marker.startOffset()) { 403 if (startOffset > marker.startOffset()) {
404 DocumentMarker newLeft = marker; 404 DocumentMarker* newLeft =
405 newLeft.setEndOffset(startOffset); 405 marker.cloneWithNewOffsets(marker.startOffset(), startOffset);
406 size_t insertIndex = i - list->begin(); 406 size_t insertIndex = i - list->begin();
407 list->insert(insertIndex, RenderedDocumentMarker::create(newLeft)); 407 list->insert(insertIndex, RenderedDocumentMarker::create(*newLeft));
408 // Move to the marker after the inserted one. 408 // Move to the marker after the inserted one.
409 i = list->begin() + insertIndex + 1; 409 i = list->begin() + insertIndex + 1;
410 } 410 }
411 if (marker.endOffset() > endOffset) { 411 if (marker.endOffset() > endOffset) {
412 DocumentMarker newRight = marker; 412 DocumentMarker* newRight =
413 newRight.setStartOffset(endOffset); 413 marker.cloneWithNewOffsets(endOffset, marker.endOffset());
414 size_t insertIndex = i - list->begin(); 414 size_t insertIndex = i - list->begin();
415 list->insert(insertIndex, RenderedDocumentMarker::create(newRight)); 415 list->insert(insertIndex, RenderedDocumentMarker::create(*newRight));
416 // Move to the marker after the inserted one. 416 // Move to the marker after the inserted one.
417 i = list->begin() + insertIndex + 1; 417 i = list->begin() + insertIndex + 1;
418 } 418 }
419 } 419 }
420 420
421 if (list->isEmpty()) { 421 if (list->isEmpty()) {
422 list.clear(); 422 list.clear();
423 ++emptyListsCount; 423 ++emptyListsCount;
424 } 424 }
425 } 425 }
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 } 883 }
884 884
885 } // namespace blink 885 } // namespace blink
886 886
887 #ifndef NDEBUG 887 #ifndef NDEBUG
888 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { 888 void showDocumentMarkers(const blink::DocumentMarkerController* controller) {
889 if (controller) 889 if (controller)
890 controller->showMarkers(); 890 controller->showMarkers();
891 } 891 }
892 #endif 892 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698