| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/aura/window_tree_host.h" | 5 #include "ui/aura/window_tree_host.h" |
| 6 | 6 |
| 7 #include "base/thread_task_runner_handle.h" | 7 #include "base/thread_task_runner_handle.h" |
| 8 #include "base/trace_event/trace_event.h" | 8 #include "base/trace_event/trace_event.h" |
| 9 #include "ui/aura/client/capture_client.h" | 9 #include "ui/aura/client/capture_client.h" |
| 10 #include "ui/aura/client/cursor_client.h" | 10 #include "ui/aura/client/cursor_client.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 // WindowTreeHost, public: | 42 // WindowTreeHost, public: |
| 43 | 43 |
| 44 WindowTreeHost::~WindowTreeHost() { | 44 WindowTreeHost::~WindowTreeHost() { |
| 45 DCHECK(!compositor_) << "compositor must be destroyed before root window"; | 45 DCHECK(!compositor_) << "compositor must be destroyed before root window"; |
| 46 if (owned_input_method_) { | 46 if (owned_input_method_) { |
| 47 delete input_method_; | 47 delete input_method_; |
| 48 input_method_ = nullptr; | 48 input_method_ = nullptr; |
| 49 } | 49 } |
| 50 } | 50 } |
| 51 | 51 |
| 52 #if defined(OS_ANDROID) | |
| 53 // static | |
| 54 WindowTreeHost* WindowTreeHost::Create(const gfx::Rect& bounds) { | |
| 55 // This is only hit for tests and ash, right now these aren't an issue so | |
| 56 // adding the CHECK. | |
| 57 // TODO(sky): decide if we want a factory. | |
| 58 CHECK(false); | |
| 59 return nullptr; | |
| 60 } | |
| 61 #endif | |
| 62 | |
| 63 // static | 52 // static |
| 64 WindowTreeHost* WindowTreeHost::GetForAcceleratedWidget( | 53 WindowTreeHost* WindowTreeHost::GetForAcceleratedWidget( |
| 65 gfx::AcceleratedWidget widget) { | 54 gfx::AcceleratedWidget widget) { |
| 66 return reinterpret_cast<WindowTreeHost*>( | 55 return reinterpret_cast<WindowTreeHost*>( |
| 67 ui::ViewProp::GetValue(widget, kWindowTreeHostForAcceleratedWidget)); | 56 ui::ViewProp::GetValue(widget, kWindowTreeHostForAcceleratedWidget)); |
| 68 } | 57 } |
| 69 | 58 |
| 70 void WindowTreeHost::InitHost() { | 59 void WindowTreeHost::InitHost() { |
| 71 InitCompositor(); | 60 InitCompositor(); |
| 72 UpdateRootWindowSize(GetBounds().size()); | 61 UpdateRootWindowSize(GetBounds().size()); |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 // TODO(beng): this comment is no longer quite valid since this function | 221 // TODO(beng): this comment is no longer quite valid since this function |
| 233 // isn't called from WED, and WED isn't a subclass of Window. So it seems | 222 // isn't called from WED, and WED isn't a subclass of Window. So it seems |
| 234 // like we could just rely on ~Window now. | 223 // like we could just rely on ~Window now. |
| 235 // Destroy child windows while we're still valid. This is also done by | 224 // Destroy child windows while we're still valid. This is also done by |
| 236 // ~Window, but by that time any calls to virtual methods overriden here (such | 225 // ~Window, but by that time any calls to virtual methods overriden here (such |
| 237 // as GetRootWindow()) result in Window's implementation. By destroying here | 226 // as GetRootWindow()) result in Window's implementation. By destroying here |
| 238 // we ensure GetRootWindow() still returns this. | 227 // we ensure GetRootWindow() still returns this. |
| 239 //window()->RemoveOrDestroyChildren(); | 228 //window()->RemoveOrDestroyChildren(); |
| 240 } | 229 } |
| 241 | 230 |
| 242 void WindowTreeHost::CreateCompositor( | 231 void WindowTreeHost::CreateCompositor() { |
| 243 gfx::AcceleratedWidget accelerated_widget) { | |
| 244 DCHECK(Env::GetInstance()); | 232 DCHECK(Env::GetInstance()); |
| 245 ui::ContextFactory* context_factory = Env::GetInstance()->context_factory(); | 233 ui::ContextFactory* context_factory = Env::GetInstance()->context_factory(); |
| 246 DCHECK(context_factory); | 234 DCHECK(context_factory); |
| 247 compositor_.reset( | 235 compositor_.reset( |
| 248 new ui::Compositor(GetAcceleratedWidget(), | 236 new ui::Compositor(context_factory, base::ThreadTaskRunnerHandle::Get())); |
| 249 context_factory, | |
| 250 base::ThreadTaskRunnerHandle::Get())); | |
| 251 // TODO(beng): I think this setup should probably all move to a "accelerated | |
| 252 // widget available" function. | |
| 253 if (!dispatcher()) { | 237 if (!dispatcher()) { |
| 254 window()->Init(ui::LAYER_NOT_DRAWN); | 238 window()->Init(ui::LAYER_NOT_DRAWN); |
| 255 window()->set_host(this); | 239 window()->set_host(this); |
| 256 window()->SetName("RootWindow"); | 240 window()->SetName("RootWindow"); |
| 257 window()->SetEventTargeter( | 241 window()->SetEventTargeter( |
| 258 scoped_ptr<ui::EventTargeter>(new WindowTargeter())); | 242 scoped_ptr<ui::EventTargeter>(new WindowTargeter())); |
| 259 prop_.reset(new ui::ViewProp(GetAcceleratedWidget(), | |
| 260 kWindowTreeHostForAcceleratedWidget, | |
| 261 this)); | |
| 262 dispatcher_.reset(new WindowEventDispatcher(this)); | 243 dispatcher_.reset(new WindowEventDispatcher(this)); |
| 263 } | 244 } |
| 264 } | 245 } |
| 265 | 246 |
| 247 void WindowTreeHost::OnAcceleratedWidgetAvailable() { |
| 248 compositor_->OnAcceleratedWidgetAvailable(GetAcceleratedWidget()); |
| 249 prop_.reset(new ui::ViewProp(GetAcceleratedWidget(), |
| 250 kWindowTreeHostForAcceleratedWidget, |
| 251 this)); |
| 252 } |
| 253 |
| 266 void WindowTreeHost::OnHostMoved(const gfx::Point& new_location) { | 254 void WindowTreeHost::OnHostMoved(const gfx::Point& new_location) { |
| 267 TRACE_EVENT1("ui", "WindowTreeHost::OnHostMoved", | 255 TRACE_EVENT1("ui", "WindowTreeHost::OnHostMoved", |
| 268 "origin", new_location.ToString()); | 256 "origin", new_location.ToString()); |
| 269 | 257 |
| 270 FOR_EACH_OBSERVER(WindowTreeHostObserver, observers_, | 258 FOR_EACH_OBSERVER(WindowTreeHostObserver, observers_, |
| 271 OnHostMoved(this, new_location)); | 259 OnHostMoved(this, new_location)); |
| 272 } | 260 } |
| 273 | 261 |
| 274 void WindowTreeHost::OnHostResized(const gfx::Size& new_size) { | 262 void WindowTreeHost::OnHostResized(const gfx::Size& new_size) { |
| 275 // The compositor should have the same size as the native root window host. | 263 // The compositor should have the same size as the native root window host. |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 client::CursorClient* cursor_client = client::GetCursorClient(window()); | 301 client::CursorClient* cursor_client = client::GetCursorClient(window()); |
| 314 if (cursor_client) { | 302 if (cursor_client) { |
| 315 const gfx::Display& display = | 303 const gfx::Display& display = |
| 316 gfx::Screen::GetScreenFor(window())->GetDisplayNearestWindow(window()); | 304 gfx::Screen::GetScreenFor(window())->GetDisplayNearestWindow(window()); |
| 317 cursor_client->SetDisplay(display); | 305 cursor_client->SetDisplay(display); |
| 318 } | 306 } |
| 319 dispatcher()->OnCursorMovedToRootLocation(root_location); | 307 dispatcher()->OnCursorMovedToRootLocation(root_location); |
| 320 } | 308 } |
| 321 | 309 |
| 322 } // namespace aura | 310 } // namespace aura |
| OLD | NEW |