• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2019 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "modules/skottie/src/SkottiePriv.h"
9 
10 #include "include/utils/SkParse.h"
11 #include "modules/skottie/src/SkottieJson.h"
12 #include "modules/sksg/include/SkSGDraw.h"
13 #include "modules/sksg/include/SkSGPaint.h"
14 #include "modules/sksg/include/SkSGRect.h"
15 #include "modules/sksg/include/SkSGRenderNode.h"
16 
17 namespace skottie {
18 namespace internal {
19 
attachSolidLayer(const skjson::ObjectValue & jlayer,LayerInfo * layer_info) const20 sk_sp<sksg::RenderNode> AnimationBuilder::attachSolidLayer(const skjson::ObjectValue& jlayer,
21                                                            LayerInfo* layer_info) const {
22     layer_info->fSize = SkSize::Make(ParseDefault<float>(jlayer["sw"], 0.0f),
23                                      ParseDefault<float>(jlayer["sh"], 0.0f));
24     const skjson::StringValue* hex_str = jlayer["sc"];
25     uint32_t c;
26     if (layer_info->fSize.isEmpty() ||
27         !hex_str ||
28         *hex_str->begin() != '#' ||
29         !SkParse::FindHex(hex_str->begin() + 1, &c)) {
30         this->log(Logger::Level::kError, &jlayer, "Could not parse solid layer.");
31         return nullptr;
32     }
33 
34     const SkColor color = 0xff000000 | c;
35 
36     auto solid_paint = sksg::Color::Make(color);
37     solid_paint->setAntiAlias(true);
38 
39     this->dispatchColorProperty(solid_paint);
40 
41     return sksg::Draw::Make(sksg::Rect::Make(SkRect::MakeSize(layer_info->fSize)),
42                             std::move(solid_paint));
43 }
44 
45 } // namespace internal
46 } // namespace skottie
47