1// Copyright (c) 2012 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#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_ROOT_WINDOW_HOST_WIN_H_
6#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_ROOT_WINDOW_HOST_WIN_H_
7
8#include <windows.h>
9#include <uxtheme.h>
10
11#include "ui/views/widget/desktop_aura/desktop_root_window_host_win.h"
12#include "chrome/browser/ui/views/frame/browser_desktop_root_window_host.h"
13#include "chrome/browser/ui/views/frame/minimize_button_metrics_win.h"
14
15class BrowserFrame;
16class BrowserView;
17class BrowserWindowPropertyManager;
18
19namespace views {
20class DesktopNativeWidgetAura;
21class NativeMenuWin;
22}
23
24class BrowserDesktopRootWindowHostWin : public BrowserDesktopRootWindowHost,
25                                        public views::DesktopRootWindowHostWin {
26 public:
27  BrowserDesktopRootWindowHostWin(
28      views::internal::NativeWidgetDelegate* native_widget_delegate,
29      views::DesktopNativeWidgetAura* desktop_native_widget_aura,
30      BrowserView* browser_view,
31      BrowserFrame* browser_frame);
32  virtual ~BrowserDesktopRootWindowHostWin();
33
34 private:
35  views::NativeMenuWin* GetSystemMenu();
36
37  // Overridden from BrowserDesktopRootWindowHost:
38  virtual DesktopRootWindowHost* AsDesktopRootWindowHost() OVERRIDE;
39  virtual int GetMinimizeButtonOffset() const OVERRIDE;
40  virtual bool UsesNativeSystemMenu() const OVERRIDE;
41
42  // Overridden from DesktopRootWindowHostWin:
43  virtual int GetInitialShowState() const OVERRIDE;
44  virtual bool GetClientAreaInsets(gfx::Insets* insets) const OVERRIDE;
45  virtual void HandleCreate() OVERRIDE;
46  virtual void HandleFrameChanged() OVERRIDE;
47  virtual bool PreHandleMSG(UINT message,
48                            WPARAM w_param,
49                            LPARAM l_param,
50                            LRESULT* result) OVERRIDE;
51  virtual void PostHandleMSG(UINT message,
52                             WPARAM w_param,
53                             LPARAM l_param) OVERRIDE;
54  virtual bool IsUsingCustomFrame() const OVERRIDE;
55  virtual bool ShouldUseNativeFrame() OVERRIDE;
56  virtual void FrameTypeChanged() OVERRIDE;
57
58  void UpdateDWMFrame();
59
60  MARGINS GetDWMFrameMargins() const;
61
62  BrowserView* browser_view_;
63  BrowserFrame* browser_frame_;
64
65  MinimizeButtonMetrics minimize_button_metrics_;
66
67  scoped_ptr<BrowserWindowPropertyManager> browser_window_property_manager_;
68
69  // The wrapped system menu itself.
70  scoped_ptr<views::NativeMenuWin> system_menu_;
71
72  // Necessary to avoid corruption on NC paint in Aero mode.
73  bool did_gdi_clear_;
74
75  DISALLOW_COPY_AND_ASSIGN(BrowserDesktopRootWindowHostWin);
76};
77
78
79#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_ROOT_WINDOW_HOST_WIN_H_
80