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