OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013, Google Inc. All rights reserved. | 2 * Copyright (C) 2013, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 23 matching lines...) Expand all Loading... |
34 #include "modules/accessibility/AXObjectCacheImpl.h" | 34 #include "modules/accessibility/AXObjectCacheImpl.h" |
35 #include "platform/LayoutUnit.h" | 35 #include "platform/LayoutUnit.h" |
36 | 36 |
37 namespace blink { | 37 namespace blink { |
38 | 38 |
39 using namespace HTMLNames; | 39 using namespace HTMLNames; |
40 | 40 |
41 AXInlineTextBox::AXInlineTextBox( | 41 AXInlineTextBox::AXInlineTextBox( |
42 PassRefPtr<AbstractInlineTextBox> inline_text_box, | 42 PassRefPtr<AbstractInlineTextBox> inline_text_box, |
43 AXObjectCacheImpl& ax_object_cache) | 43 AXObjectCacheImpl& ax_object_cache) |
44 : AXObjectImpl(ax_object_cache), | 44 : AXObject(ax_object_cache), inline_text_box_(std::move(inline_text_box)) {} |
45 inline_text_box_(std::move(inline_text_box)) {} | |
46 | 45 |
47 AXInlineTextBox* AXInlineTextBox::Create( | 46 AXInlineTextBox* AXInlineTextBox::Create( |
48 PassRefPtr<AbstractInlineTextBox> inline_text_box, | 47 PassRefPtr<AbstractInlineTextBox> inline_text_box, |
49 AXObjectCacheImpl& ax_object_cache) { | 48 AXObjectCacheImpl& ax_object_cache) { |
50 return new AXInlineTextBox(std::move(inline_text_box), ax_object_cache); | 49 return new AXInlineTextBox(std::move(inline_text_box), ax_object_cache); |
51 } | 50 } |
52 | 51 |
53 void AXInlineTextBox::Init() {} | 52 void AXInlineTextBox::Init() {} |
54 | 53 |
55 void AXInlineTextBox::Detach() { | 54 void AXInlineTextBox::Detach() { |
56 AXObjectImpl::Detach(); | 55 AXObject::Detach(); |
57 inline_text_box_ = nullptr; | 56 inline_text_box_ = nullptr; |
58 } | 57 } |
59 | 58 |
60 void AXInlineTextBox::GetRelativeBounds( | 59 void AXInlineTextBox::GetRelativeBounds( |
61 AXObjectImpl** out_container, | 60 AXObject** out_container, |
62 FloatRect& out_bounds_in_container, | 61 FloatRect& out_bounds_in_container, |
63 SkMatrix44& out_container_transform) const { | 62 SkMatrix44& out_container_transform) const { |
64 *out_container = nullptr; | 63 *out_container = nullptr; |
65 out_bounds_in_container = FloatRect(); | 64 out_bounds_in_container = FloatRect(); |
66 out_container_transform.setIdentity(); | 65 out_container_transform.setIdentity(); |
67 | 66 |
68 if (!inline_text_box_ || !ParentObject() || | 67 if (!inline_text_box_ || !ParentObject() || |
69 !ParentObject()->GetLayoutObject()) | 68 !ParentObject()->GetLayoutObject()) |
70 return; | 69 return; |
71 | 70 |
72 *out_container = ParentObject(); | 71 *out_container = ParentObject(); |
73 out_bounds_in_container = FloatRect(inline_text_box_->LocalBounds()); | 72 out_bounds_in_container = FloatRect(inline_text_box_->LocalBounds()); |
74 | 73 |
75 // Subtract the local bounding box of the parent because they're | 74 // Subtract the local bounding box of the parent because they're |
76 // both in the same coordinate system. | 75 // both in the same coordinate system. |
77 LayoutObject* parent_layout_object = ParentObject()->GetLayoutObject(); | 76 LayoutObject* parent_layout_object = ParentObject()->GetLayoutObject(); |
78 FloatRect parent_bounding_box = | 77 FloatRect parent_bounding_box = |
79 parent_layout_object->LocalBoundingBoxRectForAccessibility(); | 78 parent_layout_object->LocalBoundingBoxRectForAccessibility(); |
80 out_bounds_in_container.MoveBy(-parent_bounding_box.Location()); | 79 out_bounds_in_container.MoveBy(-parent_bounding_box.Location()); |
81 } | 80 } |
82 | 81 |
83 bool AXInlineTextBox::ComputeAccessibilityIsIgnored( | 82 bool AXInlineTextBox::ComputeAccessibilityIsIgnored( |
84 IgnoredReasons* ignored_reasons) const { | 83 IgnoredReasons* ignored_reasons) const { |
85 AXObjectImpl* parent = ParentObject(); | 84 AXObject* parent = ParentObject(); |
86 if (!parent) | 85 if (!parent) |
87 return false; | 86 return false; |
88 | 87 |
89 if (!parent->AccessibilityIsIgnored()) | 88 if (!parent->AccessibilityIsIgnored()) |
90 return false; | 89 return false; |
91 | 90 |
92 if (ignored_reasons) | 91 if (ignored_reasons) |
93 parent->ComputeAccessibilityIsIgnored(ignored_reasons); | 92 parent->ComputeAccessibilityIsIgnored(ignored_reasons); |
94 | 93 |
95 return true; | 94 return true; |
(...skipping 21 matching lines...) Expand all Loading... |
117 return; | 116 return; |
118 | 117 |
119 Vector<AbstractInlineTextBox::WordBoundaries> word_boundaries; | 118 Vector<AbstractInlineTextBox::WordBoundaries> word_boundaries; |
120 inline_text_box_->GetWordBoundaries(word_boundaries); | 119 inline_text_box_->GetWordBoundaries(word_boundaries); |
121 words.resize(word_boundaries.size()); | 120 words.resize(word_boundaries.size()); |
122 for (unsigned i = 0; i < word_boundaries.size(); i++) | 121 for (unsigned i = 0; i < word_boundaries.size(); i++) |
123 words[i] = | 122 words[i] = |
124 AXRange(word_boundaries[i].start_index, word_boundaries[i].end_index); | 123 AXRange(word_boundaries[i].start_index, word_boundaries[i].end_index); |
125 } | 124 } |
126 | 125 |
127 String AXInlineTextBox::GetName( | 126 String AXInlineTextBox::GetName(AXNameFrom& name_from, |
128 AXNameFrom& name_from, | 127 AXObject::AXObjectVector* name_objects) const { |
129 AXObjectImpl::AXObjectVector* name_objects) const { | |
130 if (!inline_text_box_) | 128 if (!inline_text_box_) |
131 return String(); | 129 return String(); |
132 | 130 |
133 name_from = kAXNameFromContents; | 131 name_from = kAXNameFromContents; |
134 return inline_text_box_->GetText(); | 132 return inline_text_box_->GetText(); |
135 } | 133 } |
136 | 134 |
137 AXObjectImpl* AXInlineTextBox::ComputeParent() const { | 135 AXObject* AXInlineTextBox::ComputeParent() const { |
138 DCHECK(!IsDetached()); | 136 DCHECK(!IsDetached()); |
139 if (!inline_text_box_ || !ax_object_cache_) | 137 if (!inline_text_box_ || !ax_object_cache_) |
140 return 0; | 138 return 0; |
141 | 139 |
142 LineLayoutText line_layout_text = inline_text_box_->GetLineLayoutItem(); | 140 LineLayoutText line_layout_text = inline_text_box_->GetLineLayoutItem(); |
143 return ax_object_cache_->GetOrCreate( | 141 return ax_object_cache_->GetOrCreate( |
144 LineLayoutAPIShim::LayoutObjectFrom(line_layout_text)); | 142 LineLayoutAPIShim::LayoutObjectFrom(line_layout_text)); |
145 } | 143 } |
146 | 144 |
147 // In addition to LTR and RTL direction, edit fields also support | 145 // In addition to LTR and RTL direction, edit fields also support |
148 // top to bottom and bottom to top via the CSS writing-mode property. | 146 // top to bottom and bottom to top via the CSS writing-mode property. |
149 AccessibilityTextDirection AXInlineTextBox::GetTextDirection() const { | 147 AccessibilityTextDirection AXInlineTextBox::GetTextDirection() const { |
150 if (!inline_text_box_) | 148 if (!inline_text_box_) |
151 return AXObjectImpl::GetTextDirection(); | 149 return AXObject::GetTextDirection(); |
152 | 150 |
153 switch (inline_text_box_->GetDirection()) { | 151 switch (inline_text_box_->GetDirection()) { |
154 case AbstractInlineTextBox::kLeftToRight: | 152 case AbstractInlineTextBox::kLeftToRight: |
155 return kAccessibilityTextDirectionLTR; | 153 return kAccessibilityTextDirectionLTR; |
156 case AbstractInlineTextBox::kRightToLeft: | 154 case AbstractInlineTextBox::kRightToLeft: |
157 return kAccessibilityTextDirectionRTL; | 155 return kAccessibilityTextDirectionRTL; |
158 case AbstractInlineTextBox::kTopToBottom: | 156 case AbstractInlineTextBox::kTopToBottom: |
159 return kAccessibilityTextDirectionTTB; | 157 return kAccessibilityTextDirectionTTB; |
160 case AbstractInlineTextBox::kBottomToTop: | 158 case AbstractInlineTextBox::kBottomToTop: |
161 return kAccessibilityTextDirectionBTT; | 159 return kAccessibilityTextDirectionBTT; |
162 } | 160 } |
163 | 161 |
164 return AXObjectImpl::GetTextDirection(); | 162 return AXObject::GetTextDirection(); |
165 } | 163 } |
166 | 164 |
167 AXObjectImpl* AXInlineTextBox::NextOnLine() const { | 165 AXObject* AXInlineTextBox::NextOnLine() const { |
168 RefPtr<AbstractInlineTextBox> next_on_line = inline_text_box_->NextOnLine(); | 166 RefPtr<AbstractInlineTextBox> next_on_line = inline_text_box_->NextOnLine(); |
169 if (next_on_line) | 167 if (next_on_line) |
170 return ax_object_cache_->GetOrCreate(next_on_line.Get()); | 168 return ax_object_cache_->GetOrCreate(next_on_line.Get()); |
171 | 169 |
172 if (!inline_text_box_->IsLast()) | 170 if (!inline_text_box_->IsLast()) |
173 return 0; | 171 return 0; |
174 | 172 |
175 return ParentObject()->NextOnLine(); | 173 return ParentObject()->NextOnLine(); |
176 } | 174 } |
177 | 175 |
178 AXObjectImpl* AXInlineTextBox::PreviousOnLine() const { | 176 AXObject* AXInlineTextBox::PreviousOnLine() const { |
179 RefPtr<AbstractInlineTextBox> previous_on_line = | 177 RefPtr<AbstractInlineTextBox> previous_on_line = |
180 inline_text_box_->PreviousOnLine(); | 178 inline_text_box_->PreviousOnLine(); |
181 if (previous_on_line) | 179 if (previous_on_line) |
182 return ax_object_cache_->GetOrCreate(previous_on_line.Get()); | 180 return ax_object_cache_->GetOrCreate(previous_on_line.Get()); |
183 | 181 |
184 if (!inline_text_box_->IsFirst()) | 182 if (!inline_text_box_->IsFirst()) |
185 return 0; | 183 return 0; |
186 | 184 |
187 return ParentObject()->PreviousOnLine(); | 185 return ParentObject()->PreviousOnLine(); |
188 } | 186 } |
189 | 187 |
190 } // namespace blink | 188 } // namespace blink |
OLD | NEW |