OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights |
3 * reserved. | 3 * reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 11 matching lines...) Expand all Loading... |
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
25 */ | 25 */ |
26 | 26 |
27 #ifndef FrameSelection_h | 27 #ifndef FrameSelection_h |
28 #define FrameSelection_h | 28 #define FrameSelection_h |
29 | 29 |
30 #include "core/CoreExport.h" | 30 #include "core/CoreExport.h" |
31 #include "core/dom/Range.h" | 31 #include "core/dom/Range.h" |
| 32 #include "core/dom/SynchronousMutationObserver.h" |
32 #include "core/editing/EditingStyle.h" | 33 #include "core/editing/EditingStyle.h" |
33 #include "core/editing/EphemeralRange.h" | 34 #include "core/editing/EphemeralRange.h" |
34 #include "core/editing/VisiblePosition.h" | 35 #include "core/editing/VisiblePosition.h" |
35 #include "core/editing/VisibleSelection.h" | 36 #include "core/editing/VisibleSelection.h" |
36 #include "core/editing/iterators/TextIteratorFlags.h" | 37 #include "core/editing/iterators/TextIteratorFlags.h" |
37 #include "core/layout/ScrollAlignment.h" | 38 #include "core/layout/ScrollAlignment.h" |
38 #include "platform/Timer.h" | 39 #include "platform/Timer.h" |
39 #include "platform/geometry/IntRect.h" | 40 #include "platform/geometry/IntRect.h" |
40 #include "platform/geometry/LayoutRect.h" | 41 #include "platform/geometry/LayoutRect.h" |
41 #include "platform/heap/Handle.h" | 42 #include "platform/heap/Handle.h" |
(...skipping 20 matching lines...) Expand all Loading... |
62 | 63 |
63 enum RevealExtentOption { RevealExtent, DoNotRevealExtent }; | 64 enum RevealExtentOption { RevealExtent, DoNotRevealExtent }; |
64 | 65 |
65 enum class SelectionDirectionalMode { NonDirectional, Directional }; | 66 enum class SelectionDirectionalMode { NonDirectional, Directional }; |
66 | 67 |
67 enum class CaretVisibility; | 68 enum class CaretVisibility; |
68 | 69 |
69 enum class HandleVisibility { NotVisible, Visible }; | 70 enum class HandleVisibility { NotVisible, Visible }; |
70 | 71 |
71 class CORE_EXPORT FrameSelection final | 72 class CORE_EXPORT FrameSelection final |
72 : public GarbageCollectedFinalized<FrameSelection> { | 73 : public GarbageCollectedFinalized<FrameSelection>, |
| 74 public SynchronousMutationObserver { |
73 WTF_MAKE_NONCOPYABLE(FrameSelection); | 75 WTF_MAKE_NONCOPYABLE(FrameSelection); |
| 76 USING_GARBAGE_COLLECTED_MIXIN(FrameSelection); |
74 | 77 |
75 public: | 78 public: |
76 static FrameSelection* create(LocalFrame& frame) { | 79 static FrameSelection* create(LocalFrame& frame) { |
77 return new FrameSelection(frame); | 80 return new FrameSelection(frame); |
78 } | 81 } |
79 ~FrameSelection(); | 82 ~FrameSelection(); |
80 | 83 |
81 enum EAlteration { AlterationMove, AlterationExtend }; | 84 enum EAlteration { AlterationMove, AlterationExtend }; |
82 enum SetSelectionOption { | 85 enum SetSelectionOption { |
83 // 1 << 0 is reserved for EUserTriggered | 86 // 1 << 0 is reserved for EUserTriggered |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 bool isRange() const { return selection().isRange(); } | 203 bool isRange() const { return selection().isRange(); } |
201 bool isInPasswordField() const; | 204 bool isInPasswordField() const; |
202 bool isDirectional() const { return selection().isDirectional(); } | 205 bool isDirectional() const { return selection().isDirectional(); } |
203 | 206 |
204 // If this FrameSelection has a logical range which is still valid, this | 207 // If this FrameSelection has a logical range which is still valid, this |
205 // function return its clone. Otherwise, the return value from underlying | 208 // function return its clone. Otherwise, the return value from underlying |
206 // VisibleSelection's firstRange() is returned. | 209 // VisibleSelection's firstRange() is returned. |
207 Range* firstRange() const; | 210 Range* firstRange() const; |
208 | 211 |
209 void documentAttached(Document*); | 212 void documentAttached(Document*); |
210 void documentDetached(const Document&); | |
211 void nodeChildrenWillBeRemoved(ContainerNode&); | |
212 void nodeWillBeRemoved(Node&); | |
213 void dataWillChange(const CharacterData& node); | 213 void dataWillChange(const CharacterData& node); |
214 void didUpdateCharacterData(CharacterData*, | |
215 unsigned offset, | |
216 unsigned oldLength, | |
217 unsigned newLength); | |
218 void didMergeTextNodes(const Text& oldNode, unsigned offset); | |
219 void didSplitTextNode(const Text& oldNode); | |
220 | 214 |
221 void didLayout(); | 215 void didLayout(); |
222 bool isAppearanceDirty() const; | 216 bool isAppearanceDirty() const; |
223 void commitAppearanceIfNeeded(LayoutView&); | 217 void commitAppearanceIfNeeded(LayoutView&); |
224 void setCaretVisible(bool caretIsVisible); | 218 void setCaretVisible(bool caretIsVisible); |
225 void setCaretRectNeedsUpdate(); | 219 void setCaretRectNeedsUpdate(); |
226 void scheduleVisualUpdate() const; | 220 void scheduleVisualUpdate() const; |
227 void invalidateCaretRect(bool forceInvalidation = false); | 221 void invalidateCaretRect(bool forceInvalidation = false); |
228 void paintCaret(GraphicsContext&, const LayoutPoint&); | 222 void paintCaret(GraphicsContext&, const LayoutPoint&); |
229 | 223 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 | 318 |
325 void setUseSecureKeyboardEntry(bool); | 319 void setUseSecureKeyboardEntry(bool); |
326 | 320 |
327 void updateSelectionIfNeeded(const Position& base, | 321 void updateSelectionIfNeeded(const Position& base, |
328 const Position& extent, | 322 const Position& extent, |
329 const Position& start, | 323 const Position& start, |
330 const Position& end); | 324 const Position& end); |
331 | 325 |
332 GranularityStrategy* granularityStrategy(); | 326 GranularityStrategy* granularityStrategy(); |
333 | 327 |
| 328 // Implementation of |SynchronousMutationObserver| member functions. |
| 329 void contextDestroyed(Document*) final; |
| 330 void nodeChildrenWillBeRemoved(ContainerNode&) final; |
| 331 void nodeWillBeRemoved(Node&) final; |
| 332 void didUpdateCharacterData(CharacterData*, |
| 333 unsigned offset, |
| 334 unsigned oldLength, |
| 335 unsigned newLength) final; |
| 336 void didMergeTextNodes(const Text& mergedNode, |
| 337 const NodeWithIndex& nodeToBeRemovedWithIndex, |
| 338 unsigned oldLength) final; |
| 339 void didSplitTextNode(const Text& oldNode) final; |
| 340 |
334 // For unittests | 341 // For unittests |
335 bool shouldPaintCaretForTesting() const; | 342 bool shouldPaintCaretForTesting() const; |
336 bool isPreviousCaretDirtyForTesting() const; | 343 bool isPreviousCaretDirtyForTesting() const; |
337 | 344 |
338 Member<Document> m_document; | 345 Member<Document> m_document; |
339 Member<LocalFrame> m_frame; | 346 Member<LocalFrame> m_frame; |
340 const Member<PendingSelection> m_pendingSelection; | 347 const Member<PendingSelection> m_pendingSelection; |
341 const Member<SelectionEditor> m_selectionEditor; | 348 const Member<SelectionEditor> m_selectionEditor; |
342 | 349 |
343 TextGranularity m_granularity; | 350 TextGranularity m_granularity; |
(...skipping 26 matching lines...) Expand all Loading... |
370 } | 377 } |
371 } // namespace blink | 378 } // namespace blink |
372 | 379 |
373 #ifndef NDEBUG | 380 #ifndef NDEBUG |
374 // Outside the WebCore namespace for ease of invocation from gdb. | 381 // Outside the WebCore namespace for ease of invocation from gdb. |
375 void showTree(const blink::FrameSelection&); | 382 void showTree(const blink::FrameSelection&); |
376 void showTree(const blink::FrameSelection*); | 383 void showTree(const blink::FrameSelection*); |
377 #endif | 384 #endif |
378 | 385 |
379 #endif // FrameSelection_h | 386 #endif // FrameSelection_h |
OLD | NEW |