Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
ax_platform_node_delegate.h
Go to the documentation of this file.
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_DELEGATE_H_
6#define UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_DELEGATE_H_
7
8#include <cstdint>
9#include <map>
10#include <memory>
11#include <new>
12#include <ostream>
13#include <set>
14#include <string>
15#include <utility>
16#include <vector>
17
20#include "ax/ax_enums.h"
21#include "ax/ax_export.h"
22#include "ax/ax_node_position.h"
24#include "ax/ax_position.h"
25#include "ax/ax_tree.h"
26#include "ax/ax_tree_id.h"
27#include "ax_unique_id.h"
28#include "base/macros.h"
29#include "gfx/geometry/rect.h"
31
32namespace ui {
33
34struct AXActionData;
35struct AXNodeData;
36struct AXTreeData;
37class AXPlatformNode;
38
39using TextAttribute = std::pair<std::string, std::string>;
40using TextAttributeList = std::vector<TextAttribute>;
41
42// A TextAttributeMap is a map between the text offset in UTF-16 characters in
43// the node hypertext and the TextAttributeList that starts at that location.
44// An empty TextAttributeList signifies a return to the default node
45// TextAttributeList.
46using TextAttributeMap = std::map<int, TextAttributeList>;
47
48// An object that wants to be accessible should derive from this class.
49// AXPlatformNode subclasses use this interface to query all of the information
50// about the object in order to implement native accessibility APIs.
51//
52// Note that AXPlatformNode has support for accessibility trees where some
53// of the objects in the tree are not implemented using AXPlatformNode.
54// For example, you may have a native window with platform-native widgets
55// in it, but in that window you have custom controls that use AXPlatformNode
56// to provide accessibility. That's why GetParent, ChildAtIndex, HitTestSync,
57// and GetFocus all return a gfx::NativeViewAccessible - so you can return a
58// native accessible if necessary, and AXPlatformNode::GetNativeViewAccessible
59// otherwise.
61 public:
62 virtual ~AXPlatformNodeDelegate() = default;
63
64 // Get the accessibility data that should be exposed for this node.
65 // Virtually all of the information is obtained from this structure
66 // (role, state, name, cursor position, etc.) - the rest of this interface
67 // is mostly to implement support for walking the accessibility tree.
68 virtual const AXNodeData& GetData() const = 0;
69
70 // Get the accessibility tree data for this node.
71 virtual const AXTreeData& GetTreeData() const = 0;
72
73 // Returns the text of this node and all descendant nodes; including text
74 // found in embedded objects.
75 //
76 // Only text displayed on screen is included. Text from ARIA and HTML
77 // attributes that is either not displayed on screen, or outside this node,
78 // e.g. aria-label and HTML title, is not returned.
79 virtual std::u16string GetInnerText() const = 0;
80
81 // Get the unignored selection from the tree
82 virtual const AXTree::Selection GetUnignoredSelection() const = 0;
83
84 // Creates a text position rooted at this object.
86 int offset) const = 0;
87
88 // Get the accessibility node for the NSWindow the node is contained in. This
89 // method is only meaningful on macOS.
91
92 // Get the node for this delegate, which may be an AXPlatformNode or it may
93 // be a native accessible object implemented by another class.
95
96 // Get the parent of the node, which may be an AXPlatformNode or it may
97 // be a native accessible object implemented by another class.
99
100 // Get the index in parent. Typically this is the AXNode's index_in_parent_.
101 // This should return -1 if the index in parent is unknown.
102 virtual int GetIndexInParent() = 0;
103
104 // Get the number of children of this node.
105 virtual int GetChildCount() const = 0;
106
107 // Get the child of a node given a 0-based index.
109
110 // Returns true if it has a modal dialog.
111 virtual bool HasModalDialog() const = 0;
112
113 // Gets the first child of a node, or nullptr if no children exist.
115
116 // Gets the last child of a node, or nullptr if no children exist.
118
119 // Gets the next sibling of a given node, or nullptr if no such node exists.
121
122 // Gets the previous sibling of a given node, or nullptr if no such node
123 // exists.
125
126 // Returns true if an ancestor of this node (not including itself) is a
127 // leaf node, meaning that this node is not actually exposed to any
128 // platform's accessibility layer.
129 virtual bool IsChildOfLeaf() const = 0;
130
131 // Returns true if this current node is editable and the root editable node is
132 // a plain text field.
133 virtual bool IsChildOfPlainTextField() const = 0;
134
135 // Returns true if this is a leaf node, meaning all its
136 // children should not be exposed to any platform's native accessibility
137 // layer.
138 virtual bool IsLeaf() const = 0;
139
140 // Returns true if this is a top-level browser window that doesn't have a
141 // parent accessible node, or its parent is the application accessible node on
142 // platforms that have one.
143 virtual bool IsToplevelBrowserWindow() = 0;
144
145 // If this object is exposed to the platform's accessibility layer, returns
146 // this object. Otherwise, returns the platform leaf under which this object
147 // is found.
149
151 public:
152 virtual ~ChildIterator() = default;
153 virtual bool operator==(const ChildIterator& rhs) const = 0;
154 virtual bool operator!=(const ChildIterator& rhs) const = 0;
155 virtual void operator++() = 0;
156 virtual void operator++(int) = 0;
157 virtual void operator--() = 0;
158 virtual void operator--(int) = 0;
160 virtual int GetIndexInParent() const = 0;
161 virtual AXPlatformNodeDelegate& operator*() const = 0;
162 virtual AXPlatformNodeDelegate* operator->() const = 0;
163 };
164 virtual std::unique_ptr<AXPlatformNodeDelegate::ChildIterator>
166 virtual std::unique_ptr<AXPlatformNodeDelegate::ChildIterator>
168
169 // Returns the accessible name for the node.
170 virtual std::string GetName() const = 0;
171
172 // Returns the text of this node and represent the text of descendant nodes
173 // with a special character in place of every embedded object. This represents
174 // the concept of text in ATK and IA2 APIs.
175 virtual std::u16string GetHypertext() const = 0;
176
177 // Set the selection in the hypertext of this node. Depending on the
178 // implementation, this may mean the new selection will span multiple nodes.
179 virtual bool SetHypertextSelection(int start_offset, int end_offset) = 0;
180
181 // Compute the text attributes map for the node associated with this
182 // delegate, given a set of default text attributes that apply to the entire
183 // node. A text attribute map associates a list of text attributes with a
184 // given hypertext offset in this node.
186 const TextAttributeList& default_attributes) const = 0;
187
188 // Get the inherited font family name for text attributes. We need this
189 // because inheritance works differently between the different delegate
190 // implementations.
191 virtual std::string GetInheritedFontFamilyName() const = 0;
192
193 // Return the bounds of this node in the coordinate system indicated. If the
194 // clipping behavior is set to clipped, clipping is applied. If an offscreen
195 // result address is provided, it will be populated depending on whether the
196 // returned bounding box is onscreen or offscreen.
198 const AXCoordinateSystem coordinate_system,
199 const AXClippingBehavior clipping_behavior,
200 AXOffscreenResult* offscreen_result = nullptr) const = 0;
201
203 AXOffscreenResult* offscreen_result = nullptr) const = 0;
204
205 // Return the bounds of the text range given by text offsets relative to
206 // GetHypertext in the coordinate system indicated. If the clipping behavior
207 // is set to clipped, clipping is applied. If an offscreen result address is
208 // provided, it will be populated depending on whether the returned bounding
209 // box is onscreen or offscreen.
211 const int start_offset,
212 const int end_offset,
213 const AXCoordinateSystem coordinate_system,
214 const AXClippingBehavior clipping_behavior,
215 AXOffscreenResult* offscreen_result = nullptr) const = 0;
216
217 // Return the bounds of the text range given by text offsets relative to
218 // GetInnerText in the coordinate system indicated. If the clipping behavior
219 // is set to clipped, clipping is applied. If an offscreen result address is
220 // provided, it will be populated depending on whether the returned bounding
221 // box is onscreen or offscreen.
223 const int start_offset,
224 const int end_offset,
225 const AXCoordinateSystem coordinate_system,
226 const AXClippingBehavior clipping_behavior,
227 AXOffscreenResult* offscreen_result = nullptr) const = 0;
228
229 // Do a *synchronous* hit test of the given location in global screen physical
230 // pixel coordinates, and the node within this node's subtree (inclusive)
231 // that's hit, if any.
232 //
233 // If the result is anything other than this object or NULL, it will be
234 // hit tested again recursively - that allows hit testing to work across
235 // implementation classes. It's okay to take advantage of this and return
236 // only an immediate child and not the deepest descendant.
237 //
238 // This function is mainly used by accessibility debugging software.
239 // Platforms with touch accessibility use a different asynchronous interface.
241 int screen_physical_pixel_x,
242 int screen_physical_pixel_y) const = 0;
243
244 // Return the node within this node's subtree (inclusive) that currently has
245 // focus, or return nullptr if this subtree is not connected to the top
246 // document through its ancestry chain.
248
249 // Get whether this node is offscreen.
250 virtual bool IsOffscreen() const = 0;
251
252 // Get whether this node is a minimized window.
253 virtual bool IsMinimized() const = 0;
254
255 // See AXNode::IsText().
256 virtual bool IsText() const = 0;
257
258 // Get whether this node is in web content.
259 virtual bool IsWebContent() const = 0;
260
261 // Returns true if the caret or selection is visible on this object.
262 virtual bool HasVisibleCaretOrSelection() const = 0;
263
264 // Get another node from this same tree.
265 virtual AXPlatformNode* GetFromNodeID(int32_t id) = 0;
266
267 // Get a node from a different tree using a tree ID and node ID.
268 // Note that this is only guaranteed to work if the other tree is of the
269 // same type, i.e. it won't work between web and views or vice-versa.
271 int32_t id) = 0;
272
273 // Given a node ID attribute (one where IsNodeIdIntAttribute is true), return
274 // a target nodes for which this delegate's node has that relationship
275 // attribute or NULL if there is no such relationship.
277 ax::mojom::IntAttribute attr) = 0;
278
279 // Given a node ID attribute (one where IsNodeIdIntListAttribute is true),
280 // return a vector of all target nodes for which this delegate's node has that
281 // relationship attribute.
282 virtual std::vector<AXPlatformNode*> GetTargetNodesForRelation(
284
285 // Given a node ID attribute (one where IsNodeIdIntAttribute is true), return
286 // a set of all source nodes that have that relationship attribute between
287 // them and this delegate's node.
288 virtual std::set<AXPlatformNode*> GetReverseRelations(
289 ax::mojom::IntAttribute attr) = 0;
290
291 // Given a node ID list attribute (one where IsNodeIdIntListAttribute is
292 // true), return a set of all source nodes that have that relationship
293 // attribute between them and this delegate's node.
294 virtual std::set<AXPlatformNode*> GetReverseRelations(
296
297 // Return the string representation of the unique ID assigned by the author,
298 // otherwise return an empty string. The author ID must be persistent across
299 // any instance of the application, regardless of locale. The author ID should
300 // be unique among sibling accessibility nodes and is best if unique across
301 // the application, however, not meeting this requirement is non-fatal.
302 virtual std::u16string GetAuthorUniqueId() const = 0;
303
304 virtual const AXUniqueId& GetUniqueId() const = 0;
305
306 // Finds the previous or next offset from the provided offset, that matches
307 // the provided boundary type.
308 //
309 // This method finds text boundaries in the text used for platform text APIs.
310 // Implementations may use side-channel data such as line or word indices to
311 // produce appropriate results. It may optionally return no value, indicating
312 // that the delegate does not have all the information required to calculate
313 // this value and it is the responsibility of the AXPlatformNode itself to
314 // calculate it.
315 virtual std::optional<int> FindTextBoundary(
317 int offset,
318 ax::mojom::MoveDirection direction,
319 ax::mojom::TextAffinity affinity) const = 0;
320
321 // Return a vector of all the descendants of this delegate's node. This method
322 // is only meaningful for Windows UIA.
323 virtual const std::vector<gfx::NativeViewAccessible> GetUIADescendants()
324 const = 0;
325
326 // Return a string representing the language code.
327 //
328 // For web content, this will consider the language declared in the DOM, and
329 // may eventually attempt to automatically detect the language from the text.
330 //
331 // This language code will be BCP 47.
332 //
333 // Returns empty string if no appropriate language was found or if this node
334 // uses the default interface language.
335 virtual std::string GetLanguage() const = 0;
336
337 //
338 // Tables. All of these should be called on a node that's a table-like
339 // role, otherwise they return nullopt.
340 //
341 virtual bool IsTable() const = 0;
342 virtual std::optional<int> GetTableColCount() const = 0;
343 virtual std::optional<int> GetTableRowCount() const = 0;
344 virtual std::optional<int> GetTableAriaColCount() const = 0;
345 virtual std::optional<int> GetTableAriaRowCount() const = 0;
346 virtual std::optional<int> GetTableCellCount() const = 0;
347 virtual std::optional<bool> GetTableHasColumnOrRowHeaderNode() const = 0;
348 virtual std::vector<int32_t> GetColHeaderNodeIds() const = 0;
349 virtual std::vector<int32_t> GetColHeaderNodeIds(int col_index) const = 0;
350 virtual std::vector<int32_t> GetRowHeaderNodeIds() const = 0;
351 virtual std::vector<int32_t> GetRowHeaderNodeIds(int row_index) const = 0;
352 virtual AXPlatformNode* GetTableCaption() const = 0;
353
354 // Table row-like nodes.
355 virtual bool IsTableRow() const = 0;
356 virtual std::optional<int> GetTableRowRowIndex() const = 0;
357
358 // Table cell-like nodes.
359 virtual bool IsTableCellOrHeader() const = 0;
360 virtual std::optional<int> GetTableCellIndex() const = 0;
361 virtual std::optional<int> GetTableCellColIndex() const = 0;
362 virtual std::optional<int> GetTableCellRowIndex() const = 0;
363 virtual std::optional<int> GetTableCellColSpan() const = 0;
364 virtual std::optional<int> GetTableCellRowSpan() const = 0;
365 virtual std::optional<int> GetTableCellAriaColIndex() const = 0;
366 virtual std::optional<int> GetTableCellAriaRowIndex() const = 0;
367 virtual std::optional<int32_t> GetCellId(int row_index,
368 int col_index) const = 0;
369 virtual std::optional<int32_t> CellIndexToId(int cell_index) const = 0;
370
371 // Helper methods to check if a cell is an ARIA-1.1+ 'cell' or 'gridcell'
372 virtual bool IsCellOrHeaderOfARIATable() const = 0;
373 virtual bool IsCellOrHeaderOfARIAGrid() const = 0;
374
375 // Ordered-set-like and item-like nodes.
376 virtual bool IsOrderedSetItem() const = 0;
377 virtual bool IsOrderedSet() const = 0;
378 virtual std::optional<int> GetPosInSet() const = 0;
379 virtual std::optional<int> GetSetSize() const = 0;
380
381 //
382 // Events.
383 //
384
385 // Return the platform-native GUI object that should be used as a target
386 // for accessibility events.
387 virtual gfx::AcceleratedWidget GetTargetForNativeAccessibilityEvent() = 0;
388
389 //
390 // Actions.
391 //
392
393 // Perform an accessibility action, switching on the ax::mojom::Action
394 // provided in |data|.
395 virtual bool AccessibilityPerformAction(const AXActionData& data) = 0;
396
397 //
398 // Localized strings.
399 //
400
402 const = 0;
404 ax::mojom::ImageAnnotationStatus status) const = 0;
405 virtual std::u16string GetLocalizedStringForLandmarkType() const = 0;
406 virtual std::u16string GetLocalizedStringForRoleDescription() const = 0;
407 virtual std::u16string GetStyleNameAttributeAsLocalizedString() const = 0;
408
409 //
410 // Testing.
411 //
412
413 // Accessibility objects can have the "hot tracked" state set when
414 // the mouse is hovering over them, but this makes tests flaky because
415 // the test behaves differently when the mouse happens to be over an
416 // element. The default value should be false if not in testing mode.
418
419 // If this object is exposed to the platform's accessibility layer, returns
420 // this object. Otherwise, returns the platform leaf or lowest unignored
421 // ancestor under which this object is found.
422 //
423 // (An ignored node means that the node should not be exposed to platform
424 // APIs: See `IsIgnored`.)
426
427 // Creates a string representation of this delegate's data.
428 std::string ToString() { return GetData().ToString(); }
429
430 // Returns a string representation of the subtree of delegates rooted at this
431 // delegate.
432 std::string SubtreeToString() { return SubtreeToStringHelper(0u); }
433
434 friend std::ostream& operator<<(std::ostream& stream,
435 AXPlatformNodeDelegate& delegate) {
436 return stream << delegate.ToString();
437 }
438
439 protected:
441
442 virtual std::string SubtreeToStringHelper(size_t level) = 0;
443
444 private:
446};
447
448} // namespace ui
449
450#endif // UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_DELEGATE_H_
#define AX_EXPORT
Definition ax_export.h:29
virtual AXPlatformNodeDelegate * operator->() const =0
virtual gfx::NativeViewAccessible GetNativeViewAccessible() const =0
virtual bool operator!=(const ChildIterator &rhs) const =0
virtual AXPlatformNodeDelegate & operator*() const =0
virtual bool operator==(const ChildIterator &rhs) const =0
virtual gfx::NativeViewAccessible GetFocus()=0
virtual gfx::NativeViewAccessible GetLastChild()=0
virtual bool IsOrderedSetItem() const =0
virtual std::optional< int > GetTableCellRowSpan() const =0
virtual bool IsCellOrHeaderOfARIAGrid() const =0
virtual std::u16string GetInnerText() const =0
virtual gfx::Rect GetHypertextRangeBoundsRect(const int start_offset, const int end_offset, const AXCoordinateSystem coordinate_system, const AXClippingBehavior clipping_behavior, AXOffscreenResult *offscreen_result=nullptr) const =0
virtual std::optional< int > GetTableRowCount() const =0
virtual const std::vector< gfx::NativeViewAccessible > GetUIADescendants() const =0
virtual gfx::NativeViewAccessible HitTestSync(int screen_physical_pixel_x, int screen_physical_pixel_y) const =0
virtual std::optional< int32_t > GetCellId(int row_index, int col_index) const =0
virtual std::optional< int > FindTextBoundary(ax::mojom::TextBoundary boundary, int offset, ax::mojom::MoveDirection direction, ax::mojom::TextAffinity affinity) const =0
virtual bool IsTable() const =0
virtual std::vector< int32_t > GetRowHeaderNodeIds() const =0
virtual std::optional< int > GetTableCellIndex() const =0
virtual std::optional< int > GetTableCellAriaColIndex() const =0
virtual std::unique_ptr< AXPlatformNodeDelegate::ChildIterator > ChildrenEnd()=0
virtual std::vector< AXPlatformNode * > GetTargetNodesForRelation(ax::mojom::IntListAttribute attr)=0
virtual int GetIndexInParent()=0
virtual std::u16string GetAuthorUniqueId() const =0
friend std::ostream & operator<<(std::ostream &stream, AXPlatformNodeDelegate &delegate)
virtual std::optional< int > GetTableCellCount() const =0
virtual AXPlatformNode * GetTableCaption() const =0
virtual gfx::NativeViewAccessible GetNextSibling()=0
virtual gfx::NativeViewAccessible GetNativeViewAccessible()=0
virtual std::string GetName() const =0
virtual std::optional< int > GetSetSize() const =0
virtual const AXUniqueId & GetUniqueId() const =0
virtual bool IsChildOfPlainTextField() const =0
virtual std::optional< int > GetTableCellAriaRowIndex() const =0
virtual const AXTree::Selection GetUnignoredSelection() const =0
virtual gfx::NativeViewAccessible GetPreviousSibling()=0
virtual std::vector< int32_t > GetColHeaderNodeIds(int col_index) const =0
virtual std::u16string GetLocalizedStringForRoleDescription() const =0
virtual bool IsOrderedSet() const =0
virtual std::u16string GetLocalizedRoleDescriptionForUnlabeledImage() const =0
virtual AXPlatformNode * GetTargetNodeForRelation(ax::mojom::IntAttribute attr)=0
virtual AXPlatformNode * GetFromNodeID(int32_t id)=0
virtual bool AccessibilityPerformAction(const AXActionData &data)=0
virtual std::optional< int > GetTableCellRowIndex() const =0
virtual const AXNodeData & GetData() const =0
virtual bool IsToplevelBrowserWindow()=0
virtual std::unique_ptr< AXPlatformNodeDelegate::ChildIterator > ChildrenBegin()=0
virtual std::optional< int > GetTableColCount() const =0
virtual bool IsLeaf() const =0
virtual std::optional< int > GetPosInSet() const =0
virtual gfx::AcceleratedWidget GetTargetForNativeAccessibilityEvent()=0
virtual bool ShouldIgnoreHoveredStateForTesting()=0
virtual std::string GetInheritedFontFamilyName() const =0
virtual std::string GetLanguage() const =0
virtual std::u16string GetHypertext() const =0
virtual bool IsTableCellOrHeader() const =0
virtual gfx::Rect GetBoundsRect(const AXCoordinateSystem coordinate_system, const AXClippingBehavior clipping_behavior, AXOffscreenResult *offscreen_result=nullptr) const =0
virtual std::optional< int > GetTableRowRowIndex() const =0
virtual TextAttributeMap ComputeTextAttributeMap(const TextAttributeList &default_attributes) const =0
virtual bool IsTableRow() const =0
virtual std::optional< int > GetTableAriaColCount() const =0
virtual std::optional< int > GetTableCellColIndex() const =0
virtual bool IsCellOrHeaderOfARIATable() const =0
virtual gfx::Rect GetClippedScreenBoundsRect(AXOffscreenResult *offscreen_result=nullptr) const =0
virtual ~AXPlatformNodeDelegate()=default
virtual bool IsMinimized() const =0
virtual std::optional< int > GetTableCellColSpan() const =0
virtual gfx::NativeViewAccessible GetFirstChild()=0
virtual std::u16string GetLocalizedStringForLandmarkType() const =0
virtual bool IsText() const =0
virtual std::optional< bool > GetTableHasColumnOrRowHeaderNode() const =0
virtual std::set< AXPlatformNode * > GetReverseRelations(ax::mojom::IntListAttribute attr)=0
virtual std::u16string GetStyleNameAttributeAsLocalizedString() const =0
virtual AXPlatformNode * GetFromTreeIDAndNodeID(const ui::AXTreeID &ax_tree_id, int32_t id)=0
virtual gfx::NativeViewAccessible GetLowestPlatformAncestor() const =0
virtual std::string SubtreeToStringHelper(size_t level)=0
virtual std::vector< int32_t > GetRowHeaderNodeIds(int row_index) const =0
virtual bool HasVisibleCaretOrSelection() const =0
virtual bool HasModalDialog() const =0
virtual gfx::NativeViewAccessible GetClosestPlatformObject() const =0
virtual const AXTreeData & GetTreeData() const =0
virtual gfx::NativeViewAccessible ChildAtIndex(int index)=0
virtual std::vector< int32_t > GetColHeaderNodeIds() const =0
virtual bool IsWebContent() const =0
virtual std::set< AXPlatformNode * > GetReverseRelations(ax::mojom::IntAttribute attr)=0
virtual std::u16string GetLocalizedStringForImageAnnotationStatus(ax::mojom::ImageAnnotationStatus status) const =0
virtual bool IsChildOfLeaf() const =0
virtual std::optional< int > GetTableAriaRowCount() const =0
virtual bool IsOffscreen() const =0
virtual gfx::Rect GetInnerTextRangeBoundsRect(const int start_offset, const int end_offset, const AXCoordinateSystem coordinate_system, const AXClippingBehavior clipping_behavior, AXOffscreenResult *offscreen_result=nullptr) const =0
virtual int GetChildCount() const =0
virtual bool SetHypertextSelection(int start_offset, int end_offset)=0
virtual AXNodePosition::AXPositionInstance CreateTextPositionAt(int offset) const =0
virtual std::optional< int32_t > CellIndexToId(int cell_index) const =0
virtual gfx::NativeViewAccessible GetNSWindow()=0
virtual gfx::NativeViewAccessible GetParent()=0
std::unique_ptr< AXPosition< AXNodePosition, AXNode > > AXPositionInstance
ImageAnnotationStatus
Definition ax_enums.h:1170
UnimplementedNativeViewAccessible * NativeViewAccessible
std::pair< std::string, std::string > TextAttribute
std::vector< TextAttribute > TextAttributeList
std::map< int, TextAttributeList > TextAttributeMap
Point offset
#define BASE_DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition macros.h:8