14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/chromeos/views/dropdown_button.h"
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "grit/theme_resources.h"
772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h"
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/canvas_skia.h"
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace {
114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Asset icon particularities makes us offset focus frame.
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochconst int kFocusFrameTopOffset = 0;
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochconst int kFocusFrameLeftOffset = 0;
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochconst int kFocusFrameRightOffset = 0;
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochconst int kFocusFrameBottomOffset = 1;
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// TextButtonBorder specification that uses different icons to draw the
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// button.
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass DropDownButtonBorder : public views::TextButtonBorder {
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DropDownButtonBorder();
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(DropDownButtonBorder);
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochDropDownButtonBorder::DropDownButtonBorder() {
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  ResourceBundle& rb = ResourceBundle::GetSharedInstance();
294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  hot_set_.top_left = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_LEFT_H);
314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  hot_set_.top = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_H);
324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  hot_set_.top_right = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_RIGHT_H);
334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  hot_set_.left = rb.GetBitmapNamed(IDR_DROPDOWN_LEFT_H);
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  hot_set_.center = rb.GetBitmapNamed(IDR_DROPDOWN_CENTER_H);
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  hot_set_.right = rb.GetBitmapNamed(IDR_DROPDOWN_RIGHT_H);
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  hot_set_.bottom_left = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_LEFT_H);
374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  hot_set_.bottom = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_H);
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  hot_set_.bottom_right = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_RIGHT_H);
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  pushed_set_.top_left = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_LEFT_P);
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  pushed_set_.top = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_P);
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  pushed_set_.top_right = rb.GetBitmapNamed(IDR_DROPDOWN_TOP_RIGHT_P);
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  pushed_set_.left = rb.GetBitmapNamed(IDR_DROPDOWN_LEFT_P);
444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  pushed_set_.center = rb.GetBitmapNamed(IDR_DROPDOWN_CENTER_P);
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  pushed_set_.right = rb.GetBitmapNamed(IDR_DROPDOWN_RIGHT_P);
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  pushed_set_.bottom_left = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_LEFT_P);
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  pushed_set_.bottom = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_P);
484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  pushed_set_.bottom_right = rb.GetBitmapNamed(IDR_DROPDOWN_BOTTOM_RIGHT_P);
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}  // namespace
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace chromeos {
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochDropDownButton::DropDownButton(views::ButtonListener* listener,
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               const std::wstring& text,
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               views::ViewMenuDelegate* menu_delegate,
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                               bool show_menu_marker)
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    : MenuButton(listener, text, menu_delegate, show_menu_marker) {
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  set_border(new DropDownButtonBorder);
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochDropDownButton::~DropDownButton() {
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid DropDownButton::OnPaintFocusBorder(gfx::Canvas* canvas) {
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  if (HasFocus() && (IsFocusable() || IsAccessibilityFocusableInRootView()))
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    canvas->DrawFocusRect(kFocusFrameLeftOffset, kFocusFrameTopOffset,
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                          width() - kFocusFrameRightOffset,
704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                          height() - kFocusFrameBottomOffset);
714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid DropDownButton::SetText(const std::wstring& text) {
74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  text_ = WideToUTF16Hack(text);
75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  UpdateTextSize();
76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}  // namespace chromeos
79