root/ash/system/tray/actionable_view.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. OnPaintFocus
  2. GetFocusBounds
  3. GetClassName
  4. OnKeyPressed
  5. OnMousePressed
  6. OnMouseReleased
  7. OnMouseCaptureLost
  8. SetAccessibleName
  9. GetAccessibleState
  10. OnPaint
  11. OnFocus
  12. OnBlur
  13. OnGestureEvent

// 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

/* [<][>][^][v][top][bottom][index][help] */