1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/views/constrained_window_views.h"
6
7 #include "views/window/window_win.h"
8
9 namespace {
IsNonClientHitTestCode(UINT hittest)10 bool IsNonClientHitTestCode(UINT hittest) {
11 return hittest != HTCLIENT && hittest != HTNOWHERE && hittest != HTCLOSE;
12 }
13 }
14
15 class NativeConstrainedWindowWin : public NativeConstrainedWindow,
16 public views::WindowWin {
17 public:
NativeConstrainedWindowWin(NativeConstrainedWindowDelegate * delegate,views::WindowDelegate * window_delegate)18 NativeConstrainedWindowWin(NativeConstrainedWindowDelegate* delegate,
19 views::WindowDelegate* window_delegate)
20 : WindowWin(window_delegate),
21 delegate_(delegate) {
22 views::Widget::CreateParams params(
23 views::Widget::CreateParams::TYPE_WINDOW);
24 params.child = true;
25 SetCreateParams(params);
26 }
27
~NativeConstrainedWindowWin()28 virtual ~NativeConstrainedWindowWin() {
29 }
30
31 private:
32 // Overridden from NativeConstrainedWindow:
InitNativeConstrainedWindow(gfx::NativeView parent)33 virtual void InitNativeConstrainedWindow(gfx::NativeView parent) OVERRIDE {
34 WindowWin::Init(parent, gfx::Rect());
35 }
AsNativeWindow()36 virtual views::NativeWindow* AsNativeWindow() OVERRIDE {
37 return this;
38 }
39
40 // Overridden from views::WindowWin:
OnFinalMessage(HWND window)41 virtual void OnFinalMessage(HWND window) OVERRIDE {
42 delegate_->OnNativeConstrainedWindowDestroyed();
43 WindowWin::OnFinalMessage(window);
44 }
OnMouseActivate(UINT message,WPARAM w_param,LPARAM l_param)45 virtual LRESULT OnMouseActivate(UINT message,
46 WPARAM w_param,
47 LPARAM l_param) OVERRIDE {
48 if (IsNonClientHitTestCode(static_cast<UINT>(LOWORD(l_param))))
49 delegate_->OnNativeConstrainedWindowMouseActivate();
50 return WindowWin::OnMouseActivate(message, w_param, l_param);
51 }
52
53 // Overridden from views::Window:
CreateFrameViewForWindow()54 virtual views::NonClientFrameView* CreateFrameViewForWindow() OVERRIDE {
55 return delegate_->CreateFrameViewForWindow();
56 }
57
58 NativeConstrainedWindowDelegate* delegate_;
59
60 DISALLOW_COPY_AND_ASSIGN(NativeConstrainedWindowWin);
61 };
62
63 ////////////////////////////////////////////////////////////////////////////////
64 // NativeConstrainedWindow, public:
65
66 // static
CreateNativeConstrainedWindow(NativeConstrainedWindowDelegate * delegate,views::WindowDelegate * window_delegate)67 NativeConstrainedWindow* NativeConstrainedWindow::CreateNativeConstrainedWindow(
68 NativeConstrainedWindowDelegate* delegate,
69 views::WindowDelegate* window_delegate) {
70 return new NativeConstrainedWindowWin(delegate, window_delegate);
71 }
72