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