wm.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/public/cpp/application/application_delegate.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/services/public/cpp/view_manager/view_manager.h"
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/services/public/cpp/view_manager/view_manager_delegate.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/services/public/cpp/view_manager/window_manager_delegate.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/services/window_manager/window_manager_app.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace examples {
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SimpleWM : public mojo::ApplicationDelegate,
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 public mojo::ViewManagerDelegate,
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 public mojo::WindowManagerDelegate {
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SimpleWM()
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      : window_manager_app_(new mojo::WindowManagerApp(this)),
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        view_manager_(NULL),
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        root_(NULL),
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        window_container_(NULL),
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        next_window_origin_(10, 10) {}
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~SimpleWM() {}
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private:
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Overridden from mojo::ApplicationDelegate:
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void Initialize(mojo::ApplicationImpl* impl) MOJO_OVERRIDE {
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    window_manager_app_->Initialize(impl);
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool ConfigureIncomingConnection(
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      mojo::ApplicationConnection* connection) MOJO_OVERRIDE {
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    window_manager_app_->ConfigureIncomingConnection(connection);
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return true;
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Overridden from mojo::ViewManagerDelegate:
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnEmbed(mojo::ViewManager* view_manager,
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       mojo::Node* root) MOJO_OVERRIDE {
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    view_manager_ = view_manager;
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    root_ = root;
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    view_manager_->SetWindowManagerDelegate(this);
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    window_container_ = mojo::Node::Create(view_manager_);
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    window_container_->SetBounds(root_->bounds());
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    root_->AddChild(window_container_);
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnViewManagerDisconnected(
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      mojo::ViewManager* view_manager) MOJO_OVERRIDE {
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    view_manager_ = NULL;
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    root_ = NULL;
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Overridden from mojo::WindowManagerDelegate:
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void Embed(const mojo::String& url) MOJO_OVERRIDE {
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    mojo::Node* embed_node =
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        mojo::Node::Create(view_manager_);
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    embed_node->SetBounds(gfx::Rect(next_window_origin_, gfx::Size(400, 400)));
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    window_container_->AddChild(embed_node);
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    embed_node->Embed(url);
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    next_window_origin_.Offset(50, 50);
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void DispatchEvent(mojo::View* target,
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                             mojo::EventPtr event) MOJO_OVERRIDE {
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    view_manager_->DispatchEvent(target, event.Pass());
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<mojo::WindowManagerApp> window_manager_app_;
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mojo::ViewManager* view_manager_;
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mojo::Node* root_;
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mojo::Node* window_container_;
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  gfx::Point next_window_origin_;
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SimpleWM);
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace examples
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace mojo {
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ApplicationDelegate* ApplicationDelegate::Create() {
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return new examples::SimpleWM;
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace
89