text: // Copyright (c) 2012 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.
  
  #ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_H_
  #define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_H_
  
  #include "base/memory/scoped_ptr.h"
  #include "ui/aura/root_window.h"
  #include "ui/base/ui_base_types.h"
  #include "ui/views/views_export.h"
  #include "ui/views/widget/widget.h"
  
  namespace aura {
  class WindowTreeHost;
  class Window;
  
  namespace client {
  class DragDropClient;
  }
  }
  
  namespace gfx {
  class ImageSkia;
  class Rect;
  }
  
  namespace ui {
  class NativeTheme;
  }
  
  namespace views {
  namespace corewm {
  
  class Tooltip;
  }
  
  namespace internal {
  class NativeWidgetDelegate;
  }
  
  class DesktopNativeCursorManager;
  class DesktopNativeWidgetAura;
  
  class VIEWS_EXPORT DesktopWindowTreeHost {
   public:
    virtual ~DesktopWindowTreeHost() {}
  
    static DesktopWindowTreeHost* Create(
        internal::NativeWidgetDelegate* native_widget_delegate,
        DesktopNativeWidgetAura* desktop_native_widget_aura);
  
    // Return the NativeTheme to use for |window|. WARNING: |window| may be NULL.
    static ui::NativeTheme* GetNativeTheme(aura::Window* window);
  
    // Sets up resources needed before the RootWindow has been created.
    virtual void Init(aura::Window* content_window,
                      const Widget::InitParams& params,
                      aura::RootWindow::CreateParams* rw_create_params) = 0;
  
    // Invoked once the RootWindow has been created. Caller owns the RootWindow.
    virtual void OnRootWindowCreated(aura::RootWindow* root,
                                     const Widget::InitParams& params) = 0;
  
    // Creates and returns the Tooltip implementation to use. Return value is
    // owned by DesktopNativeWidgetAura and lives as long as
    // DesktopWindowTreeHost.
    virtual scoped_ptr<corewm::Tooltip> CreateTooltip() = 0;
  
    // Creates and returns the DragDropClient implementation to use. Return value
    // is owned by DesktopNativeWidgetAura and lives as long as
    // DesktopWindowTreeHost.
    virtual scoped_ptr<aura::client::DragDropClient> CreateDragDropClient(
        DesktopNativeCursorManager* cursor_manager) = 0;
  
    virtual void Close() = 0;
    virtual void CloseNow() = 0;
  
    virtual aura::WindowTreeHost* AsWindowTreeHost() = 0;
  
    virtual void ShowWindowWithState(ui::WindowShowState show_state) = 0;
    virtual void ShowMaximizedWithBounds(const gfx::Rect& restored_bounds) = 0;
  
    virtual bool IsVisible() const = 0;
  
    virtual void SetSize(const gfx::Size& size) = 0;
    virtual void StackAtTop() = 0;
    virtual void CenterWindow(const gfx::Size& size) = 0;
    virtual void GetWindowPlacement(gfx::Rect* bounds,
                                    ui::WindowShowState* show_state) const = 0;
    virtual gfx::Rect GetWindowBoundsInScreen() const = 0;
    virtual gfx::Rect GetClientAreaBoundsInScreen() const = 0;
    virtual gfx::Rect GetRestoredBounds() const = 0;
  
    virtual gfx::Rect GetWorkAreaBoundsInScreen() const = 0;
  
    // Sets the shape of the root window. If |native_region| is NULL then the
    // window reverts to rectangular. Takes ownership of |native_region|.
    virtual void SetShape(gfx::NativeRegion native_region) = 0;
  
    virtual void Activate() = 0;
    virtual void Deactivate() = 0;
    virtual bool IsActive() const = 0;
    virtual void Maximize() = 0;
    virtual void Minimize() = 0;
    virtual void Restore() = 0;
    virtual bool IsMaximized() const = 0;
    virtual bool IsMinimized() const = 0;
  
    virtual bool HasCapture() const = 0;
  
    virtual void SetAlwaysOnTop(bool always_on_top) = 0;
    virtual bool IsAlwaysOnTop() const = 0;
  
    // Returns true if the title changed.
    virtual bool SetWindowTitle(const base::string16& title) = 0;
  
    virtual void ClearNativeFocus() = 0;
  
    virtual Widget::MoveLoopResult RunMoveLoop(
        const gfx::Vector2d& drag_offset,
        Widget::MoveLoopSource source,
        Widget::MoveLoopEscapeBehavior escape_behavior) = 0;
    virtual void EndMoveLoop() = 0;
  
    virtual void SetVisibilityChangedAnimationsEnabled(bool value) = 0;
  
    // Determines whether the window should use native title bar and borders.
    virtual bool ShouldUseNativeFrame() const = 0;
    // Determines whether the window contents should be rendered transparently
    // (for example, so that they can overhang onto the window title bar).
    virtual bool ShouldWindowContentsBeTransparent() const = 0;
    virtual void FrameTypeChanged() = 0;
    virtual NonClientFrameView* CreateNonClientFrameView() = 0;
  
    virtual void SetFullscreen(bool fullscreen) = 0;
    virtual bool IsFullscreen() const = 0;
  
    virtual void SetOpacity(unsigned char opacity) = 0;
  
    virtual void SetWindowIcons(const gfx::ImageSkia& window_icon,
                                const gfx::ImageSkia& app_icon) = 0;
  
    virtual void InitModalType(ui::ModalType modal_type) = 0;
  
    virtual void FlashFrame(bool flash_frame) = 0;
  
    virtual void OnRootViewLayout() const = 0;
  
    // Called when the DesktopNativeWidgetAura's aura::Window is focused and
    // blurred.
    virtual void OnNativeWidgetFocus() = 0;
    virtual void OnNativeWidgetBlur() = 0;
  
    // Returns true if the Widget was closed but is still showing because of
    // animations.
    virtual bool IsAnimatingClosed() const = 0;
  };
  
  }  // namespace views
  
  #endif  // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_H_
  