blob: 4f339641ba290bfe923612292d159f72ceabd50a [file] [log] [blame]
/*
* Copyright 2019 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkottieTextAdapter_DEFINED
#define SkottieTextAdapter_DEFINED
#include "modules/skottie/src/SkottieAdapter.h"
#include "modules/skottie/src/text/SkottieShaper.h"
#include "modules/skottie/src/text/TextAnimator.h"
#include "modules/skottie/src/text/TextValue.h"
#include <vector>
class SkFontMgr;
namespace skottie {
namespace internal {
class TextAdapter final : public SkNVRefCnt<TextAdapter> {
public:
TextAdapter(sk_sp<sksg::Group> root, sk_sp<SkFontMgr>, sk_sp<Logger>, bool hasAnimators);
~TextAdapter();
ADAPTER_PROPERTY(Text, TextValue, TextValue())
const sk_sp<sksg::Group>& root() const { return fRoot; }
void applyAnimators(const std::vector<sk_sp<TextAnimator>>&);
private:
struct FragmentRec {
SkPoint fOrigin; // fragment position
sk_sp<sksg::Matrix<SkMatrix>> fMatrixNode;
sk_sp<sksg::Color> fFillColorNode,
fStrokeColorNode;
};
void addFragment(const Shaper::Fragment&);
void buildDomainMaps(const Shaper::Result&);
void apply();
void pushPropsToFragment(const TextAnimator::AnimatedProps&, const FragmentRec&) const;
void adjustLineTracking(const TextAnimator::ModulatorBuffer&,
const TextAnimator::DomainSpan&,
float line_tracking) const;
const sk_sp<sksg::Group> fRoot;
const sk_sp<SkFontMgr> fFontMgr;
sk_sp<Logger> fLogger;
const bool fHasAnimators;
std::vector<FragmentRec> fFragments;
TextAnimator::DomainMaps fMaps;
};
} // namespace internal
} // namespace skottie
#endif // SkottieTextAdapter_DEFINED