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