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/resource/resource_bundle.h" 9#include "ui/gfx/sys_color_change_listener.h" 10#include "ui/views/controls/button/label_button_border.h" 11 12namespace { 13 14// Default shadow color for the blue button. 15const SkColor kBlueButtonShadowColor = SkColorSetRGB(0x53, 0x8C, 0xEA); 16 17} // namespace 18 19namespace views { 20 21// static 22const char BlueButton::kViewClassName[] = "views/BlueButton"; 23 24BlueButton::BlueButton(ButtonListener* listener, const base::string16& text) 25 : LabelButton(listener, text) { 26 // Inherit STYLE_BUTTON insets, minimum size, alignment, etc. 27 SetStyle(STYLE_BUTTON); 28 UpdateThemedBorder(); 29} 30 31BlueButton::~BlueButton() {} 32 33void BlueButton::ResetColorsFromNativeTheme() { 34 LabelButton::ResetColorsFromNativeTheme(); 35 if (!gfx::IsInvertedColorScheme()) { 36 SetTextColor(STATE_NORMAL, GetNativeTheme()-> 37 GetSystemColor(ui::NativeTheme::kColorId_BlueButtonEnabledColor)); 38 SetTextColor(STATE_HOVERED, GetNativeTheme()-> 39 GetSystemColor(ui::NativeTheme::kColorId_BlueButtonHoverColor)); 40 SetTextColor(STATE_PRESSED, GetNativeTheme()-> 41 GetSystemColor(ui::NativeTheme::kColorId_BlueButtonHighlightColor)); 42 SetTextColor(STATE_DISABLED, GetNativeTheme()-> 43 GetSystemColor(ui::NativeTheme::kColorId_BlueButtonDisabledColor)); 44 45 // TODO(estade): this is not great on system themes. 46 label()->set_shadows(gfx::ShadowValues(1, 47 gfx::ShadowValue(gfx::Point(0, 1), 0, kBlueButtonShadowColor))); 48 } 49} 50 51const char* BlueButton::GetClassName() const { 52 return BlueButton::kViewClassName; 53} 54 55scoped_ptr<LabelButtonBorder> BlueButton::CreateDefaultBorder() const { 56 // Insets for splitting the images. 57 const gfx::Insets insets(5, 5, 5, 5); 58 scoped_ptr<LabelButtonBorder> button_border(new LabelButtonBorder(style())); 59 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 60 button_border->SetPainter(false, STATE_NORMAL, Painter::CreateImagePainter( 61 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_NORMAL), insets)); 62 button_border->SetPainter(false, STATE_HOVERED, Painter::CreateImagePainter( 63 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_HOVER), insets)); 64 button_border->SetPainter(false, STATE_PRESSED, Painter::CreateImagePainter( 65 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_PRESSED), insets)); 66 button_border->SetPainter(false, STATE_DISABLED, Painter::CreateImagePainter( 67 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_DISABLED), insets)); 68 button_border->SetPainter(true, STATE_NORMAL, Painter::CreateImagePainter( 69 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_FOCUSED_NORMAL), insets)); 70 button_border->SetPainter(true, STATE_HOVERED, Painter::CreateImagePainter( 71 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_FOCUSED_HOVER), insets)); 72 button_border->SetPainter(true, STATE_PRESSED, Painter::CreateImagePainter( 73 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_FOCUSED_PRESSED), insets)); 74 button_border->SetPainter(true, STATE_DISABLED, Painter::CreateImagePainter( 75 *rb.GetImageSkiaNamed(IDR_BLUE_BUTTON_DISABLED), insets)); 76 return button_border.Pass(); 77} 78 79} // namespace views 80