OLD | NEW |
---|---|
1 /* | 1 /* |
2 * This file is part of the DOM implementation for WebCore. | 2 * This file is part of the DOM implementation for WebCore. |
3 * | 3 * |
4 * Copyright (C) 2006 Apple Computer, Inc. | 4 * Copyright (C) 2006 Apple Computer, Inc. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 13 matching lines...) Expand all Loading... | |
24 #define DocumentMarker_h | 24 #define DocumentMarker_h |
25 | 25 |
26 #include "core/CoreExport.h" | 26 #include "core/CoreExport.h" |
27 #include "platform/graphics/Color.h" | 27 #include "platform/graphics/Color.h" |
28 #include "platform/heap/Handle.h" | 28 #include "platform/heap/Handle.h" |
29 #include "wtf/VectorTraits.h" | 29 #include "wtf/VectorTraits.h" |
30 #include "wtf/text/WTFString.h" | 30 #include "wtf/text/WTFString.h" |
31 | 31 |
32 namespace blink { | 32 namespace blink { |
33 | 33 |
34 class DocumentMarkerDetails; | |
35 | |
36 // A range of a node within a document that is "marked", such as the range of a | 34 // A range of a node within a document that is "marked", such as the range of a |
37 // misspelled word. It optionally includes a description that could be displayed | 35 // misspelled word. It optionally includes a description that could be displayed |
38 // in the user interface. It also optionally includes a flag specifying whether | 36 // in the user interface. It also optionally includes a flag specifying whether |
39 // the match is active, which is ignored for all types other than type | 37 // the match is active, which is ignored for all types other than type |
40 // TextMatch. | 38 // TextMatch. |
41 class CORE_EXPORT DocumentMarker : public GarbageCollected<DocumentMarker> { | 39 class CORE_EXPORT DocumentMarker |
40 : public GarbageCollectedFinalized<DocumentMarker> { | |
42 public: | 41 public: |
43 enum MarkerTypeIndex { | 42 enum MarkerTypeIndex { |
44 SpellingMarkerIndex = 0, | 43 SpellingMarkerIndex = 0, |
45 GrammarMarkerIndex, | 44 GrammarMarkerIndex, |
46 TextMatchMarkerIndex, | 45 TextMatchMarkerIndex, |
47 CompositionMarkerIndex, | 46 CompositionMarkerIndex, |
48 MarkerTypeIndexesCount | 47 MarkerTypeIndexesCount |
49 }; | 48 }; |
50 | 49 |
51 enum MarkerType { | 50 enum MarkerType { |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
127 class MisspellingMarkers : public MarkerTypes { | 126 class MisspellingMarkers : public MarkerTypes { |
128 public: | 127 public: |
129 MisspellingMarkers() : MarkerTypes(Spelling | Grammar) {} | 128 MisspellingMarkers() : MarkerTypes(Spelling | Grammar) {} |
130 }; | 129 }; |
131 | 130 |
132 class SpellCheckClientMarkers : public MarkerTypes { | 131 class SpellCheckClientMarkers : public MarkerTypes { |
133 public: | 132 public: |
134 SpellCheckClientMarkers() : MarkerTypes(Spelling | Grammar) {} | 133 SpellCheckClientMarkers() : MarkerTypes(Spelling | Grammar) {} |
135 }; | 134 }; |
136 | 135 |
137 virtual DocumentMarker* clone() const; | 136 virtual ~DocumentMarker(); |
138 | 137 |
139 DocumentMarker(MarkerType, | 138 virtual DocumentMarker* clone() const = 0; |
140 unsigned startOffset, | |
141 unsigned endOffset, | |
142 const String& description); | |
143 DocumentMarker(unsigned startOffset, | |
144 unsigned endOffset, | |
145 Color underlineColor, | |
146 bool thick, | |
147 Color backgroundColor); | |
148 | 139 |
149 MarkerType type() const { return m_type; } | 140 virtual MarkerType type() const = 0; |
150 unsigned startOffset() const { return m_startOffset; } | 141 unsigned startOffset() const { return m_startOffset; } |
151 unsigned endOffset() const { return m_endOffset; } | 142 unsigned endOffset() const { return m_endOffset; } |
152 | 143 |
153 const String& description() const; | 144 virtual const String& description() const; |
Xiaocheng
2017/03/29 23:40:11
These functions only make sense in subclasses. Can
| |
154 bool activeMatch() const; | 145 virtual bool activeMatch() const; |
155 Color underlineColor() const; | 146 virtual Color underlineColor() const; |
156 bool thick() const; | 147 virtual bool thick() const; |
157 Color backgroundColor() const; | 148 virtual Color backgroundColor() const; |
158 DocumentMarkerDetails* details() const; | |
159 | |
160 void setActiveMatch(bool); | |
161 void clearDetails() { m_details.clear(); } | |
162 | 149 |
163 struct ShiftMarkerResult { | 150 struct ShiftMarkerResult { |
164 unsigned newStartOffset; | 151 unsigned newStartOffset; |
165 unsigned newEndOffset; | 152 unsigned newEndOffset; |
166 bool shouldRemoveMarker; | 153 bool shouldRemoveMarker; |
167 }; | 154 }; |
168 | 155 |
169 ShiftMarkerResult getShiftedMarkerPosition(unsigned offset, | 156 ShiftMarkerResult getShiftedMarkerPosition(unsigned offset, |
170 unsigned oldLength, | 157 unsigned oldLength, |
171 unsigned newLength) const; | 158 unsigned newLength) const; |
172 | 159 |
173 // Offset modifications are done by DocumentMarkerController and subclasses of | 160 // Offset modifications are done by DocumentMarkerController and subclasses of |
174 // DocumentMarkerList. Other classes should not call following setters. | 161 // DocumentMarkerList. Other classes should not call following setters. |
175 void setStartOffset(unsigned offset) { m_startOffset = offset; } | 162 void setStartOffset(unsigned offset) { m_startOffset = offset; } |
176 void setEndOffset(unsigned offset) { m_endOffset = offset; } | 163 void setEndOffset(unsigned offset) { m_endOffset = offset; } |
177 void shiftOffsets(int delta); | 164 void shiftOffsets(int delta); |
178 | 165 |
179 bool operator==(const DocumentMarker& o) const { | 166 bool operator==(const DocumentMarker& other) const; |
Xiaocheng
2017/03/29 23:40:11
These comparison methods seem not used at all.
Co
| |
180 return type() == o.type() && startOffset() == o.startOffset() && | 167 |
181 endOffset() == o.endOffset(); | 168 bool operator!=(const DocumentMarker& other) const { |
169 return !(*this == other); | |
182 } | 170 } |
183 | 171 |
184 bool operator!=(const DocumentMarker& o) const { return !(*this == o); } | 172 DEFINE_INLINE_VIRTUAL_TRACE() {} |
185 | |
186 DECLARE_TRACE(); | |
187 | 173 |
188 protected: | 174 protected: |
189 DocumentMarker(const DocumentMarker&); | 175 DocumentMarker(const DocumentMarker&); |
190 DocumentMarker(unsigned startOffset, unsigned endOffset, bool activeMatch); | 176 DocumentMarker(unsigned startOffset, unsigned endOffset); |
191 | 177 |
192 private: | 178 private: |
193 MarkerType m_type; | |
194 unsigned m_startOffset; | 179 unsigned m_startOffset; |
195 unsigned m_endOffset; | 180 unsigned m_endOffset; |
196 Member<DocumentMarkerDetails> m_details; | |
197 }; | 181 }; |
198 | 182 |
199 using DocumentMarkerVector = HeapVector<Member<DocumentMarker>>; | 183 using DocumentMarkerVector = HeapVector<Member<DocumentMarker>>; |
200 | 184 |
201 inline DocumentMarkerDetails* DocumentMarker::details() const { | |
202 return m_details.get(); | |
203 } | |
204 | |
205 class DocumentMarkerDetails | |
206 : public GarbageCollectedFinalized<DocumentMarkerDetails> { | |
207 public: | |
208 DocumentMarkerDetails() {} | |
209 virtual ~DocumentMarkerDetails(); | |
210 virtual bool isDescription() const { return false; } | |
211 virtual bool isTextMatch() const { return false; } | |
212 virtual bool isComposition() const { return false; } | |
213 | |
214 DEFINE_INLINE_VIRTUAL_TRACE() {} | |
215 }; | |
216 | |
217 } // namespace blink | 185 } // namespace blink |
218 | 186 |
219 #endif // DocumentMarker_h | 187 #endif // DocumentMarker_h |
OLD | NEW |