Commit Graph

47 Commits

Author SHA1 Message Date
Florin Malita
bb7d95f0f0 [skottie] Cleanup: relocate Animator base class out of SkSG
Decouple animator semantics from the scene graph.

No functional changes, just shuffling code around.

TBR=
Change-Id: I9a4592c424d2f8eb45b1b5f3e1f4b885cfaff9f6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/279421
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2020-03-26 20:50:10 +00:00
Shachar Langbeheim
be28d2e75e This change allows users of PropertyObserver to compose a full keypath for each of the modified properties.
Also this contains a demonstration of how to implement this in CustomPropertyManager.

Change-Id: If4770e47b87ed76c98a85de3c235ab27c913dbc0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/269696
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2020-02-12 14:13:13 +00:00
Florin Malita
ad9110026b [skottie] Separate text resize options
The sk_vj text property (Skottie extension) is currently mixing
vertical alignment and resizing semantics into a single enum.  This
precludes certain valid combinations.

Split the resize options into a separate enum (ResizePolicy), and ensure
support for all combinations.

Before:

  "sk_vj": 0 -> Shaper::VAlign::kVisualTop
  "sk_vj": 1 -> Shaper::VAlign::kVisualCenter
  "sk_vj": 2 -> Shaper::VAlign::kVisualBottom
  "sk_vj": 3 -> Shaper::VAlign::kVisualResizeToFit
  "sk_vj": 4 -> Shaper::VAlign::kVisualDownscaleToFit


After:

  "sk_vj": 0 -> Shaper::VAlign::kVisualTop
  "sk_vj": 1 -> Shaper::VAlign::kVisualCenter
  "sk_vj": 2 -> Shaper::VAlign::kVisualBottom

  "sk_rs": 0 -> Shaper::ResizePolicy::kNone
  "sk_rs": 1 -> Shaper::ResizePolicy::kScaleToFit
  "sk_rs": 2 -> Shaper::ResizePolicy::kDownscaleToFit


Bug: skia:9809, skia:9810
Change-Id: I631ae1fa31a9bc9c6958bb480354138591d504ff
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/267040
Reviewed-by: Ben Wagner <bungeman@google.com>
Reviewed-by: Isabel Ren <isabelren@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2020-01-29 00:09:42 +00:00
Florin Malita
a3936c8d29 [skottie] cleanup: move transform & camera adapters to own CUs
Shuffling code around, no functional changes.

TBR=
Change-Id: I9a045fa643fbcf52c58e1378d4d4c1566c0d35d7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/262225
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2020-01-06 18:16:14 +00:00
Florin Malita
cc92b27c78 [skottie] Optionally-deferred single-frame image loading
Normally, we load single-frame images upfront to avoid instantiating
an animator (as the image content is supposed to be constant).

In certain cases, deferred behavior is desirable (and the extra animator
overhead is minimal).

Generalize MultiFrameAnimator to handle single-frame assets, and add an
optional deferred mode for single-frame image loading
(Animation::Builder::Flags::kDeferImageLoading).

Bug: skia:9686
Change-Id: I4d166cd1a0bf34ccb8679e7553848c831a9193d2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/258000
Commit-Queue: Avinash Parchuri <aparchur@google.com>
Reviewed-by: Avinash Parchuri <aparchur@google.com>
2019-12-05 21:46:59 +00:00
Florin Malita
a4f1391bb9 Reland "[skottie] Remove defensive seek(0) from Animation ctor"
This reverts commit e0f374bf8f.

Reason for revert: including tracing fix
Original change's description:
> Revert "[skottie] Remove defensive seek(0) from Animation ctor"
>
> This reverts commit 042fe0847b.
>
> Reason for revert: SkottieTracing bots not happy.
>
> Original change's description:
> > [skottie] Remove defensive seek(0) from Animation ctor
> >
> > It potentially causes unnecessary image frame loads.
> >
> > Well-behaved clients should always seek() before calling render().
> >
> > Bug: skia:9686
> > Change-Id: If16257dc947941541d9ae8906b5ec7b1754dd7df
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/257625
> > Reviewed-by: Mike Reed <reed@google.com>
> > Commit-Queue: Florin Malita <fmalita@chromium.org>
>
> TBR=fmalita@chromium.org,reed@google.com,aparchur@google.com
>
> Change-Id: I3b7efdfc8e0aed1deb8756d585f946b4309d469d
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:9686
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/257630
> Reviewed-by: Florin Malita <fmalita@chromium.org>
> Commit-Queue: Florin Malita <fmalita@chromium.org>

TBR=fmalita@chromium.org,reed@google.com,aparchur@google.com

Bug: skia:9686
Change-Id: Ib8a5d76821685cfa7e7dac61bcc31da5629d9055
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/257632
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-12-03 18:26:40 +00:00
Florin Malita
e0f374bf8f Revert "[skottie] Remove defensive seek(0) from Animation ctor"
This reverts commit 042fe0847b.

Reason for revert: SkottieTracing bots not happy.

Original change's description:
> [skottie] Remove defensive seek(0) from Animation ctor
> 
> It potentially causes unnecessary image frame loads.
> 
> Well-behaved clients should always seek() before calling render().
> 
> Bug: skia:9686
> Change-Id: If16257dc947941541d9ae8906b5ec7b1754dd7df
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/257625
> Reviewed-by: Mike Reed <reed@google.com>
> Commit-Queue: Florin Malita <fmalita@chromium.org>

TBR=fmalita@chromium.org,reed@google.com,aparchur@google.com

Change-Id: I3b7efdfc8e0aed1deb8756d585f946b4309d469d
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:9686
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/257630
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-12-03 17:17:36 +00:00
Florin Malita
042fe0847b [skottie] Remove defensive seek(0) from Animation ctor
It potentially causes unnecessary image frame loads.

Well-behaved clients should always seek() before calling render().

Bug: skia:9686
Change-Id: If16257dc947941541d9ae8906b5ec7b1754dd7df
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/257625
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-12-03 16:49:10 +00:00
Brian Osman
85bf9314c0 Extracted Skottie's resource provider to a separate module
This is a first pass that should help with migrating clients.
The utility implementations of ResourceProvider are still in
skottie - those are going to be harder to move. More likely
that I'll add parallel implementations in skresources, then
we can shift clients over and delete the skottie copy.

I'm planning to use this interface/system in particles.

Bug: skia:9513
Change-Id: I004da685983c05cb1b48a75f8a23bd7d73a3f5af
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/256077
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2019-11-25 18:58:26 +00:00
Florin Malita
b9886864ca [skottie] Frame-index seek API (seekFrame)
Add a new seek method which takes a frame index. This provides more accurate
control when rendering of exact frames is needed.

Also surface the animation frame rate, and convert skottie_tool to use this
new mechanism (now defaulting to native animation frame rate).

Change-Id: Id870629e1747a9f70cbf4d3e770366df1299a519
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/249799
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
2019-10-21 17:14:36 +00:00
Florin Malita
2e4c283f78 [skottie] Clean up TextAdapter
Convert to DiscardableAdaptorBase, drop unneeded TextAnimatorList
wrapper, switch to raw pointer lambda captures.

TBR=
Change-Id: Idd43ad89a299ff344ff539b87cfb7790fef10b2f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/238441
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-09-03 15:29:36 +00:00
Avinash Parchuri
3a543aafd4 Reland "[skottie] Add onTextProperty support into PropertyObserver."
This is a reland of 2a558f5675

Original change's description:
> [skottie] Add onTextProperty support into PropertyObserver.
>
> This effectively allows observing/modifying properties at the text document level. By default
> Bodymovin exports even static TextDocuments as a single keyframe, so the unit-tests have been
> updated to store the property handles for verification.
>
> Change-Id: Iab8bcb29cdc5626d1abc34593ee9967b543428eb
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/231681
> Commit-Queue: Florin Malita <fmalita@chromium.org>
> Reviewed-by: Florin Malita <fmalita@chromium.org>

Change-Id: I3231607e469dcc321fa5900500a21f0f101c299c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/232628
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Ben Wagner <bungeman@google.com>
2019-08-06 13:50:41 +00:00
Greg Daniel
08ada8eda6 Revert "[skottie] Add onTextProperty support into PropertyObserver."
This reverts commit 2a558f5675.

Reason for revert: breaking Test-Win7-Clang-Golo-CPU-AVX-x86_64-Debug-All-NativeFonts_GDI bot

Original change's description:
> [skottie] Add onTextProperty support into PropertyObserver.
> 
> This effectively allows observing/modifying properties at the text document level. By default
> Bodymovin exports even static TextDocuments as a single keyframe, so the unit-tests have been
> updated to store the property handles for verification.
> 
> Change-Id: Iab8bcb29cdc5626d1abc34593ee9967b543428eb
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/231681
> Commit-Queue: Florin Malita <fmalita@chromium.org>
> Reviewed-by: Florin Malita <fmalita@chromium.org>

TBR=fmalita@chromium.org,aparchur@google.com,isabelren@google.com

Change-Id: I5298bb45cd12b86fb921aaf835b2340205fed1b5
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/232582
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2019-08-05 20:00:51 +00:00
Avinash Parchuri
2a558f5675 [skottie] Add onTextProperty support into PropertyObserver.
This effectively allows observing/modifying properties at the text document level. By default
Bodymovin exports even static TextDocuments as a single keyframe, so the unit-tests have been
updated to store the property handles for verification.

Change-Id: Iab8bcb29cdc5626d1abc34593ee9967b543428eb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/231681
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2019-08-05 18:20:59 +00:00
Avinash Parchuri
fe125a1103 [skottie] Rename TextValue to TextPropertyValue and make public.
This allows TextValues to be manipulated via the skottie::PropertyObserver API in a future change.

Change-Id: I96b22771d8ee9a90c8d41869ece814b0bfa4dc74
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/230917
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2019-07-31 13:30:32 +00:00
Avinash Parchuri
ca2640423d Change the visibility of skottie::PropertyHandle constructor to public.
This allows for unit-testing of implementations of the Skottie::PropertyObserver
API, which are expected to act on the PropertyHandle.

Change-Id: If7a7518db1571523de688f2ca3d40862f8a68ada
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/229880
Commit-Queue: Avinash Parchuri <aparchur@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2019-07-25 19:31:12 +00:00
Florin Malita
00d4f535c9 [skottie] Expose SG inval controller on seek()
- shift the revalidation phase from Scene::render() to Scene::animate()
 - pass an optional inval controller to Scene::animate() and Animation::seek()
 - hoist the showInval logic out of SkSG, into clients

This allows clients to track dirty regions and detect cases where no updates are needed.

Bug: skia:9267
Change-Id: I3d35bf58b6eee9bfeb6e127ba58e2b96713b772d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/229001
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
2019-07-22 16:33:15 +00:00
Florin Malita
1281ec3eec [skottie] Remove deprecated loadImageAsset API
TBR=
Change-Id: I95d5fdd9db0869afbe9cb3e4d2feafcb3b25f7af
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/228121
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-07-17 18:28:40 +00:00
Florin Malita
eb24735ec5 [skottie] Pass asset IDs to ResourceProvider::loadImageAsset
Also use explicit IDs as keys for the image asset cache.

Change-Id: I359ff026063318ace524d1205b4f0b3e7a6e1d5d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/227783
Commit-Queue: Florin Malita <fmalita@google.com>
Reviewed-by: Isabel Ren <isabelren@google.com>
2019-07-17 01:08:05 +00:00
Mike Reed
4b203ad7ac add motion blur params to skottie2movie
--motion_angle ... [default is 180]
--motion_samples ... [default is 1, for no motion blur]

Change-Id: Iec0f31655b3369f51e0b398efb2d5b156dcbaf2e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/221416
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Auto-Submit: Mike Reed <reed@google.com>
2019-06-17 23:13:16 +00:00
Mike Klein
c0bd9f9fe5 rewrite includes to not need so much -Ifoo
Current strategy: everything from the top

Things to look at first are the manual changes:

   - added tools/rewrite_includes.py
   - removed -Idirectives from BUILD.gn
   - various compile.sh simplifications
   - tweak tools/embed_resources.py
   - update gn/find_headers.py to write paths from the top
   - update gn/gn_to_bp.py SkUserConfig.h layout
     so that #include "include/config/SkUserConfig.h" always
     gets the header we want.

No-Presubmit: true
Change-Id: I73a4b181654e0e38d229bc456c0d0854bae3363e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/209706
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Hal Canary <halcanary@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2019-04-24 16:27:11 +00:00
Florin Malita
bd64f18947 [skottie] Layer blend mode support
Introduce sksg::BlendModeEffect and use to wrap Skottie layers based on
their "bm" property.

Depending on the presence of non-trivial layer blend modes and the nature
of the destination buffer (fully transparent vs. unknown/pre-filled), we
may now need to render animation frames into a separate layer for correct
compositing.

Track the presence of non-trivial layer blend modes such that we only incur
this extra layer overhead when needed.  Also allow clients to pass a "drawing
to fully transparent buffer" hint such that we can avoid the extra layer even
when blend modes are present.

Change-Id: Iaf645878666da4349d0bef8890bbecad23a0aa9b
Reviewed-on: https://skia-review.googlesource.com/c/194840
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-02-25 15:48:07 +00:00
Florin Malita
d2a18531e9 [skottie] Initial 3D layer transform support
TBR=
Change-Id: Ia849a0062a75863857edc66d8a5c1c62bfc6d00a
Reviewed-on: https://skia-review.googlesource.com/c/180362
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-01-02 19:28:33 +00:00
Florin Malita
91af8d8202 [skottie] Expose composition markers to embedders
Add a MarkerObserver interface (to replace the current
AnnotationObserver), and update CustomPropertyManager to intercept both
properties and markers.

TBR=
Change-Id: If79de419066916bc596316f0a551c75564069239
Reviewed-on: https://skia-review.googlesource.com/c/173766
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-12-01 04:44:03 +00:00
Florin Malita
8ac81b7fb5 [skottie] Add a custom property manager util class
To facilitate demo code consolidation, introduce a custom property
manager which filters for node names starting with '$' and treats all
properties sharing the same name unitarily.

Update the Colorize GM to use this new helper.

Also revisit the PropertyObserver interface:

 * aliases for client-facing value types
 * introduce a new (decomposed) TransformPropertyValue, to replace component-wise setters
 * consolidate the PropertyHandle interface to only expose get()/set()

Bug: skia:
Change-Id: I9aa9ee80c1fb57bbfbacab0fc3f017da909b24d9
Reviewed-on: https://skia-review.googlesource.com/c/173220
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-11-28 17:12:07 +00:00
Mike Klein
408ef21c79 Revert "replace SkNVRefCnt with SkRefCnt"
This reverts commit 0fb1ee98cf.

Reason for revert: looks like this increased size by ~8K.

Original change's description:
> replace SkNVRefCnt with SkRefCnt
> 
> SkNVRefCnt trades a small amount of code size (vtable) and runtime
> (vptr) memory usage for a larger amount of code size (templating).  It
> was written back in a time when all we were really thinking about was
> runtime memory usage, so I'm curious to see where performance, code
> size, and memory usage all move if it's removed.
> 
> Looking at the types I've changed here, my guess is that performance and
> memory usage will be basically unchanged, and that code size will drop a
> bit.  Nothing else it's nicer to have only one ref-counting base class.
> 
> Change-Id: I7d56a2b9e2b9fb000ff97792159ea1ff4f5e6f13
> Reviewed-on: https://skia-review.googlesource.com/c/166203
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Mike Klein <mtklein@google.com>

TBR=mtklein@google.com,bsalomon@google.com,mtklein@chromium.org

Change-Id: Ibcfcc4b523c466a535bea5ffa30d0fe2574c5bd7
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/166360
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2018-10-30 15:23:06 +00:00
Mike Klein
0fb1ee98cf replace SkNVRefCnt with SkRefCnt
SkNVRefCnt trades a small amount of code size (vtable) and runtime
(vptr) memory usage for a larger amount of code size (templating).  It
was written back in a time when all we were really thinking about was
runtime memory usage, so I'm curious to see where performance, code
size, and memory usage all move if it's removed.

Looking at the types I've changed here, my guess is that performance and
memory usage will be basically unchanged, and that code size will drop a
bit.  Nothing else it's nicer to have only one ref-counting base class.

Change-Id: I7d56a2b9e2b9fb000ff97792159ea1ff4f5e6f13
Reviewed-on: https://skia-review.googlesource.com/c/166203
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2018-10-30 13:26:12 +00:00
Florin Malita
d9c56b41d4 [skottie] Support external annotations
Add a callback mechanism for passing opaque/external annotation string
dictionaries to the embedder.

Change-Id: I2b053d6697cdd51a310ced687e2ba454ab39a24a
Reviewed-on: https://skia-review.googlesource.com/c/160900
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-10-09 20:22:08 +00:00
Mike Klein
e749c2f30c looks like Animation can use SkNVRefCnt?
It's not otherwise virtual, so this'll make it a pointer smaller.
Just happened to notice this when debugging WASM bindings with Kevin.

Change-Id: I9fc051048a9c9cd65927be5a7bbf3fd19ea7df33
Reviewed-on: https://skia-review.googlesource.com/c/159301
Commit-Queue: Mike Klein <mtklein@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2018-10-03 21:07:29 +00:00
Florin Malita
62c6bd910a [skottie] Multi-frame image support
Extend the image asset provider API to support animated/multi-frame images.

Add a GM based on SkAnimCodecPlayer + animated public domain GIF
(source: https://giphy.com/explore/public-domain).

Bug: skia:
Change-Id: Iaa596e01a7626ca6574db1ebc90632f5a9a02bdc
Reviewed-on: https://skia-review.googlesource.com/159162
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
2018-10-03 19:02:35 +00:00
Florin Malita
57b9d4071b [skottie] External logger support
Add a skottie::Logger interface, allowing clients to register for log events
from the animation builder.

Convert existing log messages to the new machinery.

Change-Id: If9083f89b27f197bfc0d8d81860bbacb6b764be3
Reviewed-on: https://skia-review.googlesource.com/c/158580
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-10-02 18:17:35 +00:00
Florin Malita
97b150e73b [skottie] External font loader tweaks
More general ResourceProvider font loading API:

1) font name argument
2) invoked unconditionally (regardless of whether an URL is present)

This provides more font control to the embedder.

Change-Id: I95557c75c2e0fe41ff68ee1b6cec8929405a74fc
Reviewed-on: https://skia-review.googlesource.com/157424
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-09-27 16:22:25 +00:00
Florin Malita
a85f3a138c Reland: [skottie] Initial property setters
Introduce a PropertyObserver to receive property notifications for layer
and shape nodes.

Properties are communicated using strongly-typed "handles", which act
as impedance adapters between the AE/BM model and the internal Skottie
model.

Reviewed-by: Mike Reed <reed@google.com>
Change-Id: Id155076faa8595f6b4d81672559f01c2e0c7455a
TBR=
Reviewed-on: https://skia-review.googlesource.com/156626
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-09-24 21:46:07 +00:00
Brian Salomon
39e1d13d35 Revert "[skottie] Initial property setters"
This reverts commit 7903957247.

Reason for revert: breaking SAN bots

Original change's description:
> [skottie] Initial property setters
> 
> Introduce a PropertyObserver to receive property notifications for layer
> and shape nodes.
> 
> Properties are communicated using strongly-typed "handles", which act
> as impedance adapters between the AE/BM model and the internal Skottie
> model.
> 
> Bug: skia:
> Change-Id: Ieb9be1ff843673f1f4fe900d3774c36956b7c941
> Reviewed-on: https://skia-review.googlesource.com/156186
> Commit-Queue: Florin Malita <fmalita@chromium.org>
> Reviewed-by: Mike Reed <reed@google.com>

TBR=fmalita@chromium.org,reed@google.com

Change-Id: Ic737766e305bb8dff10a817fa37f16fdfa051c93
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/156620
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2018-09-24 20:46:34 +00:00
Florin Malita
7903957247 [skottie] Initial property setters
Introduce a PropertyObserver to receive property notifications for layer
and shape nodes.

Properties are communicated using strongly-typed "handles", which act
as impedance adapters between the AE/BM model and the internal Skottie
model.

Bug: skia:
Change-Id: Ieb9be1ff843673f1f4fe900d3774c36956b7c941
Reviewed-on: https://skia-review.googlesource.com/156186
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
2018-09-24 19:03:06 +00:00
Florin Malita
4054351369 [skottie] Add support for external font loading
Web fonts are quite common in Lottie text assets.  Expand the
ResourceProvider interface to allow loading of external (web) font data.

Fonts are passed back to Skottie as opaque SkData, and instantiated
using SkFontMgr::makeFromData().

Change-Id: Ia4c994bd60e6a3bd47c90172c267ed5f897a38e4
Reviewed-on: https://skia-review.googlesource.com/155601
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Ben Wagner <bungeman@google.com>
2018-09-20 02:01:28 +00:00
Florin Malita
906cdf3fcd [skottie] Ref-counted ResourceProvider
Update the ResourceProvider interface to inherit from SkRefCnt, to
clarify sharing/ownership semantics in the Skottie Builder API.  Now it
follows the same pattern as SkFontMgr.

Change-Id: I7ff8ad39023d9ecfe609e0180b5aabf776672d48
Reviewed-on: https://skia-review.googlesource.com/148991
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-08-23 20:04:46 +00:00
Florin Malita
40c37426b3 [skottie] Plumb external SkFontMgr
Allow embedders to pass a font manager.

In order to avoid excessive factory API clutter, introduce an
Animation::Builder helper to wrap factory options.

Also clean up various bits:

  * hoist scene parsing out of the Animation ctor
  * store the animation duration explicitly (instead of unused fps)
  * plumb const SkFontMgr& internally (instead of a ref)

Change-Id: I3e180dfa85ba18c8462cfeb5a7385bef985ed6c4
Reviewed-on: https://skia-review.googlesource.com/148800
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-08-23 13:13:30 +00:00
Florin Malita
cc9c45d2e0 [skottie] Pre-flight animation in-point, out-point
Bug: skia:8264
Change-Id: Icde0e9d76f51e96f7e5246f1f87e5fa6f32d0a14
Reviewed-on: https://skia-review.googlesource.com/148020
Commit-Queue: Florin Malita <fmalita@chromium.org>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Auto-Submit: Florin Malita <fmalita@chromium.org>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
2018-08-20 14:20:16 +00:00
Florin Malita
0c8dca0f44 [skottie] ResourceManager tweaks
* pass the resource path explicitly
 * return SkData instead of a stream

Bug: skia:
Change-Id: I8a92fa34d78d5c996e2a26481fc3087e8737ec8e
Reviewed-on: https://skia-review.googlesource.com/145520
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
2018-08-06 18:50:22 +00:00
Florin Malita
6e487e67a3 [Skottie] Add raw data factory
... and funnel all existing factories through the new one.

Change-Id: I01ffb95abf178eacc0ad430e730d680800a509c7
Reviewed-on: https://skia-review.googlesource.com/145428
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-08-06 16:29:31 +00:00
Ben Wagner
d5148e3314 Move SkNoncopyable to include/private.
Change-Id: I62f60ea52faeebddecacf03d9429ac3f7c516b8e
Reviewed-on: https://skia-review.googlesource.com/141823
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
2018-07-17 21:39:51 +00:00
Florin Malita
7d42c44cdd [skottie] Switch to SkJSON
Convert to SkJSON APIs and remove RapidJSON dependency.

TBR=
Change-Id: I5b4fd78821a443326e3a5b370748d840b80ef279
Reviewed-on: https://skia-review.googlesource.com/134612
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-06-14 21:21:14 +00:00
Florin Malita
911ae4066e [skottie] Remove inPoint/outPoint/frameRate from public API
TBR=
Change-Id: Ice4de3abe350c4570c22e859a36dbd445527fa41
Reviewed-on: https://skia-review.googlesource.com/131300
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-06-01 13:10:15 +00:00
Florin Malita
c83a0deaa8 [skottie] Make the resource provider factory argument optional
Most of the existing clients don't care about nested resources.

Change-Id: Ie7991dd25ebbd679b5b49e5624772c7e19e7ec79
Reviewed-on: https://skia-review.googlesource.com/131141
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-05-31 16:39:13 +00:00
Florin Malita
a33447dab9 [skottie] Animation::animationTick() -> Animation::seek()
Replace poorly defined animationTick() with a normalized seek() method.

TBR=
Change-Id: Id2ea17bb426fe86fede0d6c8a3d93236902f10af
Reviewed-on: https://skia-review.googlesource.com/130508
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-05-29 18:58:16 +00:00
Florin Malita
3d856bdeee [skottie] Relocate to modules/skottie
TBR=
Change-Id: I218d251ca56578a3a7fd4fb86cba9abdc10fb3bd
Reviewed-on: https://skia-review.googlesource.com/130322
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-05-27 02:21:33 +00:00