/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkottieValue.h" #include "SkColor.h" #include "SkPoint.h" #include "SkSize.h" namespace skottie { template <> size_t ValueTraits::Cardinality(const ScalarValue&) { return 1; } template <> template <> SkScalar ValueTraits::As(const ScalarValue& v) { return v; } template <> size_t ValueTraits::Cardinality(const VectorValue& vec) { return vec.size(); } template <> template <> SkColor ValueTraits::As(const VectorValue& v) { // best effort to turn this into a color const auto r = v.size() > 0 ? v[0] : 0, g = v.size() > 1 ? v[1] : 0, b = v.size() > 2 ? v[2] : 0, a = v.size() > 3 ? v[3] : 1; return SkColorSetARGB(SkTPin(a, 0, 1) * 255, SkTPin(r, 0, 1) * 255, SkTPin(g, 0, 1) * 255, SkTPin(b, 0, 1) * 255); } template <> template <> SkPoint ValueTraits::As(const VectorValue& vec) { // best effort to turn this into a point const auto x = vec.size() > 0 ? vec[0] : 0, y = vec.size() > 1 ? vec[1] : 0; return SkPoint::Make(x, y); } template <> template <> SkSize ValueTraits::As(const VectorValue& vec) { const auto pt = ValueTraits::As(vec); return SkSize::Make(pt.x(), pt.y()); } template <> size_t ValueTraits::Cardinality(const ShapeValue& path) { return SkTo(path.countVerbs()); } template <> template <> SkPath ValueTraits::As(const ShapeValue& path) { return path; } } // namespace skottie