Commit graph

197 commits

Author SHA1 Message Date
Hermet Park
a1dea56690 lottie: copy the data only necessarily. 2024-03-03 13:12:29 +09:00
Mira Grudzinska
8b2ddf7377 lottie: use internal append rect/ellipse func
The lottie format defines the starting point for
drawing rectangles and ellipses differently than
the API available in the TVG. In the case of using
dashes or trim paths, this leads to discrepancies.
Therefore, when using the lottie builder, internal
functions for appending rectangles and circles are
utilized.

@issue: https://github.com/thorvg/thorvg/issues/1997
2024-03-03 12:52:39 +09:00
Hermet Park
65e8fe2791 lottie: clean up code and minor bugs by mistake. 2024-02-23 16:18:40 +09:00
Jinny You
53878919b5 lottie: Introduce the LottieAnimation class
This class extends the Animation and serves advanced Lottie features.
It's designed to separately have Lottie Animation's unique specs.

For now, this will have Slot overriding feature,
you can include <thorvg_lottie.h> for its extensive features.

@APIs:
- Result LottieAnimation::override(const char* slotJson) noexcept;
- static std::unique_ptr<LottieAnimation> LottieAnimation::gen() noexcept;

@Issue: https://github.com/thorvg/thorvg/issues/1808
2024-02-23 15:05:15 +09:00
Jinny You
362e6faacb lottie: Support the slot overriding feature
Internal model and parser modifications have been made
to parse "sid" and retrieve their data into the LottieComposition.
This will enable dynamic changes to the following Lottie objects:

The slot feature will encompass these properties:

- LottieSolidStroke
- LottieSolidFill
- LottieGradientStroke
- LottieGradientFill
- LottieTextDoc"

Issue: https://github.com/thorvg/thorvg/issues/1808

Co-authored-by: Hermet Park <hermet@lottiefiles.com>
2024-02-23 15:05:15 +09:00
Vincent Torri
a361924887 Lottie loader: fix compilation on windows
strlen() was used in tvgLottieModel.h without the inclusion of
cstring. This patch fixes this
2024-02-23 11:27:12 +09:00
Jinny You
4613d98d98 lottie: Revise the solid model
To ensure consistent properties, `LottieSolid` has been defined.

Both `LottieSolidStroke` and `LottieSolidFill` can be typecasted to the `LottieSolid`.
2024-02-22 22:17:11 +09:00
Jinny You
317843927f lottie: Revise the gradient model
Currently, the `LottieGradient` does not incorporate the `LottieObject` functionality.

It now inherits from the `LottieObject`.
2024-02-22 22:17:06 +09:00
Hermet Park
4467ce7bd5 lottie: introduced LottieProperty base class
this is useful for slot & expression type casting.
2024-02-21 20:57:07 +09:00
Hermet Park
9e55eefe13 common: code refactoring
refactor common code to consolidate Bezier and line
function implementations into a single location.
2024-02-20 17:19:15 +09:00
Hermet Park
31b4428dd8 Revert "Revert "sw_engine: Increasing accuracy for dashed curves""
This reverts commit e49f9125b2.
2024-02-20 12:33:00 +09:00
Hermet Park
e49f9125b2 Revert "sw_engine: Increasing accuracy for dashed curves"
This reverts commit a8c0030d80.
2024-02-20 12:23:55 +09:00
Mira Grudzinska
a8c0030d80 sw_engine: Increasing accuracy for dashed curves
Dashed curves require greater precision in calculating
their lengths and while splitting Bezier curves.
Otherwise, it results in visual discrepancies compared
to the expected outcomes.
Approximate functions 'bezLengthApprox' and 'bezAtApprox'
used for calculations in the lottie loader.

issue: https://github.com/thorvg/thorvg/issues/1686
2024-02-20 12:11:43 +09:00
Hermet Park
fb19e2cabd lottie/parser: clean up the exception handling mechanisms.
Since the parser has become stable enough,
remove the exceptions and instead rely on parser error handling.
2024-02-19 21:26:58 +09:00
Hermet Park
043b6b9f4f common/array: code refactoring
Make the array interface pair begin()/end() for consistency.
2024-02-19 19:09:30 +09:00
Hermet Park
11ddfdb193 lottie: remove the duplicated binary search logic. 2024-02-15 10:29:31 +09:00
Hermet Park
f0c69f5bbb Revert "lottie: compatibility++"
This reverts commit c89f6253bf.

No more valid by 3f235d9e3f
2024-02-07 20:22:05 +09:00
Hermet Park
a65d3ae37a lottie/parser: shutdown a compiler warning.
corrected a data type.
2024-02-02 17:59:47 +09:00
Hermet Park
21252632b3 lottie: fixed a parsing error in assets
An unused key in assets parsing corrupted the sequence.
This change now ensures they are tightly ignored.
2024-02-02 11:42:26 +09:00
Hermet Park
a2defaf694 lottie: fix a simple mistake. 2024-02-02 11:42:26 +09:00
Hermet Park
f006551f52 lottie: minor optimization.
remove an unnecessary scene in the lottie render tree.
2024-02-02 01:29:16 +09:00
Hermet Park
c89f6253bf lottie: compatibility++
retry image loading with the given candidates,
even if the suggested format is mismatched.
2024-02-01 12:14:42 +09:00
Hermet Park
fb4ad7d239 lottie: corrected text height alignment issues.
enhanced support for a wider range of text use cases.
2024-01-30 10:34:12 +09:00
Hermet Park
5d02b3ac42 lottie: Fixed a font/glyph parsing error.
Previously, the Lottie parser expected a specific parsing order:
font followed by glyph, for optimal data processing.

However, since this order is not guaranteed,
we have revised the parsing logic to accommodate any order.
2024-01-30 10:34:12 +09:00
Hermet Park
823b945666 lottie: rectified scene building Logic
resolved a corner case where assets were being attached
multiple times during scene building. This issue was causing
a significant performence drop in image animation
in certain scenarios.
2024-01-25 02:06:14 +09:00
Hermet Park
be809b2103 lottie: fixed an issue with missing stroke drawing
Resolved a problem where the context was missing in scenarios
involving an overlapped stroke drawing.

issue: https://github.com/thorvg/thorvg/issues/1933
2024-01-24 13:24:32 +09:00
Hermet Park
6944633f41 lottie: Improve feature coverage by correctly handling XOR shapes
XOR when the shape's direction property is set to a value of 2.
Currently, the direction property is expected to have
either 1 for clockwise or 3 for counterclockwise orientation.

Just found out the number 2 use-case...
2024-01-18 13:34:14 +09:00
Hermet Park
71cc7c2e30 lottie: Fixed the issue with gradient filling.
Previously, multiple gradients within a single group
couldn't be accounted for during rendering.

This fix addresses the scenario by fragmenting the rendering context.
2024-01-18 13:34:14 +09:00
Hermet Park
0335742864 lottie: properly capture the stroking context
Each group must determine the stroking rendering contexts
and assess whether context switching has occurred.

Migrate the sequence from the root layer to all groups.
2024-01-18 13:34:14 +09:00
Hermet Park
a14a105acd
lottie: Corrected the Time Remapping Range (#1907)
enable exceeding the range of normalized values in time remapping.

the issue came from a misunderstanding of the lottie spec.

issue: https://github.com/thorvg/thorvg/issues/1809
2024-01-12 18:19:23 +09:00
Hermet Park
9109a62819 lottie: Newly added support for the text feature.
This enhancement enables embedded glyphs rendering.
The 'fonts' and 'chars' properties are now supported.
2024-01-12 10:57:46 +09:00
Hermet Park
0eafcfd1b0 loader: code refactoring
Ensure scene data is freed when it's dangled in the loader.
2024-01-11 10:12:04 +09:00
Hermet Park
cf35ca3392 lottie: resolve a thread sanitizer report.
Issue: https://github.com/thorvg/thorvg/issues/1874
2023-12-29 20:06:21 +09:00
Jinny You
2c6c8d3b21
updated copyright date (#1866) 2023-12-28 10:43:25 +09:00
Hermet Park
5643348472 common: clean up the code. 2023-12-14 15:59:38 +09:00
Vincent Torri
edf1f56c67 include missing headers for strcmp(), strdup() and realloc() 2023-12-13 10:33:52 +09:00
Hermet Park
0aa39111ad common/array: code refactoring.
Use a default constructor with reservation.
2023-12-13 09:34:44 +09:00
Hermet Park
a9d39eaf56 renderer/loader: optimization++
removed the internal unique_ptr usage to reduce the binary size(-553)
2023-12-08 23:35:19 +09:00
Jinny You
914144bb5a lottie/builder: fix crash by null reference 2023-12-07 17:52:40 +09:00
Hermet Park
dd6956a7ac lottie/builder: revert the clipper cache.
This ia a buggy,
We will revisit this optimization with a perfect solution.
2023-11-24 12:56:23 +09:00
Hermet Park
ff6ea4b6c4 Loaders: Introduced a loader cache.
The loader cache is applied to conserve memory.

If the input data is already present in loaders,
the loader cache will promptly return the active loader.

This results in a lot of memory savings for the duplicated resources.

binary diff: -400 bytes
2023-11-23 18:21:28 +09:00
Hermet Park
f2c29063d2 api: updated the recent changed api again.
Reordered by the data packing size.
Also removed a wrong capi default parameter value.

Result Picture::load(const char* data, uint32_t size, const std::string& mimeType, bool copy = false, const std::string& rpath = "")
-> Result load(const char* data, uint32_t size, const std::string& mimeType, const std::string& rpath = "", bool copy = false)

Tvg_Result tvg_picture_load_data(Tvg_Paint* paint, const char *data, uint32_t size, const char *mimetype, bool copy, const char* resourcePath)
-> Tvg_Result tvg_picture_load_data(Tvg_Paint* paint, const char *data, uint32_t size, const char *mimetype, const char* resourcePath, bool copy);
2023-11-23 11:59:38 +09:00
Hermet Park
023d961118 lottie/builder: ++size optimization
Replaced std::queue with inlist for optimizing binary size (-1.3kb).
2023-11-22 20:59:58 +09:00
Jinny You
132be91de4 lottie/loader: support external image from memeory lottie
I've added new parameter, const string& resourcePath, to load external image on lottie.

Result load(const char* data, uint32_t size, const string& mimeType, bool copy, const string& resourcePath)

Note: tvgLoadModule will have new overrided method `open`, not to effect to other changes except animation.

Issue: #1793
2023-11-22 18:04:35 +09:00
Hermet Park
0c1322fa07 lottie/builder: corrected polystar rotation.
There was likely a mistake in the rotation value set;
there was no reason to multiply it by 2.

Issue: https://github.com/thorvg/thorvg/issues/1773
2023-11-22 00:39:02 +09:00
Hermet Park
4c95ed3e51 Lottie/builder: revert a static cache optimization.
There are some matting masking bugs observed,
Reverted the commit. We will revisit it later.

commit d37c500262
Author: Hermet Park <hermet@lottiefiles.com>
Date:   Wed Oct 25 18:55:05 2023 +0900

    lottie: introduced static layer cache.

    lottie builder doesn't need to rebuild the layer object
    if it has no any animation frame data.

    That case, we can cache the layer scene in order to reuse it.

    Tested on local machine (single thread):
    - Lottie: appx. 2ms enhanced.
    - Binary: +204
2023-11-21 13:05:04 +09:00
Hermet Park
5138a7c914 lottie/builder: hotfix, invalid stroking scaling.
There is a buggy workaround code that rewinds the stroke scaling.

Issue: https://github.com/thorvg/thorvg/issues/1730
2023-11-21 11:36:34 +09:00
Hermet Park
ba46790b78 lottie/parser: Fix the shapes parsing logic.
Currently, it assumes "ty":"gr" for the related shapes children,
which can be skipped since the children will be in the "it" scope.

Some Lottie data is missing the "ty":"gr" field,
and ThorVG couldn't display the content properly.
It can ignore it with the context understanding.
2023-11-17 14:12:46 +09:00
Hermet Park
0611e7088c lottie/parser: ++ blending options
thorvg blending is quite buggy,
the feature needs a verification.
2023-11-13 13:53:50 +09:00
Hermet Park
b133b2a8ae lottie/builder: Fix a broken animation
The animation couldn't be triggered on a single thread.
Regression bug introduced by 29b5bc372d
2023-11-10 09:45:13 +09:00