1// Copyright 2014 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 "chrome/browser/ui/views/location_bar/search_button.h"
6
7#include "grit/theme_resources.h"
8#include "ui/base/theme_provider.h"
9#include "ui/views/controls/button/label_button_border.h"
10
11SearchButton::SearchButton(views::ButtonListener* listener)
12    : views::LabelButton(listener, base::string16()) {
13  EnableCanvasFlippingForRTLUI(true);
14  set_triggerable_event_flags(
15      ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON);
16  SetStyle(views::Button::STYLE_BUTTON);
17  SetFocusable(false);
18  SetMinSize(gfx::Size());
19  scoped_ptr<views::LabelButtonBorder> border(
20      new views::LabelButtonBorder(style()));
21  border->set_insets(gfx::Insets());
22  const int kSearchButtonNormalImages[] = IMAGE_GRID(IDR_OMNIBOX_SEARCH_BUTTON);
23  border->SetPainter(
24      false, views::Button::STATE_NORMAL,
25      views::Painter::CreateImageGridPainter(kSearchButtonNormalImages));
26  const int kSearchButtonHoveredImages[] =
27      IMAGE_GRID(IDR_OMNIBOX_SEARCH_BUTTON_HOVER);
28  border->SetPainter(
29      false, views::Button::STATE_HOVERED,
30      views::Painter::CreateImageGridPainter(kSearchButtonHoveredImages));
31  const int kSearchButtonPressedImages[] =
32      IMAGE_GRID(IDR_OMNIBOX_SEARCH_BUTTON_PRESSED);
33  border->SetPainter(
34      false, views::Button::STATE_PRESSED,
35      views::Painter::CreateImageGridPainter(kSearchButtonPressedImages));
36  border->SetPainter(false, views::Button::STATE_DISABLED, NULL);
37  border->SetPainter(true, views::Button::STATE_NORMAL, NULL);
38  border->SetPainter(true, views::Button::STATE_HOVERED, NULL);
39  border->SetPainter(true, views::Button::STATE_PRESSED, NULL);
40  border->SetPainter(true, views::Button::STATE_DISABLED, NULL);
41  SetBorder(border.PassAs<views::Border>());
42  const int kSearchButtonWidth = 56;
43  SetMinSize(gfx::Size(kSearchButtonWidth, 0));
44}
45
46SearchButton::~SearchButton() {
47}
48
49void SearchButton::UpdateIcon(bool is_search) {
50  SetImage(
51      views::Button::STATE_NORMAL,
52      *GetThemeProvider()->GetImageSkiaNamed(is_search ?
53          IDR_OMNIBOX_SEARCH_BUTTON_LOUPE : IDR_OMNIBOX_SEARCH_BUTTON_ARROW));
54  // Flip the arrow for RTL, but not the loupe.
55  image()->EnableCanvasFlippingForRTLUI(!is_search);
56}
57