146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef ASH_WM_LOCK_LAYOUT_MANAGER_H_
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define ASH_WM_LOCK_LAYOUT_MANAGER_H_
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ash/ash_export.h"
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ash/shell_delegate.h"
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ash/wm/wm_types.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/basictypes.h"
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/compiler_specific.h"
1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/aura/layout_manager.h"
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/aura/window_observer.h"
1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/gfx/rect.h"
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/keyboard/keyboard_controller.h"
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/keyboard/keyboard_controller_observer.h"
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace aura {
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class RootWindow;
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class Window;
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace ui {
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class Layer;
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace ash {
3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace wm {
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class WindowState;
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class WMEvent;
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// LockLayoutManager is used for the windows created in LockScreenContainer.
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// For Chrome OS this includes out-of-box/login/lock/multi-profile login use
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// cases. LockScreenContainer does not use default work area definition.
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// By default work area is defined as display area minus shelf, docked windows
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// and minus virtual keyboard bounds.
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// For windows in LockScreenContainer work area is display area minus virtual
4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// keyboard bounds (only if keyboard overscroll is disabled). If keyboard
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// overscroll is enabled then work area always equals to display area size since
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// virtual keyboard changes inner workspace of each WebContents.
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// For all windows in LockScreenContainer default wm::WindowState is replaced
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// with LockWindowState.
4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class ASH_EXPORT LockLayoutManager
4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    : public aura::LayoutManager,
4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      public aura::WindowObserver,
4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      public VirtualKeyboardStateObserver,
5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      public keyboard::KeyboardControllerObserver {
5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  explicit LockLayoutManager(aura::Window* window);
5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~LockLayoutManager();
5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Overridden from aura::LayoutManager:
5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnWindowResized() OVERRIDE;
5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE;
5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE;
6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnChildWindowVisibilityChanged(aura::Window* child,
6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                              bool visibile) OVERRIDE;
6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void SetChildBounds(aura::Window* child,
6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                              const gfx::Rect& requested_bounds) OVERRIDE;
6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Overriden from aura::WindowObserver:
6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnWindowHierarchyChanged(
6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      const WindowObserver::HierarchyChangeParams& params) OVERRIDE;
6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnWindowPropertyChanged(aura::Window* window,
6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                       const void* key,
7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                       intptr_t old) OVERRIDE;
7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnWindowStackingChanged(aura::Window* window) OVERRIDE;
7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnWindowBoundsChanged(aura::Window* window,
7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                     const gfx::Rect& old_bounds,
7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                     const gfx::Rect& new_bounds) OVERRIDE;
7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // VirtualKeyboardStateObserver overrides:
7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnVirtualKeyboardStateChanged(bool activated) OVERRIDE;
7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // keyboard::KeyboardControllerObserver overrides:
8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) OVERRIDE;
8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private:
8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Adjusts the bounds of all managed windows when the display area changes.
8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // This happens when the display size, work area insets has changed.
8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void AdjustWindowsForWorkAreaChange(const wm::WMEvent* event);
8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  aura::Window* window_;
8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  aura::Window* root_window_;
9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // True is subscribed as keyboard controller observer.
9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool is_observing_keyboard_;
9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // The bounds of the keyboard.
9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  gfx::Rect keyboard_bounds_;
9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(LockLayoutManager);
9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace ash
10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif  // ASH_WM_LOCK_LAYOUT_MANAGER_H_
103