- add sources.
[platform/framework/web/crosswalk.git] / src / ui / gfx / win / singleton_hwnd.cc
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 #include "ui/gfx/win/singleton_hwnd.h"
6
7 #include "base/memory/singleton.h"
8 #include "base/message_loop/message_loop.h"
9
10 namespace gfx {
11
12 // static
13 SingletonHwnd* SingletonHwnd::GetInstance() {
14   return Singleton<SingletonHwnd>::get();
15 }
16
17 void SingletonHwnd::AddObserver(Observer* observer) {
18   observer_list_.AddObserver(observer);
19 }
20
21 void SingletonHwnd::RemoveObserver(Observer* observer) {
22   if (!hwnd())
23     return;
24   observer_list_.RemoveObserver(observer);
25 }
26
27 BOOL SingletonHwnd::ProcessWindowMessage(HWND window,
28                                          UINT message,
29                                          WPARAM wparam,
30                                          LPARAM lparam,
31                                          LRESULT& result,
32                                          DWORD msg_map_id) {
33   FOR_EACH_OBSERVER(Observer,
34                     observer_list_,
35                     OnWndProc(window, message, wparam, lparam));
36   return false;
37 }
38
39 SingletonHwnd::SingletonHwnd() {
40   if (!base::MessageLoop::current() ||
41       base::MessageLoop::current()->type() != base::MessageLoop::TYPE_UI) {
42     // Creating this window in (e.g.) a renderer inhibits shutdown on
43     // Windows. See http://crbug.com/230122 and http://crbug.com/236039.
44     DLOG(ERROR) << "Cannot create windows on non-UI thread!";
45     return;
46   }
47   WindowImpl::Init(NULL, Rect());
48 }
49
50 SingletonHwnd::~SingletonHwnd() {
51 }
52
53 }  // namespace gfx