blob: ba50b538f4803f8f16d99f33b6efdbd60c6e7bc5 [file] [log] [blame]
// Copyright 2013 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 "ash/system/tray/tray_popup_label_button_border.h"
#include "base/i18n/rtl.h"
#include "grit/ash_resources.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/vector2d.h"
#include "ui/native_theme/native_theme.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/native_theme_delegate.h"
namespace ash {
TrayPopupLabelButtonBorder::TrayPopupLabelButtonBorder()
: LabelButtonBorder(views::Button::STYLE_TEXTBUTTON) {
const int kTrayPopupLabelButtonBorderImagesNormal[] = {
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND,
};
SetPainter(false, views::Button::STATE_NORMAL,
views::Painter::CreateImageGridPainter(
kTrayPopupLabelButtonBorderImagesNormal));
SetPainter(false, views::Button::STATE_DISABLED,
views::Painter::CreateImageGridPainter(
kTrayPopupLabelButtonBorderImagesNormal));
const int kTrayPopupLabelButtonBorderImagesHovered[] = {
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_HOVER_BACKGROUND,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER,
};
SetPainter(false, views::Button::STATE_HOVERED,
views::Painter::CreateImageGridPainter(
kTrayPopupLabelButtonBorderImagesHovered));
SetPainter(false, views::Button::STATE_PRESSED,
views::Painter::CreateImageGridPainter(
kTrayPopupLabelButtonBorderImagesHovered));
const int kTrayPopupLabelButtonPaddingHorizontal = 16;
const int kTrayPopupLabelButtonPaddingVertical = 8;
set_insets(gfx::Insets(kTrayPopupLabelButtonPaddingVertical,
kTrayPopupLabelButtonPaddingHorizontal,
kTrayPopupLabelButtonPaddingVertical,
kTrayPopupLabelButtonPaddingHorizontal));
}
TrayPopupLabelButtonBorder::~TrayPopupLabelButtonBorder() {}
void TrayPopupLabelButtonBorder::Paint(const views::View& view,
gfx::Canvas* canvas) {
const views::NativeThemeDelegate* native_theme_delegate =
static_cast<const views::LabelButton*>(&view);
ui::NativeTheme::ExtraParams extra;
const ui::NativeTheme::State state =
native_theme_delegate->GetThemeState(&extra);
if (state == ui::NativeTheme::kNormal ||
state == ui::NativeTheme::kDisabled) {
// In normal and disabled state, the border is a vertical bar separating the
// button from the preceding sibling. If this button is its parent's first
// visible child, the separator bar should be omitted.
const views::View* first_visible_child = NULL;
for (int i = 0; i < view.parent()->child_count(); ++i) {
const views::View* child = view.parent()->child_at(i);
if (child->visible()) {
first_visible_child = child;
break;
}
}
if (first_visible_child == &view)
return;
}
if (base::i18n::IsRTL()) {
canvas->Save();
canvas->Translate(gfx::Vector2d(view.width(), 0));
canvas->Scale(-1, 1);
LabelButtonBorder::Paint(view, canvas);
canvas->Restore();
} else {
LabelButtonBorder::Paint(view, canvas);
}
}
} // namespace ash