Chromium Code Reviews| Index: mash/wm/shelf_layout.cc |
| diff --git a/mash/wm/shelf_layout.cc b/mash/wm/shelf_layout.cc |
| index e87dc76217e6efea9b2e72cd7e5d01d5e844220e..b097718421b3347b46f3e25db2bf1e52c9c6f0ee 100644 |
| --- a/mash/wm/shelf_layout.cc |
| +++ b/mash/wm/shelf_layout.cc |
| @@ -26,7 +26,10 @@ mojom::AshWindowType GetAshWindowType(const mus::Window* window) { |
| } // namespace |
| -ShelfLayout::ShelfLayout(mus::Window* owner) : LayoutManager(owner) { |
| +ShelfLayout::ShelfLayout(mus::Window* owner) |
| + : LayoutManager(owner), |
| + alignment_(mojom::ShelfAlignment::BOTTOM), |
| + auto_hide_behavior_(mojom::ShelfAutoHideBehavior::NEVER) { |
| AddLayoutProperty(mus::mojom::WindowManager::kPreferredSize_Property); |
| } |
| @@ -37,20 +40,53 @@ ShelfLayout::~ShelfLayout() {} |
| // shelf restarts. |
| void ShelfLayout::LayoutWindow(mus::Window* window) { |
| - // TODO(msw): Support additional shelf alignments and RTL UI. |
| - gfx::Size size = GetWindowPreferredSize(window); |
| - const int y = owner()->bounds().height() - size.height(); |
| const mojom::AshWindowType ash_window_type = GetAshWindowType(window); |
| - if (ash_window_type == mojom::AshWindowType::SHELF) { |
| - size.set_width(owner()->bounds().width()); |
| - window->SetBounds(gfx::Rect(0, y, size.width(), size.height())); |
| - } else if (ash_window_type == mojom::AshWindowType::STATUS_AREA) { |
| - window->SetBounds(gfx::Rect(owner()->bounds().width() - size.width(), y, |
| - size.width(), size.height())); |
| + gfx::Size size = GetWindowPreferredSize(window); |
| + |
| + if (alignment_ == mojom::ShelfAlignment::BOTTOM) { |
| + const int y = owner()->bounds().height() - size.height(); |
| + if (ash_window_type == mojom::AshWindowType::SHELF) { |
| + size.set_width(owner()->bounds().width()); |
| + window->SetBounds(gfx::Rect(0, y, size.width(), size.height())); |
| + } else if (ash_window_type == mojom::AshWindowType::STATUS_AREA) { |
| + // TODO(msw): Place the status area on the right for RTL UIs. |
|
James Cook
2016/04/11 23:36:48
on the right? or on the left?
msw
2016/04/12 00:13:59
Done.
|
| + window->SetBounds(gfx::Rect(owner()->bounds().width() - size.width(), y, |
| + size.width(), size.height())); |
| + } else { |
| + NOTREACHED() << "Unknown window in USER_SHELF container."; |
| + } |
| } else { |
| - NOTREACHED() << "Unknown window in USER_SHELF container."; |
| + const int x = (alignment_ == mojom::ShelfAlignment::LEFT) |
| + ? 0 |
| + : (owner()->bounds().width() - size.width()); |
| + if (ash_window_type == mojom::AshWindowType::SHELF) { |
| + size.set_height(owner()->bounds().height()); |
| + window->SetBounds(gfx::Rect(x, 0, size.width(), size.height())); |
| + } else if (ash_window_type == mojom::AshWindowType::STATUS_AREA) { |
| + window->SetBounds(gfx::Rect(x, owner()->bounds().height() - size.height(), |
| + size.width(), size.height())); |
| + } else { |
| + NOTREACHED() << "Unknown window in USER_SHELF container."; |
| + } |
| } |
| } |
| +void ShelfLayout::SetAlignment(mojom::ShelfAlignment alignment) { |
| + if (alignment_ == alignment) |
| + return; |
| + |
| + alignment_ = alignment; |
| + for (auto window : owner()->children()) |
|
James Cook
2016/04/11 23:36:48
I think for range-based for loops we prefer const
msw
2016/04/12 00:13:59
Done.
|
| + LayoutWindow(window); |
| +} |
| + |
| +void ShelfLayout::SetAutoHideBehavior(mojom::ShelfAutoHideBehavior auto_hide) { |
| + if (auto_hide_behavior_ == auto_hide) |
| + return; |
| + |
| + auto_hide_behavior_ = auto_hide; |
| + NOTIMPLEMENTED(); |
| +} |
| + |
| } // namespace wm |
| } // namespace mash |