| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef GranularityStrategy_h | 5 #ifndef GranularityStrategy_h |
| 6 #define GranularityStrategy_h | 6 #define GranularityStrategy_h |
| 7 | 7 |
| 8 #include "core/editing/SelectionStrategy.h" | 8 #include "core/editing/SelectionStrategy.h" |
| 9 #include "core/editing/VisibleSelection.h" | 9 #include "core/editing/SelectionTemplate.h" |
| 10 #include "wtf/Allocator.h" | 10 #include "wtf/Allocator.h" |
| 11 | 11 |
| 12 namespace blink { | 12 namespace blink { |
| 13 | 13 |
| 14 class GranularityStrategy { | 14 class GranularityStrategy { |
| 15 USING_FAST_MALLOC(GranularityStrategy); | 15 USING_FAST_MALLOC(GranularityStrategy); |
| 16 | 16 |
| 17 public: | 17 public: |
| 18 virtual ~GranularityStrategy(); | 18 virtual ~GranularityStrategy(); |
| 19 virtual SelectionStrategy GetType() const = 0; | 19 virtual SelectionStrategy GetType() const = 0; |
| 20 virtual void Clear() = 0; | 20 virtual void Clear() = 0; |
| 21 | 21 |
| 22 // Calculates and returns the new selection based on the updated extent | 22 // Calculates and returns the new selection based on the updated extent |
| 23 // location in absolute coordinates. | 23 // location in absolute coordinates. |
| 24 virtual VisibleSelection updateExtent(const IntPoint&, LocalFrame*) = 0; | 24 virtual SelectionInDOMTree updateExtent(const IntPoint&, LocalFrame*) = 0; |
| 25 | 25 |
| 26 protected: | 26 protected: |
| 27 GranularityStrategy(); | 27 GranularityStrategy(); |
| 28 }; | 28 }; |
| 29 | 29 |
| 30 // Always uses character granularity. | 30 // Always uses character granularity. |
| 31 class CharacterGranularityStrategy final : public GranularityStrategy { | 31 class CharacterGranularityStrategy final : public GranularityStrategy { |
| 32 public: | 32 public: |
| 33 CharacterGranularityStrategy(); | 33 CharacterGranularityStrategy(); |
| 34 ~CharacterGranularityStrategy() final; | 34 ~CharacterGranularityStrategy() final; |
| 35 | 35 |
| 36 // GranularityStrategy: | 36 // GranularityStrategy: |
| 37 SelectionStrategy GetType() const final; | 37 SelectionStrategy GetType() const final; |
| 38 void Clear() final; | 38 void Clear() final; |
| 39 VisibleSelection updateExtent(const IntPoint&, LocalFrame*) final; | 39 SelectionInDOMTree updateExtent(const IntPoint&, LocalFrame*) final; |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 // "Expand by word, shrink by character" selection strategy. | 42 // "Expand by word, shrink by character" selection strategy. |
| 43 // Uses character granularity when selection is shrinking. If the selection is | 43 // Uses character granularity when selection is shrinking. If the selection is |
| 44 // expanding, granularity doesn't change until a word boundary is passed, after | 44 // expanding, granularity doesn't change until a word boundary is passed, after |
| 45 // which the granularity switches to "word". | 45 // which the granularity switches to "word". |
| 46 // In word granularity, the word is not selected until the extent point passes | 46 // In word granularity, the word is not selected until the extent point passes |
| 47 // the middle of the word. | 47 // the middle of the word. |
| 48 // | 48 // |
| 49 // The "offset" feature: | 49 // The "offset" feature: |
| (...skipping 27 matching lines...) Expand all Loading... |
| 77 // Move forward one character. End moves with extent in character granularity. | 77 // Move forward one character. End moves with extent in character granularity. |
| 78 // Lorem ip^sum dolor|> sit amet, consectetur | 78 // Lorem ip^sum dolor|> sit amet, consectetur |
| 79 class DirectionGranularityStrategy final : public GranularityStrategy { | 79 class DirectionGranularityStrategy final : public GranularityStrategy { |
| 80 public: | 80 public: |
| 81 DirectionGranularityStrategy(); | 81 DirectionGranularityStrategy(); |
| 82 ~DirectionGranularityStrategy() final; | 82 ~DirectionGranularityStrategy() final; |
| 83 | 83 |
| 84 // GranularityStrategy: | 84 // GranularityStrategy: |
| 85 SelectionStrategy GetType() const final; | 85 SelectionStrategy GetType() const final; |
| 86 void Clear() final; | 86 void Clear() final; |
| 87 VisibleSelection updateExtent(const IntPoint&, LocalFrame*) final; | 87 SelectionInDOMTree updateExtent(const IntPoint&, LocalFrame*) final; |
| 88 | 88 |
| 89 private: | 89 private: |
| 90 enum class StrategyState { | 90 enum class StrategyState { |
| 91 // Starting state. | 91 // Starting state. |
| 92 // Selection was cleared and there were no extent updates since then. | 92 // Selection was cleared and there were no extent updates since then. |
| 93 // One an update is performed, the strategy goes into the Expanding | 93 // One an update is performed, the strategy goes into the Expanding |
| 94 // state unless the update shrinks the selection without changing | 94 // state unless the update shrinks the selection without changing |
| 95 // relative base/extent order, in which case the strategy goes into the | 95 // relative base/extent order, in which case the strategy goes into the |
| 96 // Shrinking state. | 96 // Shrinking state. |
| 97 Cleared, | 97 Cleared, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 114 | 114 |
| 115 // This defines location of the offset-adjusted extent point (from the | 115 // This defines location of the offset-adjusted extent point (from the |
| 116 // latest updateExtent call) relative to the location of extent's | 116 // latest updateExtent call) relative to the location of extent's |
| 117 // VisiblePosition. It is used to detect sub-position extent movement. | 117 // VisiblePosition. It is used to detect sub-position extent movement. |
| 118 IntSize m_diffExtentPointFromExtentPosition; | 118 IntSize m_diffExtentPointFromExtentPosition; |
| 119 }; | 119 }; |
| 120 | 120 |
| 121 } // namespace blink | 121 } // namespace blink |
| 122 | 122 |
| 123 #endif // GranularityStrategy_h | 123 #endif // GranularityStrategy_h |
| OLD | NEW |