blob: 1a4d251cdd79b4cac98c34a12f402d52819527ef [file] [log] [blame]
// 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_