OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/accessibility/browser_accessibility.h" | 5 #include "content/browser/accessibility/browser_accessibility.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "content/browser/accessibility/browser_accessibility_manager.h" | 10 #include "content/browser/accessibility/browser_accessibility_manager.h" |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
126 index_in_parent_ < static_cast<int>(parent_->children_.size() - 1)) { | 126 index_in_parent_ < static_cast<int>(parent_->children_.size() - 1)) { |
127 return parent_->children_[index_in_parent_ + 1]; | 127 return parent_->children_[index_in_parent_ + 1]; |
128 } | 128 } |
129 | 129 |
130 return NULL; | 130 return NULL; |
131 } | 131 } |
132 | 132 |
133 gfx::Rect BrowserAccessibility::GetLocalBoundsRect() { | 133 gfx::Rect BrowserAccessibility::GetLocalBoundsRect() { |
134 gfx::Rect bounds = location_; | 134 gfx::Rect bounds = location_; |
135 | 135 |
136 // Adjust top left position by the root document's scroll offset. | 136 // Walk up the parent chain. Every time we encounter a Web Area, offset |
137 BrowserAccessibility* root = manager_->GetRoot(); | 137 // based on the scroll bars and then offset based on the origin of that |
138 int scroll_x = 0; | 138 // nested web area. |
139 int scroll_y = 0; | 139 BrowserAccessibility* parent = parent_; |
140 if (!root->GetIntAttribute(AccessibilityNodeData::ATTR_SCROLL_X, &scroll_x) || | 140 bool need_to_offset_web_area = |
aboxhall
2013/01/29 01:52:40
I don't completely follow this. Why do we need to
dmazzoni
2013/01/29 16:51:50
We need to offset the bounds of the first parent o
aboxhall
2013/01/29 17:43:26
So a WebArea will have its _own_ coordinates in te
dmazzoni
2013/01/29 18:51:25
Yeah, internally the tree looks something like:
D
aboxhall
2013/01/29 19:53:47
Got it, thanks for the explanation.
| |
141 !root->GetIntAttribute(AccessibilityNodeData::ATTR_SCROLL_Y, &scroll_y)) { | 141 (role_ == AccessibilityNodeData::ROLE_WEB_AREA); |
142 return bounds; | 142 while (parent) { |
143 if (need_to_offset_web_area && | |
144 parent->location().width() > 0 && | |
145 parent->location().height() > 0) { | |
146 bounds.Offset(parent->location().x(), parent->location().y()); | |
147 need_to_offset_web_area = false; | |
148 } | |
149 if (parent->role() == AccessibilityNodeData::ROLE_WEB_AREA) { | |
150 int sx = 0; | |
151 int sy = 0; | |
152 if (parent->GetIntAttribute(AccessibilityNodeData::ATTR_SCROLL_X, &sx) && | |
153 parent->GetIntAttribute(AccessibilityNodeData::ATTR_SCROLL_Y, &sy)) { | |
154 bounds.Offset(-sx, -sy); | |
155 } | |
156 need_to_offset_web_area = true; | |
157 } | |
158 parent = parent->parent(); | |
143 } | 159 } |
144 bounds.Offset(-scroll_x, -scroll_y); | |
145 | 160 |
146 return bounds; | 161 return bounds; |
147 } | 162 } |
148 | 163 |
149 gfx::Rect BrowserAccessibility::GetGlobalBoundsRect() { | 164 gfx::Rect BrowserAccessibility::GetGlobalBoundsRect() { |
150 gfx::Rect bounds = GetLocalBoundsRect(); | 165 gfx::Rect bounds = GetLocalBoundsRect(); |
151 | 166 |
152 // Adjust the bounds by the top left corner of the containing view's bounds | 167 // Adjust the bounds by the top left corner of the containing view's bounds |
153 // in screen coordinates. | 168 // in screen coordinates. |
154 bounds.Offset(manager_->GetViewBounds().OffsetFromOrigin()); | 169 bounds.Offset(manager_->GetViewBounds().OffsetFromOrigin()); |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
315 for (size_t i = 0; i < children_.size(); ++i) | 330 for (size_t i = 0; i < children_.size(); ++i) |
316 result += children_[i]->GetTextRecursive(); | 331 result += children_[i]->GetTextRecursive(); |
317 return result; | 332 return result; |
318 } | 333 } |
319 | 334 |
320 void BrowserAccessibility::PreInitialize() { | 335 void BrowserAccessibility::PreInitialize() { |
321 instance_active_ = true; | 336 instance_active_ = true; |
322 } | 337 } |
323 | 338 |
324 } // namespace content | 339 } // namespace content |
OLD | NEW |