普通文本  |  79行  |  2.94 KB

// 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