skia2/modules/skottie/include/SkottieProperty.h

146 lines
5.0 KiB
C
Raw Normal View History

/*
* Copyright 2018 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkottieProperty_DEFINED
#define SkottieProperty_DEFINED
#include "include/core/SkColor.h"
#include "include/core/SkPaint.h"
#include "include/core/SkPoint.h"
#include "include/core/SkRefCnt.h"
#include "include/core/SkTypeface.h"
#include "include/utils/SkTextUtils.h"
#include "modules/skottie/src/text/SkottieShaper.h"
#include <functional>
class SkMatrix;
namespace sksg {
class Color;
class OpacityEffect;
} // namespace sksg
namespace skottie {
using ColorPropertyValue = SkColor;
using OpacityPropertyValue = float;
enum class TextPaintOrder : uint8_t {
kFillStroke,
kStrokeFill,
};
struct TextPropertyValue {
sk_sp<SkTypeface> fTypeface;
SkString fText;
Reland "[skottie] AllCaps support" This reverts commit 6142500513e17b9ace6ee89af9e52dd8041a236f. Reason for revert: relanding with fixes Original change's description: > Revert "[skottie] AllCaps support" > > This reverts commit efc7ca4a719029ea636addec9f0c138df01ce420. > > Reason for revert: broke Chromium, NoDEPS builds > > Original change's description: > > [skottie] AllCaps support > > > > AfterEffects and Bodymovin support an "AllCaps" text flag which forces > > text capitalization. > > > > * add toUpper() bindings to SkUnicode/SkICU > > * add capitalization options to SkottieShaper > > * plumb existing Lottie 'ca' (AllCaps) prop > > * also fix a couple of unrelated whoopsies > > > > Change-Id: I8e80921b66530e9830938004946082c6e450b04b > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/445104 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Florin Malita <fmalita@google.com> > > TBR=bungeman@google.com,fmalita@chromium.org,fmalita@google.com,jlavrova@google.com,skcq-be@skia-corp.google.com.iam.gserviceaccount.com > > Change-Id: I3bb43f37f07cfc021e397df578499a4c4da15ca3 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/444980 > Reviewed-by: Florin Malita <fmalita@google.com> > Commit-Queue: Florin Malita <fmalita@google.com> Change-Id: Id729e09d4cade0cead193ffc5e6bd4fea1cdcff6 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/445598 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Florin Malita <fmalita@google.com>
2021-09-03 13:45:53 +00:00
float fTextSize = 0,
fMinTextSize = 0, // when auto-sizing
fMaxTextSize = std::numeric_limits<float>::max(), // when auto-sizing
fStrokeWidth = 0,
fLineHeight = 0,
fLineShift = 0,
fAscent = 0;
size_t fMaxLines = 0; // when auto-sizing
Reland "[skottie] AllCaps support" This reverts commit 6142500513e17b9ace6ee89af9e52dd8041a236f. Reason for revert: relanding with fixes Original change's description: > Revert "[skottie] AllCaps support" > > This reverts commit efc7ca4a719029ea636addec9f0c138df01ce420. > > Reason for revert: broke Chromium, NoDEPS builds > > Original change's description: > > [skottie] AllCaps support > > > > AfterEffects and Bodymovin support an "AllCaps" text flag which forces > > text capitalization. > > > > * add toUpper() bindings to SkUnicode/SkICU > > * add capitalization options to SkottieShaper > > * plumb existing Lottie 'ca' (AllCaps) prop > > * also fix a couple of unrelated whoopsies > > > > Change-Id: I8e80921b66530e9830938004946082c6e450b04b > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/445104 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Florin Malita <fmalita@google.com> > > TBR=bungeman@google.com,fmalita@chromium.org,fmalita@google.com,jlavrova@google.com,skcq-be@skia-corp.google.com.iam.gserviceaccount.com > > Change-Id: I3bb43f37f07cfc021e397df578499a4c4da15ca3 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/444980 > Reviewed-by: Florin Malita <fmalita@google.com> > Commit-Queue: Florin Malita <fmalita@google.com> Change-Id: Id729e09d4cade0cead193ffc5e6bd4fea1cdcff6 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/445598 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Florin Malita <fmalita@google.com>
2021-09-03 13:45:53 +00:00
SkTextUtils::Align fHAlign = SkTextUtils::kLeft_Align;
Shaper::VAlign fVAlign = Shaper::VAlign::kTop;
Shaper::ResizePolicy fResize = Shaper::ResizePolicy::kNone;
Shaper::LinebreakPolicy fLineBreak = Shaper::LinebreakPolicy::kExplicit;
Shaper::Direction fDirection = Shaper::Direction::kLTR;
Shaper::Capitalization fCapitalization = Shaper::Capitalization::kNone;
SkRect fBox = SkRect::MakeEmpty();
SkColor fFillColor = SK_ColorTRANSPARENT,
fStrokeColor = SK_ColorTRANSPARENT;
TextPaintOrder fPaintOrder = TextPaintOrder::kFillStroke;
SkPaint::Join fStrokeJoin = SkPaint::Join::kMiter_Join;
Reland "[skottie] AllCaps support" This reverts commit 6142500513e17b9ace6ee89af9e52dd8041a236f. Reason for revert: relanding with fixes Original change's description: > Revert "[skottie] AllCaps support" > > This reverts commit efc7ca4a719029ea636addec9f0c138df01ce420. > > Reason for revert: broke Chromium, NoDEPS builds > > Original change's description: > > [skottie] AllCaps support > > > > AfterEffects and Bodymovin support an "AllCaps" text flag which forces > > text capitalization. > > > > * add toUpper() bindings to SkUnicode/SkICU > > * add capitalization options to SkottieShaper > > * plumb existing Lottie 'ca' (AllCaps) prop > > * also fix a couple of unrelated whoopsies > > > > Change-Id: I8e80921b66530e9830938004946082c6e450b04b > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/445104 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Florin Malita <fmalita@google.com> > > TBR=bungeman@google.com,fmalita@chromium.org,fmalita@google.com,jlavrova@google.com,skcq-be@skia-corp.google.com.iam.gserviceaccount.com > > Change-Id: I3bb43f37f07cfc021e397df578499a4c4da15ca3 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/444980 > Reviewed-by: Florin Malita <fmalita@google.com> > Commit-Queue: Florin Malita <fmalita@google.com> Change-Id: Id729e09d4cade0cead193ffc5e6bd4fea1cdcff6 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/445598 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Florin Malita <fmalita@google.com>
2021-09-03 13:45:53 +00:00
bool fHasFill = false,
fHasStroke = false;
bool operator==(const TextPropertyValue& other) const;
bool operator!=(const TextPropertyValue& other) const;
};
struct TransformPropertyValue {
SkPoint fAnchorPoint,
fPosition;
SkVector fScale;
SkScalar fRotation,
fSkew,
fSkewAxis;
bool operator==(const TransformPropertyValue& other) const;
bool operator!=(const TransformPropertyValue& other) const;
};
namespace internal { class AnimationBuilder; }
/**
* Property handles are adapters between user-facing AE model/values
* and the internal scene-graph representation.
*/
template <typename ValueT, typename NodeT>
class SK_API PropertyHandle final {
public:
explicit PropertyHandle(sk_sp<NodeT> node) : fNode(std::move(node)) {}
~PropertyHandle();
ValueT get() const;
void set(const ValueT&);
private:
const sk_sp<NodeT> fNode;
};
namespace internal {
class TextAdapter;
class TransformAdapter2D;
} // namespace internal
using ColorPropertyHandle = PropertyHandle<ColorPropertyValue,
sksg::Color>;
using OpacityPropertyHandle = PropertyHandle<OpacityPropertyValue,
sksg::OpacityEffect>;
using TextPropertyHandle = PropertyHandle<TextPropertyValue,
internal::TextAdapter>;
using TransformPropertyHandle = PropertyHandle<TransformPropertyValue,
internal::TransformAdapter2D>;
/**
* A PropertyObserver can be used to track and manipulate certain properties of "interesting"
* Lottie nodes.
*
* When registered with an animation builder, PropertyObserver receives notifications for
* various properties of layer and shape nodes. The |node_name| argument corresponds to the
* name ("nm") node property.
*/
class SK_API PropertyObserver : public SkRefCnt {
public:
enum class NodeType {COMPOSITION, LAYER, EFFECT, OTHER};
template <typename T>
using LazyHandle = std::function<std::unique_ptr<T>()>;
virtual void onColorProperty (const char node_name[],
const LazyHandle<ColorPropertyHandle>&);
virtual void onOpacityProperty (const char node_name[],
const LazyHandle<OpacityPropertyHandle>&);
virtual void onTextProperty (const char node_name[],
const LazyHandle<TextPropertyHandle>&);
virtual void onTransformProperty(const char node_name[],
const LazyHandle<TransformPropertyHandle>&);
virtual void onEnterNode(const char node_name[], NodeType node_type);
virtual void onLeavingNode(const char node_name[], NodeType node_type);
};
} // namespace skottie
#endif // SkottieProperty_DEFINED