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 "ui/views/controls/button/blue_button.h" 6 7 #include "grit/ui_resources.h" 8 #include "ui/base/accessibility/accessible_view_state.h" 9 #include "ui/base/resource/resource_bundle.h" 10 #include "ui/gfx/sys_color_change_listener.h" 11 #include "ui/views/controls/button/label_button_border.h" 12 13 namespace { 14 15 // Insets for the unified blue_button images. This assumes that the images 16 // are of a 9 grid, of 5x5 size each. 17 const int kBlueButtonInsets = 5; 18 19 // Default text and shadow colors for the blue button. 20 const SkColor kBlueButtonTextColor = SK_ColorWHITE; 21 const SkColor kBlueButtonShadowColor = SkColorSetRGB(0x53, 0x8C, 0xEA); 22 23 } // namespace 24 25 namespace views { 26 27 // static 28 const char BlueButton::kViewClassName[] = "views/BlueButton"; 29 30 BlueButton::BlueButton(ButtonListener* listener, const string16& text) 31 : LabelButton(listener, text) { 32 // Inherit STYLE_BUTTON insets, minimum size, alignment, etc. 33 SetStyle(STYLE_BUTTON); 34 35 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 36 const gfx::Insets insets(kBlueButtonInsets, 37 kBlueButtonInsets, 38 kBlueButtonInsets, 39 kBlueButtonInsets); 40 41 LabelButtonBorder* button_border = static_cast<LabelButtonBorder*>(border()); 42 button_border->SetPainter(false, STATE_NORMAL, 43 Painter::CreateImagePainter( 44 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_NORMAL), insets)); 45 button_border->SetPainter(false, STATE_HOVERED, 46 Painter::CreateImagePainter( 47 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_HOVER), insets)); 48 button_border->SetPainter(false, STATE_PRESSED, 49 Painter::CreateImagePainter( 50 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_PRESSED), insets)); 51 button_border->SetPainter(false, STATE_DISABLED, 52 Painter::CreateImagePainter( 53 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_DISABLED), insets)); 54 button_border->SetPainter(true, STATE_NORMAL, 55 Painter::CreateImagePainter( 56 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_FOCUSED_NORMAL), insets)); 57 button_border->SetPainter(true, STATE_HOVERED, 58 Painter::CreateImagePainter( 59 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_FOCUSED_HOVER), insets)); 60 button_border->SetPainter(true, STATE_PRESSED, 61 Painter::CreateImagePainter( 62 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_FOCUSED_PRESSED), insets)); 63 button_border->SetPainter(true, STATE_DISABLED, 64 Painter::CreateImagePainter( 65 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_DISABLED), insets)); 66 } 67 68 BlueButton::~BlueButton() {} 69 70 void BlueButton::ResetColorsFromNativeTheme() { 71 LabelButton::ResetColorsFromNativeTheme(); 72 if (!gfx::IsInvertedColorScheme()) { 73 for (size_t state = STATE_NORMAL; state < STATE_COUNT; ++state) 74 SetTextColor(static_cast<ButtonState>(state), kBlueButtonTextColor); 75 label()->SetShadowColors(kBlueButtonShadowColor, kBlueButtonShadowColor); 76 label()->SetShadowOffset(0, 1); 77 } 78 } 79 80 const char* BlueButton::GetClassName() const { 81 return BlueButton::kViewClassName; 82 } 83 84 } // namespace views 85