c353ee211f
For straight lines, Lottie exports control points conincident with the vertices. We can detect this case and emit more efficient lineTo's. One wrinkle: we can only apply this power-reduction post-interpolation (otherwise the path verbs and point count would not be guaranteed to match). Hence we store explicit shape data and defer the SkPath conversion. TBR= Change-Id: I7818be464eabee6096d2078440843243a55c6e98 Reviewed-on: https://skia-review.googlesource.com/124800 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Florin Malita <fmalita@chromium.org>
65 lines
1.6 KiB
C++
65 lines
1.6 KiB
C++
/*
|
|
* Copyright 2017 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef SkottieValue_DEFINED
|
|
#define SkottieValue_DEFINED
|
|
|
|
#include "SkPath.h"
|
|
#include "SkScalar.h"
|
|
|
|
#include <vector>
|
|
|
|
namespace skottie {
|
|
|
|
template <typename T>
|
|
struct ValueTraits {
|
|
static size_t Cardinality(const T&);
|
|
|
|
template <typename U>
|
|
static U As(const T&);
|
|
|
|
static T Lerp(const T&, const T&, float);
|
|
};
|
|
|
|
using ScalarValue = SkScalar;
|
|
using VectorValue = std::vector<ScalarValue>;
|
|
|
|
struct BezierVertex {
|
|
SkPoint fInPoint, // "in" control point, relative to the vertex
|
|
fOutPoint, // "out" control point, relative to the vertex
|
|
fVertex;
|
|
|
|
bool operator==(const BezierVertex& other) const {
|
|
return fInPoint == other.fInPoint
|
|
&& fOutPoint == other.fOutPoint
|
|
&& fVertex == other.fVertex;
|
|
}
|
|
|
|
bool operator!=(const BezierVertex& other) const { return !(*this == other); }
|
|
};
|
|
|
|
struct ShapeValue {
|
|
std::vector<BezierVertex> fVertices;
|
|
bool fClosed : 1,
|
|
fVolatile : 1;
|
|
|
|
ShapeValue() : fClosed(false), fVolatile(false) {}
|
|
ShapeValue(const ShapeValue&) = default;
|
|
ShapeValue(ShapeValue&&) = default;
|
|
ShapeValue& operator=(const ShapeValue&) = default;
|
|
|
|
bool operator==(const ShapeValue& other) const {
|
|
return fVertices == other.fVertices && fClosed == other.fClosed;
|
|
}
|
|
|
|
bool operator!=(const ShapeValue& other) const { return !(*this == other); }
|
|
};
|
|
|
|
} // namespace skottie
|
|
|
|
#endif // SkottieValue_DEFINED
|