• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ash/system/tray/tray_popup_header_button.h"
6 
7 #include "ash/ash_constants.h"
8 #include "ash/system/tray/tray_constants.h"
9 #include "ui/base/resource/resource_bundle.h"
10 #include "ui/gfx/canvas.h"
11 #include "ui/views/painter.h"
12 
13 namespace ash {
14 namespace internal {
15 
16 // static
17 const char TrayPopupHeaderButton::kViewClassName[] =
18     "tray/TrayPopupHeaderButton";
19 
TrayPopupHeaderButton(views::ButtonListener * listener,int enabled_resource_id,int disabled_resource_id,int enabled_resource_id_hover,int disabled_resource_id_hover,int accessible_name_id)20 TrayPopupHeaderButton::TrayPopupHeaderButton(views::ButtonListener* listener,
21                                              int enabled_resource_id,
22                                              int disabled_resource_id,
23                                              int enabled_resource_id_hover,
24                                              int disabled_resource_id_hover,
25                                              int accessible_name_id)
26     : views::ToggleImageButton(listener) {
27   ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
28   SetImage(views::Button::STATE_NORMAL,
29       bundle.GetImageNamed(enabled_resource_id).ToImageSkia());
30   SetToggledImage(views::Button::STATE_NORMAL,
31       bundle.GetImageNamed(disabled_resource_id).ToImageSkia());
32   SetImage(views::Button::STATE_HOVERED,
33       bundle.GetImageNamed(enabled_resource_id_hover).ToImageSkia());
34   SetToggledImage(views::Button::STATE_HOVERED,
35       bundle.GetImageNamed(disabled_resource_id_hover).ToImageSkia());
36   SetImageAlignment(views::ImageButton::ALIGN_CENTER,
37                     views::ImageButton::ALIGN_MIDDLE);
38   SetAccessibleName(bundle.GetLocalizedString(accessible_name_id));
39   SetFocusable(true);
40   set_request_focus_on_press(false);
41 
42   SetFocusPainter(views::Painter::CreateSolidFocusPainter(
43                       kFocusBorderColor,
44                       gfx::Insets(1, 2, 2, 3)));
45 }
46 
~TrayPopupHeaderButton()47 TrayPopupHeaderButton::~TrayPopupHeaderButton() {}
48 
GetClassName() const49 const char* TrayPopupHeaderButton::GetClassName() const {
50   return kViewClassName;
51 }
52 
GetPreferredSize()53 gfx::Size TrayPopupHeaderButton::GetPreferredSize() {
54   return gfx::Size(ash::kTrayPopupItemHeight, ash::kTrayPopupItemHeight);
55 }
56 
OnPaintBorder(gfx::Canvas * canvas)57 void TrayPopupHeaderButton::OnPaintBorder(gfx::Canvas* canvas) {
58   // Just the left border.
59   const int kBorderHeight = 25;
60   int padding = (height() - kBorderHeight) / 2;
61   canvas->FillRect(gfx::Rect(0, padding, 1, height() - padding * 2),
62       ash::kBorderDarkColor);
63 }
64 
StateChanged()65 void TrayPopupHeaderButton::StateChanged() {
66   SchedulePaint();
67 }
68 
69 }  // namespace internal
70 }  // namespace ash
71