summaryrefslogtreecommitdiffstats
path: root/mojo/examples/aura_demo
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-07 08:17:42 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-07 08:17:42 +0000
commit6929154213ec00236e4e123d63ff1f88f458391e (patch)
tree3e6354f008c0eaed7cb06faf61a0fbefa57b0fc6 /mojo/examples/aura_demo
parentbe32d87d0e255ed03bae17ddefa0a6559765975c (diff)
downloadchromium_src-6929154213ec00236e4e123d63ff1f88f458391e.zip
chromium_src-6929154213ec00236e4e123d63ff1f88f458391e.tar.gz
chromium_src-6929154213ec00236e4e123d63ff1f88f458391e.tar.bz2
Moves common view_manager related aura files to mojo/aura
I'm going to use these files in other examples. I refactored the code slightly to update compositor via a delegate. This way the code can easily (hopefully) be used by view_manager_lib related code. I'm also making aura::Env extend base::SupportsUserData so that consumers can add arbitrary key/value pairs to Env. BUG=365012 TEST=none R=ben@chromium.org Review URL: https://codereview.chromium.org/314113011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@275638 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo/examples/aura_demo')
-rw-r--r--mojo/examples/aura_demo/aura_demo.cc85
-rw-r--r--mojo/examples/aura_demo/context_factory_view_manager.cc194
-rw-r--r--mojo/examples/aura_demo/context_factory_view_manager.h48
-rw-r--r--mojo/examples/aura_demo/window_tree_host_view_manager.cc96
-rw-r--r--mojo/examples/aura_demo/window_tree_host_view_manager.h51
5 files changed, 74 insertions, 400 deletions
diff --git a/mojo/examples/aura_demo/aura_demo.cc b/mojo/examples/aura_demo/aura_demo.cc
index 675704f..d40a1ce 100644
--- a/mojo/examples/aura_demo/aura_demo.cc
+++ b/mojo/examples/aura_demo/aura_demo.cc
@@ -6,9 +6,10 @@
#include <string>
#include "base/bind.h"
+#include "mojo/aura/context_factory_mojo.h"
#include "mojo/aura/screen_mojo.h"
-#include "mojo/examples/aura_demo/context_factory_view_manager.h"
-#include "mojo/examples/aura_demo/window_tree_host_view_manager.h"
+#include "mojo/aura/window_tree_host_mojo.h"
+#include "mojo/aura/window_tree_host_mojo_delegate.h"
#include "mojo/public/cpp/application/application.h"
#include "mojo/public/cpp/system/core.h"
#include "mojo/public/interfaces/service_provider/service_provider.mojom.h"
@@ -21,10 +22,39 @@
#include "ui/aura/window_delegate.h"
#include "ui/base/hit_test.h"
#include "ui/gfx/canvas.h"
+#include "ui/gfx/codec/png_codec.h"
namespace mojo {
namespace examples {
+void OnSetViewContentsDone(bool value) {
+ VLOG(1) << "OnSetViewContentsDone " << value;
+ DCHECK(value);
+}
+
+bool CreateMapAndDupSharedBuffer(size_t size,
+ void** memory,
+ ScopedSharedBufferHandle* handle,
+ ScopedSharedBufferHandle* duped) {
+ MojoResult result = CreateSharedBuffer(NULL, size, handle);
+ if (result != MOJO_RESULT_OK)
+ return false;
+ DCHECK(handle->is_valid());
+
+ result = DuplicateBuffer(handle->get(), NULL, duped);
+ if (result != MOJO_RESULT_OK)
+ return false;
+ DCHECK(duped->is_valid());
+
+ result = MapBuffer(
+ handle->get(), 0, size, memory, MOJO_MAP_BUFFER_FLAG_NONE);
+ if (result != MOJO_RESULT_OK)
+ return false;
+ DCHECK(*memory);
+
+ return true;
+}
+
// Trivial WindowDelegate implementation that draws a colored background.
class DemoWindowDelegate : public aura::WindowDelegate {
public:
@@ -156,22 +186,28 @@ class IViewManagerClientImpl
DISALLOW_COPY_AND_ASSIGN(IViewManagerClientImpl);
};
-class AuraDemo : public Application {
+class AuraDemo : public Application, public WindowTreeHostMojoDelegate {
public:
- AuraDemo() {
+ AuraDemo()
+ : view_manager_(NULL),
+ window1_(NULL),
+ window2_(NULL),
+ window21_(NULL),
+ view_id_(0) {
AddService<IViewManagerClientImpl>(this);
}
virtual ~AuraDemo() {}
- void SetRoot(view_manager::IViewManager* view_manager, uint32_t node_id) {
- context_factory_.reset(
- new ContextFactoryViewManager(view_manager, node_id));
+ void SetRoot(view_manager::IViewManager* view_manager, uint32_t view_id) {
aura::Env::CreateInstance(true);
+ view_manager_ = view_manager;
+ view_id_ = view_id;
+ context_factory_.reset(new ContextFactoryMojo);
aura::Env::GetInstance()->set_context_factory(context_factory_.get());
screen_.reset(ScreenMojo::Create());
gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, screen_.get());
- window_tree_host_.reset(new WindowTreeHostViewManager(gfx::Rect(800, 600)));
+ window_tree_host_.reset(new WindowTreeHostMojo(gfx::Rect(800, 600), this));
window_tree_host_->InitHost();
window_tree_client_.reset(
@@ -201,25 +237,52 @@ class AuraDemo : public Application {
window_tree_host_->Show();
}
+ // WindowTreeHostMojoDelegate:
+ virtual void CompositorContentsChanged(const SkBitmap& bitmap) OVERRIDE {
+ std::vector<unsigned char> data;
+ gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &data);
+
+ void* memory = NULL;
+ ScopedSharedBufferHandle duped;
+ bool result = CreateMapAndDupSharedBuffer(data.size(),
+ &memory,
+ &shared_state_handle_,
+ &duped);
+ if (!result)
+ return;
+
+ memcpy(memory, &data[0], data.size());
+
+ view_manager_->SetViewContents(
+ view_id_, duped.Pass(), static_cast<uint32_t>(data.size()),
+ base::Bind(&OnSetViewContentsDone));
+ }
+
virtual void Initialize() OVERRIDE {
}
- scoped_ptr<ContextFactoryViewManager> context_factory_;
+ scoped_ptr<DemoWindowTreeClient> window_tree_client_;
- scoped_ptr<ScreenMojo> screen_;
+ scoped_ptr<ui::ContextFactory> context_factory_;
- scoped_ptr<DemoWindowTreeClient> window_tree_client_;
+ scoped_ptr<ScreenMojo> screen_;
scoped_ptr<DemoWindowDelegate> delegate1_;
scoped_ptr<DemoWindowDelegate> delegate2_;
scoped_ptr<DemoWindowDelegate> delegate21_;
+ view_manager::IViewManager* view_manager_;
+
aura::Window* window1_;
aura::Window* window2_;
aura::Window* window21_;
+ uint32_t view_id_;
+
scoped_ptr<aura::WindowTreeHost> window_tree_host_;
+ ScopedSharedBufferHandle shared_state_handle_;
+
DISALLOW_COPY_AND_ASSIGN(AuraDemo);
};
diff --git a/mojo/examples/aura_demo/context_factory_view_manager.cc b/mojo/examples/aura_demo/context_factory_view_manager.cc
deleted file mode 100644
index 46596c3..0000000
--- a/mojo/examples/aura_demo/context_factory_view_manager.cc
+++ /dev/null
@@ -1,194 +0,0 @@
-// 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/examples/aura_demo/context_factory_view_manager.h"
-
-#include "base/bind.h"
-#include "cc/output/output_surface.h"
-#include "cc/output/software_output_device.h"
-#include "cc/resources/shared_bitmap_manager.h"
-#include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h"
-#include "skia/ext/platform_canvas.h"
-#include "ui/compositor/reflector.h"
-#include "ui/gfx/codec/png_codec.h"
-
-namespace mojo {
-namespace examples {
-namespace {
-
-void FreeSharedBitmap(cc::SharedBitmap* shared_bitmap) {
- delete shared_bitmap->memory();
-}
-
-void IgnoreSharedBitmap(cc::SharedBitmap* shared_bitmap) {}
-
-bool CreateMapAndDupSharedBuffer(size_t size,
- void** memory,
- ScopedSharedBufferHandle* handle,
- ScopedSharedBufferHandle* duped) {
- MojoResult result = CreateSharedBuffer(NULL, size, handle);
- if (result != MOJO_RESULT_OK)
- return false;
- DCHECK(handle->is_valid());
-
- result = DuplicateBuffer(handle->get(), NULL, duped);
- if (result != MOJO_RESULT_OK)
- return false;
- DCHECK(duped->is_valid());
-
- result = MapBuffer(
- handle->get(), 0, size, memory, MOJO_MAP_BUFFER_FLAG_NONE);
- if (result != MOJO_RESULT_OK)
- return false;
- DCHECK(*memory);
-
- return true;
-}
-
-class SoftwareOutputDeviceViewManager : public cc::SoftwareOutputDevice {
- public:
- explicit SoftwareOutputDeviceViewManager(
- view_manager::IViewManager* view_manager,
- uint32_t view_id)
- : view_manager_(view_manager),
- view_id_(view_id) {
- }
- virtual ~SoftwareOutputDeviceViewManager() {}
-
- // cc::SoftwareOutputDevice:
- virtual void EndPaint(cc::SoftwareFrameData* frame_data) OVERRIDE {
- SetViewContents();
-
- SoftwareOutputDevice::EndPaint(frame_data);
- }
-
- private:
- void OnSetViewContentsDone(bool value) {
- VLOG(1) << "SoftwareOutputDeviceManager::OnSetViewContentsDone " << value;
- DCHECK(value);
- }
-
- void SetViewContents() {
- std::vector<unsigned char> data;
- gfx::PNGCodec::EncodeBGRASkBitmap(
- skia::GetTopDevice(*canvas_)->accessBitmap(true), false, &data);
-
- void* memory = NULL;
- ScopedSharedBufferHandle duped;
- bool result = CreateMapAndDupSharedBuffer(data.size(),
- &memory,
- &shared_state_handle_,
- &duped);
- if (!result)
- return;
-
- memcpy(memory, &data[0], data.size());
-
- view_manager_->SetViewContents(
- view_id_, duped.Pass(), static_cast<uint32_t>(data.size()),
- base::Bind(&SoftwareOutputDeviceViewManager::OnSetViewContentsDone,
- base::Unretained(this)));
- }
-
- view_manager::IViewManager* view_manager_;
- const uint32_t view_id_;
- ScopedSharedBufferHandle shared_state_handle_;
-
- DISALLOW_COPY_AND_ASSIGN(SoftwareOutputDeviceViewManager);
-};
-
-// TODO(sky): this is a copy from cc/test. Copy to a common place.
-class TestSharedBitmapManager : public cc::SharedBitmapManager {
- public:
- TestSharedBitmapManager() {}
- virtual ~TestSharedBitmapManager() {}
-
- virtual scoped_ptr<cc::SharedBitmap> AllocateSharedBitmap(
- const gfx::Size& size) OVERRIDE {
- base::AutoLock lock(lock_);
- scoped_ptr<base::SharedMemory> memory(new base::SharedMemory);
- memory->CreateAndMapAnonymous(size.GetArea() * 4);
- cc::SharedBitmapId id = cc::SharedBitmap::GenerateId();
- bitmap_map_[id] = memory.get();
- return scoped_ptr<cc::SharedBitmap>(
- new cc::SharedBitmap(memory.release(), id,
- base::Bind(&FreeSharedBitmap)));
- }
-
- virtual scoped_ptr<cc::SharedBitmap> GetSharedBitmapFromId(
- const gfx::Size&,
- const cc::SharedBitmapId& id) OVERRIDE {
- base::AutoLock lock(lock_);
- if (bitmap_map_.find(id) == bitmap_map_.end())
- return scoped_ptr<cc::SharedBitmap>();
- return scoped_ptr<cc::SharedBitmap>(
- new cc::SharedBitmap(bitmap_map_[id], id,
- base::Bind(&IgnoreSharedBitmap)));
- }
-
- virtual scoped_ptr<cc::SharedBitmap> GetBitmapForSharedMemory(
- base::SharedMemory* memory) OVERRIDE {
- base::AutoLock lock(lock_);
- cc::SharedBitmapId id = cc::SharedBitmap::GenerateId();
- bitmap_map_[id] = memory;
- return scoped_ptr<cc::SharedBitmap>(
- new cc::SharedBitmap(memory, id, base::Bind(&IgnoreSharedBitmap)));
- }
-
- private:
- base::Lock lock_;
- std::map<cc::SharedBitmapId, base::SharedMemory*> bitmap_map_;
-
- DISALLOW_COPY_AND_ASSIGN(TestSharedBitmapManager);
-};
-
-} // namespace
-
-ContextFactoryViewManager::ContextFactoryViewManager(
- view_manager::IViewManager* view_manager,
- uint32_t view_id)
- : view_manager_(view_manager),
- view_id_(view_id),
- shared_bitmap_manager_(new TestSharedBitmapManager()) {
-}
-
-ContextFactoryViewManager::~ContextFactoryViewManager() {}
-
-scoped_ptr<cc::OutputSurface> ContextFactoryViewManager::CreateOutputSurface(
- ui::Compositor* compositor,
- bool software_fallback) {
- scoped_ptr<cc::SoftwareOutputDevice> output_device(
- new SoftwareOutputDeviceViewManager(view_manager_, view_id_));
- return make_scoped_ptr(new cc::OutputSurface(output_device.Pass()));
-}
-
-scoped_refptr<ui::Reflector> ContextFactoryViewManager::CreateReflector(
- ui::Compositor* mirroed_compositor,
- ui::Layer* mirroring_layer) {
- return new ui::Reflector();
-}
-
-void ContextFactoryViewManager::RemoveReflector(
- scoped_refptr<ui::Reflector> reflector) {
-}
-
-scoped_refptr<cc::ContextProvider>
-ContextFactoryViewManager::SharedMainThreadContextProvider() {
- return scoped_refptr<cc::ContextProvider>(NULL);
-}
-
-void ContextFactoryViewManager::RemoveCompositor(ui::Compositor* compositor) {}
-
-bool ContextFactoryViewManager::DoesCreateTestContexts() { return false; }
-
-cc::SharedBitmapManager* ContextFactoryViewManager::GetSharedBitmapManager() {
- return shared_bitmap_manager_.get();
-}
-
-base::MessageLoopProxy* ContextFactoryViewManager::GetCompositorMessageLoop() {
- return NULL;
-}
-
-} // namespace examples
-} // namespace mojo
diff --git a/mojo/examples/aura_demo/context_factory_view_manager.h b/mojo/examples/aura_demo/context_factory_view_manager.h
deleted file mode 100644
index c74da16..0000000
--- a/mojo/examples/aura_demo/context_factory_view_manager.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// 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.
-
-#ifndef MOJO_EXAMPLES_AURA_DEMO_CONTEXT_FACTORY_VIEW_MANAGER_H_
-#define MOJO_EXAMPLES_AURA_DEMO_CONTEXT_FACTORY_VIEW_MANAGER_H_
-
-#include "ui/compositor/compositor.h"
-
-namespace mojo {
-namespace view_manager {
-class IViewManager;
-}
-namespace examples {
-
-class ContextFactoryViewManager : public ui::ContextFactory {
- public:
- ContextFactoryViewManager(view_manager::IViewManager* view_manager,
- uint32_t view_id);
- virtual ~ContextFactoryViewManager();
-
- private:
- // ContextFactory:
- virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface(
- ui::Compositor* compositor,
- bool software_fallback) OVERRIDE;
- virtual scoped_refptr<ui::Reflector> CreateReflector(
- ui::Compositor* mirrored_compositor,
- ui::Layer* mirroring_layer) OVERRIDE;
- virtual void RemoveReflector(scoped_refptr<ui::Reflector> reflector) OVERRIDE;
- virtual scoped_refptr<cc::ContextProvider> SharedMainThreadContextProvider()
- OVERRIDE;
- virtual void RemoveCompositor(ui::Compositor* compositor) OVERRIDE;
- virtual bool DoesCreateTestContexts() OVERRIDE;
- virtual cc::SharedBitmapManager* GetSharedBitmapManager() OVERRIDE;
- virtual base::MessageLoopProxy* GetCompositorMessageLoop() OVERRIDE;
-
- view_manager::IViewManager* view_manager_;
- const uint32_t view_id_;
- scoped_ptr<cc::SharedBitmapManager> shared_bitmap_manager_;
-
- DISALLOW_COPY_AND_ASSIGN(ContextFactoryViewManager);
-};
-
-} // namespace examples
-} // namespace mojo
-
-#endif // MOJO_EXAMPLES_AURA_DEMO_CONTEXT_FACTORY_VIEW_MANAGER_H_
diff --git a/mojo/examples/aura_demo/window_tree_host_view_manager.cc b/mojo/examples/aura_demo/window_tree_host_view_manager.cc
deleted file mode 100644
index 030e51a..0000000
--- a/mojo/examples/aura_demo/window_tree_host_view_manager.cc
+++ /dev/null
@@ -1,96 +0,0 @@
-// 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/examples/aura_demo/window_tree_host_view_manager.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 examples {
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowTreeHostViewManager, public:
-
-WindowTreeHostViewManager::WindowTreeHostViewManager(const gfx::Rect& bounds)
- : bounds_(bounds) {
- CreateCompositor(GetAcceleratedWidget());
-}
-
-WindowTreeHostViewManager::~WindowTreeHostViewManager() {
- DestroyCompositor();
- DestroyDispatcher();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowTreeHostViewManager, aura::WindowTreeHost implementation:
-
-ui::EventSource* WindowTreeHostViewManager::GetEventSource() {
- return this;
-}
-
-gfx::AcceleratedWidget WindowTreeHostViewManager::GetAcceleratedWidget() {
- NOTIMPLEMENTED() << "GetAcceleratedWidget";
- return gfx::kNullAcceleratedWidget;
-}
-
-void WindowTreeHostViewManager::Show() {
- window()->Show();
-}
-
-void WindowTreeHostViewManager::Hide() {
-}
-
-gfx::Rect WindowTreeHostViewManager::GetBounds() const {
- return bounds_;
-}
-
-void WindowTreeHostViewManager::SetBounds(const gfx::Rect& bounds) {
-}
-
-gfx::Point WindowTreeHostViewManager::GetLocationOnNativeScreen() const {
- return gfx::Point(0, 0);
-}
-
-void WindowTreeHostViewManager::SetCapture() {
- NOTIMPLEMENTED();
-}
-
-void WindowTreeHostViewManager::ReleaseCapture() {
- NOTIMPLEMENTED();
-}
-
-void WindowTreeHostViewManager::PostNativeEvent(
- const base::NativeEvent& native_event) {
- NOTIMPLEMENTED();
-}
-
-void WindowTreeHostViewManager::OnDeviceScaleFactorChanged(
- float device_scale_factor) {
- NOTIMPLEMENTED();
-}
-
-void WindowTreeHostViewManager::SetCursorNative(gfx::NativeCursor cursor) {
- NOTIMPLEMENTED();
-}
-
-void WindowTreeHostViewManager::MoveCursorToNative(const gfx::Point& location) {
- NOTIMPLEMENTED();
-}
-
-void WindowTreeHostViewManager::OnCursorVisibilityChangedNative(bool show) {
- NOTIMPLEMENTED();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowTreeHostViewManager, ui::EventSource implementation:
-
-ui::EventProcessor* WindowTreeHostViewManager::GetEventProcessor() {
- return dispatcher();
-}
-
-} // namespace examples
-} // namespace mojo
diff --git a/mojo/examples/aura_demo/window_tree_host_view_manager.h b/mojo/examples/aura_demo/window_tree_host_view_manager.h
deleted file mode 100644
index f22cdb6..0000000
--- a/mojo/examples/aura_demo/window_tree_host_view_manager.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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.
-
-#ifndef MOJO_EXAMPLES_AURA_DEMO_WINDOW_TREE_HOST_VIEW_MANAGER_H_
-#define MOJO_EXAMPLES_AURA_DEMO_WINDOW_TREE_HOST_VIEW_MANAGER_H_
-
-#include "ui/aura/window_tree_host.h"
-#include "ui/events/event_source.h"
-#include "ui/gfx/geometry/rect.h"
-
-namespace mojo {
-namespace examples {
-
-class WindowTreeHostViewManager : public aura::WindowTreeHost,
- public ui::EventSource {
- public:
- explicit WindowTreeHostViewManager(const gfx::Rect& bounds);
- virtual ~WindowTreeHostViewManager();
-
- const gfx::Rect& bounds() const { return bounds_; }
-
- private:
- // WindowTreeHost:
- virtual ui::EventSource* GetEventSource() OVERRIDE;
- virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
- virtual void Show() OVERRIDE;
- virtual void Hide() OVERRIDE;
- virtual gfx::Rect GetBounds() const OVERRIDE;
- virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE;
- virtual gfx::Point GetLocationOnNativeScreen() const OVERRIDE;
- virtual void SetCapture() OVERRIDE;
- virtual void ReleaseCapture() OVERRIDE;
- virtual void PostNativeEvent(const base::NativeEvent& native_event) OVERRIDE;
- virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE;
- virtual void SetCursorNative(gfx::NativeCursor cursor) OVERRIDE;
- virtual void MoveCursorToNative(const gfx::Point& location) OVERRIDE;
- virtual void OnCursorVisibilityChangedNative(bool show) OVERRIDE;
-
- // ui::EventSource:
- virtual ui::EventProcessor* GetEventProcessor() OVERRIDE;
-
- gfx::Rect bounds_;
-
- DISALLOW_COPY_AND_ASSIGN(WindowTreeHostViewManager);
-};
-
-} // namespace examples
-} // namespace mojo
-
-#endif // MOJO_EXAMPLES_AURA_DEMO_WINDOW_TREE_HOST_VIEW_MANAGER_H_