Home | History | Annotate | Download | only in views
      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 {
     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:
     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 
     28   virtual ~NativeConstrainedWindowWin() {
     29   }
     30 
     31  private:
     32   // Overridden from NativeConstrainedWindow:
     33   virtual void InitNativeConstrainedWindow(gfx::NativeView parent) OVERRIDE {
     34     WindowWin::Init(parent, gfx::Rect());
     35   }
     36   virtual views::NativeWindow* AsNativeWindow() OVERRIDE {
     37     return this;
     38   }
     39 
     40   // Overridden from views::WindowWin:
     41   virtual void OnFinalMessage(HWND window) OVERRIDE {
     42     delegate_->OnNativeConstrainedWindowDestroyed();
     43     WindowWin::OnFinalMessage(window);
     44   }
     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:
     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
     67 NativeConstrainedWindow* NativeConstrainedWindow::CreateNativeConstrainedWindow(
     68     NativeConstrainedWindowDelegate* delegate,
     69     views::WindowDelegate* window_delegate) {
     70   return new NativeConstrainedWindowWin(delegate, window_delegate);
     71 }
     72