Commit graph

135 commits

Author SHA1 Message Date
Mira Grudzinska
6025635712 lottie: apply direction to rect 2024-07-12 00:05:08 +09:00
Hermet Park
4cb327c9fd lottie: ++ scene composing optimization
retain resuable layer solid paint during animation.
2024-07-11 21:30:31 +09:00
Hermet Park
d95ec72335 lottie: ++ scene composing optimization
retain reusable precomp clipper shapes during animation.
2024-07-11 21:30:31 +09:00
Hermet Park
d6d4839f1a lottie: ++memory access stability
Internal matrix can be null.
This update prevents such cases by using a safer API.
2024-07-11 01:03:50 +09:00
Jinny You
fdc1ad4d2c lottie/text: Support text range selector (Phase 1)
This patch provides initial support for the text range selector. Full support will be added gradually in subsequent steps. This is the first step.

Text range selector with following properties:
1. Text Range Selector (Units)
2. Text Style
- Fill Color
- Fill Opacity
- Stroke Color
- Stroke Width
- Stroke Opacity
- Opacity
- Rotation
- Position
- Scale
2024-07-11 00:49:57 +09:00
Mira Grudzinska
e07ff127dd lottie: improvement 3d rotation
For rotation around the X and Y axes, the transformation
matrix was incorrectly created - elements e12 and e21
were omitted. Now fixed.
2024-07-10 16:58:03 +09:00
Hermet Park
44955b704e common/math: code refactoring
Replaced the prefix "math" with "tvg" namespace.
2024-07-10 00:21:02 +09:00
Hermet Park
79cf7ca5af common/math: introduced custom atan2()
the custom atan2 algorithm by Remez.
see: https://en.wikipedia.org/wiki/Remez_algorithm

This improved the Lottie example by ~2ms.
Total atan2 performance time was reduced by 43%
2024-07-09 23:50:37 +09:00
Hermet Park
e0116b90c4 lottie: code refactoring
- _draw() returns boolean whether merging shape is allowed or not.
- renamed some internal variables.
2024-07-09 12:27:32 +09:00
Mira Grudzinska
423e37d4d5 lottie: add support for image size
The width and height of the image must
be specified in the Lottie file and must
be taken into account during rendering.
2024-07-08 21:20:34 +09:00
Hermet Park
53a570e680 common: Fix a compilation failure on VS 2017
issue: https://github.com/thorvg/thorvg/issues/2512
2024-07-03 22:45:29 +09:00
Hermet Park
e8f1790e58 lottie: fix a regression bug of masking
InverseAlphaMasking should be applied as intended,
but it was mistakenly reverted to alpha.

regression in v0.14.0 by: 2c7a83406e
2024-07-03 13:21:47 +09:00
Hermet Park
cbf124632f lottie: allow image asset sharing among LottiePicture instances
Previously, the Lottie builder didn't account for image asset sharing
among multiple layers. This update rectifies the situation.

issue: https://github.com/thorvg/thorvg/issues/2428
2024-07-03 13:21:47 +09:00
Hermet Park
269ef22a97 lottie/builder: revise the masking update.
Append the mask shape to the previous one, instead of composition,
when it's able by the condition.

issue: https://github.com/thorvg/thorvg/issues/2426
2024-07-03 13:21:47 +09:00
Hermet Park
189b1bf4e7 common: code refactoring
replaced min/max with the standard library
2024-07-01 22:10:46 +09:00
Josh Soref
e061fa6628
common: fix 178+ spelling errors 2024-07-01 21:58:46 +09:00
Hermet Park
2c7a83406e lottie: hotfix for preventing a crash.
MaskMode=None is not properly addressed,
Prevent the crash from the use-case.

issue: https://github.com/thorvg/thorvg/issues/2426
2024-06-23 11:57:40 +09:00
Mira Grudzinska
d7ab592fb9 lottie: fix repeater order
Assigning numbers 1 or 2 to a bool always
resulted in true. Now fixed and repeated
shapes are drawn in the proper order.
If the repeater had no elements, iterating
shapes from the end would result in a segf.
This issue is now fixed.
2024-06-19 11:02:41 +09:00
Jinny You
e346cbb5ca lottie: Add exception for lottie doesn't have exported glyph
Added handling logic for missing characters to prevent program hang.
2024-06-05 14:43:28 +02:00
Jinny You
97a1aa136a lottie: Fix invalid font match
When Lottie has similar font names, it incorrectly matches fonts due to a logic bug.

This error causes an infinite loop when searching for glyphs.
2024-06-05 12:38:20 +09:00
Mira Grudzinska
33f5ea34c0 common: strokeTrim api introduced
New api sets/gets the trim of the stroke
along the defined path segment, allowing
control over which part of the stroke is
visible.

@issue: https://github.com/thorvg/thorvg/issues/2190
2024-06-05 11:55:36 +09:00
Mira Grudzinska
ca92d4a53b lottie: fix matte layer finding
Layer identifiers do not have to be unique within
the entire file - they are unique within a given
group. Searching the entire composition to find
the referenced matte was an incorrect approach.

Error introduced by 1ee79a6c2a

@Issue: https://github.com/thorvg/thorvg/issues/2349
2024-06-04 15:27:44 +03:00
Mira Grudzinska
5b6a774b04 common: fix typos & remove unused var 2024-06-04 11:20:59 +09:00
Hermet Park
9300de2d06 lottie/builder: revise the layer build logic
Promote the text/image updates to the layer level.
2024-05-30 13:00:42 +09:00
Hermet Park
309f7b6763 lottie: try packing data compactly. 2024-05-30 13:00:42 +09:00
Hermet Park
80d0f5397a lottie: optimize the internal data
encode the object name with the hash value
to save memory and enable fast data comparison.
2024-05-30 13:00:42 +09:00
Hermet Park
3cd30c3197 lottie: code refactoring & size reduction
- introduced a pasing logic for duplicates.
- renamed internal varaible, no logical changes.
- removed null checks after memory alloc fails.
- reduced 1kb size.
2024-05-30 13:00:42 +09:00
Hermet Park
7ce8db4d34 lottie: hotfix memory leaks by a regression
A regression bug by a recent change:
1ee79a6c2a
2024-05-30 12:52:39 +09:00
Mira Grudzinska
7b9bebe1de lottie: repeater transformation fix
In the case of a transformation (denoted as T1)
appearing after the repeater, but at the same
level of nesting, the objects to which the repeater
is applied should not consider T1. However,
the transformation of the repeater itself should
take T1 into account.
Also, it is possible to have several consecutive
repeaters, and all of them should be taken into
account. Until now, the last one was overwriting
the previous one.
2024-05-29 23:43:01 +09:00
Mira Grudzinska
1ee79a6c2a lottie: add 'tp' tag support
So far it hasn't been possible to specify
a matte layer - by default, it was the layer
above the calling layer. The 'tp' tag support
has been introduced, enabling referencing any
layer by its index.
In cases where the layer referencing the matte
was the first one, a segmentation fault was
observed. This issue has now been resolved.

@Issue: https://github.com/thorvg/thorvg/issues/2325
2024-05-29 23:17:13 +09:00
Hermet Park
a1818cf62b common: code refactoring
Replace the math functions with operator overloading.
This should potentially reduce the code size.
2024-05-27 10:48:46 +09:00
Mira Grudzinska
9a455632a2 lottie: matrix multiplication fix
In case the shapes could be merged, matrix
multiplication was not stored in any variable,
resulting in one of the transformations not
being applied.
2024-05-20 22:03:07 +09:00
Hermet Park
c261cc55ac lottie: code clean up
- remove an unused return value.
- move bodies from header to implementation file.
- no logical changes.
2024-05-20 11:47:26 +09:00
Hermet Park
f02fccf57c lottie: keep the code clean and neat.
- Separate the rounded corner logic from the updateStar
  since its logic has become too lengthy and complicated.
- Revise the path generation to eliminate duplicates.
2024-05-16 19:41:56 +09:00
Mira Grudzinska
dc6ddd83f5 lottie: implement skew transformation
Added support for skew transformation by
a specified angle around a specified axis.
Applied to layers and shapes, not to repeaters.

@Issue: https://github.com/thorvg/thorvg/issues/2262
2024-05-16 17:50:37 +09:00
Mira Grudzinska
3b22f008f7 lottie: fix access violation while updating
Fix access issue when iterating over children
in case of an empty container.

@Issue: https://github.com/thorvg/thorvg/issues/2283
2024-05-16 17:00:10 +09:00
Hermet Park
dd091f4e0c lottie: fix compiler warnings. [-Wsign-compare] 2024-05-16 13:50:15 +09:00
Mira Grudzinska
3077d983e6 lottie: handle roundness in path
Implemented rounding of corners between
bezier curves that are straight lines.

@Issue: https://github.com/thorvg/thorvg/issues/2230
2024-05-16 12:51:16 +09:00
Mira Grudzinska
638f42f19e lottie: support rounded stars
Implementation of the roundness property
for a polystar. Only the corners that were
not subject to rounding by the inner or
outer roundness parameters are affected.

@Issue: https://github.com/thorvg/thorvg/issues/2230
2024-05-16 12:51:11 +09:00
Jinny You
1e7cf2f5f9 lottie/text: Support text tracking
Text Tracking value("tr") is parsed and never used.

Calculate text spacing size via the tracking offset.

Issue: #2254
2024-05-09 14:27:49 +09:00
Hermet Park
c0582d8d2d lottie/expressions: apply expressions to missing properites. 2024-05-06 11:14:23 +09:00
Hermet Park
830e5de0ce lottie/expressions: make it up the insufficient content() behavior
this is a follow-up fix for the initial expressions feature.
2024-05-06 11:14:23 +09:00
Hermet Park
324d0f8943 lottie: support the expression feature
The current development of the expression engine is experimental.
It does not support multi-threading.

Therefore, when tvg::Initializer::init() is configured
with more than one thread, expressions will be automatically disabled.

issue: https://github.com/thorvg/thorvg/issues/1640
2024-04-30 15:26:37 +09:00
Jinny You
e7d27f8930 lottie: correct the text alignment
When the Lottie Text Justify sets to center, text alignment should also be center.
2024-04-26 11:11:15 +09:00
Hermet Park
be7437e0a3 common: code refactoring
introduced mathDeg2Rad() and mathRad2Deg() for a common implementation.
2024-04-15 20:35:33 +09:00
Hermet Park
cbed261ba2 lottie: Properly handle the TrimPath mode.
This correction addresses the drawing order of
objects when a group contains a TrimPath and
is merging shapes.

Additionally, the TrimPath method is can applied
to the engine to control the drawing behavior by
7f3dc541d6b7abcdc03facd884489f37c327fd98

issue: https://github.com/thorvg/thorvg/issues/2047
2024-04-03 10:46:01 +09:00
Hermet Park
c74cd42363 sw_engine: revised the trimpath dash line logic
Support the TrimPath modes (individual/simultaneous)
internally in the engine to handle them efficiently.
2024-04-03 10:46:01 +09:00
Hermet Park
e69d63688b lottie: Removed redundant code.
The settings were incorrect;
'direction' and 'fillRule' do not have a relationship.
2024-03-29 13:45:19 +09:00
Hermet Park
a1463cdc3e lottie: optimize the rendering performance.
this optimization nicely merges shapes
when a child group has a only (transformed) pathes.

this also fixes the following compatibility issue nicely.

issue: https://github.com/thorvg/thorvg/issues/2061
2024-03-29 12:28:16 +09:00
Hermet Park
41f835598a lottie: code refactoring.
removed unused static condition.

static was prepared for optimization,
but not used at all.

we will revisit this later when time permits.

binary size: -6kb
2024-03-28 00:04:48 +09:00