OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/common/system/chromeos/palette/palette_tray.h" | 5 #include "ash/common/system/chromeos/palette/palette_tray.h" |
6 | 6 |
7 #include "ash/common/shelf/shelf_constants.h" | 7 #include "ash/common/shelf/shelf_constants.h" |
8 #include "ash/common/shelf/wm_shelf.h" | 8 #include "ash/common/shelf/wm_shelf.h" |
9 #include "ash/common/shelf/wm_shelf_util.h" | 9 #include "ash/common/shelf/wm_shelf_util.h" |
10 #include "ash/common/shell_window_ids.h" | 10 #include "ash/common/shell_window_ids.h" |
11 #include "ash/common/system/chromeos/palette/palette_tool_manager.h" | 11 #include "ash/common/system/chromeos/palette/palette_tool_manager.h" |
12 #include "ash/common/system/chromeos/palette/palette_utils.h" | 12 #include "ash/common/system/chromeos/palette/palette_utils.h" |
13 #include "ash/common/system/tray/system_tray_delegate.h" | 13 #include "ash/common/system/tray/system_tray_delegate.h" |
14 #include "ash/common/system/tray/tray_bubble_wrapper.h" | 14 #include "ash/common/system/tray/tray_bubble_wrapper.h" |
15 #include "ash/common/system/tray/tray_constants.h" | 15 #include "ash/common/system/tray/tray_constants.h" |
16 #include "ash/common/system/tray/tray_popup_header_button.h" | 16 #include "ash/common/system/tray/tray_popup_header_button.h" |
17 #include "ash/common/wm_lookup.h" | 17 #include "ash/common/wm_lookup.h" |
18 #include "ash/common/wm_root_window_controller.h" | 18 #include "ash/common/wm_root_window_controller.h" |
19 #include "ash/common/wm_shell.h" | 19 #include "ash/common/wm_shell.h" |
20 #include "ash/common/wm_window.h" | 20 #include "ash/common/wm_window.h" |
21 #include "grit/ash_resources.h" | 21 #include "grit/ash_resources.h" |
22 #include "grit/ash_strings.h" | 22 #include "grit/ash_strings.h" |
23 #include "ui/base/l10n/l10n_util.h" | 23 #include "ui/base/l10n/l10n_util.h" |
24 #include "ui/base/resource/resource_bundle.h" | 24 #include "ui/base/resource/resource_bundle.h" |
25 #include "ui/gfx/color_palette.h" | |
25 #include "ui/gfx/paint_vector_icon.h" | 26 #include "ui/gfx/paint_vector_icon.h" |
27 #include "ui/gfx/vector_icons_public.h" | |
26 #include "ui/views/controls/image_view.h" | 28 #include "ui/views/controls/image_view.h" |
27 #include "ui/views/controls/label.h" | 29 #include "ui/views/controls/label.h" |
28 #include "ui/views/controls/separator.h" | 30 #include "ui/views/controls/separator.h" |
29 #include "ui/views/layout/box_layout.h" | 31 #include "ui/views/layout/box_layout.h" |
30 #include "ui/views/layout/fill_layout.h" | 32 #include "ui/views/layout/fill_layout.h" |
31 | 33 |
32 namespace ash { | 34 namespace ash { |
33 | 35 |
34 namespace { | 36 namespace { |
35 | 37 |
36 // Predefined padding for the icon used in this tray. These are to be set to the | 38 // Predefined padding for the icon used in this tray. These are to be set to the |
37 // border of the icon, depending on the current |shelf_alignment()|. | 39 // border of the icon, depending on the current |shelf_alignment()|. |
38 const int kHorizontalShelfHorizontalPadding = 8; | 40 const int kHorizontalShelfHorizontalPadding = 8; |
39 const int kHorizontalShelfVerticalPadding = 4; | 41 const int kHorizontalShelfVerticalPadding = 4; |
40 const int kVerticalShelfHorizontalPadding = 2; | 42 const int kVerticalShelfHorizontalPadding = 2; |
41 const int kVerticalShelfVerticalPadding = 5; | 43 const int kVerticalShelfVerticalPadding = 5; |
42 | 44 |
43 // Width of the palette itself (dp). | 45 // Width of the palette itself (dp). |
44 const int kPaletteWidth = 360; | 46 const int kPaletteWidth = 332; |
45 | 47 |
46 // Size of icon in the shelf (dp). | 48 // Size of icon in the shelf (dp). |
47 const int kShelfIconSize = 18; | 49 const int kShelfIconSize = 18; |
48 | 50 |
51 // Margins between the title view and the edges around it (dp). | |
52 const int kPaddingBetweenTitleAndTopEdge = 4; | |
53 const int kPaddingBetweenTitleAndLeftEdge = 12; | |
54 const int kPaddingBetweenTitleAndSeparator = 3; | |
55 | |
56 // Size of the header icons (dp). | |
57 const int kIconSize = 20; | |
58 | |
49 // Creates a separator. | 59 // Creates a separator. |
50 views::Separator* CreateSeparator(views::Separator::Orientation orientation) { | 60 views::Separator* CreateSeparator(views::Separator::Orientation orientation) { |
51 const int kSeparatorInset = 10; | |
52 | |
53 views::Separator* separator = | 61 views::Separator* separator = |
54 new views::Separator(views::Separator::HORIZONTAL); | 62 new views::Separator(views::Separator::HORIZONTAL); |
55 separator->SetColor(ash::kBorderDarkColor); | 63 separator->SetColor(ash::kBorderDarkColor); |
56 separator->SetBorder( | |
57 views::Border::CreateEmptyBorder(kSeparatorInset, 0, kSeparatorInset, 0)); | |
58 return separator; | 64 return separator; |
59 } | 65 } |
60 | 66 |
61 class TitleView : public views::View, public views::ButtonListener { | 67 class TitleView : public views::View, public views::ButtonListener { |
62 public: | 68 public: |
63 explicit TitleView(PaletteTray* palette_tray) : palette_tray_(palette_tray) { | 69 explicit TitleView(PaletteTray* palette_tray) : palette_tray_(palette_tray) { |
64 auto& rb = ui::ResourceBundle::GetSharedInstance(); | 70 auto& rb = ui::ResourceBundle::GetSharedInstance(); |
65 | 71 |
66 auto* box_layout = | 72 auto* box_layout = |
67 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); | 73 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); |
68 SetLayoutManager(box_layout); | 74 SetLayoutManager(box_layout); |
69 SetBorder(views::Border::CreateEmptyBorder( | |
70 0, ash::kTrayPopupPaddingHorizontal, 0, 0)); | |
71 | 75 |
72 views::Label* text_label = | 76 views::Label* text_label = |
73 new views::Label(l10n_util::GetStringUTF16(IDS_ASH_PALETTE_TITLE)); | 77 new views::Label(l10n_util::GetStringUTF16(IDS_ASH_PALETTE_TITLE)); |
74 text_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 78 text_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
75 text_label->SetFontList(rb.GetFontList(ui::ResourceBundle::BoldFont)); | 79 text_label->SetFontList(rb.GetFontList(ui::ResourceBundle::BoldFont)); |
76 AddChildView(text_label); | 80 AddChildView(text_label); |
77 box_layout->SetFlexForView(text_label, 1); | 81 box_layout->SetFlexForView(text_label, 1); |
78 | 82 |
79 help_button_ = new ash::TrayPopupHeaderButton(this, IDR_AURA_UBER_TRAY_HELP, | 83 gfx::ImageSkia settings_icon = CreateVectorIcon( |
84 gfx::VectorIconId::SETTINGS, kIconSize, gfx::kChromeIconGrey); | |
85 // TODO: Add HELP icon | |
stevenjb
2016/08/24 15:58:57
TODO(jdufault)
jdufault
2016/08/24 18:48:06
Oops - I forgot to delete that before submitting :
| |
86 gfx::ImageSkia help_icon = CreateVectorIcon( | |
87 gfx::VectorIconId::HELP, kIconSize, gfx::kChromeIconGrey); | |
88 | |
89 help_button_ = new ash::TrayPopupHeaderButton(this, help_icon, | |
80 IDS_ASH_STATUS_TRAY_HELP); | 90 IDS_ASH_STATUS_TRAY_HELP); |
81 help_button_->SetTooltipText( | 91 help_button_->SetTooltipText( |
82 l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SHUTDOWN)); | 92 l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_HELP)); |
83 AddChildView(help_button_); | 93 AddChildView(help_button_); |
84 | 94 |
85 AddChildView(CreateSeparator(views::Separator::VERTICAL)); | |
86 | |
87 settings_button_ = new ash::TrayPopupHeaderButton( | 95 settings_button_ = new ash::TrayPopupHeaderButton( |
88 this, IDR_AURA_UBER_TRAY_SETTINGS, IDS_ASH_STATUS_TRAY_SETTINGS); | 96 this, settings_icon, IDS_ASH_STATUS_TRAY_SETTINGS); |
89 settings_button_->SetTooltipText( | 97 settings_button_->SetTooltipText( |
90 l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SETTINGS)); | 98 l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SETTINGS)); |
91 AddChildView(settings_button_); | 99 AddChildView(settings_button_); |
92 } | 100 } |
93 | 101 |
94 ~TitleView() override {} | 102 ~TitleView() override {} |
95 | 103 |
96 private: | 104 private: |
97 // views::ButtonListener: | 105 // views::ButtonListener: |
98 void ButtonPressed(views::Button* sender, const ui::Event& event) override { | 106 void ButtonPressed(views::Button* sender, const ui::Event& event) override { |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
163 init_params.can_activate = true; | 171 init_params.can_activate = true; |
164 init_params.close_on_deactivate = true; | 172 init_params.close_on_deactivate = true; |
165 | 173 |
166 DCHECK(tray_container()); | 174 DCHECK(tray_container()); |
167 | 175 |
168 // Create view, customize it. | 176 // Create view, customize it. |
169 views::TrayBubbleView* bubble_view = | 177 views::TrayBubbleView* bubble_view = |
170 views::TrayBubbleView::Create(tray_container(), this, &init_params); | 178 views::TrayBubbleView::Create(tray_container(), this, &init_params); |
171 bubble_view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); | 179 bubble_view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); |
172 bubble_view->UseCompactMargins(); | 180 bubble_view->UseCompactMargins(); |
173 bubble_view->set_margins(gfx::Insets(bubble_view->margins().top(), 0, 0, 0)); | 181 bubble_view->set_margins(gfx::Insets(0, 0, 0, 0)); |
174 | 182 |
175 // Add child views. | 183 // Add child views. |
176 bubble_view->AddChildView(new TitleView(this)); | 184 auto* title_view = new TitleView(this); |
177 bubble_view->AddChildView(CreateSeparator(views::Separator::HORIZONTAL)); | 185 title_view->SetBorder(views::Border::CreateEmptyBorder(gfx::Insets( |
186 kPaddingBetweenTitleAndTopEdge, kPaddingBetweenTitleAndLeftEdge, | |
187 kPaddingBetweenTitleAndSeparator, 0))); | |
188 bubble_view->AddChildView(title_view); | |
189 | |
190 auto* separator = CreateSeparator(views::Separator::HORIZONTAL); | |
stevenjb
2016/08/24 15:58:57
We generally avoid using auto* like this. It's all
jdufault
2016/08/24 18:48:06
Done.
| |
191 separator->SetBorder( | |
192 views::Border::CreateEmptyBorder(gfx::Insets(0, 0, 4, 0))); | |
193 bubble_view->AddChildView(separator); | |
178 AddToolsToView(bubble_view); | 194 AddToolsToView(bubble_view); |
179 | 195 |
180 // Show the bubble. | 196 // Show the bubble. |
181 bubble_.reset(new ash::TrayBubbleWrapper(this, bubble_view)); | 197 bubble_.reset(new ash::TrayBubbleWrapper(this, bubble_view)); |
182 | 198 |
183 SetDrawBackgroundAsActive(true); | 199 SetDrawBackgroundAsActive(true); |
184 | 200 |
185 return true; | 201 return true; |
186 } | 202 } |
187 | 203 |
188 void PaletteTray::AddToolsToView(views::View* host) { | 204 void PaletteTray::AddToolsToView(views::View* host) { |
189 std::vector<PaletteToolView> views = palette_tool_manager_->CreateViews(); | 205 std::vector<PaletteToolView> views = palette_tool_manager_->CreateViews(); |
190 | 206 for (const PaletteToolView& view : views) |
191 // There may not be any registered tools. | |
192 if (!views.size()) | |
193 return; | |
194 | |
195 PaletteGroup group = views[0].group; | |
196 for (const PaletteToolView& view : views) { | |
197 // If the group changes, add a separator. | |
198 if (group != view.group) { | |
199 group = view.group; | |
200 host->AddChildView(CreateSeparator(views::Separator::HORIZONTAL)); | |
201 } | |
202 | |
203 host->AddChildView(view.view); | 207 host->AddChildView(view.view); |
204 } | |
205 } | 208 } |
206 | 209 |
207 void PaletteTray::SessionStateChanged( | 210 void PaletteTray::SessionStateChanged( |
208 SessionStateDelegate::SessionState state) { | 211 SessionStateDelegate::SessionState state) { |
209 UpdateIconVisibility(); | 212 UpdateIconVisibility(); |
210 } | 213 } |
211 | 214 |
212 void PaletteTray::ClickedOutsideBubble() { | 215 void PaletteTray::ClickedOutsideBubble() { |
213 HidePalette(); | 216 HidePalette(); |
214 } | 217 } |
(...skipping 22 matching lines...) Expand all Loading... | |
237 | 240 |
238 gfx::Rect PaletteTray::GetAnchorRect( | 241 gfx::Rect PaletteTray::GetAnchorRect( |
239 views::Widget* anchor_widget, | 242 views::Widget* anchor_widget, |
240 views::TrayBubbleView::AnchorType anchor_type, | 243 views::TrayBubbleView::AnchorType anchor_type, |
241 views::TrayBubbleView::AnchorAlignment anchor_alignment) const { | 244 views::TrayBubbleView::AnchorAlignment anchor_alignment) const { |
242 gfx::Rect r = | 245 gfx::Rect r = |
243 GetBubbleAnchorRect(anchor_widget, anchor_type, anchor_alignment); | 246 GetBubbleAnchorRect(anchor_widget, anchor_type, anchor_alignment); |
244 | 247 |
245 // Move the palette to the left so the right edge of the palette aligns with | 248 // Move the palette to the left so the right edge of the palette aligns with |
246 // the right edge of the tray button. | 249 // the right edge of the tray button. |
247 if (IsHorizontalAlignment(shelf_alignment())) | 250 if (IsHorizontalAlignment(shelf_alignment())) { |
248 r.Offset(-r.width() + tray_container()->width(), 0); | 251 // TODO(jdufault): Figure out a more robust adjustment method that does not |
249 else | 252 // break in md-shelf. |
253 int icon_size = tray_container()->width(); | |
254 if (tray_container()->border()) | |
255 icon_size -= tray_container()->border()->GetInsets().width(); | |
256 | |
257 r.Offset(-r.width() + icon_size, 0); | |
258 } else { | |
259 // Vertical layout doesn't need the border adjustment that horizontal needs. | |
250 r.Offset(0, -r.height() + tray_container()->height()); | 260 r.Offset(0, -r.height() + tray_container()->height()); |
261 } | |
251 | 262 |
252 return r; | 263 return r; |
253 } | 264 } |
254 | 265 |
255 void PaletteTray::OnBeforeBubbleWidgetInit( | 266 void PaletteTray::OnBeforeBubbleWidgetInit( |
256 views::Widget* anchor_widget, | 267 views::Widget* anchor_widget, |
257 views::Widget* bubble_widget, | 268 views::Widget* bubble_widget, |
258 views::Widget::InitParams* params) const { | 269 views::Widget::InitParams* params) const { |
259 // Place the bubble in the same root window as |anchor_widget|. | 270 // Place the bubble in the same root window as |anchor_widget|. |
260 WmLookup::Get() | 271 WmLookup::Get() |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
319 WmShell::Get()->GetSessionStateDelegate(); | 330 WmShell::Get()->GetSessionStateDelegate(); |
320 | 331 |
321 SetVisible(!session_state_delegate->IsScreenLocked() && | 332 SetVisible(!session_state_delegate->IsScreenLocked() && |
322 session_state_delegate->GetSessionState() == | 333 session_state_delegate->GetSessionState() == |
323 SessionStateDelegate::SESSION_STATE_ACTIVE && | 334 SessionStateDelegate::SESSION_STATE_ACTIVE && |
324 WmShell::Get()->system_tray_delegate()->GetUserLoginStatus() != | 335 WmShell::Get()->system_tray_delegate()->GetUserLoginStatus() != |
325 LoginStatus::KIOSK_APP); | 336 LoginStatus::KIOSK_APP); |
326 } | 337 } |
327 | 338 |
328 } // namespace ash | 339 } // namespace ash |
OLD | NEW |