1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2019 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/skottie/src/SkottiePriv.h"
9cb93a386Sopenharmony_ci
10cb93a386Sopenharmony_ci#include "include/utils/SkParse.h"
11cb93a386Sopenharmony_ci#include "modules/skottie/src/SkottieJson.h"
12cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGDraw.h"
13cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGPaint.h"
14cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGRect.h"
15cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGRenderNode.h"
16cb93a386Sopenharmony_ci
17cb93a386Sopenharmony_cinamespace skottie {
18cb93a386Sopenharmony_cinamespace internal {
19cb93a386Sopenharmony_ci
20cb93a386Sopenharmony_cisk_sp<sksg::RenderNode> AnimationBuilder::attachSolidLayer(const skjson::ObjectValue& jlayer,
21cb93a386Sopenharmony_ci                                                           LayerInfo* layer_info) const {
22cb93a386Sopenharmony_ci    layer_info->fSize = SkSize::Make(ParseDefault<float>(jlayer["sw"], 0.0f),
23cb93a386Sopenharmony_ci                                     ParseDefault<float>(jlayer["sh"], 0.0f));
24cb93a386Sopenharmony_ci    const skjson::StringValue* hex_str = jlayer["sc"];
25cb93a386Sopenharmony_ci    uint32_t c;
26cb93a386Sopenharmony_ci    if (layer_info->fSize.isEmpty() ||
27cb93a386Sopenharmony_ci        !hex_str ||
28cb93a386Sopenharmony_ci        *hex_str->begin() != '#' ||
29cb93a386Sopenharmony_ci        !SkParse::FindHex(hex_str->begin() + 1, &c)) {
30cb93a386Sopenharmony_ci        this->log(Logger::Level::kError, &jlayer, "Could not parse solid layer.");
31cb93a386Sopenharmony_ci        return nullptr;
32cb93a386Sopenharmony_ci    }
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_ci    const SkColor color = 0xff000000 | c;
35cb93a386Sopenharmony_ci
36cb93a386Sopenharmony_ci    auto solid_paint = sksg::Color::Make(color);
37cb93a386Sopenharmony_ci    solid_paint->setAntiAlias(true);
38cb93a386Sopenharmony_ci
39cb93a386Sopenharmony_ci    this->dispatchColorProperty(solid_paint);
40cb93a386Sopenharmony_ci
41cb93a386Sopenharmony_ci    return sksg::Draw::Make(sksg::Rect::Make(SkRect::MakeSize(layer_info->fSize)),
42cb93a386Sopenharmony_ci                            std::move(solid_paint));
43cb93a386Sopenharmony_ci}
44cb93a386Sopenharmony_ci
45cb93a386Sopenharmony_ci} // namespace internal
46cb93a386Sopenharmony_ci} // namespace skottie
47