| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |