1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/examples/surfaces_app/embedder.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/output/compositor_frame.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/output/delegated_frame_data.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/quads/render_pass.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/quads/solid_color_draw_quad.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/quads/surface_draw_quad.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/examples/surfaces_app/surfaces_util.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/public/cpp/surfaces/surfaces_type_converters.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/public/interfaces/surfaces/surface_id.mojom.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/rect.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/size.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/transform.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo { 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace examples { 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing cc::RenderPass; 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using cc::RenderPassId; 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing cc::SurfaceDrawQuad; 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing cc::DrawQuad; 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing cc::SolidColorDrawQuad; 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing cc::DelegatedFrameData; 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing cc::CompositorFrame; 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Embedder::Embedder(Surface* surface) : surface_(surface) { 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 33116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEmbedder::~Embedder() { 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid Embedder::ProduceFrame(cc::SurfaceId child_one, 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cc::SurfaceId child_two, 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const gfx::Size& child_size, 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const gfx::Size& size, 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int offset) { 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Rect rect(size); 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RenderPassId pass_id(1, 1); 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<RenderPass> pass = RenderPass::Create(); 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass->SetNew(pass_id, rect, rect, gfx::Transform()); 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!child_one.is_null()) { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Transform one_transform; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci one_transform.Translate(10 + child_size.width() / 2, 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 50 + child_size.height() / 2); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci one_transform.Translate(0, offset); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci one_transform.Translate(-child_size.width() / 2, -child_size.height() / 2); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateAndAppendSimpleSharedQuadState(pass.get(), one_transform, size); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SurfaceDrawQuad* surface_one_quad = 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect one_rect(child_size); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci surface_one_quad->SetNew( 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pass->shared_quad_state_list.back(), one_rect, one_rect, child_one); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!child_two.is_null()) { 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Transform two_transform; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci two_transform.Translate(10 + size.width() / 2 + child_size.width() / 2, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 50 + child_size.height() / 2); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci two_transform.Translate(0, 200 - offset); 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci two_transform.Translate(-child_size.width() / 2, -child_size.height() / 2); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateAndAppendSimpleSharedQuadState(pass.get(), two_transform, size); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SurfaceDrawQuad* surface_two_quad = 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect two_rect(child_size); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci surface_two_quad->SetNew( 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pass->shared_quad_state_list.back(), two_rect, two_rect, child_two); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateAndAppendSimpleSharedQuadState(pass.get(), gfx::Transform(), size); 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SolidColorDrawQuad* color_quad = 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool force_anti_aliasing_off = false; 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch color_quad->SetNew(pass->shared_quad_state_list.back(), 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rect, 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rect, 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SK_ColorYELLOW, 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch force_anti_aliasing_off); 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<DelegatedFrameData> delegated_frame_data(new DelegatedFrameData); 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegated_frame_data->render_pass_list.push_back(pass.Pass()); 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<CompositorFrame> frame(new CompositorFrame); 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch frame->delegated_frame_data = delegated_frame_data.Pass(); 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) surface_->SubmitFrame(mojo::SurfaceId::From(id_), 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mojo::Frame::From(*frame)); 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace examples 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace mojo 98