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

Unified Diff: mojo/examples/media_viewer/media_viewer.cc

Issue 383123006: Preliminary interactive layout of window manager's demo_launcher (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Looks Good 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/examples/html_viewer/html_document_view.cc ('k') | mojo/examples/png_viewer/png_viewer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/examples/media_viewer/media_viewer.cc
diff --git a/mojo/examples/media_viewer/media_viewer.cc b/mojo/examples/media_viewer/media_viewer.cc
index 58cb3ed1e1770c4d194e10a5ad6483466e9e232e..42210122895e92ae20b651b07adfc7d1eeae29ac 100644
--- a/mojo/examples/media_viewer/media_viewer.cc
+++ b/mojo/examples/media_viewer/media_viewer.cc
@@ -14,6 +14,7 @@
#include "mojo/public/cpp/application/application_impl.h"
#include "mojo/public/cpp/bindings/interface_impl.h"
#include "mojo/services/public/cpp/view_manager/node.h"
+#include "mojo/services/public/cpp/view_manager/node_observer.h"
#include "mojo/services/public/cpp/view_manager/view.h"
#include "mojo/services/public/cpp/view_manager/view_manager.h"
#include "mojo/services/public/cpp/view_manager/view_manager_delegate.h"
@@ -202,17 +203,22 @@ class NavigatorImpl : public InterfaceImpl<navigation::Navigator> {
class MediaViewer : public ApplicationDelegate,
public view_manager::ViewManagerDelegate,
- public ControlPanel::Delegate {
+ public ControlPanel::Delegate,
+ public view_manager::NodeObserver {
public:
MediaViewer() : app_(NULL),
view_manager_(NULL),
+ root_node_(NULL),
control_node_(NULL),
content_node_(NULL),
control_panel_(this) {
handler_map_["image/png"] = "mojo:mojo_png_viewer";
}
- virtual ~MediaViewer() {}
+ virtual ~MediaViewer() {
+ if (root_node_)
+ root_node_->RemoveObserver(this);
+ }
void Navigate(
uint32_t node_id,
@@ -270,24 +276,32 @@ class MediaViewer : public ApplicationDelegate,
return true;
}
+ void LayoutNodes() {
+ view_manager::Node* root = content_node_->parent();
+ gfx::Rect control_bounds(root->bounds().width(), 28);
+ control_node_->SetBounds(control_bounds);
+ gfx::Rect content_bounds(0, control_bounds.height(), root->bounds().width(),
+ root->bounds().height() - control_bounds.height());
+ content_node_->SetBounds(content_bounds);
+ }
+
// Overridden from view_manager::ViewManagerDelegate:
virtual void OnRootAdded(view_manager::ViewManager* view_manager,
view_manager::Node* root) OVERRIDE {
+ root_node_ = root;
view_manager_ = view_manager;
control_node_ = view_manager::Node::Create(view_manager_);
- root->AddChild(control_node_);
- gfx::Rect control_bounds(root->bounds().width(), 28);
- control_node_->SetBounds(control_bounds);
- control_node_->SetActiveView(view_manager::View::Create(view_manager_));
+ root_node_->AddChild(control_node_);
+ content_node_ = view_manager::Node::Create(view_manager_);
+ root_node_->AddChild(content_node_);
+
+ control_node_->SetActiveView(view_manager::View::Create(view_manager_));
control_panel_.Initialize(control_node_);
- content_node_ = view_manager::Node::Create(view_manager_);
- root->AddChild(content_node_);
- gfx::Rect content_bounds(0, control_bounds.height(), root->bounds().width(),
- root->bounds().height() - control_bounds.height());
- content_node_->SetBounds(content_bounds);
+ LayoutNodes();
+ root_node_->AddObserver(this);
if (pending_navigate_request_) {
scoped_ptr<PendingNavigateRequest> request(
@@ -311,7 +325,7 @@ class MediaViewer : public ApplicationDelegate,
zoomable_media_->ZoomIn();
break;
case ControlPanel::CONTROL_ACTUAL_SIZE:
- zoomable_media_->ZoomToActualSize();
+ zoomable_media_->ZoomToActualSize();
break;
case ControlPanel::CONTROL_ZOOM_OUT:
zoomable_media_->ZoomOut();
@@ -321,6 +335,18 @@ class MediaViewer : public ApplicationDelegate,
}
}
+ // NodeObserver:
+ virtual void OnNodeBoundsChanged(view_manager::Node* node,
+ const gfx::Rect& old_bounds,
+ const gfx::Rect& new_bounds) OVERRIDE {
+ LayoutNodes();
+ }
+ virtual void OnNodeDestroyed(view_manager::Node* node) OVERRIDE {
+ DCHECK_EQ(node, root_node_);
+ node->RemoveObserver(this);
+ root_node_ = NULL;
+ }
+
std::string GetHandlerForContentType(const std::string& content_type) {
HandlerMap::const_iterator it = handler_map_.find(content_type);
return it != handler_map_.end() ? it->second : std::string();
@@ -329,6 +355,7 @@ class MediaViewer : public ApplicationDelegate,
ApplicationImpl* app_;
scoped_ptr<ViewsInit> views_init_;
view_manager::ViewManager* view_manager_;
+ view_manager::Node* root_node_;
view_manager::Node* control_node_;
view_manager::Node* content_node_;
ControlPanel control_panel_;
« no previous file with comments | « mojo/examples/html_viewer/html_document_view.cc ('k') | mojo/examples/png_viewer/png_viewer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698