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