Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Side by Side Diff: mojo/examples/window_manager/window_manager.cc

Issue 383123006: Preliminary interactive layout of window manager's demo_launcher (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/keyboard/keyboard.mojom.h" 7 #include "mojo/examples/keyboard/keyboard.mojom.h"
8 #include "mojo/examples/window_manager/debug_panel.h" 8 #include "mojo/examples/window_manager/debug_panel.h"
9 #include "mojo/examples/window_manager/window_manager.mojom.h" 9 #include "mojo/examples/window_manager/window_manager.mojom.h"
10 #include "mojo/public/cpp/application/application_connection.h" 10 #include "mojo/public/cpp/application/application_connection.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 ViewManager* view_manager_; 152 ViewManager* view_manager_;
153 153
154 // Node the keyboard is attached to. 154 // Node the keyboard is attached to.
155 Node* node_; 155 Node* node_;
156 156
157 DISALLOW_COPY_AND_ASSIGN(KeyboardManager); 157 DISALLOW_COPY_AND_ASSIGN(KeyboardManager);
158 }; 158 };
159 159
160 class RootLayoutManager : public NodeObserver { 160 class RootLayoutManager : public NodeObserver {
161 public: 161 public:
162 explicit RootLayoutManager(ViewManager* view_manager, 162 RootLayoutManager(ViewManager* view_manager, Node* root,
163 Node* root, 163 Id content_node_id,
164 Id content_node_id) 164 Id launcher_ui_node_id,
165 : root_(root), 165 Id control_panel_node_id)
166 view_manager_(view_manager), 166 : root_(root),
167 content_node_id_(content_node_id) {} 167 view_manager_(view_manager),
168 content_node_id_(content_node_id),
169 launcher_ui_node_id_(launcher_ui_node_id),
170 control_panel_node_id_(control_panel_node_id) {}
168 virtual ~RootLayoutManager() {} 171 virtual ~RootLayoutManager() {}
169 172
170 private: 173 private:
171 // Overridden from NodeObserver: 174 // Overridden from NodeObserver:
172 virtual void OnNodeBoundsChanged(Node* node, 175 virtual void OnNodeBoundsChanged(Node* node,
173 const gfx::Rect& /*old_bounds*/, 176 const gfx::Rect& old_bounds,
174 const gfx::Rect& new_bounds) OVERRIDE { 177 const gfx::Rect& new_bounds) OVERRIDE {
175 DCHECK_EQ(node, root_); 178 DCHECK_EQ(node, root_);
179
176 Node* content_node = view_manager_->GetNodeById(content_node_id_); 180 Node* content_node = view_manager_->GetNodeById(content_node_id_);
177 content_node->SetBounds(new_bounds); 181 content_node->SetBounds(new_bounds);
178 // Force the view's bitmap to be recreated 182 // Force the view's bitmap to be recreated
179 content_node->active_view()->SetColor(SK_ColorBLUE); 183 content_node->active_view()->SetColor(SK_ColorBLUE);
180 // TODO(hansmuller): Do Layout 184
185 Node* launcher_ui_node =
186 view_manager_->GetNodeById(launcher_ui_node_id_);
187 gfx::Rect launcher_ui_bounds(launcher_ui_node->bounds());
188 launcher_ui_bounds.set_width(launcher_ui_bounds.width() +
189 new_bounds.width() - old_bounds.width());
190 launcher_ui_node->SetBounds(launcher_ui_bounds);
191
192
193 Node* control_panel_node =
194 view_manager_->GetNodeById(control_panel_node_id_);
195 gfx::Rect control_panel_bounds(control_panel_node->bounds());
196 control_panel_bounds.set_x(control_panel_bounds.x() +
197 new_bounds.width() - old_bounds.width());
198 control_panel_node->SetBounds(control_panel_bounds);
181 } 199 }
Ben Goodger (Google) 2014/07/11 18:18:23 Looks like you're missing the embedded node(s) (e.
182 200
183 Node* root_; 201 Node* root_;
184 ViewManager* view_manager_; 202 ViewManager* view_manager_;
185 Id content_node_id_; 203 Id content_node_id_;
204 Id launcher_ui_node_id_;
205 Id control_panel_node_id_;
186 206
187 DISALLOW_COPY_AND_ASSIGN(RootLayoutManager); 207 DISALLOW_COPY_AND_ASSIGN(RootLayoutManager);
188 }; 208 };
189 209
190 class WindowManager : public ApplicationDelegate, 210 class WindowManager : public ApplicationDelegate,
191 public DebugPanel::Delegate, 211 public DebugPanel::Delegate,
192 public ViewObserver, 212 public ViewObserver,
193 public ViewManagerDelegate, 213 public ViewManagerDelegate,
194 public ViewEventDispatcher { 214 public ViewEventDispatcher {
195 public: 215 public:
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 virtual void OnRootAdded(ViewManager* view_manager, Node* root) OVERRIDE { 298 virtual void OnRootAdded(ViewManager* view_manager, Node* root) OVERRIDE {
279 DCHECK(!view_manager_); 299 DCHECK(!view_manager_);
280 view_manager_ = view_manager; 300 view_manager_ = view_manager;
281 view_manager_->SetEventDispatcher(this); 301 view_manager_->SetEventDispatcher(this);
282 302
283 Node* node = Node::Create(view_manager); 303 Node* node = Node::Create(view_manager);
284 root->AddChild(node); 304 root->AddChild(node);
285 node->SetBounds(gfx::Rect(root->bounds().size())); 305 node->SetBounds(gfx::Rect(root->bounds().size()));
286 content_node_id_ = node->id(); 306 content_node_id_ = node->id();
287 307
288 root_layout_manager_.reset(
289 new RootLayoutManager(view_manager, root, content_node_id_));
290 root->AddObserver(root_layout_manager_.get());
291
292 View* view = View::Create(view_manager); 308 View* view = View::Create(view_manager);
293 node->SetActiveView(view); 309 node->SetActiveView(view);
294 view->SetColor(SK_ColorBLUE); 310 view->SetColor(SK_ColorBLUE);
295 view->AddObserver(this); 311 view->AddObserver(this);
296 312
297 CreateLauncherUI(); 313 Id launcher_ui_id = CreateLauncherUI();
298 CreateControlPanel(node); 314 Id control_panel_id = CreateControlPanel(node);
315
316 root_layout_manager_.reset(
317 new RootLayoutManager(view_manager, root,
318 content_node_id_,
319 launcher_ui_id,
320 control_panel_id));
321 root->AddObserver(root_layout_manager_.get());
299 } 322 }
300 323
301 // Overridden from ViewEventDispatcher: 324 // Overridden from ViewEventDispatcher:
302 virtual void DispatchEvent(View* target, EventPtr event) OVERRIDE { 325 virtual void DispatchEvent(View* target, EventPtr event) OVERRIDE {
303 // TODO(beng): More sophisticated focus handling than this is required! 326 // TODO(beng): More sophisticated focus handling than this is required!
304 if (event->action == ui::ET_MOUSE_PRESSED && 327 if (event->action == ui::ET_MOUSE_PRESSED &&
305 !IsDescendantOfKeyboard(target)) { 328 !IsDescendantOfKeyboard(target)) {
306 target->node()->SetFocus(); 329 target->node()->SetFocus();
307 } 330 }
308 view_manager_->DispatchEvent(target, event.Pass()); 331 view_manager_->DispatchEvent(target, event.Pass());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 dest_node = windows_.back(); 363 dest_node = windows_.back();
341 } 364 }
342 365
343 if (dest_node) 366 if (dest_node)
344 Embed(dest_node, handler_url, nav_details.Pass(), response.Pass()); 367 Embed(dest_node, handler_url, nav_details.Pass(), response.Pass());
345 else 368 else
346 CreateWindow(handler_url, nav_details.Pass(), response.Pass()); 369 CreateWindow(handler_url, nav_details.Pass(), response.Pass());
347 } 370 }
348 371
349 // TODO(beng): proper layout manager!! 372 // TODO(beng): proper layout manager!!
350 void CreateLauncherUI() { 373 Id CreateLauncherUI() {
351 navigation::NavigationDetailsPtr nav_details; 374 navigation::NavigationDetailsPtr nav_details;
352 navigation::ResponseDetailsPtr response; 375 navigation::ResponseDetailsPtr response;
353 Node* node = view_manager_->GetNodeById(content_node_id_); 376 Node* node = view_manager_->GetNodeById(content_node_id_);
354 gfx::Rect bounds = node->bounds(); 377 gfx::Rect bounds = node->bounds();
355 bounds.Inset(kBorderInset, kBorderInset); 378 bounds.Inset(kBorderInset, kBorderInset);
356 bounds.set_height(kTextfieldHeight); 379 bounds.set_height(kTextfieldHeight);
357 launcher_ui_ = CreateChild(content_node_id_, "mojo:mojo_browser", bounds, 380 launcher_ui_ = CreateChild(content_node_id_, "mojo:mojo_browser", bounds,
358 nav_details.Pass(), response.Pass()); 381 nav_details.Pass(), response.Pass());
382 return launcher_ui_->id();
359 } 383 }
360 384
361 void CreateWindow(const std::string& handler_url, 385 void CreateWindow(const std::string& handler_url,
362 navigation::NavigationDetailsPtr nav_details, 386 navigation::NavigationDetailsPtr nav_details,
363 navigation::ResponseDetailsPtr response) { 387 navigation::ResponseDetailsPtr response) {
364 Node* node = view_manager_->GetNodeById(content_node_id_); 388 Node* node = view_manager_->GetNodeById(content_node_id_);
365 gfx::Rect bounds(kBorderInset, 389 gfx::Rect bounds(kBorderInset,
366 2 * kBorderInset + kTextfieldHeight, 390 2 * kBorderInset + kTextfieldHeight,
367 node->bounds().width() - 3 * kBorderInset - 391 node->bounds().width() - 3 * kBorderInset -
368 kControlPanelWidth, 392 kControlPanelWidth,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 app_->ConnectToService(app_url, &navigator); 424 app_->ConnectToService(app_url, &navigator);
401 navigator->Navigate(node->id(), nav_details.Pass(), response.Pass()); 425 navigator->Navigate(node->id(), nav_details.Pass(), response.Pass());
402 } 426 }
403 } 427 }
404 428
405 bool IsDescendantOfKeyboard(View* target) { 429 bool IsDescendantOfKeyboard(View* target) {
406 return keyboard_manager_.get() && 430 return keyboard_manager_.get() &&
407 keyboard_manager_->node()->Contains(target->node()); 431 keyboard_manager_->node()->Contains(target->node());
408 } 432 }
409 433
410 void CreateControlPanel(view_manager::Node* root) { 434 Id CreateControlPanel(view_manager::Node* root) {
411 Node* node = Node::Create(view_manager_); 435 Node* node = Node::Create(view_manager_);
412 View* view = view_manager::View::Create(view_manager_); 436 View* view = view_manager::View::Create(view_manager_);
413 root->AddChild(node); 437 root->AddChild(node);
414 node->SetActiveView(view); 438 node->SetActiveView(view);
415 439
416 gfx::Rect bounds(root->bounds().width() - kControlPanelWidth - 440 gfx::Rect bounds(root->bounds().width() - kControlPanelWidth -
417 kBorderInset, 441 kBorderInset,
418 kBorderInset * 2 + kTextfieldHeight, 442 kBorderInset * 2 + kTextfieldHeight,
419 kControlPanelWidth, 443 kControlPanelWidth,
420 root->bounds().height() - kBorderInset * 3 - 444 root->bounds().height() - kBorderInset * 3 -
421 kTextfieldHeight); 445 kTextfieldHeight);
422 node->SetBounds(bounds); 446 node->SetBounds(bounds);
423 447
424 debug_panel_ = new DebugPanel(this, node); 448 debug_panel_ = new DebugPanel(this, node);
449 return node->id();
425 } 450 }
426 451
427 scoped_ptr<ViewsInit> views_init_; 452 scoped_ptr<ViewsInit> views_init_;
428 DebugPanel* debug_panel_; 453 DebugPanel* debug_panel_;
429 launcher::LauncherPtr launcher_; 454 launcher::LauncherPtr launcher_;
430 Node* launcher_ui_; 455 Node* launcher_ui_;
431 std::vector<Node*> windows_; 456 std::vector<Node*> windows_;
432 ViewManager* view_manager_; 457 ViewManager* view_manager_;
433 scoped_ptr<RootLayoutManager> root_layout_manager_; 458 scoped_ptr<RootLayoutManager> root_layout_manager_;
434 459
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 } 491 }
467 492
468 } // namespace examples 493 } // namespace examples
469 494
470 // static 495 // static
471 ApplicationDelegate* ApplicationDelegate::Create() { 496 ApplicationDelegate* ApplicationDelegate::Create() {
472 return new examples::WindowManager; 497 return new examples::WindowManager;
473 } 498 }
474 499
475 } // namespace mojo 500 } // namespace mojo
OLDNEW
« mojo/examples/browser/browser.cc ('K') | « mojo/examples/window_manager/debug_panel.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698