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

Side by Side Diff: Source/core/editing/VisibleSelection.h

Issue 1309413006: Move VisibleSelection::ChangeObserver out from VisibleSelection class (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-09-04T15:50:42 Created 5 years, 3 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
« no previous file with comments | « Source/core/editing/FrameSelection.cpp ('k') | Source/core/editing/VisibleSelection.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004 Apple Computer, Inc. All rights reserved. 2 * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 26 matching lines...) Expand all
37 #include "wtf/Allocator.h" 37 #include "wtf/Allocator.h"
38 38
39 namespace blink { 39 namespace blink {
40 40
41 class LayoutPoint; 41 class LayoutPoint;
42 42
43 // TODO(yosin) We should use capitalized name instead of |SEL_DEFAULT_AFFINITY|. 43 // TODO(yosin) We should use capitalized name instead of |SEL_DEFAULT_AFFINITY|.
44 const TextAffinity SEL_DEFAULT_AFFINITY = TextAffinity::Downstream; // NOLINT 44 const TextAffinity SEL_DEFAULT_AFFINITY = TextAffinity::Downstream; // NOLINT
45 enum SelectionDirection { DirectionForward, DirectionBackward, DirectionRight, D irectionLeft }; 45 enum SelectionDirection { DirectionForward, DirectionBackward, DirectionRight, D irectionLeft };
46 46
47 // Listener of |VisibleSelection| modification. |didChangeVisibleSelection()|
48 // will be invoked when base, extent, start or end is moved to a different
49 // position.
50 //
51 // Objects implementing |VisibleSelectionChangeObserver| interface must outlive
52 // the |VisibleSelection| object.
53 class CORE_EXPORT VisibleSelectionChangeObserver : public WillBeGarbageCollected Mixin {
54 WTF_MAKE_NONCOPYABLE(VisibleSelectionChangeObserver);
55 public:
56 VisibleSelectionChangeObserver();
57 virtual ~VisibleSelectionChangeObserver();
58 virtual void didChangeVisibleSelection() = 0;
59 DEFINE_INLINE_VIRTUAL_TRACE() { }
60 };
61
47 class CORE_EXPORT VisibleSelection { 62 class CORE_EXPORT VisibleSelection {
48 DISALLOW_ALLOCATION(); 63 DISALLOW_ALLOCATION();
49 DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(VisibleSelection); 64 DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(VisibleSelection);
50 public: 65 public:
51 class InDOMTree { 66 class InDOMTree {
52 STATIC_ONLY(InDOMTree); 67 STATIC_ONLY(InDOMTree);
53 public: 68 public:
54 using PositionType = Position; 69 using PositionType = Position;
55 using Strategy = EditingStrategy; 70 using Strategy = EditingStrategy;
56 71
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 // ShadowRoot node for new shadow trees, or 0 for non-shadow trees. 182 // ShadowRoot node for new shadow trees, or 0 for non-shadow trees.
168 Node* nonBoundaryShadowTreeRootNode() const; 183 Node* nonBoundaryShadowTreeRootNode() const;
169 184
170 VisiblePosition visiblePositionRespectingEditingBoundary(const LayoutPoint& localPoint, Node* targetNode) const; 185 VisiblePosition visiblePositionRespectingEditingBoundary(const LayoutPoint& localPoint, Node* targetNode) const;
171 PositionWithAffinity positionRespectingEditingBoundary(const LayoutPoint& lo calPoint, Node* targetNode) const; 186 PositionWithAffinity positionRespectingEditingBoundary(const LayoutPoint& lo calPoint, Node* targetNode) const;
172 187
173 bool isValidFor(const Document&) const; 188 bool isValidFor(const Document&) const;
174 void setWithoutValidation(const Position&, const Position&); 189 void setWithoutValidation(const Position&, const Position&);
175 void setWithoutValidation(const PositionInComposedTree&, const PositionInCom posedTree&); 190 void setWithoutValidation(const PositionInComposedTree&, const PositionInCom posedTree&);
176 191
177 // Listener of VisibleSelection modification. didChangeVisibleSelection() wi ll be invoked when base, extent, start 192 void setChangeObserver(VisibleSelectionChangeObserver&);
178 // or end is moved to a different position.
179 //
180 // Objects implementing |ChangeObserver| interface must outlive the VisibleS election object.
181 class CORE_EXPORT ChangeObserver : public WillBeGarbageCollectedMixin {
182 WTF_MAKE_NONCOPYABLE(ChangeObserver);
183 public:
184 ChangeObserver();
185 virtual ~ChangeObserver();
186 virtual void didChangeVisibleSelection() = 0;
187 DEFINE_INLINE_VIRTUAL_TRACE() { }
188 };
189
190 void setChangeObserver(ChangeObserver&);
191 void clearChangeObserver(); 193 void clearChangeObserver();
192 void didChange(); // Fire the change observer, if any. 194 void didChange(); // Fire the change observer, if any.
193 195
194 DECLARE_TRACE(); 196 DECLARE_TRACE();
195 197
196 void validatePositionsIfNeeded(); 198 void validatePositionsIfNeeded();
197 199
198 #ifndef NDEBUG 200 #ifndef NDEBUG
199 void debugPosition(const char* message) const; 201 void debugPosition(const char* message) const;
200 void formatForDebugger(char* buffer, unsigned length) const; 202 void formatForDebugger(char* buffer, unsigned length) const;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 // VisibleUnit.cpp, and VisiblePosition.cpp). We'll do that in the future. 237 // VisibleUnit.cpp, and VisiblePosition.cpp). We'll do that in the future.
236 PositionInComposedTree m_baseInComposedTree; 238 PositionInComposedTree m_baseInComposedTree;
237 PositionInComposedTree m_extentInComposedTree; 239 PositionInComposedTree m_extentInComposedTree;
238 PositionInComposedTree m_startInComposedTree; 240 PositionInComposedTree m_startInComposedTree;
239 PositionInComposedTree m_endInComposedTree; 241 PositionInComposedTree m_endInComposedTree;
240 242
241 TextAffinity m_affinity; // the upstream/downstream affinity of the caret 243 TextAffinity m_affinity; // the upstream/downstream affinity of the caret
242 244
243 // Oilpan: this reference has a lifetime that is at least as long 245 // Oilpan: this reference has a lifetime that is at least as long
244 // as this object. 246 // as this object.
245 RawPtrWillBeMember<ChangeObserver> m_changeObserver; 247 RawPtrWillBeMember<VisibleSelectionChangeObserver> m_changeObserver;
246 248
247 // these are cached, can be recalculated by validate() 249 // these are cached, can be recalculated by validate()
248 SelectionType m_selectionType; // None, Caret, Range 250 SelectionType m_selectionType; // None, Caret, Range
249 bool m_baseIsFirst : 1; // True if base is before the extent 251 bool m_baseIsFirst : 1; // True if base is before the extent
250 bool m_isDirectional : 1; // Non-directional ignores m_baseIsFirst and selec tion always extends on shift + arrow key. 252 bool m_isDirectional : 1; // Non-directional ignores m_baseIsFirst and selec tion always extends on shift + arrow key.
251 }; 253 };
252 254
253 // We don't yet support multi-range selections, so we only ever have one range 255 // We don't yet support multi-range selections, so we only ever have one range
254 // to return. 256 // to return.
255 CORE_EXPORT PassRefPtrWillBeRawPtr<Range> firstRangeOf(const VisibleSelection&); 257 CORE_EXPORT PassRefPtrWillBeRawPtr<Range> firstRangeOf(const VisibleSelection&);
256 258
257 } // namespace blink 259 } // namespace blink
258 260
259 #ifndef NDEBUG 261 #ifndef NDEBUG
260 // Outside the WebCore namespace for ease of invocation from gdb. 262 // Outside the WebCore namespace for ease of invocation from gdb.
261 void showTree(const blink::VisibleSelection&); 263 void showTree(const blink::VisibleSelection&);
262 void showTree(const blink::VisibleSelection*); 264 void showTree(const blink::VisibleSelection*);
263 #endif 265 #endif
264 266
265 #endif // VisibleSelection_h 267 #endif // VisibleSelection_h
OLDNEW
« no previous file with comments | « Source/core/editing/FrameSelection.cpp ('k') | Source/core/editing/VisibleSelection.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698