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