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_WIN_HWND_MESSAGE_HANDLER_DELEGATE_H_
6#define UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_DELEGATE_H_
7
8#include "ui/views/views_export.h"
9
10namespace gfx {
11class Canvas;
12class Insets;
13class Path;
14class Point;
15class Size;
16}
17
18namespace ui {
19class Accelerator;
20class KeyEvent;
21class MouseEvent;
22class TouchEvent;
23}
24
25namespace views {
26
27class InputMethod;
28
29// Implemented by the object that uses the HWNDMessageHandler to handle
30// notifications from the underlying HWND and service requests for data.
31class VIEWS_EXPORT HWNDMessageHandlerDelegate {
32 public:
33  virtual bool IsWidgetWindow() const = 0;
34
35  // TODO(beng): resolve this more satisfactorily vis-a-vis ShouldUseNativeFrame
36  //             to avoid confusion.
37  virtual bool IsUsingCustomFrame() const = 0;
38
39  virtual void SchedulePaint() = 0;
40  virtual void EnableInactiveRendering() = 0;
41  virtual bool IsInactiveRenderingDisabled() = 0;
42
43  virtual bool CanResize() const = 0;
44  virtual bool CanMaximize() const = 0;
45  virtual bool CanMinimize() const = 0;
46  virtual bool CanActivate() const = 0;
47
48  virtual bool WidgetSizeIsClientSize() const = 0;
49
50  // Returns true if the delegate represents a modal window.
51  virtual bool IsModal() const = 0;
52
53  // Returns the show state that should be used for the application's first
54  // window.
55  virtual int GetInitialShowState() const = 0;
56
57  virtual bool WillProcessWorkAreaChange() const = 0;
58
59  virtual int GetNonClientComponent(const gfx::Point& point) const = 0;
60  virtual void GetWindowMask(const gfx::Size& size, gfx::Path* mask) = 0;
61
62  // Returns true if the delegate modifies |insets| to define a custom client
63  // area for the window, false if the default client area should be used. If
64  // false is returned, |insets| is not modified.
65  virtual bool GetClientAreaInsets(gfx::Insets* insets) const = 0;
66
67  // Returns the minimum and maximum size the window can be resized to by the
68  // user.
69  virtual void GetMinMaxSize(gfx::Size* min_size,
70                             gfx::Size* max_size) const = 0;
71
72  // Returns the current size of the RootView.
73  virtual gfx::Size GetRootViewSize() const = 0;
74
75  virtual void ResetWindowControls() = 0;
76
77  virtual void PaintLayeredWindow(gfx::Canvas* canvas) = 0;
78
79  virtual InputMethod* GetInputMethod() = 0;
80
81  virtual gfx::NativeViewAccessible GetNativeViewAccessible() = 0;
82
83  // Returns true if the window should handle standard system commands, such as
84  // close, minimize, maximize.
85  // TODO(benwells): Remove this once bubbles don't have two widgets
86  // implementing them on non-aura windows. http://crbug.com/189112.
87  virtual bool ShouldHandleSystemCommands() const = 0;
88
89  // TODO(beng): Investigate migrating these methods to On* prefixes once
90  // HWNDMessageHandler is the WindowImpl.
91
92  // Called when another app was activated.
93  virtual void HandleAppDeactivated() = 0;
94
95  // Called when the window was activated or deactivated. |active| reflects the
96  // new state.
97  virtual void HandleActivationChanged(bool active) = 0;
98
99  // Called when a well known "app command" from the system was performed.
100  // Returns true if the command was handled.
101  virtual bool HandleAppCommand(short command) = 0;
102
103  // Called from WM_CANCELMODE.
104  virtual void HandleCancelMode() = 0;
105
106  // Called when the window has lost mouse capture.
107  virtual void HandleCaptureLost() = 0;
108
109  // Called when the user tried to close the window.
110  virtual void HandleClose() = 0;
111
112  // Called when a command defined by the application was performed. Returns
113  // true if the command was handled.
114  virtual bool HandleCommand(int command) = 0;
115
116  // Called when an accelerator is invoked.
117  virtual void HandleAccelerator(const ui::Accelerator& accelerator) = 0;
118
119  // Called when the HWND is created.
120  virtual void HandleCreate() = 0;
121
122  // Called when the HWND is being destroyed, before any child HWNDs are
123  // destroyed.
124  virtual void HandleDestroying() = 0;
125
126  // Called after the HWND is destroyed, after all child HWNDs have been
127  // destroyed.
128  virtual void HandleDestroyed() = 0;
129
130  // Called when the HWND is to be focused for the first time. This is called
131  // when the window is shown for the first time. Returns true if the delegate
132  // set focus and no default processing should be done by the message handler.
133  virtual bool HandleInitialFocus(ui::WindowShowState show_state) = 0;
134
135  // Called when display settings are adjusted on the system.
136  virtual void HandleDisplayChange() = 0;
137
138  // Called when the user begins or ends a size/move operation using the window
139  // manager.
140  virtual void HandleBeginWMSizeMove() = 0;
141  virtual void HandleEndWMSizeMove() = 0;
142
143  // Called when the window's position changed.
144  virtual void HandleMove() = 0;
145
146  // Called when the system's work area has changed.
147  virtual void HandleWorkAreaChanged() = 0;
148
149  // Called when the window's visibility is changing. |visible| holds the new
150  // state.
151  virtual void HandleVisibilityChanging(bool visible) = 0;
152
153  // Called when the window's visibility changed. |visible| holds the new state.
154  virtual void HandleVisibilityChanged(bool visible) = 0;
155
156  // Called when the window's client size changed. |new_size| holds the new
157  // size.
158  virtual void HandleClientSizeChanged(const gfx::Size& new_size) = 0;
159
160  // Called when the window's frame has changed.
161  virtual void HandleFrameChanged() = 0;
162
163  // Called when focus shifted to this HWND from |last_focused_window|.
164  virtual void HandleNativeFocus(HWND last_focused_window) = 0;
165
166  // Called when focus shifted from the HWND to a different window.
167  virtual void HandleNativeBlur(HWND focused_window) = 0;
168
169  // Called when a mouse event is received. Returns true if the event was
170  // handled by the delegate.
171  virtual bool HandleMouseEvent(const ui::MouseEvent& event) = 0;
172
173  // Called when a translated key event is received (i.e. post IME translation.)
174  // Returns true if the event was handled by the delegate.
175  virtual bool HandleKeyEvent(const ui::KeyEvent& event) = 0;
176
177  // Called when an untranslated key event is received (i.e. pre-IME
178  // translation). Returns true if the event was sent to the input method.
179  virtual bool HandleUntranslatedKeyEvent(const ui::KeyEvent& event) = 0;
180
181  // Called when a touch event is received.
182  virtual void HandleTouchEvent(const ui::TouchEvent& event) = 0;
183
184  // Called when an IME message needs to be processed by the delegate. Returns
185  // true if the event was handled and no default processing should be
186  // performed.
187  virtual bool HandleIMEMessage(UINT message,
188                                WPARAM w_param,
189                                LPARAM l_param,
190                                LRESULT* result) = 0;
191
192  // Called when the system input language changes.
193  virtual void HandleInputLanguageChange(DWORD character_set,
194                                         HKL input_language_id) = 0;
195
196  // Called to compel the delegate to paint |invalid_rect| accelerated. Returns
197  // true if accelerated painting was performed.
198  virtual bool HandlePaintAccelerated(const gfx::Rect& invalid_rect) = 0;
199
200  // Called to compel the delegate to paint using the software path.
201  virtual void HandlePaint(gfx::Canvas* canvas) = 0;
202
203  // Called to forward a WM_NOTIFY message to the tooltip manager.
204  virtual bool HandleTooltipNotify(int w_param,
205                                   NMHDR* l_param,
206                                   LRESULT* l_result) = 0;
207
208  // Invoked on entering/exiting a menu loop.
209  virtual void HandleMenuLoop(bool in_menu_loop) = 0;
210
211  // Catch-all message handling and filtering. Called before
212  // HWNDMessageHandler's built-in handling, which may pre-empt some
213  // expectations in Views/Aura if messages are consumed. Returns true if the
214  // message was consumed by the delegate and should not be processed further
215  // by the HWNDMessageHandler. In this case, |result| is returned. |result| is
216  // not modified otherwise.
217  virtual bool PreHandleMSG(UINT message,
218                            WPARAM w_param,
219                            LPARAM l_param,
220                            LRESULT* result) = 0;
221
222  // Like PreHandleMSG, but called after HWNDMessageHandler's built-in handling
223  // has run and after DefWindowProc.
224  virtual void PostHandleMSG(UINT message,
225                             WPARAM w_param,
226                             LPARAM l_param) = 0;
227
228  // Called when a scroll event is received. Returns true if the event was
229  // handled by the delegate.
230  virtual bool HandleScrollEvent(const ui::ScrollEvent& event) = 0;
231
232  // Called when the window size is about to change.
233  virtual void HandleWindowSizeChanging() = 0;
234
235 protected:
236  virtual ~HWNDMessageHandlerDelegate() {}
237};
238
239}  // namespace views
240
241#endif  // UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_DELEGATE_H_
242