| Index: mojo/examples/aura_demo/aura_demo.cc
|
| diff --git a/mojo/examples/aura_demo/aura_demo.cc b/mojo/examples/aura_demo/aura_demo.cc
|
| index 675704fd04359041b09ea8f0c9a29450d7eeb67b..d40a1ce67f86c06bfca24925191696565affc1b5 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);
|
| };
|
|
|
|
|