1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2018 Google Inc.
3cb93a386Sopenharmony_ci *
4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci * found in the LICENSE file.
6cb93a386Sopenharmony_ci */
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGScene.h"
9cb93a386Sopenharmony_ci
10cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h"
11cb93a386Sopenharmony_ci#include "include/core/SkMatrix.h"
12cb93a386Sopenharmony_ci#include "include/core/SkPaint.h"
13cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGInvalidationController.h"
14cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGRenderNode.h"
15cb93a386Sopenharmony_ci
16cb93a386Sopenharmony_cinamespace sksg {
17cb93a386Sopenharmony_ci
18cb93a386Sopenharmony_cistd::unique_ptr<Scene> Scene::Make(sk_sp<RenderNode> root) {
19cb93a386Sopenharmony_ci    return root ? std::unique_ptr<Scene>(new Scene(std::move(root))) : nullptr;
20cb93a386Sopenharmony_ci}
21cb93a386Sopenharmony_ci
22cb93a386Sopenharmony_ciScene::Scene(sk_sp<RenderNode> root) : fRoot(std::move(root)) {}
23cb93a386Sopenharmony_ci
24cb93a386Sopenharmony_ciScene::~Scene() = default;
25cb93a386Sopenharmony_ci
26cb93a386Sopenharmony_civoid Scene::render(SkCanvas* canvas) const {
27cb93a386Sopenharmony_ci    // Ensure the SG is revalidated.
28cb93a386Sopenharmony_ci    // Note: this is a no-op if the scene has already been revalidated - e.g. in animate().
29cb93a386Sopenharmony_ci    fRoot->revalidate(nullptr, SkMatrix::I());
30cb93a386Sopenharmony_ci
31cb93a386Sopenharmony_ci    fRoot->render(canvas);
32cb93a386Sopenharmony_ci}
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_civoid Scene::revalidate(InvalidationController* ic) {
35cb93a386Sopenharmony_ci    fRoot->revalidate(ic, SkMatrix::I());
36cb93a386Sopenharmony_ci}
37cb93a386Sopenharmony_ci
38cb93a386Sopenharmony_ciconst RenderNode* Scene::nodeAt(const SkPoint& p) const {
39cb93a386Sopenharmony_ci    return fRoot->nodeAt(p);
40cb93a386Sopenharmony_ci}
41cb93a386Sopenharmony_ci
42cb93a386Sopenharmony_ci} // namespace sksg
43