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 15 // static 16 const char TrayPopupHeaderButton::kViewClassName[] = 17 "tray/TrayPopupHeaderButton"; 18 19 TrayPopupHeaderButton::TrayPopupHeaderButton(views::ButtonListener* listener, 20 int enabled_resource_id, 21 int disabled_resource_id, 22 int enabled_resource_id_hover, 23 int disabled_resource_id_hover, 24 int accessible_name_id) 25 : views::ToggleImageButton(listener) { 26 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 27 SetImage(views::Button::STATE_NORMAL, 28 bundle.GetImageNamed(enabled_resource_id).ToImageSkia()); 29 SetToggledImage(views::Button::STATE_NORMAL, 30 bundle.GetImageNamed(disabled_resource_id).ToImageSkia()); 31 SetImage(views::Button::STATE_HOVERED, 32 bundle.GetImageNamed(enabled_resource_id_hover).ToImageSkia()); 33 SetToggledImage(views::Button::STATE_HOVERED, 34 bundle.GetImageNamed(disabled_resource_id_hover).ToImageSkia()); 35 SetImageAlignment(views::ImageButton::ALIGN_CENTER, 36 views::ImageButton::ALIGN_MIDDLE); 37 SetAccessibleName(bundle.GetLocalizedString(accessible_name_id)); 38 SetFocusable(true); 39 set_request_focus_on_press(false); 40 41 SetFocusPainter(views::Painter::CreateSolidFocusPainter( 42 kFocusBorderColor, 43 gfx::Insets(1, 2, 2, 3))); 44 } 45 46 TrayPopupHeaderButton::~TrayPopupHeaderButton() {} 47 48 const char* TrayPopupHeaderButton::GetClassName() const { 49 return kViewClassName; 50 } 51 52 gfx::Size TrayPopupHeaderButton::GetPreferredSize() const { 53 return gfx::Size(ash::kTrayPopupItemHeight, ash::kTrayPopupItemHeight); 54 } 55 56 void TrayPopupHeaderButton::OnPaintBorder(gfx::Canvas* canvas) { 57 // Just the left border. 58 const int kBorderHeight = 25; 59 int padding = (height() - kBorderHeight) / 2; 60 canvas->FillRect(gfx::Rect(0, padding, 1, height() - padding * 2), 61 ash::kBorderDarkColor); 62 } 63 64 void TrayPopupHeaderButton::StateChanged() { 65 SchedulePaint(); 66 } 67 68 } // namespace ash 69