// 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 UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_DELEGATE_H_ #define UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_DELEGATE_H_ #include "ui/accessibility/ax_enums.h" #include "ui/accessibility/ax_export.h" #include "ui/gfx/geometry/vector2d.h" #include "ui/gfx/native_widget_types.h" namespace ui { struct AXNodeData; class AXPlatformNode; // An object that wants to be accessible should derive from this class. // AXPlatformNode subclasses use this interface to query all of the information // about the object in order to implement native accessibility APIs. // // Note that AXPlatformNode has support for accessibility trees where some // of the objects in the tree are not implemented using AXPlatformNode. // For example, you may have a native window with platform-native widgets // in it, but in that window you have custom controls that use AXPlatformNode // to provide accessibility. That's why GetParent, ChildAtIndex, HitTestSync, // and GetFocus all return a gfx::NativeViewAccessible - so you can return a // native accessible if necessary, and AXPlatformNode::GetNativeViewAccessible // otherwise. class AX_EXPORT AXPlatformNodeDelegate { public: // Get the accessibility data that should be exposed for this node. // Virtually all of the information is obtained from this structure // (role, state, name, cursor position, etc.) - the rest of this interface // is mostly to implement support for walking the accessibility tree. virtual const AXNodeData& GetData() = 0; // Get the parent of the node, which may be an AXPlatformNode or it may // be a native accessible object implemented by another class. virtual gfx::NativeViewAccessible GetParent() = 0; // Get the number of children of this node. virtual int GetChildCount() = 0; // Get the child of a node given a 0-based index. virtual gfx::NativeViewAccessible ChildAtIndex(int index) = 0; // Get the offset to convert local coordinates to screen global coordinates. virtual gfx::Vector2d GetGlobalCoordinateOffset() = 0; // Do a *synchronous* hit test of the given location in global screen // coordinates, and the node within this node's subtree (inclusive) that's // hit, if any. // // If the result is anything other than this object or NULL, it will be // hit tested again recursively - that allows hit testing to work across // implementation classes. It's okay to take advantage of this and return // only an immediate child and not the deepest descendant. // // This function is mainly used by accessibility debugging software. // Platforms with touch accessibility use a different asynchronous interface. virtual gfx::NativeViewAccessible HitTestSync(int x, int y) = 0; // Return the node within this node's subtree (inclusive) that currently // has focus. virtual gfx::NativeViewAccessible GetFocus() = 0; // // Events. // // Return the platform-native GUI object that should be used as a target // for accessibility events. virtual gfx::AcceleratedWidget GetTargetForNativeAccessibilityEvent() = 0; // // Actions. // // Perform the default action, e.g. click a button, follow a link, or // toggle a checkbox. virtual void DoDefaultAction() = 0; // Change the value of a control, such as the text content of a text field. virtual bool SetStringValue(const base::string16& new_value) = 0; }; } // namespace ui #endif // UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_DELEGATE_H_