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_win.h" | 5 #include "content/browser/accessibility/browser_accessibility_win.h" |
6 | 6 |
7 #include <UIAutomationClient.h> | 7 #include <UIAutomationClient.h> |
8 #include <UIAutomationCoreApi.h> | 8 #include <UIAutomationCoreApi.h> |
9 | 9 |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 target->ia_role() == ROLE_SYSTEM_SCROLLBAR || | 598 target->ia_role() == ROLE_SYSTEM_SCROLLBAR || |
599 target->ia_role() == ROLE_SYSTEM_SLIDER) { | 599 target->ia_role() == ROLE_SYSTEM_SLIDER) { |
600 base::string16 value_text = target->GetValueText(); | 600 base::string16 value_text = target->GetValueText(); |
601 *value = SysAllocString(value_text.c_str()); | 601 *value = SysAllocString(value_text.c_str()); |
602 DCHECK(*value); | 602 DCHECK(*value); |
603 return S_OK; | 603 return S_OK; |
604 } | 604 } |
605 | 605 |
606 // Expose color well value. | 606 // Expose color well value. |
607 if (target->ia2_role() == IA2_ROLE_COLOR_CHOOSER) { | 607 if (target->ia2_role() == IA2_ROLE_COLOR_CHOOSER) { |
608 int r = target->GetIntAttribute( | 608 int color = target->GetIntAttribute(ui::AX_ATTR_COLOR_VALUE); |
609 ui::AX_ATTR_COLOR_VALUE_RED); | 609 int red = (color >> 16) & 0xFF; |
610 int g = target->GetIntAttribute( | 610 int green = (color >> 8) & 0xFF; |
611 ui::AX_ATTR_COLOR_VALUE_GREEN); | 611 int blue = color & 0xFF; |
612 int b = target->GetIntAttribute( | |
613 ui::AX_ATTR_COLOR_VALUE_BLUE); | |
614 base::string16 value_text; | 612 base::string16 value_text; |
615 value_text = base::IntToString16((r * 100) / 255) + L"% red " + | 613 value_text = base::IntToString16((red * 100) / 255) + L"% red " + |
616 base::IntToString16((g * 100) / 255) + L"% green " + | 614 base::IntToString16((green * 100) / 255) + L"% green " + |
617 base::IntToString16((b * 100) / 255) + L"% blue"; | 615 base::IntToString16((blue * 100) / 255) + L"% blue"; |
618 *value = SysAllocString(value_text.c_str()); | 616 *value = SysAllocString(value_text.c_str()); |
619 DCHECK(*value); | 617 DCHECK(*value); |
620 return S_OK; | 618 return S_OK; |
621 } | 619 } |
622 | 620 |
623 *value = SysAllocString(target->value().c_str()); | 621 *value = SysAllocString(target->value().c_str()); |
624 DCHECK(*value); | 622 DCHECK(*value); |
625 return S_OK; | 623 return S_OK; |
626 } | 624 } |
627 | 625 |
(...skipping 1747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2375 return E_INVALIDARG; | 2373 return E_INVALIDARG; |
2376 | 2374 |
2377 const base::string16& text_str = TextForIAccessibleText(); | 2375 const base::string16& text_str = TextForIAccessibleText(); |
2378 HandleSpecialTextOffset(text_str, &start_offset); | 2376 HandleSpecialTextOffset(text_str, &start_offset); |
2379 HandleSpecialTextOffset(text_str, &end_offset); | 2377 HandleSpecialTextOffset(text_str, &end_offset); |
2380 | 2378 |
2381 manager()->SetTextSelection(*this, start_offset, end_offset); | 2379 manager()->SetTextSelection(*this, start_offset, end_offset); |
2382 return S_OK; | 2380 return S_OK; |
2383 } | 2381 } |
2384 | 2382 |
2385 // | |
2386 // IAccessibleText methods not implemented. | |
2387 // | |
2388 | |
2389 STDMETHODIMP BrowserAccessibilityWin::get_attributes(LONG offset, | 2383 STDMETHODIMP BrowserAccessibilityWin::get_attributes(LONG offset, |
2390 LONG* start_offset, | 2384 LONG* start_offset, |
2391 LONG* end_offset, | 2385 LONG* end_offset, |
2392 BSTR* text_attributes) { | 2386 BSTR* text_attributes) { |
2393 return E_NOTIMPL; | 2387 if (!instance_active()) |
| 2388 return E_FAIL; |
| 2389 |
| 2390 if (!start_offset || !end_offset || !text_attributes) |
| 2391 return E_INVALIDARG; |
| 2392 |
| 2393 const base::string16& text_str = TextForIAccessibleText(); |
| 2394 HandleSpecialTextOffset(text_str, &offset); |
| 2395 if (offset < 0) |
| 2396 return E_INVALIDARG; |
| 2397 |
| 2398 LONG text_len = text_str.length(); |
| 2399 if (offset > text_len) |
| 2400 return E_INVALIDARG; |
| 2401 |
| 2402 base::string16 attributes_str = GetTextAttributes(); |
| 2403 if (attributes_str.empty()) { |
| 2404 *start_offset = 0; |
| 2405 *end_offset = 0; |
| 2406 return S_FALSE; |
| 2407 } |
| 2408 |
| 2409 *text_attributes = SysAllocString(attributes_str.c_str()); |
| 2410 DCHECK(*text_attributes); |
| 2411 *start_offset = GetStyleChangeBoundary(offset, ui::BACKWARDS_DIRECTION); |
| 2412 *end_offset = GetStyleChangeBoundary(offset, ui::FORWARDS_DIRECTION); |
| 2413 return S_OK; |
2394 } | 2414 } |
2395 | 2415 |
2396 // | 2416 // |
2397 // IAccessibleHypertext methods. | 2417 // IAccessibleHypertext methods. |
2398 // | 2418 // |
2399 | 2419 |
2400 STDMETHODIMP BrowserAccessibilityWin::get_nHyperlinks(long* hyperlink_count) { | 2420 STDMETHODIMP BrowserAccessibilityWin::get_nHyperlinks(long* hyperlink_count) { |
2401 if (!instance_active()) | 2421 if (!instance_active()) |
2402 return E_FAIL; | 2422 return E_FAIL; |
2403 | 2423 |
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3558 | 3578 |
3559 bool BrowserAccessibilityWin::IsNative() const { | 3579 bool BrowserAccessibilityWin::IsNative() const { |
3560 return true; | 3580 return true; |
3561 } | 3581 } |
3562 | 3582 |
3563 void BrowserAccessibilityWin::OnLocationChanged() { | 3583 void BrowserAccessibilityWin::OnLocationChanged() { |
3564 manager()->ToBrowserAccessibilityManagerWin()->MaybeCallNotifyWinEvent( | 3584 manager()->ToBrowserAccessibilityManagerWin()->MaybeCallNotifyWinEvent( |
3565 EVENT_OBJECT_LOCATIONCHANGE, this); | 3585 EVENT_OBJECT_LOCATIONCHANGE, this); |
3566 } | 3586 } |
3567 | 3587 |
| 3588 // |
| 3589 // Private methods. |
| 3590 // |
| 3591 |
| 3592 base::string16 BrowserAccessibilityWin::GetTextAttributes() const { |
| 3593 base::string16 text_attributes; |
| 3594 int background_color = GetIntAttribute(ui::AX_ATTR_BACKGROUND_COLOR); |
| 3595 int color = GetIntAttribute(ui::AX_ATTR_COLOR); |
| 3596 float font_size = GetFloatAttribute(ui::AX_ATTR_FONT_SIZE); |
| 3597 int red = (color >> 16) & 0xFF; |
| 3598 int green = (color >> 8) & 0xFF; |
| 3599 int blue = color & 0xFF; |
| 3600 base::string16 value_text; |
| 3601 value_text = base::IntToString16((red * 100) / 255) + L"% red " + |
| 3602 base::IntToString16((green * 100) / 255) + L"% green " + |
| 3603 base::IntToString16((blue * 100) / 255) + L"% blue"; |
| 3604 *value = SysAllocString(value_text.c_str()); |
| 3605 DCHECK(*value); |
| 3606 return text_attributes; |
| 3607 } |
| 3608 |
3568 BrowserAccessibilityWin* BrowserAccessibilityWin::NewReference() { | 3609 BrowserAccessibilityWin* BrowserAccessibilityWin::NewReference() { |
3569 AddRef(); | 3610 AddRef(); |
3570 return this; | 3611 return this; |
3571 } | 3612 } |
3572 | 3613 |
3573 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID( | 3614 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID( |
3574 const VARIANT& var_id) { | 3615 const VARIANT& var_id) { |
3575 if (var_id.vt != VT_I4) | 3616 if (var_id.vt != VT_I4) |
3576 return NULL; | 3617 return NULL; |
3577 | 3618 |
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4350 ia2_role = ia_role; | 4391 ia2_role = ia_role; |
4351 | 4392 |
4352 win_attributes_->ia_role = ia_role; | 4393 win_attributes_->ia_role = ia_role; |
4353 win_attributes_->ia_state = ia_state; | 4394 win_attributes_->ia_state = ia_state; |
4354 win_attributes_->role_name = role_name; | 4395 win_attributes_->role_name = role_name; |
4355 win_attributes_->ia2_role = ia2_role; | 4396 win_attributes_->ia2_role = ia2_role; |
4356 win_attributes_->ia2_state = ia2_state; | 4397 win_attributes_->ia2_state = ia2_state; |
4357 } | 4398 } |
4358 | 4399 |
4359 } // namespace content | 4400 } // namespace content |
OLD | NEW |