OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "mojo/examples/window_manager/window_manager.mojom.h" | 7 #include "mojo/examples/window_manager/window_manager.mojom.h" |
8 #include "mojo/public/cpp/application/application.h" | 8 #include "mojo/public/cpp/application/application.h" |
9 #include "mojo/services/public/cpp/view_manager/view.h" | 9 #include "mojo/services/public/cpp/view_manager/view.h" |
10 #include "mojo/services/public/cpp/view_manager/view_manager.h" | 10 #include "mojo/services/public/cpp/view_manager/view_manager.h" |
| 11 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" |
11 #include "mojo/services/public/cpp/view_manager/view_observer.h" | 12 #include "mojo/services/public/cpp/view_manager/view_observer.h" |
12 #include "mojo/services/public/cpp/view_manager/view_tree_node.h" | 13 #include "mojo/services/public/cpp/view_manager/view_tree_node.h" |
13 #include "ui/events/event_constants.h" | 14 #include "ui/events/event_constants.h" |
14 | 15 |
15 #if defined CreateWindow | 16 #if defined CreateWindow |
16 #undef CreateWindow | 17 #undef CreateWindow |
17 #endif | 18 #endif |
18 | 19 |
| 20 using mojo::view_manager::TransportNodeId; |
| 21 using mojo::view_manager::View; |
| 22 using mojo::view_manager::ViewManager; |
| 23 using mojo::view_manager::ViewManagerDelegate; |
| 24 using mojo::view_manager::ViewObserver; |
| 25 using mojo::view_manager::ViewTreeNode; |
| 26 using mojo::view_manager::ViewTreeNodeObserver; |
| 27 |
19 namespace mojo { | 28 namespace mojo { |
20 namespace examples { | 29 namespace examples { |
21 | 30 |
22 class WindowManager; | 31 class WindowManager; |
23 | 32 |
24 class WindowManagerConnection : public InterfaceImpl<IWindowManager> { | 33 class WindowManagerConnection : public InterfaceImpl<IWindowManager> { |
25 public: | 34 public: |
26 explicit WindowManagerConnection(WindowManager* window_manager) | 35 explicit WindowManagerConnection(WindowManager* window_manager) |
27 : window_manager_(window_manager) {} | 36 : window_manager_(window_manager) {} |
28 virtual ~WindowManagerConnection() {} | 37 virtual ~WindowManagerConnection() {} |
29 | 38 |
30 private: | 39 private: |
31 // Overridden from IWindowManager: | 40 // Overridden from IWindowManager: |
32 virtual void CloseWindow(view_manager::TransportNodeId node_id) OVERRIDE; | 41 virtual void CloseWindow(TransportNodeId node_id) OVERRIDE; |
33 | 42 |
34 WindowManager* window_manager_; | 43 WindowManager* window_manager_; |
35 | 44 |
36 DISALLOW_COPY_AND_ASSIGN(WindowManagerConnection); | 45 DISALLOW_COPY_AND_ASSIGN(WindowManagerConnection); |
37 }; | 46 }; |
38 | 47 |
39 class WindowManager : public Application, | 48 class WindowManager : public Application, |
40 public view_manager::ViewObserver { | 49 public ViewObserver, |
| 50 public ViewManagerDelegate { |
41 public: | 51 public: |
42 WindowManager() {} | 52 WindowManager() : view_manager_(NULL) {} |
43 virtual ~WindowManager() {} | 53 virtual ~WindowManager() {} |
44 | 54 |
45 void CloseWindow(view_manager::TransportNodeId node_id) { | 55 void CloseWindow(TransportNodeId node_id) { |
46 DCHECK(view_manager_); | 56 ViewTreeNode* node = view_manager_->GetNodeById(node_id); |
47 view_manager::ViewTreeNode* node = view_manager_->GetNodeById(node_id); | |
48 DCHECK(node); | 57 DCHECK(node); |
49 node->Destroy(); | 58 node->Destroy(); |
50 } | 59 } |
51 | 60 |
52 private: | 61 private: |
53 // Overridden from Application: | 62 // Overridden from Application: |
54 virtual void Initialize() MOJO_OVERRIDE { | 63 virtual void Initialize() MOJO_OVERRIDE { |
55 AddService<WindowManagerConnection>(this); | 64 AddService<WindowManagerConnection>(this); |
| 65 ViewManager::Create(this, this); |
| 66 } |
56 | 67 |
57 view_manager_ = view_manager::ViewManager::CreateBlocking(this); | 68 // Overridden from ViewObserver: |
58 view_manager::ViewTreeNode* node = | 69 virtual void OnViewInputEvent(View* view, EventPtr event) OVERRIDE { |
59 view_manager::ViewTreeNode::Create(view_manager_); | 70 if (event->action == ui::ET_MOUSE_RELEASED) { |
60 view_manager_->roots().front()->AddChild(node); | 71 if (event->flags & ui::EF_LEFT_MOUSE_BUTTON) |
| 72 CreateWindow("mojo:mojo_embedded_app"); |
| 73 else if (event->flags & ui::EF_RIGHT_MOUSE_BUTTON) |
| 74 CreateWindow("mojo:mojo_nesting_app"); |
| 75 } |
| 76 } |
| 77 |
| 78 // Overridden from ViewManagerDelegate: |
| 79 virtual void OnRootAdded(ViewManager* view_manager, |
| 80 ViewTreeNode* root) OVERRIDE { |
| 81 DCHECK(!view_manager_); |
| 82 view_manager_ = view_manager; |
| 83 |
| 84 ViewTreeNode* node = ViewTreeNode::Create(view_manager); |
| 85 view_manager->roots().front()->AddChild(node); |
61 node->SetBounds(gfx::Rect(800, 600)); | 86 node->SetBounds(gfx::Rect(800, 600)); |
62 parent_node_id_ = node->id(); | 87 parent_node_id_ = node->id(); |
63 | 88 |
64 view_manager::View* view = view_manager::View::Create(view_manager_); | 89 View* view = View::Create(view_manager); |
65 node->SetActiveView(view); | 90 node->SetActiveView(view); |
66 view->SetColor(SK_ColorBLUE); | 91 view->SetColor(SK_ColorBLUE); |
67 view->AddObserver(this); | 92 view->AddObserver(this); |
68 } | 93 } |
69 | 94 |
70 // Overridden from ViewObserver: | 95 void CreateWindow(const String& url) { |
71 virtual void OnViewInputEvent(view_manager::View* view, | 96 ViewTreeNode* node = view_manager_->GetNodeById(parent_node_id_); |
72 EventPtr event) OVERRIDE { | |
73 if (event->action == ui::ET_MOUSE_RELEASED) | |
74 CreateWindow(); | |
75 } | |
76 | |
77 void CreateWindow() { | |
78 view_manager::ViewTreeNode* node = | |
79 view_manager_->GetNodeById(parent_node_id_); | |
80 | 97 |
81 gfx::Rect bounds(50, 50, 200, 200); | 98 gfx::Rect bounds(50, 50, 200, 200); |
82 if (!node->children().empty()) { | 99 if (!node->children().empty()) { |
83 gfx::Point position = node->children().back()->bounds().origin(); | 100 gfx::Point position = node->children().back()->bounds().origin(); |
84 position.Offset(50, 50); | 101 position.Offset(50, 50); |
85 bounds.set_origin(position); | 102 bounds.set_origin(position); |
86 } | 103 } |
87 | 104 |
88 view_manager::ViewTreeNode* embedded = | 105 ViewTreeNode* embedded = ViewTreeNode::Create(view_manager_); |
89 view_manager::ViewTreeNode::Create(view_manager_); | |
90 node->AddChild(embedded); | 106 node->AddChild(embedded); |
91 embedded->SetBounds(bounds); | 107 embedded->SetBounds(bounds); |
92 embedded->Embed("mojo:mojo_embedded_app"); | 108 embedded->Embed(url); |
93 } | 109 } |
94 | 110 |
95 view_manager::ViewManager* view_manager_; | 111 ViewManager* view_manager_; |
96 view_manager::TransportNodeId parent_node_id_; | 112 TransportNodeId parent_node_id_; |
97 | 113 |
98 DISALLOW_COPY_AND_ASSIGN(WindowManager); | 114 DISALLOW_COPY_AND_ASSIGN(WindowManager); |
99 }; | 115 }; |
100 | 116 |
101 void WindowManagerConnection::CloseWindow( | 117 void WindowManagerConnection::CloseWindow(TransportNodeId node_id) { |
102 view_manager::TransportNodeId node_id) { | |
103 window_manager_->CloseWindow(node_id); | 118 window_manager_->CloseWindow(node_id); |
104 } | 119 } |
105 | 120 |
106 } // namespace examples | 121 } // namespace examples |
107 | 122 |
108 // static | 123 // static |
109 Application* Application::Create() { | 124 Application* Application::Create() { |
110 return new examples::WindowManager; | 125 return new examples::WindowManager; |
111 } | 126 } |
112 | 127 |
113 } // namespace mojo | 128 } // namespace mojo |
OLD | NEW |