Upstream version 5.34.98.0
[platform/framework/web/crosswalk.git] / src / ui / views / widget / native_widget_win.h
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 UI_VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_
6 #define UI_VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_
7
8 #include <vector>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/scoped_vector.h"
12 #include "base/win/scoped_comptr.h"
13 #include "base/win/win_util.h"
14 #include "ui/gfx/win/window_impl.h"
15 #include "ui/views/widget/native_widget_private.h"
16 #include "ui/views/win/hwnd_message_handler_delegate.h"
17
18 namespace ui {
19 class Compositor;
20 class ViewProp;
21 }
22
23 namespace gfx {
24 class Canvas;
25 class FontList;
26 class Rect;
27 }
28
29 namespace views {
30
31 class DropTargetWin;
32 class HWNDMessageHandler;
33 class InputMethodDelegate;
34 class RootView;
35 class TooltipManagerWin;
36
37 ///////////////////////////////////////////////////////////////////////////////
38 //
39 // NativeWidgetWin
40 //  A Widget for a views hierarchy used to represent anything that can be
41 //  contained within an HWND, e.g. a control, a window, etc. Specializations
42 //  suitable for specific tasks, e.g. top level window, are derived from this.
43 //
44 //  This Widget contains a RootView which owns the hierarchy of views within it.
45 //  As long as views are part of this tree, they will be deleted automatically
46 //  when the RootView is destroyed. If you remove a view from the tree, you are
47 //  then responsible for cleaning up after it.
48 //
49 ///////////////////////////////////////////////////////////////////////////////
50 class VIEWS_EXPORT NativeWidgetWin : public internal::NativeWidgetPrivate,
51                                      public HWNDMessageHandlerDelegate {
52  public:
53   explicit NativeWidgetWin(internal::NativeWidgetDelegate* delegate);
54   virtual ~NativeWidgetWin();
55
56   // Returns the system set window title font list.
57   static gfx::FontList GetWindowTitleFontList();
58
59   // Show the window with the specified show command.
60   void Show(int show_state);
61
62   // Places the window in a pseudo-fullscreen mode where it looks and acts as
63   // like a fullscreen window except that it remains within the boundaries
64   // of the metro snap divider.
65   void SetMetroSnapFullscreen(bool metro_snap);
66   bool IsInMetroSnapMode() const;
67
68   void SetCanUpdateLayeredWindow(bool can_update);
69
70   // Overridden from internal::NativeWidgetPrivate:
71   virtual void InitNativeWidget(const Widget::InitParams& params) OVERRIDE;
72   virtual NonClientFrameView* CreateNonClientFrameView() OVERRIDE;
73   virtual bool ShouldUseNativeFrame() const OVERRIDE;
74   virtual void FrameTypeChanged() OVERRIDE;
75   virtual Widget* GetWidget() OVERRIDE;
76   virtual const Widget* GetWidget() const OVERRIDE;
77   virtual gfx::NativeView GetNativeView() const OVERRIDE;
78   virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE;
79   virtual Widget* GetTopLevelWidget() OVERRIDE;
80   virtual const ui::Compositor* GetCompositor() const OVERRIDE;
81   virtual ui::Compositor* GetCompositor() OVERRIDE;
82   virtual ui::Layer* GetLayer() OVERRIDE;
83   virtual void ReorderNativeViews() OVERRIDE;
84   virtual void ViewRemoved(View* view) OVERRIDE;
85   virtual void SetNativeWindowProperty(const char* name, void* value) OVERRIDE;
86   virtual void* GetNativeWindowProperty(const char* name) const OVERRIDE;
87   virtual TooltipManager* GetTooltipManager() const OVERRIDE;
88   virtual void SetCapture() OVERRIDE;
89   virtual void ReleaseCapture() OVERRIDE;
90   virtual bool HasCapture() const OVERRIDE;
91   virtual InputMethod* CreateInputMethod() OVERRIDE;
92   virtual internal::InputMethodDelegate* GetInputMethodDelegate() OVERRIDE;
93   virtual void CenterWindow(const gfx::Size& size) OVERRIDE;
94   virtual void GetWindowPlacement(
95      gfx::Rect* bounds,
96      ui::WindowShowState* show_state) const OVERRIDE;
97   virtual bool SetWindowTitle(const base::string16& title) OVERRIDE;
98   virtual void SetWindowIcons(const gfx::ImageSkia& window_icon,
99                               const gfx::ImageSkia& app_icon) OVERRIDE;
100   virtual void InitModalType(ui::ModalType modal_type) OVERRIDE;
101   virtual gfx::Rect GetWindowBoundsInScreen() const OVERRIDE;
102   virtual gfx::Rect GetClientAreaBoundsInScreen() const OVERRIDE;
103   virtual gfx::Rect GetRestoredBounds() const OVERRIDE;
104   virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE;
105   virtual void SetSize(const gfx::Size& size) OVERRIDE;
106   virtual void StackAbove(gfx::NativeView native_view) OVERRIDE;
107   virtual void StackAtTop() OVERRIDE;
108   virtual void StackBelow(gfx::NativeView native_view) OVERRIDE;
109   virtual void SetShape(gfx::NativeRegion shape) OVERRIDE;
110   virtual void Close() OVERRIDE;
111   virtual void CloseNow() OVERRIDE;
112   virtual void Show() OVERRIDE;
113   virtual void Hide() OVERRIDE;
114   virtual void ShowMaximizedWithBounds(
115       const gfx::Rect& restored_bounds) OVERRIDE;
116   virtual void ShowWithWindowState(ui::WindowShowState show_state) OVERRIDE;
117   virtual bool IsVisible() const OVERRIDE;
118   virtual void Activate() OVERRIDE;
119   virtual void Deactivate() OVERRIDE;
120   virtual bool IsActive() const OVERRIDE;
121   virtual void SetAlwaysOnTop(bool always_on_top) OVERRIDE;
122   virtual bool IsAlwaysOnTop() const OVERRIDE;
123   virtual void Maximize() OVERRIDE;
124   virtual void Minimize() OVERRIDE;
125   virtual bool IsMaximized() const OVERRIDE;
126   virtual bool IsMinimized() const OVERRIDE;
127   virtual void Restore() OVERRIDE;
128   virtual void SetFullscreen(bool fullscreen) OVERRIDE;
129   virtual bool IsFullscreen() const OVERRIDE;
130   virtual void SetOpacity(unsigned char opacity) OVERRIDE;
131   virtual void SetUseDragFrame(bool use_drag_frame) OVERRIDE;
132   virtual void FlashFrame(bool flash) OVERRIDE;
133   virtual void RunShellDrag(View* view,
134                             const ui::OSExchangeData& data,
135                             const gfx::Point& location,
136                             int operation,
137                             ui::DragDropTypes::DragEventSource source) OVERRIDE;
138   virtual void SchedulePaintInRect(const gfx::Rect& rect) OVERRIDE;
139   virtual void SetCursor(gfx::NativeCursor cursor) OVERRIDE;
140   virtual bool IsMouseEventsEnabled() const OVERRIDE;
141   virtual void ClearNativeFocus() OVERRIDE;
142   virtual gfx::Rect GetWorkAreaBoundsInScreen() const OVERRIDE;
143   virtual Widget::MoveLoopResult RunMoveLoop(
144       const gfx::Vector2d& drag_offset,
145       Widget::MoveLoopSource source,
146       Widget::MoveLoopEscapeBehavior escape_behavior) OVERRIDE;
147   virtual void EndMoveLoop() OVERRIDE;
148   virtual void SetVisibilityChangedAnimationsEnabled(bool value) OVERRIDE;
149   virtual ui::NativeTheme* GetNativeTheme() const OVERRIDE;
150   virtual void OnRootViewLayout() const OVERRIDE;
151
152   // Overridden from NativeWidget:
153   virtual ui::EventHandler* GetEventHandler() OVERRIDE;
154
155  protected:
156   // Deletes this window as it is destroyed, override to provide different
157   // behavior.
158   virtual void OnFinalMessage(HWND window);
159
160   HWNDMessageHandler* GetMessageHandler();
161
162   // Overridden from HWNDMessageHandlerDelegate:
163   virtual bool IsWidgetWindow() const OVERRIDE;
164   virtual bool IsUsingCustomFrame() const OVERRIDE;
165   virtual void SchedulePaint() OVERRIDE;
166   virtual void EnableInactiveRendering() OVERRIDE;
167   virtual bool IsInactiveRenderingDisabled() OVERRIDE;
168   virtual bool CanResize() const OVERRIDE;
169   virtual bool CanMaximize() const OVERRIDE;
170   virtual bool CanActivate() const OVERRIDE;
171   virtual bool WidgetSizeIsClientSize() const OVERRIDE;
172   virtual bool CanSaveFocus() const OVERRIDE;
173   virtual void SaveFocusOnDeactivate() OVERRIDE;
174   virtual void RestoreFocusOnActivate() OVERRIDE;
175   virtual void RestoreFocusOnEnable() OVERRIDE;
176   virtual bool IsModal() const OVERRIDE;
177   virtual int GetInitialShowState() const OVERRIDE;
178   virtual bool WillProcessWorkAreaChange() const OVERRIDE;
179   virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE;
180   virtual void GetWindowMask(const gfx::Size& size, gfx::Path* path) OVERRIDE;
181   virtual bool GetClientAreaInsets(gfx::Insets* insets) const OVERRIDE;
182   virtual void GetMinMaxSize(gfx::Size* min_size,
183                              gfx::Size* max_size) const OVERRIDE;
184   virtual gfx::Size GetRootViewSize() const OVERRIDE;
185   virtual void ResetWindowControls() OVERRIDE;
186   virtual void PaintLayeredWindow(gfx::Canvas* canvas) OVERRIDE;
187   virtual InputMethod* GetInputMethod() OVERRIDE;
188   virtual gfx::NativeViewAccessible GetNativeViewAccessible() OVERRIDE;
189   virtual bool ShouldHandleSystemCommands() const OVERRIDE;
190   virtual void HandleAppDeactivated() OVERRIDE;
191   virtual void HandleActivationChanged(bool active) OVERRIDE;
192   virtual bool HandleAppCommand(short command) OVERRIDE;
193   virtual void HandleCancelMode() OVERRIDE;
194   virtual void HandleCaptureLost() OVERRIDE;
195   virtual void HandleClose() OVERRIDE;
196   virtual bool HandleCommand(int command) OVERRIDE;
197   virtual void HandleAccelerator(const ui::Accelerator& accelerator) OVERRIDE;
198   virtual void HandleCreate() OVERRIDE;
199   virtual void HandleDestroying() OVERRIDE;
200   virtual void HandleDestroyed() OVERRIDE;
201   virtual bool HandleInitialFocus(ui::WindowShowState show_state) OVERRIDE;
202   virtual void HandleDisplayChange() OVERRIDE;
203   virtual void HandleBeginWMSizeMove() OVERRIDE;
204   virtual void HandleEndWMSizeMove() OVERRIDE;
205   virtual void HandleMove() OVERRIDE;
206   virtual void HandleWorkAreaChanged() OVERRIDE;
207   virtual void HandleVisibilityChanging(bool visible) OVERRIDE;
208   virtual void HandleVisibilityChanged(bool visible) OVERRIDE;
209   virtual void HandleClientSizeChanged(const gfx::Size& new_size) OVERRIDE;
210   virtual void HandleFrameChanged() OVERRIDE;
211   virtual void HandleNativeFocus(HWND last_focused_window) OVERRIDE;
212   virtual void HandleNativeBlur(HWND focused_window) OVERRIDE;
213   virtual bool HandleMouseEvent(const ui::MouseEvent& event) OVERRIDE;
214   virtual bool HandleKeyEvent(const ui::KeyEvent& event) OVERRIDE;
215   virtual bool HandleUntranslatedKeyEvent(const ui::KeyEvent& event) OVERRIDE;
216   virtual void HandleTouchEvent(const ui::TouchEvent& event) OVERRIDE;
217   virtual bool HandleIMEMessage(UINT message,
218                                 WPARAM w_param,
219                                 LPARAM l_param,
220                                 LRESULT* result) OVERRIDE;
221   virtual void HandleInputLanguageChange(DWORD character_set,
222                                          HKL input_language_id) OVERRIDE;
223   virtual bool HandlePaintAccelerated(const gfx::Rect& invalid_rect) OVERRIDE;
224   virtual void HandlePaint(gfx::Canvas* canvas) OVERRIDE;
225   virtual bool HandleTooltipNotify(int w_param,
226                                    NMHDR* l_param,
227                                    LRESULT* l_result) OVERRIDE;
228   virtual void HandleTooltipMouseMove(UINT message,
229                                       WPARAM w_param,
230                                       LPARAM l_param) OVERRIDE;
231   virtual void HandleMenuLoop(bool in_menu_loop) OVERRIDE;
232   virtual bool PreHandleMSG(UINT message,
233                             WPARAM w_param,
234                             LPARAM l_param,
235                             LRESULT* result) OVERRIDE;
236   virtual void PostHandleMSG(UINT message,
237                              WPARAM w_param,
238                              LPARAM l_param) OVERRIDE;
239   virtual bool HandleScrollEvent(const ui::ScrollEvent& event) OVERRIDE;
240
241   // The TooltipManager. This is NULL if there is a problem creating the
242   // underlying tooltip window.
243   // WARNING: RootView's destructor calls into the TooltipManager. As such, this
244   // must be destroyed AFTER root_view_.
245   scoped_ptr<TooltipManagerWin> tooltip_manager_;
246
247   scoped_refptr<DropTargetWin> drop_target_;
248
249  private:
250   typedef ScopedVector<ui::ViewProp> ViewProps;
251
252   void SetInitParams(const Widget::InitParams& params);
253
254   // A delegate implementation that handles events received here.
255   // See class documentation for Widget in widget.h for a note about ownership.
256   internal::NativeWidgetDelegate* delegate_;
257
258   // See class documentation for Widget in widget.h for a note about ownership.
259   Widget::InitParams::Ownership ownership_;
260
261   ViewProps props_;
262
263   // The window styles before we modified them for the drag frame appearance.
264   DWORD drag_frame_saved_window_style_;
265   DWORD drag_frame_saved_window_ex_style_;
266
267   // True if the widget is going to have a non_client_view. We cache this value
268   // rather than asking the Widget for the non_client_view so that we know at
269   // Init time, before the Widget has created the NonClientView.
270   bool has_non_client_view_;
271
272   scoped_ptr<HWNDMessageHandler> message_handler_;
273
274   DISALLOW_COPY_AND_ASSIGN(NativeWidgetWin);
275 };
276
277 }  // namespace views
278
279 #endif  // UI_VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_