15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_AURA_LAYOUT_MANAGER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_AURA_LAYOUT_MANAGER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/aura_export.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An interface implemented by an object that places child windows.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AURA_EXPORT LayoutManager {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LayoutManager();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~LayoutManager();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the window is resized.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnWindowResized() = 0;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the window |child| has been added.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnWindowAddedToLayout(Window* child) = 0;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked prior to removing |window|.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnWillRemoveWindowFromLayout(Window* child) = 0;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked after removing |window|.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnWindowRemovedFromLayout(Window* child) = 0;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the |SetVisible()| is invoked on the window |child|.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |visible| is the value supplied to |SetVisible()|. If |visible| is true,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window->IsVisible() may still return false. See description in
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Window::IsVisible() for details.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnChildWindowVisibilityChanged(Window* child, bool visible) = 0;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when |Window::SetBounds| is called on |child|.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Implementation must call |SetChildBoundsDirect| to change the
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |child|'s bounds. LayoutManager may modify |requested_bounds|
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // before applying, or ignore the request.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetChildBounds(Window* child,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const gfx::Rect& requested_bounds) = 0;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the child's bounds forcibly. LayoutManager is responsible
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for checking the state and make sure the bounds are correctly
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // adjusted.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetChildBoundsDirect(aura::Window* child, const gfx::Rect& bounds);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace aura
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_AURA_LAYOUT_MANAGER_H_
59