Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ui / gfx / win / singleton_hwnd.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_GFX_WIN_SINGLETON_HWND_H_
6 #define UI_GFX_WIN_SINGLETON_HWND_H_
7
8 #include <windows.h>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/callback_forward.h"
13 #include "base/observer_list.h"
14 #include "ui/gfx/win/window_impl.h"
15
16 template<typename T> struct DefaultSingletonTraits;
17
18 namespace gfx {
19
20 // Singleton message-only HWND that allows interested clients to receive WM_*
21 // notifications.
22 class GFX_EXPORT SingletonHwnd : public WindowImpl {
23  public:
24   static SingletonHwnd* GetInstance();
25
26   // Observer interface for receiving Windows WM_* notifications.
27   class Observer {
28    public:
29     virtual void OnWndProc(HWND hwnd,
30                            UINT message,
31                            WPARAM wparam,
32                            LPARAM lparam) = 0;
33   };
34
35   // Add/remove observer to receive WM_* notifications.
36   void AddObserver(Observer* observer);
37   void RemoveObserver(Observer* observer);
38
39   // Windows callback for WM_* notifications.
40   virtual BOOL ProcessWindowMessage(HWND window,
41                                     UINT message,
42                                     WPARAM wparam,
43                                     LPARAM lparam,
44                                     LRESULT& result,
45                                     DWORD msg_map_id) override;
46
47  private:
48   friend struct DefaultSingletonTraits<SingletonHwnd>;
49
50   SingletonHwnd();
51   ~SingletonHwnd();
52
53   // List of registered observers.
54   ObserverList<Observer> observer_list_;
55
56   DISALLOW_COPY_AND_ASSIGN(SingletonHwnd);
57 };
58
59 }  // namespace gfx
60
61 #endif  // UI_GFX_WIN_SINGLETON_HWND_H_