Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2256)

Unified Diff: ash/system/status_area_widget.cc

Issue 2103113003: Fix shelf layout when switching from left-aligned shelf to right-aligned shelf (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/system/status_area_widget.cc
diff --git a/ash/system/status_area_widget.cc b/ash/system/status_area_widget.cc
index 6a03d2487f077e90ce6ff8b315116ee486145f60..6da46116258bca38331f0453662a517d521be705 100644
--- a/ash/system/status_area_widget.cc
+++ b/ash/system/status_area_widget.cc
@@ -4,9 +4,13 @@
#include "ash/system/status_area_widget.h"
+#include "ash/common/material_design/material_design_controller.h"
+#include "ash/common/shelf/shelf_constants.h"
#include "ash/common/shelf/wm_shelf.h"
+#include "ash/common/shelf/wm_shelf_util.h"
#include "ash/common/shell_window_ids.h"
#include "ash/common/system/tray/system_tray_delegate.h"
+#include "ash/common/system/tray/tray_constants.h"
#include "ash/common/system/web_notification/web_notification_tray.h"
#include "ash/common/wm_lookup.h"
#include "ash/common/wm_root_window_controller.h"
@@ -62,14 +66,36 @@ void StatusAreaWidget::CreateTrayViews() {
SystemTrayDelegate* delegate = WmShell::Get()->system_tray_delegate();
DCHECK(delegate);
- // Initialize after all trays have been created.
- system_tray_->InitializeTrayItems(delegate, web_notification_tray_);
- web_notification_tray_->Initialize();
+
+ if (MaterialDesignController::IsShelfMaterial()) {
+ gfx::Insets edge_border =
+ CalculateBorderMD(system_tray_->shelf_alignment(), true);
+ gfx::Insets no_edge_border =
+ CalculateBorderMD(system_tray_->shelf_alignment(), false);
+ // Initialize after all trays have been created.
+ system_tray_->InitializeTrayItems(
+ delegate, web_notification_tray_,
+ overview_button_tray_->visible() ? no_edge_border : edge_border);
+ web_notification_tray_->Initialize(no_edge_border);
+#if defined(OS_CHROMEOS)
+ logout_button_tray_->Initialize(no_edge_border);
+ virtual_keyboard_tray_->Initialize(no_edge_border);
+#endif
+ overview_button_tray_->Initialize(edge_border);
+ } else {
+ gfx::Insets border =
+ CalculateBorderNonMD(system_tray_->shelf_alignment(), false);
+ // Initialize after all trays have been created.
+ system_tray_->InitializeTrayItems(delegate, web_notification_tray_, border);
+ web_notification_tray_->Initialize(border);
#if defined(OS_CHROMEOS)
- logout_button_tray_->Initialize();
- virtual_keyboard_tray_->Initialize();
+ logout_button_tray_->Initialize(border);
+ virtual_keyboard_tray_->Initialize(border);
#endif
- overview_button_tray_->Initialize();
+ overview_button_tray_->Initialize(
+ CalculateBorderNonMD(system_tray_->shelf_alignment(), true));
+ }
+
SetShelfAlignment(system_tray_->shelf_alignment());
UpdateAfterLoginStatusChange(delegate->GetUserLoginStatus());
}
@@ -174,18 +200,42 @@ void StatusAreaWidget::AddOverviewButtonTray() {
void StatusAreaWidget::SetShelfAlignment(ShelfAlignment alignment) {
status_area_widget_delegate_->set_alignment(alignment);
- if (system_tray_)
- system_tray_->SetShelfAlignment(alignment);
- if (web_notification_tray_)
- web_notification_tray_->SetShelfAlignment(alignment);
+
+ if (MaterialDesignController::IsShelfMaterial()) {
+ gfx::Insets insets_on_edge = CalculateBorderMD(alignment, true);
+ gfx::Insets insets_not_on_edge = CalculateBorderMD(alignment, false);
+
+ if (system_tray_)
+ system_tray_->SetShelfAlignment(
+ alignment, overview_button_tray_->visible() ? insets_not_on_edge
+ : insets_on_edge);
+ if (web_notification_tray_)
+ web_notification_tray_->SetShelfAlignment(alignment, insets_not_on_edge);
#if defined(OS_CHROMEOS)
if (logout_button_tray_)
- logout_button_tray_->SetShelfAlignment(alignment);
+ logout_button_tray_->SetShelfAlignment(alignment, insets_not_on_edge);
if (virtual_keyboard_tray_)
- virtual_keyboard_tray_->SetShelfAlignment(alignment);
+ virtual_keyboard_tray_->SetShelfAlignment(alignment, insets_not_on_edge);
#endif
if (overview_button_tray_)
- overview_button_tray_->SetShelfAlignment(alignment);
+ overview_button_tray_->SetShelfAlignment(alignment, insets_on_edge);
+ } else {
+ gfx::Insets insets = CalculateBorderNonMD(alignment, false);
+ if (system_tray_)
+ system_tray_->SetShelfAlignment(alignment, insets);
+ if (web_notification_tray_)
+ web_notification_tray_->SetShelfAlignment(alignment, insets);
+#if defined(OS_CHROMEOS)
+ if (logout_button_tray_)
+ logout_button_tray_->SetShelfAlignment(alignment, insets);
+ if (virtual_keyboard_tray_)
+ virtual_keyboard_tray_->SetShelfAlignment(alignment, insets);
+#endif
+ if (overview_button_tray_)
+ overview_button_tray_->SetShelfAlignment(
+ alignment, CalculateBorderNonMD(alignment, true));
+ }
+
status_area_widget_delegate_->UpdateLayout();
}
@@ -205,4 +255,52 @@ void StatusAreaWidget::UpdateAfterLoginStatusChange(LoginStatus login_status) {
overview_button_tray_->UpdateAfterLoginStatusChange(login_status);
}
+gfx::Insets StatusAreaWidget::CalculateBorderMD(ShelfAlignment alignment,
James Cook 2016/06/29 19:34:14 Can these methods be static? Then they could move
+ bool is_on_edge) {
+ const int shelf_size = GetShelfConstant(SHELF_SIZE);
+ const int item_height = GetTrayConstant(TRAY_ITEM_HEIGHT_LEGACY);
+ int top_edge, left_edge, bottom_edge, right_edge;
+
+ // Tray views are laid out right-to-left or bottom-to-top.
+ const bool horizontal_alignment = IsHorizontalAlignment(alignment);
+ const int padding = (shelf_size - item_height) / 2;
+ const int extended_padding = GetTrayConstant(TRAY_PADDING_FROM_EDGE_OF_SHELF);
+
+ top_edge = horizontal_alignment ? padding : 0;
+ left_edge = horizontal_alignment ? 0 : padding;
+ bottom_edge =
+ horizontal_alignment ? padding : (is_on_edge ? extended_padding : 0);
+ right_edge =
+ horizontal_alignment ? (is_on_edge ? extended_padding : 0) : padding;
+
+ return gfx::Insets(top_edge, left_edge, bottom_edge, right_edge);
+}
+
+gfx::Insets StatusAreaWidget::CalculateBorderNonMD(ShelfAlignment alignment,
+ bool is_overview) {
+ const int shelf_size = GetShelfConstant(SHELF_SIZE);
+ const int item_height = GetTrayConstant(TRAY_ITEM_HEIGHT_LEGACY);
+ int top_edge, left_edge, bottom_edge, right_edge;
+ if (IsHorizontalAlignment(alignment)) {
+ top_edge = kShelfItemInset;
+ left_edge = 0;
+ bottom_edge = shelf_size - kShelfItemInset - item_height;
+ right_edge =
+ is_overview ? GetTrayConstant(TRAY_PADDING_FROM_EDGE_OF_SHELF) : 0;
+ } else if (alignment == SHELF_ALIGNMENT_LEFT) {
+ top_edge = 0;
+ left_edge = shelf_size - kShelfItemInset - item_height;
+ bottom_edge =
+ is_overview ? GetTrayConstant(TRAY_PADDING_FROM_EDGE_OF_SHELF) : 0;
+ right_edge = kShelfItemInset;
+ } else { // SHELF_ALIGNMENT_RIGHT
+ top_edge = 0;
+ left_edge = kShelfItemInset;
+ bottom_edge =
+ is_overview ? GetTrayConstant(TRAY_PADDING_FROM_EDGE_OF_SHELF) : 0;
+ right_edge = shelf_size - kShelfItemInset - item_height;
+ }
+ return gfx::Insets(top_edge, left_edge, bottom_edge, right_edge);
+}
+
} // namespace ash

Powered by Google App Engine
This is Rietveld 408576698