Index: ui/aura_shell/default_container_layout_manager.cc |
=================================================================== |
--- ui/aura_shell/default_container_layout_manager.cc (revision 115655) |
+++ ui/aura_shell/default_container_layout_manager.cc (working copy) |
@@ -1,190 +0,0 @@ |
-// Copyright (c) 2011 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 "ui/aura_shell/default_container_layout_manager.h" |
- |
-#include "ash/wm/show_state_controller.h" |
-#include "ui/aura/client/aura_constants.h" |
-#include "ui/aura/event.h" |
-#include "ui/aura/root_window.h" |
-#include "ui/aura/screen_aura.h" |
-#include "ui/aura/window.h" |
-#include "ui/aura/window_observer.h" |
-#include "ui/aura_shell/property_util.h" |
-#include "ui/aura_shell/window_util.h" |
-#include "ui/aura_shell/workspace/workspace.h" |
-#include "ui/aura_shell/workspace/workspace_manager.h" |
-#include "ui/base/ui_base_types.h" |
-#include "ui/gfx/rect.h" |
-#include "ui/views/widget/native_widget_aura.h" |
- |
-namespace aura_shell { |
-namespace internal { |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// DefaultContainerLayoutManager, public: |
- |
-DefaultContainerLayoutManager::DefaultContainerLayoutManager( |
- WorkspaceManager* workspace_manager) |
- : workspace_manager_(workspace_manager), |
- show_state_controller_(new ShowStateController(workspace_manager)) { |
-} |
- |
-DefaultContainerLayoutManager::~DefaultContainerLayoutManager() {} |
- |
-void DefaultContainerLayoutManager::PrepareForMoveOrResize( |
- aura::Window* drag, |
- aura::MouseEvent* event) { |
- workspace_manager_->set_ignored_window(drag); |
-} |
- |
-void DefaultContainerLayoutManager::CancelMoveOrResize( |
- aura::Window* drag, |
- aura::MouseEvent* event) { |
- workspace_manager_->set_ignored_window(NULL); |
-} |
- |
-void DefaultContainerLayoutManager::ProcessMove( |
- aura::Window* drag, |
- aura::MouseEvent* event) { |
- // TODO(oshima): Just zooming out may (and will) move/swap window without |
- // a users's intent. We probably should scroll viewport, but that may not |
- // be enough. See crbug.com/101826 for more discussion. |
- workspace_manager_->SetOverview(true); |
- |
- gfx::Point point_in_owner = event->location(); |
- aura::Window::ConvertPointToWindow( |
- drag, |
- workspace_manager_->contents_view(), |
- &point_in_owner); |
- // TODO(oshima): We should support simply moving to another |
- // workspace when the destination workspace has enough room to accomodate. |
- aura::Window* rotate_target = |
- workspace_manager_->FindRotateWindowForLocation(point_in_owner); |
- if (rotate_target) |
- workspace_manager_->RotateWindows(drag, rotate_target); |
-} |
- |
-void DefaultContainerLayoutManager::EndMove( |
- aura::Window* drag, |
- aura::MouseEvent* evnet) { |
- // TODO(oshima): finish moving window between workspaces. |
- workspace_manager_->set_ignored_window(NULL); |
- Workspace* workspace = workspace_manager_->FindBy(drag); |
- workspace->Layout(NULL); |
- workspace->Activate(); |
- workspace_manager_->SetOverview(false); |
-} |
- |
-void DefaultContainerLayoutManager::EndResize( |
- aura::Window* drag, |
- aura::MouseEvent* evnet) { |
- workspace_manager_->set_ignored_window(NULL); |
- Workspace* workspace = workspace_manager_->GetActiveWorkspace(); |
- if (workspace) |
- workspace->Layout(NULL); |
- workspace_manager_->SetOverview(false); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// DefaultContainerLayoutManager, aura::LayoutManager implementation: |
- |
-void DefaultContainerLayoutManager::OnWindowResized() { |
- // Workspace is updated via RootWindowObserver::OnRootWindowResized. |
-} |
- |
-void DefaultContainerLayoutManager::OnWindowAddedToLayout(aura::Window* child) { |
- if (child->type() != aura::client::WINDOW_TYPE_NORMAL || |
- child->transient_parent()) { |
- return; |
- } |
- |
- if (!child->GetProperty(aura::client::kShowStateKey)) |
- child->SetIntProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
- |
- child->AddObserver(show_state_controller_.get()); |
- |
- Workspace* workspace = workspace_manager_->GetActiveWorkspace(); |
- if (workspace) { |
- aura::Window* active = aura_shell::GetActiveWindow(); |
- // Active window may not be in the default container layer. |
- if (!workspace->Contains(active)) |
- active = NULL; |
- if (workspace->AddWindowAfter(child, active)) |
- return; |
- } |
- // Create new workspace if new |child| doesn't fit to current workspace. |
- Workspace* new_workspace = workspace_manager_->CreateWorkspace(); |
- new_workspace->AddWindowAfter(child, NULL); |
- new_workspace->Activate(); |
-} |
- |
-void DefaultContainerLayoutManager::OnWillRemoveWindowFromLayout( |
- aura::Window* child) { |
- child->RemoveObserver(show_state_controller_.get()); |
- ClearRestoreBounds(child); |
- |
- Workspace* workspace = workspace_manager_->FindBy(child); |
- if (!workspace) |
- return; |
- workspace->RemoveWindow(child); |
- if (workspace->is_empty()) |
- delete workspace; |
-} |
- |
-void DefaultContainerLayoutManager::OnChildWindowVisibilityChanged( |
- aura::Window* child, |
- bool visible) { |
- NOTIMPLEMENTED(); |
-} |
- |
-void DefaultContainerLayoutManager::SetChildBounds( |
- aura::Window* child, |
- const gfx::Rect& requested_bounds) { |
- gfx::Rect adjusted_bounds = requested_bounds; |
- |
- // First, calculate the adjusted bounds. |
- if (child->type() != aura::client::WINDOW_TYPE_NORMAL || |
- workspace_manager_->layout_in_progress() || |
- child->transient_parent()) { |
- // Use the requested bounds as is. |
- } else if (child == workspace_manager_->ignored_window()) { |
- // If a drag window is requesting bounds, make sure its attached to |
- // the workarea's top and fits within the total drag area. |
- gfx::Rect drag_area = workspace_manager_->GetDragAreaBounds(); |
- adjusted_bounds.set_y(drag_area.y()); |
- adjusted_bounds = adjusted_bounds.AdjustToFit(drag_area); |
- } else { |
- Workspace* workspace = workspace_manager_->FindBy(child); |
- gfx::Rect work_area = workspace->GetWorkAreaBounds(); |
- adjusted_bounds.set_origin( |
- gfx::Point(child->GetTargetBounds().x(), work_area.y())); |
- adjusted_bounds = adjusted_bounds.AdjustToFit(work_area); |
- } |
- |
- ui::WindowShowState show_state = static_cast<ui::WindowShowState>( |
- child->GetIntProperty(aura::client::kShowStateKey)); |
- |
- // Second, check if the window is either maximized or in fullscreen mode. |
- if (show_state == ui::SHOW_STATE_MAXIMIZED || |
- show_state == ui::SHOW_STATE_FULLSCREEN) { |
- // If the request is not from workspace manager, |
- // remember the requested bounds. |
- if (!workspace_manager_->layout_in_progress()) |
- SetRestoreBounds(child, adjusted_bounds); |
- |
- Workspace* workspace = workspace_manager_->FindBy(child); |
- if (show_state == ui::SHOW_STATE_MAXIMIZED) |
- adjusted_bounds = workspace->GetWorkAreaBounds(); |
- else |
- adjusted_bounds = workspace->bounds(); |
- // Don't |
- if (child->GetTargetBounds() == adjusted_bounds) |
- return; |
- } |
- SetChildBoundsDirect(child, adjusted_bounds); |
-} |
- |
-} // namespace internal |
-} // namespace aura_shell |