• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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/chromeos/views/dropdown_button.h"
6 #include "grit/theme_resources.h"
7 #include "ui/base/resource/resource_bundle.h"
8 #include "ui/gfx/canvas_skia.h"
9 
10 namespace {
11 // Asset icon particularities makes us offset focus frame.
12 const int kFocusFrameTopOffset = 0;
13 const int kFocusFrameLeftOffset = 0;
14 const int kFocusFrameRightOffset = 0;
15 const int kFocusFrameBottomOffset = 1;
16 
17 // TextButtonBorder specification that uses different icons to draw the
18 // button.
19 class DropDownButtonBorder : public views::TextButtonBorder {
20  public:
21   DropDownButtonBorder();
22 
23  private:
24   DISALLOW_COPY_AND_ASSIGN(DropDownButtonBorder);
25 };
26 
DropDownButtonBorder()27 DropDownButtonBorder::DropDownButtonBorder() {
28   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
29 
30   hot_set_.top_left = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_LEFT_H);
31   hot_set_.top = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_H);
32   hot_set_.top_right = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_RIGHT_H);
33   hot_set_.left = rb.GetBitmapNamed(IDR_DROPDOWN_LEFT_H);
34   hot_set_.center = rb.GetBitmapNamed(IDR_DROPDOWN_CENTER_H);
35   hot_set_.right = rb.GetBitmapNamed(IDR_DROPDOWN_RIGHT_H);
36   hot_set_.bottom_left = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_LEFT_H);
37   hot_set_.bottom = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_H);
38   hot_set_.bottom_right = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_RIGHT_H);
39 
40   pushed_set_.top_left = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_LEFT_P);
41   pushed_set_.top = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_P);
42   pushed_set_.top_right = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_RIGHT_P);
43   pushed_set_.left = rb.GetBitmapNamed(IDR_DROPDOWN_LEFT_P);
44   pushed_set_.center = rb.GetBitmapNamed(IDR_DROPDOWN_CENTER_P);
45   pushed_set_.right = rb.GetBitmapNamed(IDR_DROPDOWN_RIGHT_P);
46   pushed_set_.bottom_left = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_LEFT_P);
47   pushed_set_.bottom = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_P);
48   pushed_set_.bottom_right = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_RIGHT_P);
49 }
50 
51 }  // namespace
52 
53 namespace chromeos {
54 
DropDownButton(views::ButtonListener * listener,const std::wstring & text,views::ViewMenuDelegate * menu_delegate,bool show_menu_marker)55 DropDownButton::DropDownButton(views::ButtonListener* listener,
56                                const std::wstring& text,
57                                views::ViewMenuDelegate* menu_delegate,
58                                bool show_menu_marker)
59     : MenuButton(listener, text, menu_delegate, show_menu_marker) {
60   set_border(new DropDownButtonBorder);
61 }
62 
~DropDownButton()63 DropDownButton::~DropDownButton() {
64 }
65 
OnPaintFocusBorder(gfx::Canvas * canvas)66 void DropDownButton::OnPaintFocusBorder(gfx::Canvas* canvas) {
67   if (HasFocus() && (IsFocusable() || IsAccessibilityFocusableInRootView()))
68     canvas->DrawFocusRect(kFocusFrameLeftOffset, kFocusFrameTopOffset,
69                           width() - kFocusFrameRightOffset,
70                           height() - kFocusFrameBottomOffset);
71 }
72 
SetText(const std::wstring & text)73 void DropDownButton::SetText(const std::wstring& text) {
74   text_ = WideToUTF16Hack(text);
75   UpdateTextSize();
76 }
77 
78 }  // namespace chromeos
79