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 12 namespace ash { 13 namespace internal { 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 set_focusable(true); 39 set_request_focus_on_press(false); 40 } 41 42 TrayPopupHeaderButton::~TrayPopupHeaderButton() {} 43 44 const char* TrayPopupHeaderButton::GetClassName() const { 45 return kViewClassName; 46 } 47 48 gfx::Size TrayPopupHeaderButton::GetPreferredSize() { 49 return gfx::Size(ash::kTrayPopupItemHeight, ash::kTrayPopupItemHeight); 50 } 51 52 void TrayPopupHeaderButton::OnPaintBorder(gfx::Canvas* canvas) { 53 // Just the left border. 54 const int kBorderHeight = 25; 55 int padding = (height() - kBorderHeight) / 2; 56 canvas->FillRect(gfx::Rect(0, padding, 1, height() - padding * 2), 57 ash::kBorderDarkColor); 58 } 59 60 void TrayPopupHeaderButton::OnPaintFocusBorder(gfx::Canvas* canvas) { 61 if (HasFocus() && (focusable() || IsAccessibilityFocusable())) { 62 canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3), 63 kFocusBorderColor); 64 } 65 } 66 67 void TrayPopupHeaderButton::StateChanged() { 68 SchedulePaint(); 69 } 70 71 } // namespace internal 72 } // namespace ash 73