| Index: chrome/browser/accessibility/browser_accessibility.cc
|
| ===================================================================
|
| --- chrome/browser/accessibility/browser_accessibility.cc (revision 62773)
|
| +++ chrome/browser/accessibility/browser_accessibility.cc (working copy)
|
| @@ -5,6 +5,7 @@
|
| #include "chrome/browser/accessibility/browser_accessibility.h"
|
|
|
| #include "base/logging.h"
|
| +#include "base/string_number_conversions.h"
|
| #include "chrome/browser/accessibility/browser_accessibility_manager.h"
|
|
|
| BrowserAccessibility::BrowserAccessibility() {
|
| @@ -103,3 +104,65 @@
|
| old_acc = children_[old_acc->index_in_parent_];
|
| children_[old_acc->index_in_parent_] = new_acc;
|
| }
|
| +
|
| +gfx::Rect BrowserAccessibility::GetBoundsRect() {
|
| + gfx::Rect bounds = location_;
|
| +
|
| + // Adjust the bounds by the top left corner of the containing view's bounds
|
| + // in screen coordinates.
|
| + gfx::Point top_left = manager_->GetViewBounds().origin();
|
| + bounds.Offset(top_left);
|
| +
|
| + // Adjust top left position by the root document's scroll offset.
|
| + BrowserAccessibility* root = manager_->GetRoot();
|
| + int scroll_x = 0;
|
| + int scroll_y = 0;
|
| + root->GetAttributeAsInt(
|
| + WebAccessibility::ATTR_DOC_SCROLLX, &scroll_x);
|
| + root->GetAttributeAsInt(
|
| + WebAccessibility::ATTR_DOC_SCROLLY, &scroll_y);
|
| + bounds.Offset(-scroll_x, -scroll_y);
|
| +
|
| + return bounds;
|
| +}
|
| +
|
| +BrowserAccessibility* BrowserAccessibility::BrowserAccessibilityForPoint(
|
| + const gfx::Point& point) {
|
| + // Walk the children recursively looking for the BrowserAccessibility that
|
| + // most tightly encloses the specified point.
|
| + for (int i = children_.size() - 1; i >= 0; --i) {
|
| + BrowserAccessibility* child = children_[i];
|
| + if (child->GetBoundsRect().Contains(point))
|
| + return child->BrowserAccessibilityForPoint(point);
|
| + }
|
| + return this;
|
| +}
|
| +
|
| +bool BrowserAccessibility::HasAttribute(
|
| + WebAccessibility::Attribute attribute) {
|
| + return (attributes_.find(attribute) != attributes_.end());
|
| +}
|
| +
|
| +bool BrowserAccessibility::GetAttribute(
|
| + WebAccessibility::Attribute attribute, string16* value) {
|
| + std::map<int32, string16>::iterator iter = attributes_.find(attribute);
|
| + if (iter != attributes_.end()) {
|
| + *value = iter->second;
|
| + return true;
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +bool BrowserAccessibility::GetAttributeAsInt(
|
| + WebAccessibility::Attribute attribute, int* value_int) {
|
| + string16 value_str;
|
| +
|
| + if (!GetAttribute(attribute, &value_str))
|
| + return false;
|
| +
|
| + if (!base::StringToInt(value_str, value_int))
|
| + return false;
|
| +
|
| + return true;
|
| +}
|
|
|