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

Unified Diff: ui/accessibility/ax_position.h

Issue 2940923003: a11y: Move CreateTextMarker[Range] to TextMarkerHelperMac.
Patch Set: squish? Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/accessibility/ax_abstract_position.cc ('k') | ui/accessibility/platform/text_marker_helper_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/accessibility/ax_position.h
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h
index c38d9511128976a2f0f726799a4a89ff6c464d06..2cd3b5dccdc9ecb6433957909411565bad318378 100644
--- a/ui/accessibility/ax_position.h
+++ b/ui/accessibility/ax_position.h
@@ -17,19 +17,11 @@
#include "base/strings/string16.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
+#include "ui/accessibility/ax_abstract_position.h"
#include "ui/accessibility/ax_enums.h"
namespace ui {
-// 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 };
-
// Forward declarations.
template <class AXPositionType, class AXNodeType>
class AXPosition;
@@ -70,23 +62,13 @@ bool operator!=(const AXPosition<AXPositionType, AXNodeType>& first,
// This class can be copied using the |Clone| method. It is designed to be
// immutable.
template <class AXPositionType, class AXNodeType>
-class AXPosition {
+class AXPosition : public AXAbstractPosition {
public:
using AXPositionInstance =
std::unique_ptr<AXPosition<AXPositionType, AXNodeType>>;
- static const int INVALID_TREE_ID = -1;
- static const int32_t INVALID_ANCHOR_ID = -1;
- static const int BEFORE_TEXT = -1;
- static const int INVALID_INDEX = -2;
- static const int INVALID_OFFSET = -1;
-
static AXPositionInstance CreateNullPosition() {
- AXPositionInstance new_position(new AXPositionType());
- new_position->Initialize(AXPositionKind::NULL_POSITION, INVALID_TREE_ID,
- INVALID_ANCHOR_ID, INVALID_INDEX, INVALID_OFFSET,
- AX_TEXT_AFFINITY_DOWNSTREAM);
- return new_position;
+ return CreateFromData(kNullData);
}
static AXPositionInstance CreateTreePosition(int tree_id,
@@ -109,6 +91,18 @@ class AXPosition {
return new_position;
}
+ static AXPositionInstance CreateFromData(const AXPositionData& data) {
+ AXPositionInstance new_position(new AXPositionType());
+ // Skip Initialize() when creating from data.
+ new_position->kind_ = data.kind;
+ new_position->tree_id_ = data.tree_id;
+ new_position->anchor_id_ = data.anchor_id;
+ new_position->child_index_ = data.child_index;
+ new_position->text_offset_ = data.text_offset;
+ new_position->affinity_ = data.affinity;
+ return new_position;
+ }
+
AXPosition() {}
virtual ~AXPosition() {}
@@ -971,12 +965,12 @@ class AXPosition {
virtual AXPosition<AXPositionType, AXNodeType>& operator=(
const AXPosition<AXPositionType, AXNodeType>& other) = default;
- virtual void Initialize(AXPositionKind kind,
- int tree_id,
- int32_t anchor_id,
- int child_index,
- int text_offset,
- AXTextAffinity affinity) {
+ void Initialize(AXPositionKind kind,
+ int tree_id,
+ int32_t anchor_id,
+ int child_index,
+ int text_offset,
+ AXTextAffinity affinity) {
kind_ = kind;
tree_id_ = tree_id;
anchor_id_ = anchor_id;
@@ -1106,6 +1100,56 @@ class AXPosition {
virtual int32_t GetPreviousOnLineID(int32_t node_id) const = 0;
private:
+ // AXAbstractPosition:
+ void ToData(AXPositionData* data) const override {
+ *data = {kind_, tree_id_, anchor_id_,
+ child_index_, text_offset_, affinity_};
+ }
+ bool IsNull() const override { return IsNullPosition(); }
+ bool Compare(const AXPositionPointer& other) const override {
+ return *this < *other.DownCastTo<AXPosition>();
+ }
+
+ AXPositionPointer PositionAtEndOfAnchor() const override {
+ return CreatePositionAtEndOfAnchor();
+ }
+ AXPositionPointer PositionAtStartOfAnchor() const override {
+ return CreatePositionAtStartOfAnchor();
+ }
+
+ AXPositionPointer NextCharacterPosition() const override {
+ return CreateNextCharacterPosition();
+ }
+ AXPositionPointer PreviousCharacterPosition() const override {
+ return CreatePreviousCharacterPosition();
+ }
+
+ AXPositionPointer NextWordStartPosition() const override {
+ return CreateNextWordStartPosition();
+ }
+ AXPositionPointer PreviousWordStartPosition() const override {
+ return CreatePreviousWordStartPosition();
+ }
+ AXPositionPointer NextWordEndPosition() const override {
+ return CreateNextWordEndPosition();
+ }
+ AXPositionPointer PreviousWordEndPosition() const override {
+ return CreatePreviousWordEndPosition();
+ }
+
+ AXPositionPointer NextLineStartPosition() const override {
+ return CreateNextLineStartPosition();
+ }
+ AXPositionPointer PreviousLineStartPosition() const override {
+ return CreatePreviousLineStartPosition();
+ }
+ AXPositionPointer NextLineEndPosition() const override {
+ return CreateNextLineEndPosition();
+ }
+ AXPositionPointer PreviousLineEndPosition() const override {
+ return CreatePreviousLineEndPosition();
+ }
+
AXPositionKind kind_;
int tree_id_;
int32_t anchor_id_;
@@ -1121,17 +1165,6 @@ class AXPosition {
};
template <class AXPositionType, class AXNodeType>
-const int AXPosition<AXPositionType, AXNodeType>::INVALID_TREE_ID;
-template <class AXPositionType, class AXNodeType>
-const int32_t AXPosition<AXPositionType, AXNodeType>::INVALID_ANCHOR_ID;
-template <class AXPositionType, class AXNodeType>
-const int AXPosition<AXPositionType, AXNodeType>::BEFORE_TEXT;
-template <class AXPositionType, class AXNodeType>
-const int AXPosition<AXPositionType, AXNodeType>::INVALID_INDEX;
-template <class AXPositionType, class AXNodeType>
-const int AXPosition<AXPositionType, AXNodeType>::INVALID_OFFSET;
-
-template <class AXPositionType, class AXNodeType>
bool operator==(const AXPosition<AXPositionType, AXNodeType>& first,
const AXPosition<AXPositionType, AXNodeType>& second) {
if (first.IsNullPosition() && second.IsNullPosition())
« no previous file with comments | « ui/accessibility/ax_abstract_position.cc ('k') | ui/accessibility/platform/text_marker_helper_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698