Mozart: Fix 0x0 crashes in example views. BUG= R=abarth@google.com Review URL: https://codereview.chromium.org/1868093002 .
diff --git a/apps/moterm/moterm_view.cc b/apps/moterm/moterm_view.cc index 4bf6abe..f248b91 100644 --- a/apps/moterm/moterm_view.cc +++ b/apps/moterm/moterm_view.cc
@@ -228,25 +228,32 @@ // TODO(vtl): Draw only the dirty region(s)? model_state_changes_.Reset(); - const mojo::Size& size = *properties()->view_layout->size; - mojo::RectF bounds; - bounds.width = size.width; - bounds.height = size.height; - auto update = mojo::gfx::composition::SceneUpdate::New(); - mojo::gfx::composition::ResourcePtr moterm_resource = - ganesh_renderer()->DrawCanvas( - size, base::Bind(&MotermView::DrawContent, base::Unretained(this))); - DCHECK(moterm_resource); - update->resources.insert(kMotermImageResourceId, moterm_resource.Pass()); - auto root_node = mojo::gfx::composition::Node::New(); - root_node->hit_test_behavior = mojo::gfx::composition::HitTestBehavior::New(); - root_node->op = mojo::gfx::composition::NodeOp::New(); - root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); - root_node->op->get_image()->content_rect = bounds.Clone(); - root_node->op->get_image()->image_resource_id = kMotermImageResourceId; - update->nodes.insert(kRootNodeId, root_node.Pass()); + const mojo::Size& size = *properties()->view_layout->size; + if (size.width > 0 && size.height > 0) { + mojo::RectF bounds; + bounds.width = size.width; + bounds.height = size.height; + + mojo::gfx::composition::ResourcePtr moterm_resource = + ganesh_renderer()->DrawCanvas( + size, base::Bind(&MotermView::DrawContent, base::Unretained(this))); + DCHECK(moterm_resource); + update->resources.insert(kMotermImageResourceId, moterm_resource.Pass()); + + auto root_node = mojo::gfx::composition::Node::New(); + root_node->hit_test_behavior = + mojo::gfx::composition::HitTestBehavior::New(); + root_node->op = mojo::gfx::composition::NodeOp::New(); + root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); + root_node->op->get_image()->content_rect = bounds.Clone(); + root_node->op->get_image()->image_resource_id = kMotermImageResourceId; + update->nodes.insert(kRootNodeId, root_node.Pass()); + } else { + auto root_node = mojo::gfx::composition::Node::New(); + update->nodes.insert(kRootNodeId, root_node.Pass()); + } scene()->Update(update.Pass());
diff --git a/examples/shadows/shadows_view.cc b/examples/shadows/shadows_view.cc index 30c7c4a..ecde8f6 100644 --- a/examples/shadows/shadows_view.cc +++ b/examples/shadows/shadows_view.cc
@@ -41,27 +41,36 @@ return; // Update the contents of the scene. - const mojo::Size& size = *properties()->view_layout->size; - mojo::RectF bounds; - bounds.width = size.width; - bounds.height = size.height; - auto update = mojo::gfx::composition::SceneUpdate::New(); - mojo::gfx::composition::ResourcePtr content_resource = gl_renderer()->DrawGL( - size, true, - base::Bind(&ShadowsView::Render, base::Unretained(this), size)); - DCHECK(content_resource); - update->resources.insert(kContentImageResourceId, content_resource.Pass()); - auto root_node = mojo::gfx::composition::Node::New(); - root_node->content_transform = mojo::Transform::New(); - mojo::SetIdentityTransform(root_node->content_transform.get()); - root_node->hit_test_behavior = mojo::gfx::composition::HitTestBehavior::New(); - root_node->op = mojo::gfx::composition::NodeOp::New(); - root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); - root_node->op->get_image()->content_rect = bounds.Clone(); - root_node->op->get_image()->image_resource_id = kContentImageResourceId; - update->nodes.insert(kRootNodeId, root_node.Pass()); + const mojo::Size& size = *properties()->view_layout->size; + if (size.width > 0 && size.height > 0) { + mojo::RectF bounds; + bounds.width = size.width; + bounds.height = size.height; + + mojo::gfx::composition::ResourcePtr content_resource = + gl_renderer()->DrawGL( + size, true, + base::Bind(&ShadowsView::Render, base::Unretained(this), size)); + DCHECK(content_resource); + update->resources.insert(kContentImageResourceId, content_resource.Pass()); + + auto root_node = mojo::gfx::composition::Node::New(); + root_node->content_transform = mojo::Transform::New(); + mojo::SetIdentityTransform(root_node->content_transform.get()); + root_node->hit_test_behavior = + mojo::gfx::composition::HitTestBehavior::New(); + root_node->op = mojo::gfx::composition::NodeOp::New(); + root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); + root_node->op->get_image()->content_rect = bounds.Clone(); + root_node->op->get_image()->image_resource_id = kContentImageResourceId; + update->nodes.insert(kRootNodeId, root_node.Pass()); + } else { + auto root_node = mojo::gfx::composition::Node::New(); + update->nodes.insert(kRootNodeId, root_node.Pass()); + } + scene()->Update(update.Pass()); // Publish the scene.
diff --git a/examples/ui/noodles/rasterizer.cc b/examples/ui/noodles/rasterizer.cc index 4ec1d30..4bd9095 100644 --- a/examples/ui/noodles/rasterizer.cc +++ b/examples/ui/noodles/rasterizer.cc
@@ -28,24 +28,30 @@ void Rasterizer::PublishFrame(std::unique_ptr<Frame> frame) { DCHECK(frame); - mojo::RectF bounds; - bounds.width = frame->size().width; - bounds.height = frame->size().height; - auto update = mojo::gfx::composition::SceneUpdate::New(); - mojo::gfx::composition::ResourcePtr content_resource = - ganesh_renderer_.DrawCanvas( - frame->size(), - base::Bind(&Frame::Paint, base::Unretained(frame.get()))); - DCHECK(content_resource); - update->resources.insert(kContentImageResourceId, content_resource.Pass()); - auto root_node = mojo::gfx::composition::Node::New(); - root_node->op = mojo::gfx::composition::NodeOp::New(); - root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); - root_node->op->get_image()->content_rect = bounds.Clone(); - root_node->op->get_image()->image_resource_id = kContentImageResourceId; - update->nodes.insert(kRootNodeId, root_node.Pass()); + if (frame->size().width > 0 && frame->size().height > 0) { + mojo::RectF bounds; + bounds.width = frame->size().width; + bounds.height = frame->size().height; + + mojo::gfx::composition::ResourcePtr content_resource = + ganesh_renderer_.DrawCanvas( + frame->size(), + base::Bind(&Frame::Paint, base::Unretained(frame.get()))); + DCHECK(content_resource); + update->resources.insert(kContentImageResourceId, content_resource.Pass()); + + auto root_node = mojo::gfx::composition::Node::New(); + root_node->op = mojo::gfx::composition::NodeOp::New(); + root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); + root_node->op->get_image()->content_rect = bounds.Clone(); + root_node->op->get_image()->image_resource_id = kContentImageResourceId; + update->nodes.insert(kRootNodeId, root_node.Pass()); + } else { + auto root_node = mojo::gfx::composition::Node::New(); + update->nodes.insert(kRootNodeId, root_node.Pass()); + } scene_->Update(update.Pass()); scene_->Publish(frame->TakeSceneMetadata());
diff --git a/examples/ui/pdf_viewer/pdf_viewer.cc b/examples/ui/pdf_viewer/pdf_viewer.cc index aad4d53..233ebe5 100644 --- a/examples/ui/pdf_viewer/pdf_viewer.cc +++ b/examples/ui/pdf_viewer/pdf_viewer.cc
@@ -169,27 +169,34 @@ if (!properties()) return; - const mojo::Size& size = *properties()->view_layout->size; - mojo::RectF bounds; - bounds.width = size.width; - bounds.height = size.height; - auto update = mojo::gfx::composition::SceneUpdate::New(); - mojo::gfx::composition::ResourcePtr content_resource = - ganesh_renderer()->DrawCanvas(size, - base::Bind(&PDFDocumentView::DrawContent, - base::Unretained(this), size)); - DCHECK(content_resource); - update->resources.insert(kContentImageResourceId, content_resource.Pass()); - auto root_node = mojo::gfx::composition::Node::New(); - root_node->hit_test_behavior = - mojo::gfx::composition::HitTestBehavior::New(); - root_node->op = mojo::gfx::composition::NodeOp::New(); - root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); - root_node->op->get_image()->content_rect = bounds.Clone(); - root_node->op->get_image()->image_resource_id = kContentImageResourceId; - update->nodes.insert(kRootNodeId, root_node.Pass()); + const mojo::Size& size = *properties()->view_layout->size; + if (size.width > 0 && size.height > 0) { + mojo::RectF bounds; + bounds.width = size.width; + bounds.height = size.height; + + mojo::gfx::composition::ResourcePtr content_resource = + ganesh_renderer()->DrawCanvas( + size, base::Bind(&PDFDocumentView::DrawContent, + base::Unretained(this), size)); + DCHECK(content_resource); + update->resources.insert(kContentImageResourceId, + content_resource.Pass()); + + auto root_node = mojo::gfx::composition::Node::New(); + root_node->hit_test_behavior = + mojo::gfx::composition::HitTestBehavior::New(); + root_node->op = mojo::gfx::composition::NodeOp::New(); + root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); + root_node->op->get_image()->content_rect = bounds.Clone(); + root_node->op->get_image()->image_resource_id = kContentImageResourceId; + update->nodes.insert(kRootNodeId, root_node.Pass()); + } else { + auto root_node = mojo::gfx::composition::Node::New(); + update->nodes.insert(kRootNodeId, root_node.Pass()); + } scene()->Update(update.Pass());
diff --git a/examples/ui/png_viewer/png_viewer.cc b/examples/ui/png_viewer/png_viewer.cc index 12d20b8..994c9e6 100644 --- a/examples/ui/png_viewer/png_viewer.cc +++ b/examples/ui/png_viewer/png_viewer.cc
@@ -49,25 +49,32 @@ if (!properties()) return; - const mojo::Size& size = *properties()->view_layout->size; - mojo::RectF bounds; - bounds.width = size.width; - bounds.height = size.height; - auto update = mojo::gfx::composition::SceneUpdate::New(); - mojo::gfx::composition::ResourcePtr content_resource = - ganesh_renderer()->DrawCanvas( - size, - base::Bind(&PNGView::DrawContent, base::Unretained(this), size)); - DCHECK(content_resource); - update->resources.insert(kContentImageResourceId, content_resource.Pass()); - auto root_node = mojo::gfx::composition::Node::New(); - root_node->op = mojo::gfx::composition::NodeOp::New(); - root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); - root_node->op->get_image()->content_rect = bounds.Clone(); - root_node->op->get_image()->image_resource_id = kContentImageResourceId; - update->nodes.insert(kRootNodeId, root_node.Pass()); + const mojo::Size& size = *properties()->view_layout->size; + if (size.width > 0 && size.height > 0) { + mojo::RectF bounds; + bounds.width = size.width; + bounds.height = size.height; + + mojo::gfx::composition::ResourcePtr content_resource = + ganesh_renderer()->DrawCanvas( + size, + base::Bind(&PNGView::DrawContent, base::Unretained(this), size)); + DCHECK(content_resource); + update->resources.insert(kContentImageResourceId, + content_resource.Pass()); + + auto root_node = mojo::gfx::composition::Node::New(); + root_node->op = mojo::gfx::composition::NodeOp::New(); + root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); + root_node->op->get_image()->content_rect = bounds.Clone(); + root_node->op->get_image()->image_resource_id = kContentImageResourceId; + update->nodes.insert(kRootNodeId, root_node.Pass()); + } else { + auto root_node = mojo::gfx::composition::Node::New(); + update->nodes.insert(kRootNodeId, root_node.Pass()); + } scene()->Update(update.Pass());
diff --git a/examples/ui/shapes/shapes_view.cc b/examples/ui/shapes/shapes_view.cc index c4e2c9d..ea18cb2 100644 --- a/examples/ui/shapes/shapes_view.cc +++ b/examples/ui/shapes/shapes_view.cc
@@ -34,30 +34,35 @@ if (!properties()) return; - const mojo::Size& size = *properties()->view_layout->size; - mojo::RectF bounds; - bounds.width = size.width; - bounds.height = size.height; - auto update = mojo::gfx::composition::SceneUpdate::New(); - // Draw the content of the view to a texture and include it as an - // image resource in the scene. - mojo::gfx::composition::ResourcePtr content_resource = - ganesh_renderer()->DrawCanvas( - size, - base::Bind(&ShapesView::DrawContent, base::Unretained(this), size)); - DCHECK(content_resource); - update->resources.insert(kContentImageResourceId, content_resource.Pass()); + const mojo::Size& size = *properties()->view_layout->size; + if (size.width > 0 && size.height > 0) { + mojo::RectF bounds; + bounds.width = size.width; + bounds.height = size.height; - // Add a root node to the scene graph to draw the image resource to - // the screen such that it fills the entire view. - auto root_node = mojo::gfx::composition::Node::New(); - root_node->op = mojo::gfx::composition::NodeOp::New(); - root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); - root_node->op->get_image()->content_rect = bounds.Clone(); - root_node->op->get_image()->image_resource_id = kContentImageResourceId; - update->nodes.insert(kRootNodeId, root_node.Pass()); + // Draw the content of the view to a texture and include it as an + // image resource in the scene. + mojo::gfx::composition::ResourcePtr content_resource = + ganesh_renderer()->DrawCanvas( + size, + base::Bind(&ShapesView::DrawContent, base::Unretained(this), size)); + DCHECK(content_resource); + update->resources.insert(kContentImageResourceId, content_resource.Pass()); + + // Add a root node to the scene graph to draw the image resource to + // the screen such that it fills the entire view. + auto root_node = mojo::gfx::composition::Node::New(); + root_node->op = mojo::gfx::composition::NodeOp::New(); + root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); + root_node->op->get_image()->content_rect = bounds.Clone(); + root_node->op->get_image()->image_resource_id = kContentImageResourceId; + update->nodes.insert(kRootNodeId, root_node.Pass()); + } else { + auto root_node = mojo::gfx::composition::Node::New(); + update->nodes.insert(kRootNodeId, root_node.Pass()); + } // Submit the scene update. scene()->Update(update.Pass());
diff --git a/examples/ui/spinning_cube/spinning_cube_view.cc b/examples/ui/spinning_cube/spinning_cube_view.cc index e478bde..f4a806f 100644 --- a/examples/ui/spinning_cube/spinning_cube_view.cc +++ b/examples/ui/spinning_cube/spinning_cube_view.cc
@@ -144,27 +144,34 @@ cube_.UpdateForTimeDelta(time_delta.InSecondsF()); // Update the contents of the scene. - const mojo::Size& size = *properties()->view_layout->size; - mojo::RectF bounds; - bounds.width = size.width; - bounds.height = size.height; - auto update = mojo::gfx::composition::SceneUpdate::New(); - mojo::gfx::composition::ResourcePtr cube_resource = gl_renderer()->DrawGL( - size, true, base::Bind(&SpinningCubeView::DrawCubeWithGL, - base::Unretained(this), size)); - DCHECK(cube_resource); - update->resources.insert(kCubeImageResourceId, cube_resource.Pass()); - auto root_node = mojo::gfx::composition::Node::New(); - root_node->content_transform = mojo::Transform::New(); - mojo::SetIdentityTransform(root_node->content_transform.get()); - root_node->hit_test_behavior = mojo::gfx::composition::HitTestBehavior::New(); - root_node->op = mojo::gfx::composition::NodeOp::New(); - root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); - root_node->op->get_image()->content_rect = bounds.Clone(); - root_node->op->get_image()->image_resource_id = kCubeImageResourceId; - update->nodes.insert(kRootNodeId, root_node.Pass()); + const mojo::Size& size = *properties()->view_layout->size; + if (size.width > 0 && size.height > 0) { + mojo::RectF bounds; + bounds.width = size.width; + bounds.height = size.height; + + mojo::gfx::composition::ResourcePtr cube_resource = gl_renderer()->DrawGL( + size, true, base::Bind(&SpinningCubeView::DrawCubeWithGL, + base::Unretained(this), size)); + DCHECK(cube_resource); + update->resources.insert(kCubeImageResourceId, cube_resource.Pass()); + + auto root_node = mojo::gfx::composition::Node::New(); + root_node->content_transform = mojo::Transform::New(); + mojo::SetIdentityTransform(root_node->content_transform.get()); + root_node->hit_test_behavior = + mojo::gfx::composition::HitTestBehavior::New(); + root_node->op = mojo::gfx::composition::NodeOp::New(); + root_node->op->set_image(mojo::gfx::composition::ImageNodeOp::New()); + root_node->op->get_image()->content_rect = bounds.Clone(); + root_node->op->get_image()->image_resource_id = kCubeImageResourceId; + update->nodes.insert(kRootNodeId, root_node.Pass()); + } else { + auto root_node = mojo::gfx::composition::Node::New(); + update->nodes.insert(kRootNodeId, root_node.Pass()); + } scene()->Update(update.Pass());