| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/chromeos/views/dropdown_button.h" |
| #include "grit/theme_resources.h" |
| #include "ui/base/resource/resource_bundle.h" |
| #include "ui/gfx/canvas_skia.h" |
| |
| namespace { |
| // Asset icon particularities makes us offset focus frame. |
| const int kFocusFrameTopOffset = 0; |
| const int kFocusFrameLeftOffset = 0; |
| const int kFocusFrameRightOffset = 0; |
| const int kFocusFrameBottomOffset = 1; |
| |
| // TextButtonBorder specification that uses different icons to draw the |
| // button. |
| class DropDownButtonBorder : public views::TextButtonBorder { |
| public: |
| DropDownButtonBorder(); |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(DropDownButtonBorder); |
| }; |
| |
| DropDownButtonBorder::DropDownButtonBorder() { |
| ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| |
| hot_set_.top_left = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_LEFT_H); |
| hot_set_.top = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_H); |
| hot_set_.top_right = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_RIGHT_H); |
| hot_set_.left = rb.GetBitmapNamed(IDR_DROPDOWN_LEFT_H); |
| hot_set_.center = rb.GetBitmapNamed(IDR_DROPDOWN_CENTER_H); |
| hot_set_.right = rb.GetBitmapNamed(IDR_DROPDOWN_RIGHT_H); |
| hot_set_.bottom_left = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_LEFT_H); |
| hot_set_.bottom = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_H); |
| hot_set_.bottom_right = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_RIGHT_H); |
| |
| pushed_set_.top_left = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_LEFT_P); |
| pushed_set_.top = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_P); |
| pushed_set_.top_right = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_RIGHT_P); |
| pushed_set_.left = rb.GetBitmapNamed(IDR_DROPDOWN_LEFT_P); |
| pushed_set_.center = rb.GetBitmapNamed(IDR_DROPDOWN_CENTER_P); |
| pushed_set_.right = rb.GetBitmapNamed(IDR_DROPDOWN_RIGHT_P); |
| pushed_set_.bottom_left = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_LEFT_P); |
| pushed_set_.bottom = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_P); |
| pushed_set_.bottom_right = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_RIGHT_P); |
| } |
| |
| } // namespace |
| |
| namespace chromeos { |
| |
| DropDownButton::DropDownButton(views::ButtonListener* listener, |
| const std::wstring& text, |
| views::ViewMenuDelegate* menu_delegate, |
| bool show_menu_marker) |
| : MenuButton(listener, text, menu_delegate, show_menu_marker) { |
| set_border(new DropDownButtonBorder); |
| } |
| |
| DropDownButton::~DropDownButton() { |
| } |
| |
| void DropDownButton::OnPaintFocusBorder(gfx::Canvas* canvas) { |
| if (HasFocus() && (IsFocusable() || IsAccessibilityFocusableInRootView())) |
| canvas->DrawFocusRect(kFocusFrameLeftOffset, kFocusFrameTopOffset, |
| width() - kFocusFrameRightOffset, |
| height() - kFocusFrameBottomOffset); |
| } |
| |
| void DropDownButton::SetText(const std::wstring& text) { |
| text_ = WideToUTF16Hack(text); |
| UpdateTextSize(); |
| } |
| |
| } // namespace chromeos |