OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/system/tray/tray_views.h" | 5 #include "ash/system/tray/tray_views.h" |
6 | 6 |
7 #include "ash/ash_constants.h" | 7 #include "ash/ash_constants.h" |
8 #include "ash/system/tray/tray_constants.h" | 8 #include "ash/system/tray/tray_constants.h" |
9 #include "ash/system/tray/tray_item_view.h" | 9 #include "ash/system/tray/tray_item_view.h" |
10 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 #include "ui/views/controls/label.h" | 28 #include "ui/views/controls/label.h" |
29 #include "ui/views/layout/box_layout.h" | 29 #include "ui/views/layout/box_layout.h" |
30 #include "ui/views/layout/fill_layout.h" | 30 #include "ui/views/layout/fill_layout.h" |
31 #include "ui/views/layout/grid_layout.h" | 31 #include "ui/views/layout/grid_layout.h" |
32 #include "ui/views/painter.h" | 32 #include "ui/views/painter.h" |
33 | 33 |
34 namespace ash { | 34 namespace ash { |
35 namespace internal { | 35 namespace internal { |
36 | 36 |
37 namespace { | 37 namespace { |
38 const int kIconPaddingLeft = 5; | |
39 const int kPopupDetailLabelExtraLeftMargin = 8; | 38 const int kPopupDetailLabelExtraLeftMargin = 8; |
40 const int kCheckLabelPadding = 4; | 39 const int kCheckLabelPadding = 4; |
41 const int kSpecialPopupRowHeight = 55; | |
42 const int kTrayPopupLabelButtonPaddingHorizontal = 16; | 40 const int kTrayPopupLabelButtonPaddingHorizontal = 16; |
43 const int kTrayPopupLabelButtonPaddingVertical = 8; | 41 const int kTrayPopupLabelButtonPaddingVertical = 8; |
44 | 42 |
45 // Time in ms per throbber frame. | 43 // Time in ms per throbber frame. |
46 const int kThrobberFrameMs = 50; | 44 const int kThrobberFrameMs = 50; |
47 | 45 |
48 // Duration for showing/hiding animation in milliseconds. | 46 // Duration for showing/hiding animation in milliseconds. |
49 const int kThrobberAnimationDurationMs = 200; | 47 const int kThrobberAnimationDurationMs = 200; |
50 | 48 |
51 const int kBarImagesActive[] = { | 49 const int kBarImagesActive[] = { |
(...skipping 24 matching lines...) Expand all Loading... |
76 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | 74 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, |
77 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | 75 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, |
78 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | 76 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, |
79 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_HOVER_BACKGROUND, | 77 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_HOVER_BACKGROUND, |
80 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | 78 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, |
81 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | 79 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, |
82 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | 80 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, |
83 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, | 81 IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER, |
84 }; | 82 }; |
85 | 83 |
86 views::View* CreatePopupHeaderButtonsContainer() { | |
87 views::View* view = new views::View; | |
88 view->SetLayoutManager(new | |
89 views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, -1)); | |
90 view->set_border(views::Border::CreateEmptyBorder(0, 0, 0, 5)); | |
91 return view; | |
92 } | |
93 | |
94 const int kBorderHeight = 3; | |
95 const SkColor kBorderGradientDark = SkColorSetRGB(0xae, 0xae, 0xae); | |
96 const SkColor kBorderGradientLight = SkColorSetRGB(0xe8, 0xe8, 0xe8); | |
97 | |
98 class SpecialPopupRowBorder : public views::Border { | |
99 public: | |
100 SpecialPopupRowBorder() | |
101 : painter_(views::Painter::CreateVerticalGradient(kBorderGradientDark, | |
102 kBorderGradientLight)) { | |
103 } | |
104 | |
105 virtual ~SpecialPopupRowBorder() {} | |
106 | |
107 private: | |
108 virtual void Paint(const views::View& view, gfx::Canvas* canvas) OVERRIDE { | |
109 views::Painter::PaintPainterAt(canvas, painter_.get(), | |
110 gfx::Rect(gfx::Size(view.width(), kBorderHeight))); | |
111 } | |
112 | |
113 virtual gfx::Insets GetInsets() const OVERRIDE { | |
114 return gfx::Insets(kBorderHeight, 0, 0, 0); | |
115 } | |
116 | |
117 scoped_ptr<views::Painter> painter_; | |
118 | |
119 DISALLOW_COPY_AND_ASSIGN(SpecialPopupRowBorder); | |
120 }; | |
121 | |
122 } | 84 } |
123 | 85 |
124 //////////////////////////////////////////////////////////////////////////////// | 86 //////////////////////////////////////////////////////////////////////////////// |
125 // FixedSizedImageView | 87 // FixedSizedImageView |
126 | 88 |
127 FixedSizedImageView::FixedSizedImageView(int width, int height) | 89 FixedSizedImageView::FixedSizedImageView(int width, int height) |
128 : width_(width), | 90 : width_(width), |
129 height_(height) { | 91 height_(height) { |
130 SetHorizontalAlignment(views::ImageView::CENTER); | 92 SetHorizontalAlignment(views::ImageView::CENTER); |
131 SetVerticalAlignment(views::ImageView::CENTER); | 93 SetVerticalAlignment(views::ImageView::CENTER); |
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 // Stop any previous animation. | 655 // Stop any previous animation. |
694 layer()->GetAnimator()->StopAnimating(); | 656 layer()->GetAnimator()->StopAnimating(); |
695 | 657 |
696 ui::ScopedLayerAnimationSettings animation(layer()->GetAnimator()); | 658 ui::ScopedLayerAnimationSettings animation(layer()->GetAnimator()); |
697 animation.SetTransitionDuration( | 659 animation.SetTransitionDuration( |
698 base::TimeDelta::FromMilliseconds(kThrobberAnimationDurationMs)); | 660 base::TimeDelta::FromMilliseconds(kThrobberAnimationDurationMs)); |
699 | 661 |
700 layer()->SetOpacity(start_throbber ? 1.0 : 0.0); | 662 layer()->SetOpacity(start_throbber ? 1.0 : 0.0); |
701 } | 663 } |
702 | 664 |
703 //////////////////////////////////////////////////////////////////////////////// | |
704 // SpecialPopupRow | |
705 | |
706 SpecialPopupRow::SpecialPopupRow() | |
707 : content_(NULL), | |
708 button_container_(NULL) { | |
709 views::Background* background = views::Background::CreateBackgroundPainter( | |
710 true, views::Painter::CreateVerticalGradient(kHeaderBackgroundColorLight, | |
711 kHeaderBackgroundColorDark)); | |
712 background->SetNativeControlColor(kHeaderBackgroundColorDark); | |
713 set_background(background); | |
714 set_border(new SpecialPopupRowBorder); | |
715 SetLayoutManager( | |
716 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); | |
717 } | |
718 | |
719 SpecialPopupRow::~SpecialPopupRow() { | |
720 } | |
721 | |
722 void SpecialPopupRow::SetTextLabel(int string_id, ViewClickListener* listener) { | |
723 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | |
724 HoverHighlightView* container = new HoverHighlightView(listener); | |
725 container->SetLayoutManager(new | |
726 views::BoxLayout(views::BoxLayout::kHorizontal, 0, 3, kIconPaddingLeft)); | |
727 | |
728 container->set_highlight_color(SkColorSetARGB(0, 0, 0, 0)); | |
729 container->set_default_color(SkColorSetARGB(0, 0, 0, 0)); | |
730 container->set_text_highlight_color(kHeaderTextColorHover); | |
731 container->set_text_default_color(kHeaderTextColorNormal); | |
732 | |
733 container->AddIconAndLabel( | |
734 *rb.GetImageNamed(IDR_AURA_UBER_TRAY_LESS).ToImageSkia(), | |
735 rb.GetLocalizedString(string_id), | |
736 gfx::Font::BOLD); | |
737 | |
738 container->set_border(views::Border::CreateEmptyBorder(0, | |
739 kTrayPopupPaddingHorizontal, 0, 0)); | |
740 | |
741 container->SetAccessibleName( | |
742 rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_PREVIOUS_MENU)); | |
743 SetContent(container); | |
744 } | |
745 | |
746 void SpecialPopupRow::SetContent(views::View* view) { | |
747 CHECK(!content_); | |
748 content_ = view; | |
749 AddChildViewAt(content_, 0); | |
750 } | |
751 | |
752 void SpecialPopupRow::AddButton(TrayPopupHeaderButton* button) { | |
753 if (!button_container_) { | |
754 button_container_ = CreatePopupHeaderButtonsContainer(); | |
755 AddChildView(button_container_); | |
756 } | |
757 | |
758 button_container_->AddChildView(button); | |
759 } | |
760 | |
761 void SpecialPopupRow::AddThrobber(ThrobberView* throbber) { | |
762 if (!button_container_) { | |
763 button_container_ = CreatePopupHeaderButtonsContainer(); | |
764 AddChildView(button_container_); | |
765 } | |
766 | |
767 button_container_->AddChildView(throbber); | |
768 } | |
769 | |
770 gfx::Size SpecialPopupRow::GetPreferredSize() { | |
771 gfx::Size size = views::View::GetPreferredSize(); | |
772 size.set_height(kSpecialPopupRowHeight); | |
773 return size; | |
774 } | |
775 | |
776 void SpecialPopupRow::Layout() { | |
777 views::View::Layout(); | |
778 gfx::Rect content_bounds = GetContentsBounds(); | |
779 if (content_bounds.IsEmpty()) | |
780 return; | |
781 if (!button_container_) { | |
782 content_->SetBoundsRect(GetContentsBounds()); | |
783 return; | |
784 } | |
785 | |
786 gfx::Rect bounds(button_container_->GetPreferredSize()); | |
787 bounds.set_height(content_bounds.height()); | |
788 gfx::Rect container_bounds = content_bounds; | |
789 container_bounds.ClampToCenteredSize(bounds.size()); | |
790 container_bounds.set_x(content_bounds.width() - container_bounds.width()); | |
791 button_container_->SetBoundsRect(container_bounds); | |
792 | |
793 bounds = content_->bounds(); | |
794 bounds.set_width(button_container_->x()); | |
795 content_->SetBoundsRect(bounds); | |
796 } | |
797 | |
798 void SetupLabelForTray(views::Label* label) { | 665 void SetupLabelForTray(views::Label* label) { |
799 // Making label_font static to avoid the time penalty of DeriveFont for | 666 // Making label_font static to avoid the time penalty of DeriveFont for |
800 // all but the first call. | 667 // all but the first call. |
801 static const gfx::Font label_font(gfx::Font().DeriveFont(1, gfx::Font::BOLD)); | 668 static const gfx::Font label_font(gfx::Font().DeriveFont(1, gfx::Font::BOLD)); |
802 label->SetFont(label_font); | 669 label->SetFont(label_font); |
803 label->SetAutoColorReadabilityEnabled(false); | 670 label->SetAutoColorReadabilityEnabled(false); |
804 label->SetEnabledColor(SK_ColorWHITE); | 671 label->SetEnabledColor(SK_ColorWHITE); |
805 label->SetBackgroundColor(SkColorSetARGB(0, 255, 255, 255)); | 672 label->SetBackgroundColor(SkColorSetARGB(0, 255, 255, 255)); |
806 label->SetShadowColors(SkColorSetARGB(64, 0, 0, 0), | 673 label->SetShadowColors(SkColorSetARGB(64, 0, 0, 0), |
807 SkColorSetARGB(64, 0, 0, 0)); | 674 SkColorSetARGB(64, 0, 0, 0)); |
(...skipping 30 matching lines...) Expand all Loading... |
838 tray_view->set_border(views::Border::CreateEmptyBorder( | 705 tray_view->set_border(views::Border::CreateEmptyBorder( |
839 kTrayLabelItemVerticalPaddingVeriticalAlignment, | 706 kTrayLabelItemVerticalPaddingVeriticalAlignment, |
840 horizontal_padding, | 707 horizontal_padding, |
841 kTrayLabelItemVerticalPaddingVeriticalAlignment, | 708 kTrayLabelItemVerticalPaddingVeriticalAlignment, |
842 horizontal_padding)); | 709 horizontal_padding)); |
843 } | 710 } |
844 } | 711 } |
845 | 712 |
846 } // namespace internal | 713 } // namespace internal |
847 } // namespace ash | 714 } // namespace ash |
OLD | NEW |