| // Copyright 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/system/tray/actionable_view.h" |
| |
| #include "ash/ash_constants.h" |
| #include "ui/accessibility/ax_view_state.h" |
| #include "ui/gfx/canvas.h" |
| |
| namespace ash { |
| |
| // static |
| const char ActionableView::kViewClassName[] = "tray/ActionableView"; |
| |
| ActionableView::ActionableView() |
| : has_capture_(false) { |
| SetFocusable(true); |
| } |
| |
| ActionableView::~ActionableView() { |
| } |
| |
| void ActionableView::OnPaintFocus(gfx::Canvas* canvas) { |
| gfx::Rect rect(GetFocusBounds()); |
| rect.Inset(1, 1, 3, 2); |
| canvas->DrawSolidFocusRect(rect, kFocusBorderColor); |
| } |
| |
| gfx::Rect ActionableView::GetFocusBounds() { |
| return GetLocalBounds(); |
| } |
| |
| const char* ActionableView::GetClassName() const { |
| return kViewClassName; |
| } |
| |
| bool ActionableView::OnKeyPressed(const ui::KeyEvent& event) { |
| if (event.key_code() == ui::VKEY_SPACE || |
| event.key_code() == ui::VKEY_RETURN) { |
| return PerformAction(event); |
| } |
| return false; |
| } |
| |
| bool ActionableView::OnMousePressed(const ui::MouseEvent& event) { |
| // Return true so that this view starts capturing the events. |
| has_capture_ = true; |
| return true; |
| } |
| |
| void ActionableView::OnMouseReleased(const ui::MouseEvent& event) { |
| if (has_capture_ && GetLocalBounds().Contains(event.location())) |
| PerformAction(event); |
| } |
| |
| void ActionableView::OnMouseCaptureLost() { |
| has_capture_ = false; |
| } |
| |
| void ActionableView::SetAccessibleName(const base::string16& name) { |
| accessible_name_ = name; |
| } |
| |
| void ActionableView::GetAccessibleState(ui::AXViewState* state) { |
| state->role = ui::AX_ROLE_BUTTON; |
| state->name = accessible_name_; |
| } |
| |
| void ActionableView::OnPaint(gfx::Canvas* canvas) { |
| View::OnPaint(canvas); |
| if (HasFocus()) |
| OnPaintFocus(canvas); |
| } |
| |
| void ActionableView::OnFocus() { |
| View::OnFocus(); |
| // We render differently when focused. |
| SchedulePaint(); |
| } |
| |
| void ActionableView::OnBlur() { |
| View::OnBlur(); |
| // We render differently when focused. |
| SchedulePaint(); |
| } |
| |
| void ActionableView::OnGestureEvent(ui::GestureEvent* event) { |
| if (event->type() == ui::ET_GESTURE_TAP && PerformAction(*event)) |
| event->SetHandled(); |
| } |
| |
| } // namespace ash |