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

Side by Side Diff: Source/core/dom/DocumentMarkerController.cpp

Issue 224113002: Oilpan: move Range object to the oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Use STACK_ALLOCATED() + incorporate ager's overview of macros in this area. Created 6 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 reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 8 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 void DocumentMarkerController::clear() 78 void DocumentMarkerController::clear()
79 { 79 {
80 m_markers.clear(); 80 m_markers.clear();
81 m_possiblyExistingMarkerTypes = 0; 81 m_possiblyExistingMarkerTypes = 0;
82 } 82 }
83 83
84 void DocumentMarkerController::addMarker(Range* range, DocumentMarker::MarkerTyp e type, const String& description, uint32_t hash) 84 void DocumentMarkerController::addMarker(Range* range, DocumentMarker::MarkerTyp e type, const String& description, uint32_t hash)
85 { 85 {
86 // Use a TextIterator to visit the potentially multiple nodes the range cove rs. 86 // Use a TextIterator to visit the potentially multiple nodes the range cove rs.
87 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) { 87 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) {
88 RefPtr<Range> textPiece = markedText.range(); 88 RefPtrWillBeRawPtr<Range> textPiece = markedText.range();
89 addMarker(textPiece->startContainer(), DocumentMarker(type, textPiece->s tartOffset(), textPiece->endOffset(), description, hash)); 89 addMarker(textPiece->startContainer(), DocumentMarker(type, textPiece->s tartOffset(), textPiece->endOffset(), description, hash));
90 } 90 }
91 } 91 }
92 92
93 void DocumentMarkerController::addMarker(Range* range, DocumentMarker::MarkerTyp e type, const String& description) 93 void DocumentMarkerController::addMarker(Range* range, DocumentMarker::MarkerTyp e type, const String& description)
94 { 94 {
95 // Use a TextIterator to visit the potentially multiple nodes the range cove rs. 95 // Use a TextIterator to visit the potentially multiple nodes the range cove rs.
96 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) { 96 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) {
97 RefPtr<Range> textPiece = markedText.range(); 97 RefPtrWillBeRawPtr<Range> textPiece = markedText.range();
98 addMarker(textPiece->startContainer(), DocumentMarker(type, textPiece->s tartOffset(), textPiece->endOffset(), description)); 98 addMarker(textPiece->startContainer(), DocumentMarker(type, textPiece->s tartOffset(), textPiece->endOffset(), description));
99 } 99 }
100 } 100 }
101 101
102 void DocumentMarkerController::addMarker(Range* range, DocumentMarker::MarkerTyp e type) 102 void DocumentMarkerController::addMarker(Range* range, DocumentMarker::MarkerTyp e type)
103 { 103 {
104 // Use a TextIterator to visit the potentially multiple nodes the range cove rs. 104 // Use a TextIterator to visit the potentially multiple nodes the range cove rs.
105 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) { 105 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) {
106 RefPtr<Range> textPiece = markedText.range(); 106 RefPtrWillBeRawPtr<Range> textPiece = markedText.range();
107 addMarker(textPiece->startContainer(), DocumentMarker(type, textPiece->s tartOffset(), textPiece->endOffset())); 107 addMarker(textPiece->startContainer(), DocumentMarker(type, textPiece->s tartOffset(), textPiece->endOffset()));
108 } 108 }
109 109
110 } 110 }
111 111
112 void DocumentMarkerController::addMarkerToNode(Node* node, unsigned startOffset, unsigned length, DocumentMarker::MarkerType type) 112 void DocumentMarkerController::addMarkerToNode(Node* node, unsigned startOffset, unsigned length, DocumentMarker::MarkerType type)
113 { 113 {
114 addMarker(node, DocumentMarker(type, startOffset, startOffset + length)); 114 addMarker(node, DocumentMarker(type, startOffset, startOffset + length));
115 } 115 }
116 116
117 void DocumentMarkerController::addMarkerToNode(Node* node, unsigned startOffset, unsigned length, DocumentMarker::MarkerType type, PassRefPtr<DocumentMarkerDeta ils> details) 117 void DocumentMarkerController::addMarkerToNode(Node* node, unsigned startOffset, unsigned length, DocumentMarker::MarkerType type, PassRefPtr<DocumentMarkerDeta ils> details)
118 { 118 {
119 addMarker(node, DocumentMarker(type, startOffset, startOffset + length, deta ils)); 119 addMarker(node, DocumentMarker(type, startOffset, startOffset + length, deta ils));
120 } 120 }
121 121
122 122
123 void DocumentMarkerController::addTextMatchMarker(const Range* range, bool activ eMatch) 123 void DocumentMarkerController::addTextMatchMarker(const Range* range, bool activ eMatch)
124 { 124 {
125 // Use a TextIterator to visit the potentially multiple nodes the range cove rs. 125 // Use a TextIterator to visit the potentially multiple nodes the range cove rs.
126 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) { 126 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) {
127 RefPtr<Range> textPiece = markedText.range(); 127 RefPtrWillBeRawPtr<Range> textPiece = markedText.range();
128 unsigned startOffset = textPiece->startOffset(); 128 unsigned startOffset = textPiece->startOffset();
129 unsigned endOffset = textPiece->endOffset(); 129 unsigned endOffset = textPiece->endOffset();
130 addMarker(textPiece->startContainer(), DocumentMarker(startOffset, endOf fset, activeMatch)); 130 addMarker(textPiece->startContainer(), DocumentMarker(startOffset, endOf fset, activeMatch));
131 if (endOffset > startOffset) { 131 if (endOffset > startOffset) {
132 // Rendered rects for markers in WebKit are not populated until each time 132 // Rendered rects for markers in WebKit are not populated until each time
133 // the markers are painted. However, we need it to happen sooner, be cause 133 // the markers are painted. However, we need it to happen sooner, be cause
134 // the whole purpose of tickmarks on the scrollbar is to show where 134 // the whole purpose of tickmarks on the scrollbar is to show where
135 // matches off-screen are (that haven't been painted yet). 135 // matches off-screen are (that haven't been painted yet).
136 Node* node = textPiece->startContainer(); 136 Node* node = textPiece->startContainer();
137 Vector<DocumentMarker*> markers = markersFor(node); 137 Vector<DocumentMarker*> markers = markersFor(node);
138 toRenderedDocumentMarker(markers[markers.size() - 1])->setRenderedRe ct(range->boundingBox()); 138 toRenderedDocumentMarker(markers[markers.size() - 1])->setRenderedRe ct(range->boundingBox());
139 } 139 }
140 } 140 }
141 } 141 }
142 142
143 void DocumentMarkerController::prepareForDestruction() 143 void DocumentMarkerController::prepareForDestruction()
144 { 144 {
145 clear(); 145 clear();
146 } 146 }
147 147
148 void DocumentMarkerController::removeMarkers(Range* range, DocumentMarker::Marke rTypes markerTypes, RemovePartiallyOverlappingMarkerOrNot shouldRemovePartiallyO verlappingMarker) 148 void DocumentMarkerController::removeMarkers(Range* range, DocumentMarker::Marke rTypes markerTypes, RemovePartiallyOverlappingMarkerOrNot shouldRemovePartiallyO verlappingMarker)
149 { 149 {
150 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) { 150 for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance ()) {
151 if (!possiblyHasMarkers(markerTypes)) 151 if (!possiblyHasMarkers(markerTypes))
152 return; 152 return;
153 ASSERT(!m_markers.isEmpty()); 153 ASSERT(!m_markers.isEmpty());
154 154
155 RefPtr<Range> textPiece = markedText.range(); 155 RefPtrWillBeRawPtr<Range> textPiece = markedText.range();
156 int startOffset = textPiece->startOffset(); 156 int startOffset = textPiece->startOffset();
157 int endOffset = textPiece->endOffset(); 157 int endOffset = textPiece->endOffset();
158 removeMarkers(textPiece->startContainer(), startOffset, endOffset - star tOffset, markerTypes, shouldRemovePartiallyOverlappingMarker); 158 removeMarkers(textPiece->startContainer(), startOffset, endOffset - star tOffset, markerTypes, shouldRemovePartiallyOverlappingMarker);
159 } 159 }
160 } 160 }
161 161
162 static bool startsFurther(const DocumentMarker& lhv, const DocumentMarker& rhv) 162 static bool startsFurther(const DocumentMarker& lhv, const DocumentMarker& rhv)
163 { 163 {
164 return lhv.startOffset() < rhv.startOffset(); 164 return lhv.startOffset() < rhv.startOffset();
165 } 165 }
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 735
736 } // namespace WebCore 736 } // namespace WebCore
737 737
738 #ifndef NDEBUG 738 #ifndef NDEBUG
739 void showDocumentMarkers(const WebCore::DocumentMarkerController* controller) 739 void showDocumentMarkers(const WebCore::DocumentMarkerController* controller)
740 { 740 {
741 if (controller) 741 if (controller)
742 controller->showMarkers(); 742 controller->showMarkers();
743 } 743 }
744 #endif 744 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698