| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "ash/system/tray/tray_popup_label_button_border.h" | |
| 6 | |
| 7 #include "base/i18n/rtl.h" | |
| 8 #include "grit/ash_resources.h" | |
| 9 #include "ui/gfx/canvas.h" | |
| 10 #include "ui/gfx/geometry/vector2d.h" | |
| 11 #include "ui/native_theme/native_theme.h" | |
| 12 #include "ui/views/controls/button/label_button.h" | |
| 13 #include "ui/views/native_theme_delegate.h" | |
| 14 | |
| 15 namespace ash { | |
| 16 | |
| 17 TrayPopupLabelButtonBorder::TrayPopupLabelButtonBorder() | |
| 18 : LabelButtonAssetBorder(views::Button::STYLE_TEXTBUTTON) { | |
| 19 const int kTrayPopupLabelButtonBorderImagesNormal[] = { | |
| 20 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 21 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, | |
| 22 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, | |
| 23 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 24 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, | |
| 25 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, | |
| 26 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 27 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, | |
| 28 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, | |
| 29 }; | |
| 30 SetPainter(false, views::Button::STATE_NORMAL, | |
| 31 views::Painter::CreateImageGridPainter( | |
| 32 kTrayPopupLabelButtonBorderImagesNormal)); | |
| 33 SetPainter(false, views::Button::STATE_DISABLED, | |
| 34 views::Painter::CreateImageGridPainter( | |
| 35 kTrayPopupLabelButtonBorderImagesNormal)); | |
| 36 | |
| 37 const int kTrayPopupLabelButtonBorderImagesHovered[] = { | |
| 38 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 39 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 40 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 41 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 42 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_HOVER_BACKGROUND, | |
| 43 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 44 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 45 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 46 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | |
| 47 }; | |
| 48 SetPainter(false, views::Button::STATE_HOVERED, | |
| 49 views::Painter::CreateImageGridPainter( | |
| 50 kTrayPopupLabelButtonBorderImagesHovered)); | |
| 51 SetPainter(false, views::Button::STATE_PRESSED, | |
| 52 views::Painter::CreateImageGridPainter( | |
| 53 kTrayPopupLabelButtonBorderImagesHovered)); | |
| 54 | |
| 55 const int kTrayPopupLabelButtonPaddingHorizontal = 16; | |
| 56 const int kTrayPopupLabelButtonPaddingVertical = 8; | |
| 57 set_insets(gfx::Insets(kTrayPopupLabelButtonPaddingVertical, | |
| 58 kTrayPopupLabelButtonPaddingHorizontal, | |
| 59 kTrayPopupLabelButtonPaddingVertical, | |
| 60 kTrayPopupLabelButtonPaddingHorizontal)); | |
| 61 } | |
| 62 | |
| 63 TrayPopupLabelButtonBorder::~TrayPopupLabelButtonBorder() {} | |
| 64 | |
| 65 void TrayPopupLabelButtonBorder::Paint(const views::View& view, | |
| 66 gfx::Canvas* canvas) { | |
| 67 const views::NativeThemeDelegate* native_theme_delegate = | |
| 68 static_cast<const views::LabelButton*>(&view); | |
| 69 ui::NativeTheme::ExtraParams extra; | |
| 70 const ui::NativeTheme::State state = | |
| 71 native_theme_delegate->GetThemeState(&extra); | |
| 72 if (state == ui::NativeTheme::kNormal || | |
| 73 state == ui::NativeTheme::kDisabled) { | |
| 74 // In normal and disabled state, the border is a vertical bar separating the | |
| 75 // button from the preceding sibling. If this button is its parent's first | |
| 76 // visible child, the separator bar should be omitted. | |
| 77 const views::View* first_visible_child = NULL; | |
| 78 for (int i = 0; i < view.parent()->child_count(); ++i) { | |
| 79 const views::View* child = view.parent()->child_at(i); | |
| 80 if (child->visible()) { | |
| 81 first_visible_child = child; | |
| 82 break; | |
| 83 } | |
| 84 } | |
| 85 if (first_visible_child == &view) | |
| 86 return; | |
| 87 } | |
| 88 if (base::i18n::IsRTL()) { | |
| 89 canvas->Save(); | |
| 90 canvas->Translate(gfx::Vector2d(view.width(), 0)); | |
| 91 canvas->Scale(-1, 1); | |
| 92 LabelButtonAssetBorder::Paint(view, canvas); | |
| 93 canvas->Restore(); | |
| 94 } else { | |
| 95 LabelButtonAssetBorder::Paint(view, canvas); | |
| 96 } | |
| 97 } | |
| 98 | |
| 99 } // namespace ash | |
| OLD | NEW |