Commit Graph

86 Commits

Author SHA1 Message Date
Florin Malita
63136afbd0 [sksg] Fix group hit-testing order
Change-Id: Idc25109a598caabf01e3ab61dc97f984ff453d40
Reviewed-on: https://skia-review.googlesource.com/c/191664
Commit-Queue: Mike Reed <reed@google.com>
Auto-Submit: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
2019-02-12 21:10:00 +00:00
Florin Malita
eb46bd892d [sksg] Hit-testing API
Introduce RenderNode::nodeAt(const SkPoint&) as the entry point for the hit-testing API.

This is backed by a onNodeAt() virtual, which gets dispatched throughout the render DAG,
and normally stops at the first leaf Draw node in encounters.

To support the implementation, introduce a GeometryNode::contains(const SkPoint&) API.

This is backed by a onContains() virtual, overridden in each concrete geometry class.

Expose nodeAt() on sksg::Scene, and add some basic unit tests.

Change-Id: I0c8abd9d1e51ecf2d8b4dd699f325cd636e21084
Reviewed-on: https://skia-review.googlesource.com/c/191296
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
2019-02-12 15:01:05 +00:00
Florin Malita
ef26fcb13f [sksg] Fix image filter content inval rect tracking
Image filters cannot let descendent damage pass through, as they may
transform their inputs arbitrarily.

Introduce the notion of "damage override" SG nodes (nodes which block
descendent damage and replace it with their own), and update
ImageFilterEffect to opt in for this behavior.

Also make InvalidationController damage dispatch optional (such that we
don't accumulate inval rects unnecessarily).

TBR=
Change-Id: Ie9f7d32ecdcc77dbe6ea009aed9ce269b3649a04
Reviewed-on: https://skia-review.googlesource.com/c/191005
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-02-10 21:43:20 +00:00
Florin Malita
dafd65217b Reland "[skottie] Add drop shadow support"
This reverts commit 0b36acdad9.

Reason for revert: Cannot repro build failure - maybe flake?  Trying again.

Original change's description:
> Revert "[skottie] Add drop shadow support"
> 
> This reverts commit 1f43a4359d.
> 
> Reason for revert: Android build failures.
> 
> Original change's description:
> > [skottie] Add drop shadow support
> > 
> > Introduce the machinery required for general image filters in SkSG +
> > a concrete drop shadow image filter effect.
> > 
> > Wire it all up with Skottie to support drop-shadow layer effects.
> > 
> > Change-Id: I98e9669852f58ba6481439a7fda4a56ec6c59b8a
> > Reviewed-on: https://skia-review.googlesource.com/c/190426
> > Reviewed-by: Mike Reed <reed@google.com>
> > Commit-Queue: Florin Malita <fmalita@chromium.org>
> 
> TBR=fmalita@chromium.org,reed@google.com
> 
> Change-Id: I31d38ed4d4a15b77d1d1218b2677a891978332cb
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://skia-review.googlesource.com/c/190981
> Reviewed-by: Florin Malita <fmalita@chromium.org>
> Commit-Queue: Florin Malita <fmalita@chromium.org>

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

Change-Id: Ic3f949f40ed4651715b6de906882f5f4522f91b9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/191040
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-02-10 01:49:55 +00:00
Florin Malita
0b36acdad9 Revert "[skottie] Add drop shadow support"
This reverts commit 1f43a4359d.

Reason for revert: Android build failures.

Original change's description:
> [skottie] Add drop shadow support
> 
> Introduce the machinery required for general image filters in SkSG +
> a concrete drop shadow image filter effect.
> 
> Wire it all up with Skottie to support drop-shadow layer effects.
> 
> Change-Id: I98e9669852f58ba6481439a7fda4a56ec6c59b8a
> Reviewed-on: https://skia-review.googlesource.com/c/190426
> Reviewed-by: Mike Reed <reed@google.com>
> Commit-Queue: Florin Malita <fmalita@chromium.org>

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

Change-Id: I31d38ed4d4a15b77d1d1218b2677a891978332cb
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/190981
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-02-09 14:41:40 +00:00
Florin Malita
1f43a4359d [skottie] Add drop shadow support
Introduce the machinery required for general image filters in SkSG +
a concrete drop shadow image filter effect.

Wire it all up with Skottie to support drop-shadow layer effects.

Change-Id: I98e9669852f58ba6481439a7fda4a56ec6c59b8a
Reviewed-on: https://skia-review.googlesource.com/c/190426
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-02-09 13:35:57 +00:00
Florin Malita
8ec9a60bdb [skottie] Initial repeater support
TBR=reed
Bug: skia:8399
Change-Id: Iadaf6b7b363e345d736efd3fd3a5f401963a457b
Reviewed-on: https://skia-review.googlesource.com/c/188631
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2019-02-02 04:30:51 +00:00
Florin Malita
c91527f297 [skottie] Fix rect/rrect/ellipse direction and starting point
Geometry effects (trim-path, etc) are sensitive to the SkPath conversion
direction and starting point.

Introduce SkSG{Rect,RRect) direction and initial point attributes, and
update Skottie to initialize these according to the AE model.

TBR=
Bug: skia:8303, skia:8328, skia:8299
Change-Id: I5ec82d747e015067c7fc416c9eded6eea73d759a
Reviewed-on: https://skia-review.googlesource.com/c/185689
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-01-22 17:56:40 +00:00
Florin Malita
760a052c1e [sksg] Consolidate Matrix node implementations
Matrix and Matrix44 look almost identical -- consolidate as a template
class.

TBR=
Change-Id: I8f299a6138f190eb18de2e67b051307cf6a33383
Reviewed-on: https://skia-review.googlesource.com/c/182973
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-01-10 21:50:54 +00:00
Florin Malita
13c1b9649a [sksg] Add 3x3 Concat Transform specialization
When both inputs are 3x3, use 3x3 Concat.

TBR=
Change-Id: Ife6a98792c2ed57a2a987fe5d0bdf265aeb64b0a
Reviewed-on: https://skia-review.googlesource.com/c/182968
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-01-10 20:12:37 +00:00
Florin Malita
df0e1af263 [sksg] Hide some implementation methods from public Transform API
TBR=
Change-Id: I29ad15e83a64e6d9f13cd601379c6b624cba4ab5
Reviewed-on: https://skia-review.googlesource.com/c/182817
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-01-10 17:41:01 +00:00
Florin Malita
919e209d1a [sksg] 4x4 matrix support
Refactor the scene graph transform hierarchy to support 4x4 matrices:

  * rename current Transform to TransformEffect (operates as a render tree effect)
  * introduce a new Transform abstract base class, to replace current Matrix
  * refactor existing Matrix as a Transform specialization
  * introduce a new Matrix44 Transform specialization
  * refactor the existing composition helper (ComposedMatrix) as Concat,
    a Transform specialization (using composition instead of Matrix inheritance)

Change-Id: Ic3c1b499e10a0a229a7a76d4bef3dbc6a8b49194
Reviewed-on: https://skia-review.googlesource.com/c/182666
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2019-01-10 02:06:54 +00:00
Mike Reed
722dd619cb use SkFont more
Bug: skia:
Change-Id: Ic88f04cb8326fd34596d31777cf853866d329d44
Reviewed-on: https://skia-review.googlesource.com/c/175593
Commit-Queue: Florin Malita <fmalita@chromium.org>
Auto-Submit: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2018-12-07 22:10:39 +00:00
Brian Salomon
2335644771 Fix occurrences of "-Wextra-semi-stmt"
Docs-Preview: https://skia.org/?cl=173761
Change-Id: Iefdb91cd28eabb4b01b7b42a4f300b0b4caf05d9
Reviewed-on: https://skia-review.googlesource.com/c/173761
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
2018-11-30 23:23:09 +00:00
Florin Malita
f7d6ac1f0d [sksg] Expose SkFont::Edging in TextNode
(instead of SkPaint flags)

TBR=
Change-Id: I31566f29d7922b26898234c357d8d249ebc1e094
Reviewed-on: https://skia-review.googlesource.com/c/172504
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-11-21 22:48:00 +00:00
Mike Reed
2ed7820970 use SkFont in a lot of places
Bug: skia:
Change-Id: I86df3f650eb5bb0219b3251ef5f8e95403838bba
Reviewed-on: https://skia-review.googlesource.com/c/172482
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
2018-11-21 20:44:03 +00:00
Florin Malita
0a8b4e1acb [skottie] Add support for explicit text line breaks
To support wacky explicit AE line breaking:

  * add sksg::TextBlob (SG node backed by externally-built text blobs)
  * add skottie::TextAdapter logic to handle \r line breaks and construct
    the blob explicitly

Change-Id: I2eed9adf28a8c3c1f7de5bbec3d32abd7ddbd484
Reviewed-on: https://skia-review.googlesource.com/c/167384
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-11-04 15:19:46 +00:00
Mike Reed
3a42ec0ee7 hide the SkPaint::Align enum entirely
Bug: skia:2664
Change-Id: I080b015dbcb3a3cd73bb6847f3243a996d5f7b7d
Reviewed-on: https://skia-review.googlesource.com/c/166282
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2018-10-30 17:26:47 +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
bee88d433d [sksg] Fix inval tracking in Group::removeChild()
TBR=
Change-Id: If3536f8be9d379402cde18c0482108fcf5ae01bb
Reviewed-on: https://skia-review.googlesource.com/158822
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-10-02 17:27:34 +00:00
Florin Malita
16322637c4 [sksg] Trim down sksg::Matrix size
Matrix nodes are most often not composed outside of the DAG.  Split into
a basic Matrix class and a (private) ComposedMatrix subclass.

TBR=
Bug: skia:8340
Change-Id: I3c182e10ae5fa20d0639c1031523dba3956b75bb
Reviewed-on: https://skia-review.googlesource.com/153883
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-09-12 15:28:18 +00:00
Florin Malita
97df5dcb37 [sksg] Stop caching full SkPaints in Paint nodes
Create on the fly, when needed.

TBR=
Bug: skia:8340
Change-Id: I4c319821a6d6e84e0ec37e8858c4a89ba1668626
Reviewed-on: https://skia-review.googlesource.com/153141
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-09-11 21:14:25 +00:00
Florin Malita
f2ade42f3c [skottie] Shrink SkPaths
TBR=
Bug: skia:8340
Change-Id: Iafd5f60c3802e999da4f3629975aa317ae722243
Reviewed-on: https://skia-review.googlesource.com/153561
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-09-11 20:59:20 +00:00
Florin Malita
cd9d074578 [skottie] More efficient group sizing
Replace sksg::Group::shrink_to_fit() with a factory accepting an
externally-built children array.

This provides more control for clients (e.g. reserve() instead of
shrink_to_fit()).

Change-Id: Iad587435e0e9da15251a9d3bc2510ca945950b5d
Reviewed-on: https://skia-review.googlesource.com/152861
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@google.com>
2018-09-10 14:17:30 +00:00
Florin Malita
ca858b68c3 [sksg] Switch containers from SkT(D)Array to std::vector
Skia's containers grow too aggressively, stick to STL containers for
reduced head overhead.

Also introduce Group::shrink_to_fit() to be used when clients know they
are done adding children to a group.

TBR=
Bug: skia:8340
Change-Id: I842db2e80c7cfb65a462e4859af6e63496863a5c
Reviewed-on: https://skia-review.googlesource.com/151161
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-09-02 18:04:29 +00:00
Florin Malita
77af386c13 [sksg] Explicit text alignment
Work around for https://bugs.chromium.org/p/skia/issues/detail?id=8252

Change-Id: Icae3f69f07a2c95302cfbb3833185517f43d326e
Reviewed-on: https://skia-review.googlesource.com/147218
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
2018-08-15 21:54:05 +00:00
Florin Malita
679d05c48a [sksg] Simplify ScopedRenderContext
ScopedRenderContext tries really hard to avoid unnecessary RenderContext
initializations.

This is most likely unneeded because

  a) the structure is quite lightweight

and

  b) all ScopedRenderContext instantiation sites imediately call setters
     which require a writable context (assuming no-op args are uncommon)

Let's get rid of that over-engineered gunk.

Bug: skia:
Change-Id: Ieedc20c63c66b4d43744359e881c20639654040c
Reviewed-on: https://skia-review.googlesource.com/146761
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-08-10 17:54:29 +00:00
Florin Malita
e1c9d3c9e2 [skottie] Optimize color filter layerization
Use the deferred paint override mechanism, similar to opacity.

Change-Id: I78fa7f5d73ef333480ec72b0cb663819b1de2404
Reviewed-on: https://skia-review.googlesource.com/146527
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-08-09 21:03:12 +00:00
Florin Malita
c0132ffa64 [skottie] Optimize opacity layerization
- plumb a RenderContext RenderNode::render() argument to track pending
    opacity

  - defer opacity application until we can determine whether a layer is
    required (group with multiple children) or the opacity can be pushed
    onto the draw paint (for single/atomic draws)

Bug: skia:
Change-Id: I962ba08bad780395d5d738307bde986e9efa502b
Reviewed-on: https://skia-review.googlesource.com/146445
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-08-09 14:48:02 +00:00
Mike Reed
5edcd31f2c migrating SkTDArray towards std::vector api
fix for https://skia-review.googlesource.com/c/skia/+/146140

Change from original was to include <initializer_list>

Bug: skia:
Change-Id: Ie36426fcf7ce778a95e2b656ce80a9a394a8307c
Reviewed-on: https://skia-review.googlesource.com/146160
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
2018-08-08 15:51:44 +00:00
Mike Reed
f9ecb4e67e Revert "migrating SkTDArray towards std::vector api"
This reverts commit 79884be809.

Reason for revert: broke flutter build -- initializer_list?

Original change's description:
> migrating SkTDArray towards std::vector api
> 
> push -> push_back
> add some aliases to match std::vector: count, reserve, ...
> 
> Bug: skia:
> Change-Id: I1921c31d0d6e5ed3d622a0def6054c697be2d02f
> Reviewed-on: https://skia-review.googlesource.com/145884
> Reviewed-by: Mike Klein <mtklein@google.com>
> Reviewed-by: Florin Malita <fmalita@chromium.org>
> Commit-Queue: Mike Reed <reed@google.com>

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

Change-Id: Ib6132b725aaed7c01287e3e8c2b5a14da3d3d7e9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/146140
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
2018-08-08 15:14:37 +00:00
Mike Reed
79884be809 migrating SkTDArray towards std::vector api
push -> push_back
add some aliases to match std::vector: count, reserve, ...

Bug: skia:
Change-Id: I1921c31d0d6e5ed3d622a0def6054c697be2d02f
Reviewed-on: https://skia-review.googlesource.com/145884
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Mike Reed <reed@google.com>
2018-08-08 14:43:28 +00:00
Florin Malita
36216fb0ac [skottie] Initial Fill layer effect support
Overwrite the layer content color with a color filter.

TBR=
Change-Id: I39f920225affb2641cc11ab1f0c1456d89b47cb7
Reviewed-on: https://skia-review.googlesource.com/145730
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-08-07 15:34:34 +00:00
Florin Malita
f2dd96fbbc [sksg] Fix image filter quality handling
TBR=

Change-Id: I06bd30650f1a9d70225b3e3374313f672dae3a8d
Reviewed-on: https://skia-review.googlesource.com/144343
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-07-30 15:38:45 +00:00
Florin Malita
418e658a69 [skottie] Apply fully opaque masks as clips
We already have a clip optimization when there is only one opaque mask.

Extend to cover multiple opaque masks, using Merge scene nodes.

TBR=
Change-Id: I24b61f0c0d080b13438c6777e98a8e2fefd09fdd
Reviewed-on: https://skia-review.googlesource.com/140002
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2018-07-10 13:28:15 +00:00
Florin Malita
3b526b05d6 "Modularize" SkSG
* relocate all SkSG-related files under modules/sksg/
* fix various tidbits to make non-sksg builds possible
* drop obsolete SampleSGInval.cpp

Change-Id: I54e6c5bb1a09f45030fa8d607b3eb3f7cba78957
Reviewed-on: https://skia-review.googlesource.com/130025
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@google.com>
2018-05-25 17:11:52 +00:00