| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "athena/util/fill_layout_manager.h" |
| |
| #include "base/logging.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_property.h" |
| |
| // This is to avoid creating type definitoin for kAlwaysFillWindowKey. |
| DECLARE_EXPORTED_WINDOW_PROPERTY_TYPE(ATHENA_EXPORT, bool); |
| |
| namespace athena { |
| namespace { |
| |
| DEFINE_LOCAL_WINDOW_PROPERTY_KEY(bool, kAlwaysFillWindowKey, false); |
| |
| // TODO(oshima): Implement real window/layout manager. crbug.com/388362. |
| bool ShouldFill(aura::Window* window) { |
| return window->GetProperty(kAlwaysFillWindowKey) || |
| (window->type() != ui::wm::WINDOW_TYPE_MENU && |
| window->type() != ui::wm::WINDOW_TYPE_TOOLTIP && |
| window->type() != ui::wm::WINDOW_TYPE_POPUP); |
| } |
| |
| } // namespace |
| |
| // static |
| void FillLayoutManager::SetAlwaysFill(aura::Window* window) { |
| window->SetProperty(kAlwaysFillWindowKey, true); |
| } |
| |
| FillLayoutManager::FillLayoutManager(aura::Window* container) |
| : container_(container) { |
| DCHECK(container_); |
| } |
| |
| FillLayoutManager::~FillLayoutManager() { |
| } |
| |
| void FillLayoutManager::OnWindowResized() { |
| gfx::Rect full_bounds = gfx::Rect(container_->bounds().size()); |
| for (aura::Window::Windows::const_iterator iter = |
| container_->children().begin(); |
| iter != container_->children().end(); |
| ++iter) { |
| if (ShouldFill(*iter)) |
| SetChildBoundsDirect(*iter, full_bounds); |
| } |
| } |
| |
| void FillLayoutManager::OnWindowAddedToLayout(aura::Window* child) { |
| if (ShouldFill(child)) |
| SetChildBoundsDirect(child, gfx::Rect(container_->bounds().size())); |
| } |
| |
| void FillLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) { |
| } |
| |
| void FillLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) { |
| } |
| |
| void FillLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child, |
| bool visible) { |
| if (visible && ShouldFill(child)) |
| SetChildBoundsDirect(child, gfx::Rect(container_->bounds().size())); |
| } |
| |
| void FillLayoutManager::SetChildBounds(aura::Window* child, |
| const gfx::Rect& requested_bounds) { |
| if (!ShouldFill(child)) |
| SetChildBoundsDirect(child, requested_bounds); |
| } |
| |
| } // namespace athena |