| 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" | |
| 6 #include "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/macros.h" |
| 7 #include "mojo/application/application_runner_chromium.h" | 7 #include "mojo/application/application_runner_chromium.h" |
| 8 #include "mojo/examples/keyboard/keyboard.mojom.h" | 8 #include "mojo/examples/keyboard/keyboard.mojom.h" |
| 9 #include "mojo/examples/window_manager/debug_panel.h" | 9 #include "mojo/examples/window_manager/debug_panel.h" |
| 10 #include "mojo/examples/window_manager/window_manager.mojom.h" | 10 #include "mojo/examples/window_manager/window_manager.mojom.h" |
| 11 #include "mojo/public/c/system/main.h" | 11 #include "mojo/public/c/system/main.h" |
| 12 #include "mojo/public/cpp/application/application_connection.h" | 12 #include "mojo/public/cpp/application/application_connection.h" |
| 13 #include "mojo/public/cpp/application/application_delegate.h" | 13 #include "mojo/public/cpp/application/application_delegate.h" |
| 14 #include "mojo/public/cpp/application/application_impl.h" | 14 #include "mojo/public/cpp/application/application_impl.h" |
| 15 #include "mojo/public/cpp/application/interface_factory_impl.h" | 15 #include "mojo/public/cpp/application/interface_factory_impl.h" |
| 16 #include "mojo/public/cpp/application/service_provider_impl.h" | 16 #include "mojo/public/cpp/application/service_provider_impl.h" |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 } // namespace | 107 } // namespace |
| 108 | 108 |
| 109 class WindowManagerConnection : public InterfaceImpl<IWindowManager> { | 109 class WindowManagerConnection : public InterfaceImpl<IWindowManager> { |
| 110 public: | 110 public: |
| 111 explicit WindowManagerConnection(WindowManager* window_manager) | 111 explicit WindowManagerConnection(WindowManager* window_manager) |
| 112 : window_manager_(window_manager) {} | 112 : window_manager_(window_manager) {} |
| 113 virtual ~WindowManagerConnection() {} | 113 virtual ~WindowManagerConnection() {} |
| 114 | 114 |
| 115 private: | 115 private: |
| 116 // Overridden from IWindowManager: | 116 // Overridden from IWindowManager: |
| 117 virtual void CloseWindow(Id view_id) OVERRIDE; | 117 virtual void CloseWindow(Id view_id) override; |
| 118 virtual void ShowKeyboard(Id view_id, RectPtr bounds) OVERRIDE; | 118 virtual void ShowKeyboard(Id view_id, RectPtr bounds) override; |
| 119 virtual void HideKeyboard(Id view_id) OVERRIDE; | 119 virtual void HideKeyboard(Id view_id) override; |
| 120 | 120 |
| 121 WindowManager* window_manager_; | 121 WindowManager* window_manager_; |
| 122 | 122 |
| 123 DISALLOW_COPY_AND_ASSIGN(WindowManagerConnection); | 123 DISALLOW_COPY_AND_ASSIGN(WindowManagerConnection); |
| 124 }; | 124 }; |
| 125 | 125 |
| 126 class NavigatorHostImpl : public InterfaceImpl<NavigatorHost> { | 126 class NavigatorHostImpl : public InterfaceImpl<NavigatorHost> { |
| 127 public: | 127 public: |
| 128 explicit NavigatorHostImpl(WindowManager* window_manager, Id view_id) | 128 explicit NavigatorHostImpl(WindowManager* window_manager, Id view_id) |
| 129 : window_manager_(window_manager), view_id_(view_id) {} | 129 : window_manager_(window_manager), view_id_(view_id) {} |
| 130 virtual ~NavigatorHostImpl() { | 130 virtual ~NavigatorHostImpl() { |
| 131 } | 131 } |
| 132 | 132 |
| 133 private: | 133 private: |
| 134 virtual void DidNavigateLocally(const mojo::String& url) OVERRIDE; | 134 virtual void DidNavigateLocally(const mojo::String& url) override; |
| 135 virtual void RequestNavigate(Target target, URLRequestPtr request) OVERRIDE; | 135 virtual void RequestNavigate(Target target, URLRequestPtr request) override; |
| 136 | 136 |
| 137 WindowManager* window_manager_; | 137 WindowManager* window_manager_; |
| 138 Id view_id_; | 138 Id view_id_; |
| 139 | 139 |
| 140 DISALLOW_COPY_AND_ASSIGN(NavigatorHostImpl); | 140 DISALLOW_COPY_AND_ASSIGN(NavigatorHostImpl); |
| 141 }; | 141 }; |
| 142 | 142 |
| 143 class KeyboardManager : public KeyboardClient, | 143 class KeyboardManager : public KeyboardClient, |
| 144 public ViewObserver { | 144 public ViewObserver { |
| 145 public: | 145 public: |
| (...skipping 27 matching lines...) Expand all Loading... |
| 173 | 173 |
| 174 void Hide(Id view_id) { | 174 void Hide(Id view_id) { |
| 175 keyboard_service_->SetTarget(0); | 175 keyboard_service_->SetTarget(0); |
| 176 view_->SetVisible(false); | 176 view_->SetVisible(false); |
| 177 } | 177 } |
| 178 | 178 |
| 179 private: | 179 private: |
| 180 // KeyboardClient: | 180 // KeyboardClient: |
| 181 virtual void OnKeyboardEvent(Id view_id, | 181 virtual void OnKeyboardEvent(Id view_id, |
| 182 int32_t code, | 182 int32_t code, |
| 183 int32_t flags) OVERRIDE { | 183 int32_t flags) override { |
| 184 View* view = view_manager_->GetViewById(view_id); | 184 View* view = view_manager_->GetViewById(view_id); |
| 185 if (!view) | 185 if (!view) |
| 186 return; | 186 return; |
| 187 #if defined(OS_WIN) | 187 #if defined(OS_WIN) |
| 188 const bool is_char = code != ui::VKEY_BACK && code != ui::VKEY_RETURN; | 188 const bool is_char = code != ui::VKEY_BACK && code != ui::VKEY_RETURN; |
| 189 #else | 189 #else |
| 190 const bool is_char = false; | 190 const bool is_char = false; |
| 191 #endif | 191 #endif |
| 192 if (is_char) { | 192 if (is_char) { |
| 193 view_manager_->DispatchEvent( | 193 view_manager_->DispatchEvent( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 205 view_manager_->DispatchEvent( | 205 view_manager_->DispatchEvent( |
| 206 view, | 206 view, |
| 207 Event::From(ui::KeyEvent(ui::ET_KEY_RELEASED, | 207 Event::From(ui::KeyEvent(ui::ET_KEY_RELEASED, |
| 208 static_cast<ui::KeyboardCode>(code), | 208 static_cast<ui::KeyboardCode>(code), |
| 209 flags))); | 209 flags))); |
| 210 } | 210 } |
| 211 | 211 |
| 212 // Overridden from ViewObserver: | 212 // Overridden from ViewObserver: |
| 213 virtual void OnViewBoundsChanged(View* parent, | 213 virtual void OnViewBoundsChanged(View* parent, |
| 214 const gfx::Rect& old_bounds, | 214 const gfx::Rect& old_bounds, |
| 215 const gfx::Rect& new_bounds) OVERRIDE { | 215 const gfx::Rect& new_bounds) override { |
| 216 gfx::Rect keyboard_bounds(view_->bounds()); | 216 gfx::Rect keyboard_bounds(view_->bounds()); |
| 217 keyboard_bounds.set_y(new_bounds.bottom() - keyboard_bounds.height()); | 217 keyboard_bounds.set_y(new_bounds.bottom() - keyboard_bounds.height()); |
| 218 keyboard_bounds.set_width(keyboard_bounds.width() + | 218 keyboard_bounds.set_width(keyboard_bounds.width() + |
| 219 new_bounds.width() - old_bounds.width()); | 219 new_bounds.width() - old_bounds.width()); |
| 220 view_->SetBounds(keyboard_bounds); | 220 view_->SetBounds(keyboard_bounds); |
| 221 } | 221 } |
| 222 virtual void OnViewDestroyed(View* parent) OVERRIDE { | 222 virtual void OnViewDestroyed(View* parent) override { |
| 223 DCHECK_EQ(parent, view_->parent()); | 223 DCHECK_EQ(parent, view_->parent()); |
| 224 parent->RemoveObserver(this); | 224 parent->RemoveObserver(this); |
| 225 view_ = NULL; | 225 view_ = NULL; |
| 226 } | 226 } |
| 227 | 227 |
| 228 KeyboardServicePtr keyboard_service_; | 228 KeyboardServicePtr keyboard_service_; |
| 229 ViewManager* view_manager_; | 229 ViewManager* view_manager_; |
| 230 | 230 |
| 231 // View the keyboard is attached to. | 231 // View the keyboard is attached to. |
| 232 View* view_; | 232 View* view_; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 248 control_panel_view_id_(control_panel_view_id) {} | 248 control_panel_view_id_(control_panel_view_id) {} |
| 249 virtual ~RootLayoutManager() { | 249 virtual ~RootLayoutManager() { |
| 250 if (root_) | 250 if (root_) |
| 251 root_->RemoveObserver(this); | 251 root_->RemoveObserver(this); |
| 252 } | 252 } |
| 253 | 253 |
| 254 private: | 254 private: |
| 255 // Overridden from ViewObserver: | 255 // Overridden from ViewObserver: |
| 256 virtual void OnViewBoundsChanged(View* view, | 256 virtual void OnViewBoundsChanged(View* view, |
| 257 const gfx::Rect& old_bounds, | 257 const gfx::Rect& old_bounds, |
| 258 const gfx::Rect& new_bounds) OVERRIDE { | 258 const gfx::Rect& new_bounds) override { |
| 259 DCHECK_EQ(view, root_); | 259 DCHECK_EQ(view, root_); |
| 260 | 260 |
| 261 View* content_view = view_manager_->GetViewById(content_view_id_); | 261 View* content_view = view_manager_->GetViewById(content_view_id_); |
| 262 content_view->SetBounds(new_bounds); | 262 content_view->SetBounds(new_bounds); |
| 263 | 263 |
| 264 int delta_width = new_bounds.width() - old_bounds.width(); | 264 int delta_width = new_bounds.width() - old_bounds.width(); |
| 265 int delta_height = new_bounds.height() - old_bounds.height(); | 265 int delta_height = new_bounds.height() - old_bounds.height(); |
| 266 | 266 |
| 267 View* launcher_ui_view = | 267 View* launcher_ui_view = |
| 268 view_manager_->GetViewById(launcher_ui_view_id_); | 268 view_manager_->GetViewById(launcher_ui_view_id_); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 282 View* view = *iter; | 282 View* view = *iter; |
| 283 if (view->id() == control_panel_view->id() || | 283 if (view->id() == control_panel_view->id() || |
| 284 view->id() == launcher_ui_view->id()) | 284 view->id() == launcher_ui_view->id()) |
| 285 continue; | 285 continue; |
| 286 gfx::Rect view_bounds(view->bounds()); | 286 gfx::Rect view_bounds(view->bounds()); |
| 287 view_bounds.set_width(view_bounds.width() + delta_width); | 287 view_bounds.set_width(view_bounds.width() + delta_width); |
| 288 view_bounds.set_height(view_bounds.height() + delta_height); | 288 view_bounds.set_height(view_bounds.height() + delta_height); |
| 289 view->SetBounds(view_bounds); | 289 view->SetBounds(view_bounds); |
| 290 } | 290 } |
| 291 } | 291 } |
| 292 virtual void OnViewDestroyed(View* view) OVERRIDE { | 292 virtual void OnViewDestroyed(View* view) override { |
| 293 DCHECK_EQ(view, root_); | 293 DCHECK_EQ(view, root_); |
| 294 root_->RemoveObserver(this); | 294 root_->RemoveObserver(this); |
| 295 root_ = NULL; | 295 root_ = NULL; |
| 296 } | 296 } |
| 297 | 297 |
| 298 View* root_; | 298 View* root_; |
| 299 ViewManager* view_manager_; | 299 ViewManager* view_manager_; |
| 300 const Id content_view_id_; | 300 const Id content_view_id_; |
| 301 const Id launcher_ui_view_id_; | 301 const Id launcher_ui_view_id_; |
| 302 const Id control_panel_view_id_; | 302 const Id control_panel_view_id_; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 316 void Embed(const std::string& url) { | 316 void Embed(const std::string& url) { |
| 317 scoped_ptr<ServiceProviderImpl> service_provider_impl( | 317 scoped_ptr<ServiceProviderImpl> service_provider_impl( |
| 318 new ServiceProviderImpl()); | 318 new ServiceProviderImpl()); |
| 319 service_provider_impl->AddService<NavigatorHost>(this); | 319 service_provider_impl->AddService<NavigatorHost>(this); |
| 320 view_->Embed(url, service_provider_impl.Pass()); | 320 view_->Embed(url, service_provider_impl.Pass()); |
| 321 } | 321 } |
| 322 | 322 |
| 323 private: | 323 private: |
| 324 // InterfaceFactory<NavigatorHost> | 324 // InterfaceFactory<NavigatorHost> |
| 325 virtual void Create(ApplicationConnection* connection, | 325 virtual void Create(ApplicationConnection* connection, |
| 326 InterfaceRequest<NavigatorHost> request) OVERRIDE { | 326 InterfaceRequest<NavigatorHost> request) override { |
| 327 BindToRequest(new NavigatorHostImpl(window_manager_, view_->id()), | 327 BindToRequest(new NavigatorHostImpl(window_manager_, view_->id()), |
| 328 &request); | 328 &request); |
| 329 } | 329 } |
| 330 | 330 |
| 331 WindowManager* window_manager_; | 331 WindowManager* window_manager_; |
| 332 View* view_; | 332 View* view_; |
| 333 }; | 333 }; |
| 334 | 334 |
| 335 class WindowManager | 335 class WindowManager |
| 336 : public ApplicationDelegate, | 336 : public ApplicationDelegate, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 if (keyboard_manager_) | 385 if (keyboard_manager_) |
| 386 keyboard_manager_->Hide(view_id); | 386 keyboard_manager_->Hide(view_id); |
| 387 } | 387 } |
| 388 | 388 |
| 389 void DidNavigateLocally(uint32 source_view_id, const mojo::String& url) { | 389 void DidNavigateLocally(uint32 source_view_id, const mojo::String& url) { |
| 390 LOG(ERROR) << "DidNavigateLocally: source_view_id: " << source_view_id | 390 LOG(ERROR) << "DidNavigateLocally: source_view_id: " << source_view_id |
| 391 << " url: " << url.To<std::string>(); | 391 << " url: " << url.To<std::string>(); |
| 392 } | 392 } |
| 393 | 393 |
| 394 // Overridden from DebugPanel::Delegate: | 394 // Overridden from DebugPanel::Delegate: |
| 395 virtual void CloseTopWindow() OVERRIDE { | 395 virtual void CloseTopWindow() override { |
| 396 if (!windows_.empty()) | 396 if (!windows_.empty()) |
| 397 CloseWindow(windows_.back()->view()->id()); | 397 CloseWindow(windows_.back()->view()->id()); |
| 398 } | 398 } |
| 399 | 399 |
| 400 virtual void RequestNavigate(uint32 source_view_id, | 400 virtual void RequestNavigate(uint32 source_view_id, |
| 401 Target target, | 401 Target target, |
| 402 URLRequestPtr request) OVERRIDE { | 402 URLRequestPtr request) override { |
| 403 OnLaunch(source_view_id, target, request->url); | 403 OnLaunch(source_view_id, target, request->url); |
| 404 } | 404 } |
| 405 | 405 |
| 406 private: | 406 private: |
| 407 typedef std::vector<Window*> WindowVector; | 407 typedef std::vector<Window*> WindowVector; |
| 408 | 408 |
| 409 // Overridden from ApplicationDelegate: | 409 // Overridden from ApplicationDelegate: |
| 410 virtual void Initialize(ApplicationImpl* app) override { | 410 virtual void Initialize(ApplicationImpl* app) override { |
| 411 app_ = app; | 411 app_ = app; |
| 412 views_init_.reset(new ViewsInit); | 412 views_init_.reset(new ViewsInit); |
| 413 window_manager_app_->Initialize(app); | 413 window_manager_app_->Initialize(app); |
| 414 } | 414 } |
| 415 | 415 |
| 416 virtual bool ConfigureIncomingConnection( | 416 virtual bool ConfigureIncomingConnection( |
| 417 ApplicationConnection* connection) override { | 417 ApplicationConnection* connection) override { |
| 418 connection->AddService(&window_manager_factory_); | 418 connection->AddService(&window_manager_factory_); |
| 419 window_manager_app_->ConfigureIncomingConnection(connection); | 419 window_manager_app_->ConfigureIncomingConnection(connection); |
| 420 return true; | 420 return true; |
| 421 } | 421 } |
| 422 | 422 |
| 423 // Overridden from ViewManagerDelegate: | 423 // Overridden from ViewManagerDelegate: |
| 424 virtual void OnEmbed(ViewManager* view_manager, | 424 virtual void OnEmbed(ViewManager* view_manager, |
| 425 View* root, | 425 View* root, |
| 426 ServiceProviderImpl* exported_services, | 426 ServiceProviderImpl* exported_services, |
| 427 scoped_ptr<ServiceProvider> imported_services) OVERRIDE { | 427 scoped_ptr<ServiceProvider> imported_services) override { |
| 428 DCHECK(!view_manager_); | 428 DCHECK(!view_manager_); |
| 429 view_manager_ = view_manager; | 429 view_manager_ = view_manager; |
| 430 | 430 |
| 431 View* view = View::Create(view_manager_); | 431 View* view = View::Create(view_manager_); |
| 432 root->AddChild(view); | 432 root->AddChild(view); |
| 433 view->SetBounds(gfx::Rect(root->bounds().size())); | 433 view->SetBounds(gfx::Rect(root->bounds().size())); |
| 434 content_view_id_ = view->id(); | 434 content_view_id_ = view->id(); |
| 435 | 435 |
| 436 Id launcher_ui_id = CreateLauncherUI(); | 436 Id launcher_ui_id = CreateLauncherUI(); |
| 437 Id control_panel_id = CreateControlPanel(view); | 437 Id control_panel_id = CreateControlPanel(view); |
| 438 | 438 |
| 439 root_layout_manager_.reset( | 439 root_layout_manager_.reset( |
| 440 new RootLayoutManager(view_manager, root, | 440 new RootLayoutManager(view_manager, root, |
| 441 content_view_id_, | 441 content_view_id_, |
| 442 launcher_ui_id, | 442 launcher_ui_id, |
| 443 control_panel_id)); | 443 control_panel_id)); |
| 444 root->AddObserver(root_layout_manager_.get()); | 444 root->AddObserver(root_layout_manager_.get()); |
| 445 | 445 |
| 446 window_manager_app_->host()->window()->AddPreTargetHandler(this); | 446 window_manager_app_->host()->window()->AddPreTargetHandler(this); |
| 447 | 447 |
| 448 window_manager_app_->InitFocus(new WMFocusRules(window_manager_app_.get(), | 448 window_manager_app_->InitFocus(new WMFocusRules(window_manager_app_.get(), |
| 449 view)); | 449 view)); |
| 450 } | 450 } |
| 451 virtual void OnViewManagerDisconnected(ViewManager* view_manager) OVERRIDE { | 451 virtual void OnViewManagerDisconnected(ViewManager* view_manager) override { |
| 452 DCHECK_EQ(view_manager_, view_manager); | 452 DCHECK_EQ(view_manager_, view_manager); |
| 453 view_manager_ = NULL; | 453 view_manager_ = NULL; |
| 454 base::MessageLoop::current()->Quit(); | 454 base::MessageLoop::current()->Quit(); |
| 455 } | 455 } |
| 456 | 456 |
| 457 // Overridden from WindowManagerDelegate: | 457 // Overridden from WindowManagerDelegate: |
| 458 virtual void Embed( | 458 virtual void Embed( |
| 459 const String& url, | 459 const String& url, |
| 460 InterfaceRequest<ServiceProvider> service_provider) OVERRIDE { | 460 InterfaceRequest<ServiceProvider> service_provider) override { |
| 461 const Id kInvalidSourceViewId = 0; | 461 const Id kInvalidSourceViewId = 0; |
| 462 OnLaunch(kInvalidSourceViewId, TARGET_DEFAULT, url); | 462 OnLaunch(kInvalidSourceViewId, TARGET_DEFAULT, url); |
| 463 } | 463 } |
| 464 virtual void DispatchEvent(EventPtr event) override {} | 464 virtual void DispatchEvent(EventPtr event) override {} |
| 465 | 465 |
| 466 // Overridden from ui::EventHandler: | 466 // Overridden from ui::EventHandler: |
| 467 virtual void OnEvent(ui::Event* event) OVERRIDE { | 467 virtual void OnEvent(ui::Event* event) override { |
| 468 View* view = WindowManagerApp::GetViewForWindow( | 468 View* view = WindowManagerApp::GetViewForWindow( |
| 469 static_cast<aura::Window*>(event->target())); | 469 static_cast<aura::Window*>(event->target())); |
| 470 if (event->type() == ui::ET_MOUSE_PRESSED && | 470 if (event->type() == ui::ET_MOUSE_PRESSED && |
| 471 !IsDescendantOfKeyboard(view)) { | 471 !IsDescendantOfKeyboard(view)) { |
| 472 view->SetFocus(); | 472 view->SetFocus(); |
| 473 } | 473 } |
| 474 } | 474 } |
| 475 | 475 |
| 476 void OnLaunch(uint32 source_view_id, | 476 void OnLaunch(uint32 source_view_id, |
| 477 Target requested_target, | 477 Target requested_target, |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 window_manager_->RequestNavigate(view_id_, target, request.Pass()); | 614 window_manager_->RequestNavigate(view_id_, target, request.Pass()); |
| 615 } | 615 } |
| 616 | 616 |
| 617 } // namespace examples | 617 } // namespace examples |
| 618 } // namespace mojo | 618 } // namespace mojo |
| 619 | 619 |
| 620 MojoResult MojoMain(MojoHandle shell_handle) { | 620 MojoResult MojoMain(MojoHandle shell_handle) { |
| 621 mojo::ApplicationRunnerChromium runner(new mojo::examples::WindowManager); | 621 mojo::ApplicationRunnerChromium runner(new mojo::examples::WindowManager); |
| 622 return runner.Run(shell_handle); | 622 return runner.Run(shell_handle); |
| 623 } | 623 } |
| OLD | NEW |