| Index: ui/accessibility/ax_abstract_position.h
|
| diff --git a/ui/accessibility/ax_abstract_position.h b/ui/accessibility/ax_abstract_position.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4cfb9a38df6094dbe04574825c33133d36bbab75
|
| --- /dev/null
|
| +++ b/ui/accessibility/ax_abstract_position.h
|
| @@ -0,0 +1,116 @@
|
| +// Copyright 2017 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 UI_ACCESSIBILITY_AX_ABSTRACT_POSITION_H_
|
| +#define UI_ACCESSIBILITY_AX_ABSTRACT_POSITION_H_
|
| +
|
| +#include <memory>
|
| +#include <utility>
|
| +
|
| +#include "base/macros.h"
|
| +#include "ui/accessibility/ax_enums.h"
|
| +#include "ui/accessibility/ax_export.h"
|
| +
|
| +namespace ui {
|
| +
|
| +class AXAbstractPosition;
|
| +
|
| +// Defines the type of position in the accessibility tree.
|
| +// A tree position is used when referring to a specific child of a node in the
|
| +// accessibility tree.
|
| +// A text position is used when referring to a specific character of text inside
|
| +// a particular node.
|
| +// A null position is used to signify that the provided data is invalid or that
|
| +// a boundary has been reached.
|
| +enum class AXPositionKind { NULL_POSITION, TREE_POSITION, TEXT_POSITION };
|
| +
|
| +// Plain old data to serialize and deserialize a position. See AXPosition.
|
| +struct AX_EXPORT AXPositionData {
|
| + AXPositionKind kind;
|
| + int tree_id;
|
| + int32_t anchor_id;
|
| + int child_index;
|
| + int text_offset;
|
| + AXTextAffinity affinity;
|
| +};
|
| +
|
| +// An immutable move-only type that wraps a polymorphic AXAbstractPosition.
|
| +class AX_EXPORT AXPositionPointer {
|
| + public:
|
| + // Allow moving. Declaring this implicitly deletes other constructors.
|
| + AXPositionPointer(AXPositionPointer&& other);
|
| +
|
| + // Allow implicit upcasting when using std::move on a std::unique_ptr.
|
| + template <class Concrete>
|
| + AXPositionPointer(std::unique_ptr<Concrete> other) : ptr_(other.release()) {}
|
| +
|
| + // Allow implicit conversion from nullptr.
|
| + AXPositionPointer(std::nullptr_t);
|
| +
|
| + ~AXPositionPointer();
|
| +
|
| + explicit operator bool() const { return ptr_.get() != nullptr; }
|
| + const AXAbstractPosition* operator->() const { return ptr_.get(); }
|
| +
|
| + // Downcasting must be explicit.
|
| + template <class Concrete>
|
| + const Concrete* DownCastTo() const {
|
| + return static_cast<Concrete*>(ptr_.get());
|
| + }
|
| +
|
| + private:
|
| + std::unique_ptr<AXAbstractPosition> ptr_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(AXPositionPointer);
|
| +};
|
| +
|
| +using AXRangePointer = std::pair<AXPositionPointer, AXPositionPointer>;
|
| +
|
| +// Represents a tree or text position. An AXAbstractPosition exposes the methods
|
| +// required to manipulate the position, without having to know details of how to
|
| +// represent it.
|
| +class AX_EXPORT AXAbstractPosition {
|
| + public:
|
| + static constexpr int INVALID_TREE_ID = -1;
|
| + static constexpr int32_t INVALID_ANCHOR_ID = -1;
|
| + static constexpr int BEFORE_TEXT = -1;
|
| + static constexpr int INVALID_INDEX = -2;
|
| + static constexpr int INVALID_OFFSET = -1;
|
| +
|
| + // TODO(tapted): Make this constexpr. It can't be currently because it tickles
|
| + // a bogus warning due to an MSVC compiler bug -- https://goo.gl/TGW4Ji . The
|
| + // warning can be suppressed, but this is usually passed by reference anyway.
|
| + static const AXPositionData kNullData;
|
| +
|
| + virtual ~AXAbstractPosition() {}
|
| +
|
| + virtual void ToData(AXPositionData* data) const = 0;
|
| + virtual bool IsNull() const = 0;
|
| +
|
| + // Compare according to the "Compare" C++ standard concept (this < other).
|
| + virtual bool Compare(const AXPositionPointer& other) const = 0;
|
| +
|
| + virtual AXPositionPointer PositionAtEndOfAnchor() const = 0;
|
| + virtual AXPositionPointer PositionAtStartOfAnchor() const = 0;
|
| +
|
| + virtual AXPositionPointer NextCharacterPosition() const = 0;
|
| + virtual AXPositionPointer PreviousCharacterPosition() const = 0;
|
| +
|
| + virtual AXPositionPointer NextWordStartPosition() const = 0;
|
| + virtual AXPositionPointer PreviousWordStartPosition() const = 0;
|
| + virtual AXPositionPointer NextWordEndPosition() const = 0;
|
| + virtual AXPositionPointer PreviousWordEndPosition() const = 0;
|
| +
|
| + virtual AXPositionPointer NextLineStartPosition() const = 0;
|
| + virtual AXPositionPointer PreviousLineStartPosition() const = 0;
|
| + virtual AXPositionPointer NextLineEndPosition() const = 0;
|
| + virtual AXPositionPointer PreviousLineEndPosition() const = 0;
|
| +
|
| + protected:
|
| + AXAbstractPosition() {}
|
| +};
|
| +
|
| +} // namespace ui
|
| +
|
| +#endif // UI_ACCESSIBILITY_AX_ABSTRACT_POSITION_H_
|
|
|