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