diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-07 08:17:42 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-07 08:17:42 +0000 |
commit | 6929154213ec00236e4e123d63ff1f88f458391e (patch) | |
tree | 3e6354f008c0eaed7cb06faf61a0fbefa57b0fc6 /mojo/examples | |
parent | be32d87d0e255ed03bae17ddefa0a6559765975c (diff) | |
download | chromium_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')
-rw-r--r-- | mojo/examples/aura_demo/aura_demo.cc | 85 | ||||
-rw-r--r-- | mojo/examples/aura_demo/context_factory_view_manager.cc | 194 | ||||
-rw-r--r-- | mojo/examples/aura_demo/context_factory_view_manager.h | 48 | ||||
-rw-r--r-- | mojo/examples/aura_demo/window_tree_host_view_manager.cc | 96 | ||||
-rw-r--r-- | mojo/examples/aura_demo/window_tree_host_view_manager.h | 51 |
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_ |