chrome_native_app_window_views.h revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
1// Copyright 2014 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_APPS_CHROME_NATIVE_APP_WINDOW_VIEWS_H_
6#define CHROME_BROWSER_UI_VIEWS_APPS_CHROME_NATIVE_APP_WINDOW_VIEWS_H_
7
8#include "apps/ui/views/native_app_window_views.h"
9#include "base/memory/scoped_ptr.h"
10#include "ui/views/context_menu_controller.h"
11
12#if defined(USE_ASH)
13namespace ash {
14class ImmersiveFullscreenController;
15}
16#endif
17
18class ExtensionKeybindingRegistryViews;
19
20namespace views {
21class MenuRunner;
22}
23
24class ChromeNativeAppWindowViews : public apps::NativeAppWindowViews,
25                                   public views::ContextMenuController {
26 public:
27  ChromeNativeAppWindowViews();
28  virtual ~ChromeNativeAppWindowViews();
29
30  SkRegion* shape() { return shape_.get(); }
31
32 protected:
33  // Called before views::Widget::Init() to allow subclasses to customize
34  // the InitParams that would be passed.
35  virtual void OnBeforeWidgetInit(views::Widget::InitParams* init_params,
36                                  views::Widget* widget);
37
38  virtual void InitializeDefaultWindow(
39      const apps::AppWindow::CreateParams& create_params);
40  virtual void InitializePanelWindow(
41      const apps::AppWindow::CreateParams& create_params);
42  virtual views::NonClientFrameView* CreateStandardDesktopAppFrame();
43
44 private:
45  FRIEND_TEST_ALL_PREFIXES(ShapedAppWindowTargeterTest,
46                           ResizeInsetsWithinBounds);
47
48  apps::AppWindowFrameView* CreateNonStandardAppFrame();
49
50  // ui::BaseWindow implementation.
51  virtual gfx::Rect GetRestoredBounds() const OVERRIDE;
52  virtual ui::WindowShowState GetRestoredState() const OVERRIDE;
53  virtual bool IsAlwaysOnTop() const OVERRIDE;
54
55  // Overridden from views::ContextMenuController:
56  virtual void ShowContextMenuForView(views::View* source,
57                                      const gfx::Point& p,
58                                      ui::MenuSourceType source_type) OVERRIDE;
59
60  // WidgetDelegate implementation.
61  virtual gfx::ImageSkia GetWindowAppIcon() OVERRIDE;
62  virtual gfx::ImageSkia GetWindowIcon() OVERRIDE;
63  virtual views::NonClientFrameView* CreateNonClientFrameView(
64      views::Widget* widget) OVERRIDE;
65  virtual bool WidgetHasHitTestMask() const OVERRIDE;
66  virtual void GetWidgetHitTestMask(gfx::Path* mask) const OVERRIDE;
67
68  // views::View implementation.
69  virtual gfx::Size GetPreferredSize() const OVERRIDE;
70  virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE;
71
72  // NativeAppWindow implementation.
73  virtual void SetFullscreen(int fullscreen_types) OVERRIDE;
74  virtual bool IsFullscreenOrPending() const OVERRIDE;
75  virtual void UpdateBadgeIcon() OVERRIDE;
76  virtual void UpdateShape(scoped_ptr<SkRegion> region) OVERRIDE;
77  virtual bool HasFrameColor() const OVERRIDE;
78  virtual SkColor ActiveFrameColor() const OVERRIDE;
79  virtual SkColor InactiveFrameColor() const OVERRIDE;
80
81  // NativeAppWindowViews implementation.
82  virtual void InitializeWindow(
83      apps::AppWindow* app_window,
84      const apps::AppWindow::CreateParams& create_params) OVERRIDE;
85
86  // True if the window is fullscreen or fullscreen is pending.
87  bool is_fullscreen_;
88
89  // Custom shape of the window. If this is not set then the window has a
90  // default shape, usually rectangular.
91  scoped_ptr<SkRegion> shape_;
92
93  bool has_frame_color_;
94  SkColor active_frame_color_;
95  SkColor inactive_frame_color_;
96  gfx::Size preferred_size_;
97
98  // The class that registers for keyboard shortcuts for extension commands.
99  scoped_ptr<ExtensionKeybindingRegistryViews> extension_keybinding_registry_;
100
101#if defined(USE_ASH)
102  // Used to put non-frameless windows into immersive fullscreen on ChromeOS. In
103  // immersive fullscreen, the window header (title bar and window controls)
104  // slides onscreen as an overlay when the mouse is hovered at the top of the
105  // screen.
106  scoped_ptr<ash::ImmersiveFullscreenController>
107      immersive_fullscreen_controller_;
108#endif  // defined(USE_ASH)
109
110  // Used to show the system menu.
111  scoped_ptr<views::MenuRunner> menu_runner_;
112
113  DISALLOW_COPY_AND_ASSIGN(ChromeNativeAppWindowViews);
114};
115
116#endif  // CHROME_BROWSER_UI_VIEWS_APPS_CHROME_NATIVE_APP_WINDOW_VIEWS_H_
117