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