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); |
}; |