OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/accessibility/browser_accessibility.h" | 5 #include "chrome/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 "chrome/browser/accessibility/browser_accessibility_manager.h" | 9 #include "chrome/browser/accessibility/browser_accessibility_manager.h" |
9 | 10 |
10 BrowserAccessibility::BrowserAccessibility() { | 11 BrowserAccessibility::BrowserAccessibility() { |
11 } | 12 } |
12 | 13 |
13 BrowserAccessibility::~BrowserAccessibility() { | 14 BrowserAccessibility::~BrowserAccessibility() { |
14 } | 15 } |
15 | 16 |
16 void BrowserAccessibility::Initialize( | 17 void BrowserAccessibility::Initialize( |
17 BrowserAccessibilityManager* manager, | 18 BrowserAccessibilityManager* manager, |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 return NULL; | 97 return NULL; |
97 } | 98 } |
98 | 99 |
99 void BrowserAccessibility::ReplaceChild( | 100 void BrowserAccessibility::ReplaceChild( |
100 const BrowserAccessibility* old_acc, BrowserAccessibility* new_acc) { | 101 const BrowserAccessibility* old_acc, BrowserAccessibility* new_acc) { |
101 DCHECK_EQ(children_[old_acc->index_in_parent_], old_acc); | 102 DCHECK_EQ(children_[old_acc->index_in_parent_], old_acc); |
102 | 103 |
103 old_acc = children_[old_acc->index_in_parent_]; | 104 old_acc = children_[old_acc->index_in_parent_]; |
104 children_[old_acc->index_in_parent_] = new_acc; | 105 children_[old_acc->index_in_parent_] = new_acc; |
105 } | 106 } |
| 107 |
| 108 gfx::Rect BrowserAccessibility::GetBoundsRect() { |
| 109 gfx::Rect bounds = location_; |
| 110 |
| 111 // Adjust the bounds by the top left corner of the containing view's bounds |
| 112 // in screen coordinates. |
| 113 gfx::Point top_left = manager_->GetViewBounds().origin(); |
| 114 bounds.Offset(top_left); |
| 115 |
| 116 // Adjust top left position by the root document's scroll offset. |
| 117 BrowserAccessibility* root = manager_->GetRoot(); |
| 118 int scroll_x = 0; |
| 119 int scroll_y = 0; |
| 120 root->GetAttributeAsInt( |
| 121 WebAccessibility::ATTR_DOC_SCROLLX, &scroll_x); |
| 122 root->GetAttributeAsInt( |
| 123 WebAccessibility::ATTR_DOC_SCROLLY, &scroll_y); |
| 124 bounds.Offset(-scroll_x, -scroll_y); |
| 125 |
| 126 return bounds; |
| 127 } |
| 128 |
| 129 BrowserAccessibility* BrowserAccessibility::BrowserAccessibilityForPoint( |
| 130 const gfx::Point& point) { |
| 131 // Walk the children recursively looking for the BrowserAccessibility that |
| 132 // most tightly encloses the specified point. |
| 133 for (int i = children_.size() - 1; i >= 0; --i) { |
| 134 BrowserAccessibility* child = children_[i]; |
| 135 if (child->GetBoundsRect().Contains(point)) |
| 136 return child->BrowserAccessibilityForPoint(point); |
| 137 } |
| 138 return this; |
| 139 } |
| 140 |
| 141 bool BrowserAccessibility::HasAttribute( |
| 142 WebAccessibility::Attribute attribute) { |
| 143 return (attributes_.find(attribute) != attributes_.end()); |
| 144 } |
| 145 |
| 146 bool BrowserAccessibility::GetAttribute( |
| 147 WebAccessibility::Attribute attribute, string16* value) { |
| 148 std::map<int32, string16>::iterator iter = attributes_.find(attribute); |
| 149 if (iter != attributes_.end()) { |
| 150 *value = iter->second; |
| 151 return true; |
| 152 } |
| 153 |
| 154 return false; |
| 155 } |
| 156 |
| 157 bool BrowserAccessibility::GetAttributeAsInt( |
| 158 WebAccessibility::Attribute attribute, int* value_int) { |
| 159 string16 value_str; |
| 160 |
| 161 if (!GetAttribute(attribute, &value_str)) |
| 162 return false; |
| 163 |
| 164 if (!base::StringToInt(value_str, value_int)) |
| 165 return false; |
| 166 |
| 167 return true; |
| 168 } |
OLD | NEW |