Index: mojo/aura/window_tree_host_mojo.cc |
diff --git a/mojo/aura/window_tree_host_mojo.cc b/mojo/aura/window_tree_host_mojo.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9a51f2eb456233d5bcab6a991c78eadf2410a926 |
--- /dev/null |
+++ b/mojo/aura/window_tree_host_mojo.cc |
@@ -0,0 +1,161 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "mojo/aura/window_tree_host_mojo.h" |
+ |
+#include <vector> |
+ |
+#include "mojo/aura/window_tree_host_mojo_delegate.h" |
+#include "ui/aura/env.h" |
+#include "ui/aura/window.h" |
+#include "ui/aura/window_event_dispatcher.h" |
+#include "ui/events/event.h" |
+#include "ui/events/event_constants.h" |
+ |
+namespace mojo { |
+namespace { |
+ |
+const char kTreeHostsKey[] = "tree_hosts"; |
+ |
+typedef std::vector<WindowTreeHostMojo*> Managers; |
+ |
+class TreeHosts : public base::SupportsUserData::Data { |
+ public: |
+ TreeHosts() {} |
+ virtual ~TreeHosts() {} |
+ |
+ static TreeHosts* Get() { |
+ TreeHosts* hosts = static_cast<TreeHosts*>( |
+ aura::Env::GetInstance()->GetUserData(kTreeHostsKey)); |
+ if (!hosts) { |
+ hosts = new TreeHosts; |
+ aura::Env::GetInstance()->SetUserData(kTreeHostsKey, hosts); |
+ } |
+ return hosts; |
+ } |
+ |
+ void Add(WindowTreeHostMojo* manager) { |
+ managers_.push_back(manager); |
+ } |
+ |
+ void Remove(WindowTreeHostMojo* manager) { |
+ Managers::iterator i = std::find(managers_.begin(), managers_.end(), |
+ manager); |
+ DCHECK(i != managers_.end()); |
+ managers_.erase(i); |
+ } |
+ |
+ const std::vector<WindowTreeHostMojo*> managers() const { |
+ return managers_; |
+ } |
+ |
+ private: |
+ Managers managers_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TreeHosts); |
+}; |
+ |
+} // namespace |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// WindowTreeHostMojo, public: |
+ |
+WindowTreeHostMojo::WindowTreeHostMojo(const gfx::Rect& bounds, |
+ WindowTreeHostMojoDelegate* delegate) |
+ : bounds_(bounds), |
+ delegate_(delegate) { |
+ CreateCompositor(GetAcceleratedWidget()); |
+ |
+ TreeHosts::Get()->Add(this); |
+} |
+ |
+WindowTreeHostMojo::~WindowTreeHostMojo() { |
+ TreeHosts::Get()->Remove(this); |
+ DestroyCompositor(); |
+ DestroyDispatcher(); |
+} |
+ |
+// static |
+WindowTreeHostMojo* WindowTreeHostMojo::ForCompositor( |
+ ui::Compositor* compositor) { |
+ const Managers& managers = TreeHosts::Get()->managers(); |
+ for (size_t i = 0; i < managers.size(); ++i) { |
+ if (managers[i]->compositor() == compositor) |
+ return managers[i]; |
+ } |
+ return NULL; |
+} |
+ |
+void WindowTreeHostMojo::SetContents(const SkBitmap& contents) { |
+ delegate_->CompositorContentsChanged(contents); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// WindowTreeHostMojo, aura::WindowTreeHost implementation: |
+ |
+ui::EventSource* WindowTreeHostMojo::GetEventSource() { |
+ return this; |
+} |
+ |
+gfx::AcceleratedWidget WindowTreeHostMojo::GetAcceleratedWidget() { |
+ NOTIMPLEMENTED() << "GetAcceleratedWidget"; |
+ return gfx::kNullAcceleratedWidget; |
+} |
+ |
+void WindowTreeHostMojo::Show() { |
+ window()->Show(); |
+} |
+ |
+void WindowTreeHostMojo::Hide() { |
+} |
+ |
+gfx::Rect WindowTreeHostMojo::GetBounds() const { |
+ return bounds_; |
+} |
+ |
+void WindowTreeHostMojo::SetBounds(const gfx::Rect& bounds) { |
+} |
+ |
+gfx::Point WindowTreeHostMojo::GetLocationOnNativeScreen() const { |
+ return gfx::Point(0, 0); |
+} |
+ |
+void WindowTreeHostMojo::SetCapture() { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void WindowTreeHostMojo::ReleaseCapture() { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void WindowTreeHostMojo::PostNativeEvent( |
+ const base::NativeEvent& native_event) { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void WindowTreeHostMojo::OnDeviceScaleFactorChanged( |
+ float device_scale_factor) { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void WindowTreeHostMojo::SetCursorNative(gfx::NativeCursor cursor) { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void WindowTreeHostMojo::MoveCursorToNative(const gfx::Point& location) { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void WindowTreeHostMojo::OnCursorVisibilityChangedNative(bool show) { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// WindowTreeHostMojo, ui::EventSource implementation: |
+ |
+ui::EventProcessor* WindowTreeHostMojo::GetEventProcessor() { |
+ return dispatcher(); |
+} |
+ |
+} // namespace mojo |