aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/skottie/SkottieAdapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/skottie/SkottieAdapter.cpp')
-rw-r--r--experimental/skottie/SkottieAdapter.cpp166
1 files changed, 0 insertions, 166 deletions
diff --git a/experimental/skottie/SkottieAdapter.cpp b/experimental/skottie/SkottieAdapter.cpp
deleted file mode 100644
index a01599ccf6..0000000000
--- a/experimental/skottie/SkottieAdapter.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkottieAdapter.h"
-
-#include "SkMatrix.h"
-#include "SkottieValue.h"
-#include "SkPath.h"
-#include "SkRRect.h"
-#include "SkSGGradient.h"
-#include "SkSGPath.h"
-#include "SkSGRect.h"
-#include "SkSGTransform.h"
-#include "SkSGTrimEffect.h"
-
-#include <cmath>
-
-namespace skottie {
-
-RRectAdapter::RRectAdapter(sk_sp<sksg::RRect> wrapped_node)
- : fRRectNode(std::move(wrapped_node)) {}
-
-void RRectAdapter::apply() {
- // BM "position" == "center position"
- auto rr = SkRRect::MakeRectXY(SkRect::MakeXYWH(fPosition.x() - fSize.width() / 2,
- fPosition.y() - fSize.height() / 2,
- fSize.width(), fSize.height()),
- fRadius.width(),
- fRadius.height());
- fRRectNode->setRRect(rr);
-}
-
-TransformAdapter::TransformAdapter(sk_sp<sksg::Matrix> matrix)
- : fMatrixNode(std::move(matrix)) {}
-
-void TransformAdapter::apply() {
- SkMatrix t = SkMatrix::MakeTrans(-fAnchorPoint.x(), -fAnchorPoint.y());
-
- t.postScale(fScale.x() / 100, fScale.y() / 100); // 100% based
- t.postRotate(fRotation);
- t.postTranslate(fPosition.x(), fPosition.y());
- // TODO: skew
-
- fMatrixNode->setMatrix(t);
-}
-
-PolyStarAdapter::PolyStarAdapter(sk_sp<sksg::Path> wrapped_node, Type t)
- : fPathNode(std::move(wrapped_node))
- , fType(t) {}
-
-void PolyStarAdapter::apply() {
- static constexpr int kMaxPointCount = 100000;
- const auto count = SkToUInt(SkTPin(SkScalarRoundToInt(fPointCount), 0, kMaxPointCount));
- const auto arc = sk_ieee_float_divide(SK_ScalarPI * 2, count);
-
- const auto pt_on_circle = [](const SkPoint& c, SkScalar r, SkScalar a) {
- return SkPoint::Make(c.x() + r * std::cos(a),
- c.y() + r * std::sin(a));
- };
-
- // TODO: inner/outer "roundness"?
-
- SkPath poly;
-
- auto angle = SkDegreesToRadians(fRotation);
- poly.moveTo(pt_on_circle(fPosition, fOuterRadius, angle));
- poly.incReserve(fType == Type::kStar ? count * 2 : count);
-
- for (unsigned i = 0; i < count; ++i) {
- if (fType == Type::kStar) {
- poly.lineTo(pt_on_circle(fPosition, fInnerRadius, angle + arc * 0.5f));
- }
- angle += arc;
- poly.lineTo(pt_on_circle(fPosition, fOuterRadius, angle));
- }
-
- poly.close();
- fPathNode->setPath(poly);
-}
-
-GradientAdapter::GradientAdapter(sk_sp<sksg::Gradient> grad, size_t stopCount)
- : fGradient(std::move(grad))
- , fStopCount(stopCount) {}
-
-void GradientAdapter::apply() {
- this->onApply();
-
- // |fColorStops| holds |fStopCount| x [ pos, r, g, g ] + ? x [ pos, alpha ]
-
- if (fColorStops.size() < fStopCount * 4 || ((fColorStops.size() - fStopCount * 4) % 2)) {
- SkDebugf("!! Invalid gradient stop array size: %zu", fColorStops.size());
- return;
- }
-
- std::vector<sksg::Gradient::ColorStop> stops;
-
- // TODO: merge/lerp opacity stops
- const auto csEnd = fColorStops.cbegin() + fStopCount * 4;
- for (auto cs = fColorStops.cbegin(); cs != csEnd; cs += 4) {
- const auto pos = cs[0];
- const VectorValue rgb({ cs[1], cs[2], cs[3] });
-
- stops.push_back({ pos, ValueTraits<VectorValue>::As<SkColor>(rgb) });
- }
-
- fGradient->setColorStops(std::move(stops));
-}
-
-LinearGradientAdapter::LinearGradientAdapter(sk_sp<sksg::LinearGradient> grad, size_t stopCount)
- : INHERITED(std::move(grad), stopCount) {}
-
-void LinearGradientAdapter::onApply() {
- auto* grad = static_cast<sksg::LinearGradient*>(fGradient.get());
- grad->setStartPoint(this->startPoint());
- grad->setEndPoint(this->endPoint());
-}
-
-RadialGradientAdapter::RadialGradientAdapter(sk_sp<sksg::RadialGradient> grad, size_t stopCount)
- : INHERITED(std::move(grad), stopCount) {}
-
-void RadialGradientAdapter::onApply() {
- auto* grad = static_cast<sksg::RadialGradient*>(fGradient.get());
- grad->setStartCenter(this->startPoint());
- grad->setEndCenter(this->startPoint());
- grad->setStartRadius(0);
- grad->setEndRadius(SkPoint::Distance(this->startPoint(), this->endPoint()));
-}
-
-TrimEffectAdapter::TrimEffectAdapter(sk_sp<sksg::TrimEffect> trimEffect)
- : fTrimEffect(std::move(trimEffect)) {
- SkASSERT(fTrimEffect);
-}
-
-void TrimEffectAdapter::apply() {
- // BM semantics: start/end are percentages, offset is "degrees" (?!).
- const auto start = fStart / 100,
- end = fEnd / 100,
- offset = fOffset / 360;
-
- auto startT = SkTMin(start, end) + offset,
- stopT = SkTMax(start, end) + offset;
- auto mode = SkTrimPathEffect::Mode::kNormal;
-
- if (stopT - startT < 1) {
- startT -= SkScalarFloorToScalar(startT);
- stopT -= SkScalarFloorToScalar(stopT);
-
- if (startT > stopT) {
- SkTSwap(startT, stopT);
- mode = SkTrimPathEffect::Mode::kInverted;
- }
- } else {
- startT = 0;
- stopT = 1;
- }
-
- fTrimEffect->setStart(startT);
- fTrimEffect->setStop(stopT);
- fTrimEffect->setMode(mode);
-}
-
-} // namespace skottie