// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "flutter/flow/layers/child_scene_layer.h"

#include "mojo/skia/type_converters.h"

namespace flow {

// TODO(abarth): We need to figure out how to allocate these ids sensibly.
static uint32_t next_id = 10;

ChildSceneLayer::ChildSceneLayer() : device_pixel_ratio_(1.0f) {}

ChildSceneLayer::~ChildSceneLayer() {}

void ChildSceneLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) {
  transform_ = matrix;
  transform_.preTranslate(offset_.x(), offset_.y());
  float inverse_device_pixel_ratio = 1.f / device_pixel_ratio_;
  transform_.preScale(inverse_device_pixel_ratio, inverse_device_pixel_ratio);
}

void ChildSceneLayer::Paint(PaintContext& context) {
  TRACE_EVENT0("flutter", "ChildSceneLayer::Paint");
}

void ChildSceneLayer::UpdateScene(mojo::gfx::composition::SceneUpdate* update,
                                  mojo::gfx::composition::Node* container) {
  uint32_t id = next_id++;

  auto child_resource = mojo::gfx::composition::Resource::New();
  child_resource->set_scene(mojo::gfx::composition::SceneResource::New());
  child_resource->get_scene()->scene_token = scene_token_.Clone();
  update->resources.insert(id, child_resource.Pass());

  auto child_node = mojo::gfx::composition::Node::New();
  child_node->op = mojo::gfx::composition::NodeOp::New();
  child_node->op->set_scene(mojo::gfx::composition::SceneNodeOp::New());
  child_node->op->get_scene()->scene_resource_id = id;
  child_node->content_clip = mojo::RectF::New();
  child_node->content_clip->width = physical_size_.width();
  child_node->content_clip->height = physical_size_.height();
  child_node->content_transform = mojo::Transform::From(transform_);
  update->nodes.insert(id, child_node.Pass());
  container->child_node_ids.push_back(id);
}

}  // namespace flow
