Commit graph

907 commits

Author SHA1 Message Date
Hermet Park
60eec8353b lottie: fix potential memory leaks.
memory could be leaked during the slot property overriding.
2024-03-07 13:26:18 +09:00
Jinny You
449cee7cf0 lottie/api: specify clear result for override API
In case the given JSON is invalid, it's more closed to `Result::InvalidArguments`.
2024-03-06 17:32:02 +09:00
Hermet Park
103252642e lottie: code refactoring.
Maintains compact lines of code and functions without altering logic,
consistently prioritizing simplicity in software complexity metrics.
2024-03-03 14:04:34 +09:00
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
JunsuChoi
d32c90cbbf svg: Improve valid check for url(#id)
Improve parenthesis checking and space checking.
 - There must be only one pair of parentheses.
 - There cannot be spaces(and ') between id strings.

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

Co-authored-by: Hermet Park <hermet@lottiefiles.com>
2024-02-22 21:51:19 +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
91c776affa loader/webp: do not expose webp apis.
this reduces the bin size around -1.5kb
2024-02-15 16:35:42 +09:00
Hermet Park
11ddfdb193 lottie: remove the duplicated binary search logic. 2024-02-15 10:29:31 +09:00
JunsuChoi
53e2ecd81c loader/svg: Fix empty id to null
empty id is invalid. Therefore, set it to null and make it is not used.

issue: https://github.com/thorvg/thorvg/issues/1977
2024-02-15 10:29:13 +09:00
Hermet Park
5fb0012ff4 webp: removed non-existing symbol methods. 2024-02-07 20:32:05 +09:00
Hermet Park
5fe9b432ec loaders: enhance decoding efficiency
enhance decoding efficiency by determining the desired canvas format
during image loading. This allows loaders to preemptively decode
the image in the specified format, to not convert the format again.
2024-02-07 20:32:05 +09:00
Hermet Park
8a4862bc37 loaders: decode the image with premultiplied alpha.
basically, the renderer requires images with premultiplied alpha.
2024-02-07 20:32:05 +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
Junsu Choi
df4f93e79f loader/webp: Support static webp loader
Built to libwebp code in to support the static option of webp loader.
Code from :https://github.com/jacklicn/libwebp

This forking version only contains the minimal webp decoding feature.

Binary Size: +68kb

Co-authored-by: Hermet Park <hermet@lottiefiles.com>

issue: https://github.com/thorvg/thorvg/issues/1427
2024-02-07 10:58:25 +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
JunsuChoi
b55c1415c0 loader/svg: Fix zero check of arc's rx and ry
Please refer to the specifications.
https://www.w3.org/TR/SVG/paths.html#ArcOutOfRangeParameters

If either rx or ry is 0, then this arc is treated as a straight line
segment(a "lineto") joining the endpoints.
2024-01-29 09:54:03 +02:00
JunsuChoi
6015e2eb32 loader/svg: Apply specification of out-of-range elliptical arc parameters
The three specifications below apply.

Specification: https://www.w3.org/TR/SVG/paths.html#ArcOutOfRangeParameters

-
If the endpoint (x, y) of the segment is identical to the current point
(e.g., the endpoint of the previous segment),
then this is equivalent to omitting the elliptical arc segment entirely.

-
If either rx or ry is 0, then this arc is treated
as a straight line segment(a "lineto") joining the endpoints.

-
If either rx or ry have negative signs, these are dropped;
the absolute value is used instead.
2024-01-29 09:54:03 +02: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
67d8d9f36c svg_loader: code refactoring
removed duplicate matrix multiply function.
2024-01-22 19:03:59 +09:00
Mew Pur Pur
de00104566
svg_loader: Add missing implementation of skewX and skewY in transform-list 2024-01-22 18:52:37 +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
e95025d6d8 ttf: Fixed an invalid unicode encoding.
Ensured the data count is correctly multiplied by the data size.
2024-01-09 00:57:43 +09:00
JunsuChoi
02ae718277 loader/svg: Skip check for quotes inside quotes
Single or double quotation marks that occur before
closing the quotation mark are ignored.
2024-01-08 22:26:02 +09:00
Hermet Park
8375c53461 ttf: removed the beta tag.
incorporate TTF support into the CI build tests.
2024-01-03 12:57:07 +09:00
Hermet Park
139a1c5e85 ttf: fix the windows compilation errors. 2024-01-03 12:57:07 +09:00