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

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

Issue 1314433011: Introduce visiblePositionOf() for Position and PositionInComposedTree (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-08-31T16:32:26 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/SelectionController.cpp ('k') | Source/core/editing/VisiblePosition.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, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2008 Apple 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 // When above text line wrapped after "abc" 66 // When above text line wrapped after "abc"
67 // abc| UPSTREAM |VisiblePosition| 67 // abc| UPSTREAM |VisiblePosition|
68 // |def DOWNSTREAM |VisiblePosition| 68 // |def DOWNSTREAM |VisiblePosition|
69 // 69 //
70 // NOTE: UPSTREAM affinity will be used only if pos is at end of a wrapped line, 70 // NOTE: UPSTREAM affinity will be used only if pos is at end of a wrapped line,
71 // otherwise it will be converted to DOWNSTREAM. 71 // otherwise it will be converted to DOWNSTREAM.
72 class CORE_EXPORT VisiblePosition final { 72 class CORE_EXPORT VisiblePosition final {
73 DISALLOW_ALLOCATION(); 73 DISALLOW_ALLOCATION();
74 public: 74 public:
75 VisiblePosition() : m_affinity(VP_DEFAULT_AFFINITY) { } 75 VisiblePosition() : m_affinity(VP_DEFAULT_AFFINITY) { }
76
77 // TODO(yosin) We should use |visiblePositionOf()| instead of constructor,
78 // and make constructors to have private accessibility, since constructors
79 // aren't simple, e.g. they update layout tree.
76 explicit VisiblePosition(const Position&, TextAffinity = VP_DEFAULT_AFFINITY ); 80 explicit VisiblePosition(const Position&, TextAffinity = VP_DEFAULT_AFFINITY );
77 explicit VisiblePosition(const PositionInComposedTree&, TextAffinity = VP_DE FAULT_AFFINITY);
78 explicit VisiblePosition(const PositionWithAffinity&); 81 explicit VisiblePosition(const PositionWithAffinity&);
79 82
83 // Node: Other than |visiblePositionOf()|, we should not use
84 // |createWithoutCanonicalization()|.
85 static VisiblePosition createWithoutCanonicalization(const PositionWithAffin ity& canonicalized);
86
80 // Intentionally delete |operator==()| and |operator!=()| for reducing 87 // Intentionally delete |operator==()| and |operator!=()| for reducing
81 // compilation error message. 88 // compilation error message.
82 // TODO(yosin) We'll have |equals()| when we have use cases of checking 89 // TODO(yosin) We'll have |equals()| when we have use cases of checking
83 // equality of both position and affinity. 90 // equality of both position and affinity.
84 bool operator==(const VisiblePosition&) const = delete; 91 bool operator==(const VisiblePosition&) const = delete;
85 bool operator!=(const VisiblePosition&) const = delete; 92 bool operator!=(const VisiblePosition&) const = delete;
86 93
87 bool isNull() const { return m_deepPosition.isNull(); } 94 bool isNull() const { return m_deepPosition.isNull(); }
88 bool isNotNull() const { return m_deepPosition.isNotNull(); } 95 bool isNotNull() const { return m_deepPosition.isNotNull(); }
89 bool isOrphan() const { return m_deepPosition.isOrphan(); } 96 bool isOrphan() const { return m_deepPosition.isOrphan(); }
90 97
91 Position deepEquivalent() const { return m_deepPosition; } 98 Position deepEquivalent() const { return m_deepPosition; }
92 Position toParentAnchoredPosition() const { return deepEquivalent().parentAn choredEquivalent(); } 99 Position toParentAnchoredPosition() const { return deepEquivalent().parentAn choredEquivalent(); }
93 PositionWithAffinity toPositionWithAffinity() const { return PositionWithAff inity(m_deepPosition, m_affinity); } 100 PositionWithAffinity toPositionWithAffinity() const { return PositionWithAff inity(m_deepPosition, m_affinity); }
94 TextAffinity affinity() const { return m_affinity; } 101 TextAffinity affinity() const { return m_affinity; }
95 102
96 // TODO(yosin) This does not handle [table, 0] correctly. 103 // TODO(yosin) This does not handle [table, 0] correctly.
97 Element* rootEditableElement() const { return m_deepPosition.isNotNull() ? m _deepPosition.anchorNode()->rootEditableElement() : 0; } 104 Element* rootEditableElement() const { return m_deepPosition.isNotNull() ? m _deepPosition.anchorNode()->rootEditableElement() : 0; }
98 105
99 DECLARE_TRACE(); 106 DECLARE_TRACE();
100 107
101 #ifndef NDEBUG 108 #ifndef NDEBUG
102 void debugPosition(const char* msg = "") const; 109 void debugPosition(const char* msg = "") const;
103 void formatForDebugger(char* buffer, unsigned length) const; 110 void formatForDebugger(char* buffer, unsigned length) const;
104 void showTreeForThis() const; 111 void showTreeForThis() const;
105 #endif 112 #endif
106 113
107 private: 114 private:
108 template<typename Strategy> 115 // TODO(yosin) We should use |PositionWithAffinity| to make
109 void init(const PositionAlgorithm<Strategy>&, TextAffinity); 116 // |toPositionWithAffinity()| simpler.
110
111 Position m_deepPosition; 117 Position m_deepPosition;
112 TextAffinity m_affinity; 118 TextAffinity m_affinity;
113 }; 119 };
114 120
115 // TODO(yosin) We should move |absoluteCaretBoundsOf()| to "VisibleUnits.cpp". 121 // TODO(yosin) We should move |absoluteCaretBoundsOf()| to "VisibleUnits.cpp".
116 // Bounds of (possibly transformed) caret in absolute coords 122 // Bounds of (possibly transformed) caret in absolute coords
117 CORE_EXPORT IntRect absoluteCaretBoundsOf(const VisiblePosition&); 123 CORE_EXPORT IntRect absoluteCaretBoundsOf(const VisiblePosition&);
118 124
119 // Abs x/y position of the caret ignoring transforms. 125 // Abs x/y position of the caret ignoring transforms.
120 // TODO(yosin) navigation with transforms should be smarter. 126 // TODO(yosin) navigation with transforms should be smarter.
121 // TODO(yosin) We should move a glboal funciton 127 // TODO(yosin) We should move a glboal funciton
122 // |lineDirectionPointForBlockDirectionNavigationOf()| to "FrameSelection.h" 128 // |lineDirectionPointForBlockDirectionNavigationOf()| to "FrameSelection.h"
123 // as static function. 129 // as static function.
124 int lineDirectionPointForBlockDirectionNavigationOf(const VisiblePosition&); 130 int lineDirectionPointForBlockDirectionNavigationOf(const VisiblePosition&);
125 131
126 // TODO(yosin) We should move |leftPositionOf()| and |rightPositionOf()| to 132 // TODO(yosin) We should move |leftPositionOf()| and |rightPositionOf()| to
127 // "VisibleUnits.cpp". 133 // "VisibleUnits.cpp".
128 VisiblePosition leftPositionOf(const VisiblePosition&); 134 VisiblePosition leftPositionOf(const VisiblePosition&);
129 VisiblePosition rightPositionOf(const VisiblePosition&); 135 VisiblePosition rightPositionOf(const VisiblePosition&);
130 136
131 CORE_EXPORT Position canonicalPositionOf(const Position&); 137 CORE_EXPORT Position canonicalPositionOf(const Position&);
132 CORE_EXPORT PositionInComposedTree canonicalPositionOf(const PositionInComposedT ree&); 138 CORE_EXPORT PositionInComposedTree canonicalPositionOf(const PositionInComposedT ree&);
139
133 // TODO(yosin) We should move |characterAfter()| and |characterBefore()| to 140 // TODO(yosin) We should move |characterAfter()| and |characterBefore()| to
134 // "VisibleUnits.cpp" 141 // "VisibleUnits.cpp"
135 UChar32 characterAfter(const VisiblePosition&); 142 UChar32 characterAfter(const VisiblePosition&);
136 UChar32 characterBefore(const VisiblePosition&); 143 UChar32 characterBefore(const VisiblePosition&);
137 144
138 // TODO(yosin) We should move |honorEditingBoundaryAtOr{Before,After} to 145 // TODO(yosin) We should move |honorEditingBoundaryAtOr{Before,After} to
139 // "VisibleUnits.cpp" as static function. 146 // "VisibleUnits.cpp" as static function.
140 // next() and previous() will increment/decrement by a character cluster. 147 // next() and previous() will increment/decrement by a character cluster.
141 VisiblePosition honorEditingBoundaryAtOrBefore(const VisiblePosition&, const Pos ition& anchor); 148 VisiblePosition honorEditingBoundaryAtOrBefore(const VisiblePosition&, const Pos ition& anchor);
142 PositionWithAffinity honorEditingBoundaryAtOrBeforeOf(const PositionWithAffinity &, const Position& anchor); 149 PositionWithAffinity honorEditingBoundaryAtOrBeforeOf(const PositionWithAffinity &, const Position& anchor);
143 PositionInComposedTreeWithAffinity honorEditingBoundaryAtOrBeforeOf(const Positi onInComposedTreeWithAffinity&, const PositionInComposedTree& anchor); 150 PositionInComposedTreeWithAffinity honorEditingBoundaryAtOrBeforeOf(const Positi onInComposedTreeWithAffinity&, const PositionInComposedTree& anchor);
144 VisiblePosition honorEditingBoundaryAtOrAfter(const VisiblePosition&, const Posi tion& anchor); 151 VisiblePosition honorEditingBoundaryAtOrAfter(const VisiblePosition&, const Posi tion& anchor);
145 152
146 // TODO(yosin) We should move |nextPositionOf()| to "VisibleUnits.cpp". 153 // TODO(yosin) We should move |nextPositionOf()| to "VisibleUnits.cpp".
147 VisiblePosition nextPositionOf(const VisiblePosition&, EditingBoundaryCrossingRu le = CanCrossEditingBoundary); 154 VisiblePosition nextPositionOf(const VisiblePosition&, EditingBoundaryCrossingRu le = CanCrossEditingBoundary);
148 // TODO(yosin) We should move |previousPositionOf()| to "VisibleUnits.cpp" 155 // TODO(yosin) We should move |previousPositionOf()| to "VisibleUnits.cpp"
149 VisiblePosition previousPositionOf(const VisiblePosition&, EditingBoundaryCrossi ngRule = CanCrossEditingBoundary); 156 VisiblePosition previousPositionOf(const VisiblePosition&, EditingBoundaryCrossi ngRule = CanCrossEditingBoundary);
150 157
158 CORE_EXPORT VisiblePosition visiblePositionOf(const Position&, TextAffinity = VP _DEFAULT_AFFINITY);
159 CORE_EXPORT VisiblePosition visiblePositionOf(const PositionInComposedTree&, Tex tAffinity = VP_DEFAULT_AFFINITY);
160
151 } // namespace blink 161 } // namespace blink
152 162
153 #ifndef NDEBUG 163 #ifndef NDEBUG
154 // Outside the WebCore namespace for ease of invocation from gdb. 164 // Outside the WebCore namespace for ease of invocation from gdb.
155 void showTree(const blink::VisiblePosition*); 165 void showTree(const blink::VisiblePosition*);
156 void showTree(const blink::VisiblePosition&); 166 void showTree(const blink::VisiblePosition&);
157 #endif 167 #endif
158 168
159 #endif // VisiblePosition_h 169 #endif // VisiblePosition_h
OLDNEW
« no previous file with comments | « Source/core/editing/SelectionController.cpp ('k') | Source/core/editing/VisiblePosition.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698