| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SKY_ENGINE_CORE_EDITING_POSITIONWITHAFFINITY_H_ |
| #define SKY_ENGINE_CORE_EDITING_POSITIONWITHAFFINITY_H_ |
| |
| namespace blink { |
| |
| class RenderObject; |
| |
| enum EAffinity { UPSTREAM, DOWNSTREAM }; |
| |
| // VisiblePosition default affinity is downstream because |
| // the callers do not really care (they just want the |
| // deep position without regard to line position), and this |
| // is cheaper than UPSTREAM |
| #define VP_DEFAULT_AFFINITY DOWNSTREAM |
| |
| // Callers who do not know where on the line the position is, |
| // but would like UPSTREAM if at a line break or DOWNSTREAM |
| // otherwise, need a clear way to specify that. The |
| // constructors auto-correct UPSTREAM to DOWNSTREAM if the |
| // position is not at a line break. |
| #define VP_UPSTREAM_IF_POSSIBLE UPSTREAM |
| |
| class PositionWithAffinity { |
| public: |
| PositionWithAffinity(RenderObject* renderer, |
| int offset, |
| EAffinity = DOWNSTREAM); |
| ~PositionWithAffinity(); |
| |
| RenderObject* renderer() const { return m_renderer; } |
| int offset() const { return m_offset; } |
| EAffinity affinity() const { return m_affinity; } |
| |
| private: |
| RenderObject* m_renderer; |
| int m_offset; |
| EAffinity m_affinity; |
| }; |
| |
| } // namespace blink |
| |
| #endif // SKY_ENGINE_CORE_EDITING_POSITIONWITHAFFINITY_H_ |