Home | History | Annotate | Download | only in views
      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 
     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 
     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 
     63 DropDownButton::~DropDownButton() {
     64 }
     65 
     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 
     73 void DropDownButton::SetText(const std::wstring& text) {
     74   text_ = WideToUTF16Hack(text);
     75   UpdateTextSize();
     76 }
     77 
     78 }  // namespace chromeos
     79