#include <stdio.h>
#include <string>
+#include "base/macros.h"
#include "base/message_loop/message_loop.h"
#include "mojo/examples/compositor_app/compositor_host.h"
-#include "mojo/examples/compositor_app/gles2_client_impl.h"
-#include "mojo/public/bindings/lib/remote_ptr.h"
-#include "mojo/public/gles2/gles2_cpp.h"
-#include "mojo/public/system/core.h"
-#include "mojo/public/system/macros.h"
+#include "mojo/public/cpp/bindings/allocation_scope.h"
+#include "mojo/public/cpp/gles2/gles2.h"
+#include "mojo/public/cpp/shell/application.h"
+#include "mojo/public/cpp/system/core.h"
+#include "mojo/public/interfaces/shell/shell.mojom.h"
#include "mojo/services/native_viewport/geometry_conversions.h"
-#include "mojom/native_viewport.h"
-#include "mojom/shell.h"
+#include "mojo/services/native_viewport/native_viewport.mojom.h"
#include "ui/gfx/rect.h"
#if defined(WIN32)
namespace mojo {
namespace examples {
-class SampleApp : public ShellClient {
+class SampleApp : public Application, public NativeViewportClient {
public:
- explicit SampleApp(ScopedMessagePipeHandle shell_handle)
- : shell_(shell_handle.Pass(), this) {
- ScopedMessagePipeHandle client_handle, native_viewport_handle;
- CreateMessagePipe(&client_handle, &native_viewport_handle);
- native_viewport_client_.reset(
- new NativeViewportClientImpl(native_viewport_handle.Pass()));
+ explicit SampleApp(MojoHandle shell_handle) : Application(shell_handle) {
AllocationScope scope;
- shell_->Connect("mojo:mojo_native_viewport_service", client_handle.Pass());
+
+ ConnectTo("mojo:mojo_native_viewport_service", &viewport_);
+ viewport_->SetClient(this);
+
+ viewport_->Create(gfx::Rect(10, 10, 800, 600));
+ viewport_->Show();
+
+ MessagePipe gles2_pipe;
+ viewport_->CreateGLES2Context(gles2_pipe.handle0.Pass());
+ host_.reset(new CompositorHost(gles2_pipe.handle1.Pass()));
+ }
+
+ virtual void OnCreated() OVERRIDE {
}
- virtual void AcceptConnection(ScopedMessagePipeHandle handle) MOJO_OVERRIDE {
- NOTREACHED() << "SampleApp can't be connected to.";
+ virtual void OnDestroyed() OVERRIDE {
+ base::MessageLoop::current()->Quit();
+ }
+
+ virtual void OnBoundsChanged(const Rect& bounds) OVERRIDE {
+ host_->SetSize(bounds.size());
+ }
+
+ virtual void OnEvent(const Event& event,
+ const mojo::Callback<void()>& callback) OVERRIDE {
+ callback.Run();
}
private:
- class NativeViewportClientImpl : public NativeViewportClient {
- public:
- explicit NativeViewportClientImpl(ScopedMessagePipeHandle viewport_handle)
- : viewport_(viewport_handle.Pass(), this) {
- viewport_->Create(gfx::Rect(10, 10, 800, 600));
- viewport_->Show();
- ScopedMessagePipeHandle gles2_handle;
- ScopedMessagePipeHandle gles2_client_handle;
- CreateMessagePipe(&gles2_handle, &gles2_client_handle);
-
- gles2_client_.reset(new GLES2ClientImpl(
- gles2_handle.Pass(),
- base::Bind(&NativeViewportClientImpl::DidCreateContext,
- base::Unretained(this))));
- viewport_->CreateGLES2Context(gles2_client_handle.Pass());
- host_.reset(new CompositorHost(gles2_client_.get()));
- }
-
- void DidCreateContext(gfx::Size viewport_size) {
- host_->DidCreateContext(viewport_size);
- }
-
- virtual ~NativeViewportClientImpl() {}
-
- virtual void OnCreated() MOJO_OVERRIDE {
- }
-
- virtual void OnDestroyed() MOJO_OVERRIDE {
- base::MessageLoop::current()->Quit();
- }
-
- virtual void OnBoundsChanged(const Rect& bounds) MOJO_OVERRIDE {
- }
-
- virtual void OnEvent(const Event& event) MOJO_OVERRIDE {
- if (!event.location().is_null()) {
- viewport_->AckEvent(event);
- }
- }
-
- private:
- scoped_ptr<GLES2ClientImpl> gles2_client_;
- RemotePtr<NativeViewport> viewport_;
- scoped_ptr<CompositorHost> host_;
- };
- RemotePtr<Shell> shell_;
- scoped_ptr<NativeViewportClientImpl> native_viewport_client_;
+ NativeViewportPtr viewport_;
+ scoped_ptr<CompositorHost> host_;
};
} // namespace examples
base::MessageLoop loop;
mojo::GLES2Initializer gles2;
- mojo::examples::SampleApp app(
- mojo::MakeScopedHandle(mojo::MessagePipeHandle(shell_handle)).Pass());
+ mojo::examples::SampleApp app(shell_handle);
loop.Run();
-
return MOJO_RESULT_OK;
}