diff options
Diffstat (limited to 'chromium/ash/system/tray/tray_popup_label_button_border.cc')
-rw-r--r-- | chromium/ash/system/tray/tray_popup_label_button_border.cc | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/chromium/ash/system/tray/tray_popup_label_button_border.cc b/chromium/ash/system/tray/tray_popup_label_button_border.cc new file mode 100644 index 00000000000..d5be6bcc324 --- /dev/null +++ b/chromium/ash/system/tray/tray_popup_label_button_border.cc @@ -0,0 +1,101 @@ +// 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 { +namespace internal { + +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 internal +} // namespace ash |