Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: chrome/browser/chromeos/accessibility/accessibility_highlight_manager.cc

Issue 2036343003: Chrome OS highlighting: show only focus or caret, never both. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/chromeos/accessibility/accessibility_highlight_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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 "ash/shell.h" 5 #include "ash/shell.h"
6 #include "chrome/browser/chromeos/accessibility/accessibility_highlight_manager. h" 6 #include "chrome/browser/chromeos/accessibility/accessibility_highlight_manager. h"
7 #include "chrome/browser/chromeos/ui/accessibility_focus_ring_controller.h" 7 #include "chrome/browser/chromeos/ui/accessibility_focus_ring_controller.h"
8 #include "content/public/browser/focused_node_details.h" 8 #include "content/public/browser/focused_node_details.h"
9 #include "content/public/browser/notification_service.h" 9 #include "content/public/browser/notification_service.h"
10 #include "content/public/browser/notification_types.h" 10 #include "content/public/browser/notification_types.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 OffscreenPoint()); 61 OffscreenPoint());
62 62
63 aura::Window* root_window = shell->GetPrimaryRootWindow(); 63 aura::Window* root_window = shell->GetPrimaryRootWindow();
64 ui::InputMethod* input_method = GetInputMethod(root_window); 64 ui::InputMethod* input_method = GetInputMethod(root_window);
65 input_method->RemoveObserver(this); 65 input_method->RemoveObserver(this);
66 } 66 }
67 } 67 }
68 68
69 void AccessibilityHighlightManager::HighlightFocus(bool focus) { 69 void AccessibilityHighlightManager::HighlightFocus(bool focus) {
70 focus_ = focus; 70 focus_ = focus;
71 71 UpdateFocusAndCaretHighlights();
72 std::vector<gfx::Rect> rects;
73 rects.push_back(focus_ ? focus_rect_ : OffscreenRect());
74 AccessibilityFocusRingController::GetInstance()->SetFocusRing(rects);
75 } 72 }
76 73
77 void AccessibilityHighlightManager::HighlightCursor(bool cursor) { 74 void AccessibilityHighlightManager::HighlightCursor(bool cursor) {
78 cursor_ = cursor; 75 cursor_ = cursor;
79 76
80 AccessibilityFocusRingController::GetInstance()->SetCursorRing( 77 AccessibilityFocusRingController::GetInstance()->SetCursorRing(
81 cursor_ ? cursor_point_ : OffscreenPoint()); 78 cursor_ ? cursor_point_ : OffscreenPoint());
82 } 79 }
83 80
84 void AccessibilityHighlightManager::HighlightCaret(bool caret) { 81 void AccessibilityHighlightManager::HighlightCaret(bool caret) {
85 caret_ = caret; 82 caret_ = caret;
86 83 UpdateFocusAndCaretHighlights();
87 AccessibilityFocusRingController::GetInstance()->SetCaretRing(
88 caret_ ? caret_point_ : OffscreenPoint());
89 } 84 }
90 85
91 void AccessibilityHighlightManager::OnMouseEvent(ui::MouseEvent* event) { 86 void AccessibilityHighlightManager::OnMouseEvent(ui::MouseEvent* event) {
92 if (event->type() == ui::ET_MOUSE_MOVED) { 87 if (event->type() == ui::ET_MOUSE_MOVED) {
93 cursor_point_ = event->root_location(); 88 cursor_point_ = event->root_location();
94 AccessibilityFocusRingController::GetInstance()->SetCursorRing( 89 AccessibilityFocusRingController::GetInstance()->SetCursorRing(
95 cursor_ ? cursor_point_ : OffscreenPoint()); 90 cursor_ ? cursor_point_ : OffscreenPoint());
96 } 91 }
97 } 92 }
98 93
99 void AccessibilityHighlightManager::Observe( 94 void AccessibilityHighlightManager::Observe(
100 int type, 95 int type,
101 const content::NotificationSource& source, 96 const content::NotificationSource& source,
102 const content::NotificationDetails& details) { 97 const content::NotificationDetails& details) {
103 DCHECK_EQ(type, content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE); 98 DCHECK_EQ(type, content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE);
104 content::FocusedNodeDetails* node_details = 99 content::FocusedNodeDetails* node_details =
105 content::Details<content::FocusedNodeDetails>(details).ptr(); 100 content::Details<content::FocusedNodeDetails>(details).ptr();
106 focus_rect_ = node_details->node_bounds_in_screen; 101 focus_rect_ = node_details->node_bounds_in_screen;
107 102 UpdateFocusAndCaretHighlights();
108 if (focus_) {
109 std::vector<gfx::Rect> rects;
110 rects.push_back(focus_rect_);
111 AccessibilityFocusRingController::GetInstance()->SetFocusRing(rects);
112 }
113 } 103 }
114 104
115 void AccessibilityHighlightManager::OnTextInputStateChanged( 105 void AccessibilityHighlightManager::OnTextInputStateChanged(
116 const ui::TextInputClient* client) { 106 const ui::TextInputClient* client) {
117 if (!client || client->GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) { 107 if (!client || client->GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) {
118 caret_point_ = OffscreenPoint(); 108 caret_visible_ = false;
119 if (caret_) { 109 UpdateFocusAndCaretHighlights();
120 AccessibilityFocusRingController::GetInstance()->SetCaretRing(
121 caret_point_);
122 }
123 } 110 }
124 } 111 }
125 112
126 void AccessibilityHighlightManager::OnCaretBoundsChanged( 113 void AccessibilityHighlightManager::OnCaretBoundsChanged(
127 const ui::TextInputClient* client) { 114 const ui::TextInputClient* client) {
128 gfx::Rect caret_bounds = client->GetCaretBounds(); 115 gfx::Rect caret_bounds = client->GetCaretBounds();
129 if (caret_bounds.width() == 0 && caret_bounds.height() == 0)
130 caret_bounds = OffscreenRect();
131 caret_point_ = caret_bounds.CenterPoint(); 116 caret_point_ = caret_bounds.CenterPoint();
117 caret_visible_ = client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE &&
118 (caret_bounds.width() || caret_bounds.height());
119 UpdateFocusAndCaretHighlights();
120 }
132 121
133 if (caret_) 122 void AccessibilityHighlightManager::UpdateFocusAndCaretHighlights() {
134 AccessibilityFocusRingController::GetInstance()->SetCaretRing(caret_point_); 123 auto controller = AccessibilityFocusRingController::GetInstance();
124
125 // The caret highlight takes precedence over the focus highlight if
126 // both are visible.
127 if (caret_ && caret_visible_) {
128 controller->SetCaretRing(caret_point_);
129 controller->SetFocusRing(std::vector<gfx::Rect>());
130 } else if (focus_) {
131 controller->SetCaretRing(OffscreenPoint());
132 std::vector<gfx::Rect> rects;
133 if (!focus_rect_.IsEmpty())
134 rects.push_back(focus_rect_);
135 controller->SetFocusRing(rects);
136 } else {
137 controller->SetCaretRing(OffscreenPoint());
138 controller->SetFocusRing(std::vector<gfx::Rect>());
139 }
135 } 140 }
136 141
137 } // namespace chromeos 142 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/accessibility/accessibility_highlight_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698