1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_UI_VIEWS_CONSTRAINED_WINDOW_VIEWS_H_ 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_UI_VIEWS_CONSTRAINED_WINDOW_VIEWS_H_ 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#pragma once 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/compiler_specific.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/tab_contents/constrained_window.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/gfx/native_widget_types.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/gfx/rect.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ConstrainedTabContentsWindowDelegate; 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ConstrainedWindowAnimation; 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ConstrainedWindowFrameView; 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace views { 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NativeWindow; 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NonClientFrameView; 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass Window; 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass WindowDelegate; 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NativeConstrainedWindowDelegate { 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~NativeConstrainedWindowDelegate() {} 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Called after the NativeConstrainedWindow has been destroyed and is about to 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // be deleted. 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnNativeConstrainedWindowDestroyed() = 0; 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Called when the NativeConstrainedWindow is clicked on when inactive. 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnNativeConstrainedWindowMouseActivate() = 0; 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Creates the frame view for the constrained window. 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(beng): remove once ConstrainedWindowViews is-a views::Window. 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual views::NonClientFrameView* CreateFrameViewForWindow() = 0; 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NativeConstrainedWindow { 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~NativeConstrainedWindow() {} 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Creates a platform-specific implementation of NativeConstrainedWindow. 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(beng): Remove WindowDelegate param once ConstrainedWindowViews is-a 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // views::Window. 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static NativeConstrainedWindow* CreateNativeConstrainedWindow( 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NativeConstrainedWindowDelegate* delegate, 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::WindowDelegate* window_delegate); 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void InitNativeConstrainedWindow(gfx::NativeView parent) = 0; 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual views::NativeWindow* AsNativeWindow() = 0; 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen/////////////////////////////////////////////////////////////////////////////// 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// ConstrainedWindowViews 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// A ConstrainedWindow implementation that implements a Constrained Window as 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// a child HWND with a custom window frame. 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ConstrainedWindowViews : public ConstrainedWindow, 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public NativeConstrainedWindowDelegate { 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ConstrainedWindowViews(TabContents* owner, 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::WindowDelegate* window_delegate); 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~ConstrainedWindowViews(); 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the TabContents that constrains this Constrained Window. 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents* owner() const { return owner_; } 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::Window* GetWindow(); 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Overridden from ConstrainedWindow: 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ShowConstrainedWindow() OVERRIDE; 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CloseConstrainedWindow() OVERRIDE; 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void FocusConstrainedWindow() OVERRIDE; 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Overridden from NativeConstrainedWindowDelegate: 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnNativeConstrainedWindowDestroyed() OVERRIDE; 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnNativeConstrainedWindowMouseActivate() OVERRIDE; 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual views::NonClientFrameView* CreateFrameViewForWindow() OVERRIDE; 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The TabContents that owns and constrains this ConstrainedWindow. 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents* owner_; 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NativeConstrainedWindow* native_constrained_window_; 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ConstrainedWindowViews); 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // CHROME_BROWSER_UI_VIEWS_CONSTRAINED_WINDOW_VIEWS_H_ 94