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

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

Issue 2822963002: [DMC #1.3] Add DocumentMarkerController::ListForType() (Closed)
Patch Set: Fix nits, remove a dependency 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
« 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 case DocumentMarker::kComposition: 70 case DocumentMarker::kComposition:
71 return DocumentMarker::kCompositionMarkerIndex; 71 return DocumentMarker::kCompositionMarkerIndex;
72 } 72 }
73 73
74 NOTREACHED(); 74 NOTREACHED();
75 return DocumentMarker::kSpellingMarkerIndex; 75 return DocumentMarker::kSpellingMarkerIndex;
76 } 76 }
77 77
78 } // namespace 78 } // namespace
79 79
80 Member<DocumentMarkerController::MarkerList>&
81 DocumentMarkerController::ListForType(MarkerLists* marker_lists,
82 DocumentMarker::MarkerType type) {
83 const size_t marker_list_index = MarkerTypeToMarkerIndex(type);
84 return (*marker_lists)[marker_list_index];
85 }
86
80 inline bool DocumentMarkerController::PossiblyHasMarkers( 87 inline bool DocumentMarkerController::PossiblyHasMarkers(
81 DocumentMarker::MarkerTypes types) { 88 DocumentMarker::MarkerTypes types) {
82 return possibly_existing_marker_types_.Intersects(types); 89 return possibly_existing_marker_types_.Intersects(types);
83 } 90 }
84 91
85 DocumentMarkerController::DocumentMarkerController(Document& document) 92 DocumentMarkerController::DocumentMarkerController(Document& document)
86 : possibly_existing_marker_types_(0), document_(&document) { 93 : possibly_existing_marker_types_(0), document_(&document) {
87 SetContext(&document); 94 SetContext(&document);
88 } 95 }
89 96
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 227
221 possibly_existing_marker_types_.Add(new_marker.GetType()); 228 possibly_existing_marker_types_.Add(new_marker.GetType());
222 229
223 Member<MarkerLists>& markers = 230 Member<MarkerLists>& markers =
224 markers_.insert(node, nullptr).stored_value->value; 231 markers_.insert(node, nullptr).stored_value->value;
225 if (!markers) { 232 if (!markers) {
226 markers = new MarkerLists; 233 markers = new MarkerLists;
227 markers->Grow(DocumentMarker::kMarkerTypeIndexesCount); 234 markers->Grow(DocumentMarker::kMarkerTypeIndexesCount);
228 } 235 }
229 236
230 DocumentMarker::MarkerTypeIndex marker_list_index = 237 const DocumentMarker::MarkerType new_marker_type = new_marker.GetType();
231 MarkerTypeToMarkerIndex(new_marker.GetType()); 238 if (!ListForType(markers, new_marker_type))
232 if (!markers->at(marker_list_index)) { 239 ListForType(markers, new_marker_type) = new MarkerList;
233 markers->at(marker_list_index) = new MarkerList;
234 }
235 240
236 Member<MarkerList>& list = markers->at(marker_list_index); 241 Member<MarkerList>& list = ListForType(markers, new_marker_type);
237 DocumentMarkerListEditor::AddMarker(list, &new_marker); 242 DocumentMarkerListEditor::AddMarker(list, &new_marker);
238 243
239 // repaint the affected node 244 // repaint the affected node
240 if (node->GetLayoutObject()) { 245 if (node->GetLayoutObject()) {
241 node->GetLayoutObject()->SetShouldDoFullPaintInvalidation( 246 node->GetLayoutObject()->SetShouldDoFullPaintInvalidation(
242 kPaintInvalidationDocumentMarkerChange); 247 kPaintInvalidationDocumentMarkerChange);
243 } 248 }
244 } 249 }
245 250
246 // TODO(rlanday): move DocumentMarkerListEditor into its own .h/.cpp files 251 // TODO(rlanday): move DocumentMarkerListEditor into its own .h/.cpp files
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 759
755 bool DocumentMarkerController::SetMarkersActive(Node* node, 760 bool DocumentMarkerController::SetMarkersActive(Node* node,
756 unsigned start_offset, 761 unsigned start_offset,
757 unsigned end_offset, 762 unsigned end_offset,
758 bool active) { 763 bool active) {
759 MarkerLists* markers = markers_.at(node); 764 MarkerLists* markers = markers_.at(node);
760 if (!markers) 765 if (!markers)
761 return false; 766 return false;
762 767
763 bool doc_dirty = false; 768 bool doc_dirty = false;
764 Member<MarkerList>& list = 769 Member<MarkerList>& list = ListForType(markers, DocumentMarker::kTextMatch);
765 (*markers)[MarkerTypeToMarkerIndex(DocumentMarker::kTextMatch)];
766 if (!list) 770 if (!list)
767 return false; 771 return false;
768 MarkerList::iterator start_pos = 772 MarkerList::iterator start_pos =
769 std::upper_bound(list->begin(), list->end(), start_offset, EndsBefore); 773 std::upper_bound(list->begin(), list->end(), start_offset, EndsBefore);
770 for (MarkerList::iterator marker = start_pos; marker != list->end(); 774 for (MarkerList::iterator marker = start_pos; marker != list->end();
771 ++marker) { 775 ++marker) {
772 // Markers are returned in order, so stop if we are now past the specified 776 // Markers are returned in order, so stop if we are now past the specified
773 // range. 777 // range.
774 if ((*marker)->StartOffset() >= end_offset) 778 if ((*marker)->StartOffset() >= end_offset)
775 break; 779 break;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 } 885 }
882 886
883 } // namespace blink 887 } // namespace blink
884 888
885 #ifndef NDEBUG 889 #ifndef NDEBUG
886 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { 890 void showDocumentMarkers(const blink::DocumentMarkerController* controller) {
887 if (controller) 891 if (controller)
888 controller->ShowMarkers(); 892 controller->ShowMarkers();
889 } 893 }
890 #endif 894 #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