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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 class CORE_EXPORT DocumentMarkerController final | 56 class CORE_EXPORT DocumentMarkerController final |
57 : public GarbageCollected<DocumentMarkerController>, | 57 : public GarbageCollected<DocumentMarkerController>, |
58 public SynchronousMutationObserver { | 58 public SynchronousMutationObserver { |
59 WTF_MAKE_NONCOPYABLE(DocumentMarkerController); | 59 WTF_MAKE_NONCOPYABLE(DocumentMarkerController); |
60 USING_GARBAGE_COLLECTED_MIXIN(DocumentMarkerController); | 60 USING_GARBAGE_COLLECTED_MIXIN(DocumentMarkerController); |
61 | 61 |
62 public: | 62 public: |
63 explicit DocumentMarkerController(Document&); | 63 explicit DocumentMarkerController(Document&); |
64 | 64 |
65 void clear(); | 65 void clear(); |
| 66 void addMarker(Node*, const DocumentMarker&); |
66 void addMarker(const Position& start, | 67 void addMarker(const Position& start, |
67 const Position& end, | 68 const Position& end, |
68 DocumentMarker::MarkerType, | 69 DocumentMarker::MarkerType, |
69 const String& description = emptyString); | 70 const String& description = emptyString); |
70 void addTextMatchMarker(const EphemeralRange&, bool activeMatch); | 71 void addTextMatchMarker(const EphemeralRange&, bool activeMatch); |
71 void addCompositionMarker(const Position& start, | 72 void addCompositionMarker(const Position& start, |
72 const Position& end, | 73 const Position& end, |
73 Color underlineColor, | 74 Color underlineColor, |
74 bool thick, | 75 bool thick, |
75 Color backgroundColor); | 76 Color backgroundColor); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 void showMarkers() const; | 133 void showMarkers() const; |
133 #endif | 134 #endif |
134 | 135 |
135 // SynchronousMutationObserver | 136 // SynchronousMutationObserver |
136 void didUpdateCharacterData(CharacterData*, | 137 void didUpdateCharacterData(CharacterData*, |
137 unsigned offset, | 138 unsigned offset, |
138 unsigned oldLength, | 139 unsigned oldLength, |
139 unsigned newLength) final; | 140 unsigned newLength) final; |
140 | 141 |
141 private: | 142 private: |
142 void addMarker(Node*, const DocumentMarker&); | |
143 | |
144 using MarkerList = HeapVector<Member<RenderedDocumentMarker>>; | 143 using MarkerList = HeapVector<Member<RenderedDocumentMarker>>; |
145 using MarkerLists = | 144 using MarkerLists = |
146 HeapVector<Member<MarkerList>, DocumentMarker::MarkerTypeIndexesCount>; | 145 HeapVector<Member<MarkerList>, DocumentMarker::MarkerTypeIndexesCount>; |
147 using MarkerMap = HeapHashMap<WeakMember<const Node>, Member<MarkerLists>>; | 146 using MarkerMap = HeapHashMap<WeakMember<const Node>, Member<MarkerLists>>; |
148 void mergeOverlapping(MarkerList*, RenderedDocumentMarker*); | 147 void mergeOverlapping(MarkerList*, RenderedDocumentMarker*); |
149 bool possiblyHasMarkers(DocumentMarker::MarkerTypes); | 148 bool possiblyHasMarkers(DocumentMarker::MarkerTypes); |
150 bool relocateMarkerIfNeeded(RenderedDocumentMarker*, | 149 bool relocateMarkerIfNeeded(RenderedDocumentMarker*, |
151 unsigned offset, | 150 unsigned offset, |
152 unsigned oldLength, | 151 unsigned oldLength, |
153 unsigned newLength); | 152 unsigned newLength); |
154 void removeMarkersFromList(MarkerMap::iterator, DocumentMarker::MarkerTypes); | 153 void removeMarkersFromList(MarkerMap::iterator, DocumentMarker::MarkerTypes); |
155 void removeMarkers(TextIterator&, | 154 void removeMarkers(TextIterator&, |
156 DocumentMarker::MarkerTypes, | 155 DocumentMarker::MarkerTypes, |
157 RemovePartiallyOverlappingMarkerOrNot); | 156 RemovePartiallyOverlappingMarkerOrNot); |
158 | 157 |
159 MarkerMap m_markers; | 158 MarkerMap m_markers; |
160 // Provide a quick way to determine whether a particular marker type is absent | 159 // Provide a quick way to determine whether a particular marker type is absent |
161 // without going through the map. | 160 // without going through the map. |
162 DocumentMarker::MarkerTypes m_possiblyExistingMarkerTypes; | 161 DocumentMarker::MarkerTypes m_possiblyExistingMarkerTypes; |
163 const Member<const Document> m_document; | 162 const Member<const Document> m_document; |
164 }; | 163 }; |
165 | 164 |
166 } // namespace blink | 165 } // namespace blink |
167 | 166 |
168 #ifndef NDEBUG | 167 #ifndef NDEBUG |
169 void showDocumentMarkers(const blink::DocumentMarkerController*); | 168 void showDocumentMarkers(const blink::DocumentMarkerController*); |
170 #endif | 169 #endif |
171 | 170 |
172 #endif // DocumentMarkerController_h | 171 #endif // DocumentMarkerController_h |
OLD | NEW |