Commit graph

907 commits

Author SHA1 Message Date
Hermet Park
68fff066fc lottie: fixed memory violation.
set the dirName as the current location by default.

issue: https://github.com/thorvg/thorvg/issues/2733
2024-09-14 15:33:15 +09:00
Mira Grudzinska
bf9f5ab1c5 svg_loader: append text to the SvgTextNode
Text can be added in parts due to the presence
of the <tspan> tag. This requires that each
subsequent piece of text is appended rather than
overwriting the previous one.
2024-09-10 19:02:24 +09:00
Jinny You
3f67c38c50
lottie/text: Support line spacing
Compute line spacing based on the text range selector, applying the maximum spacing value for each line.
issue: https://github.com/thorvg/thorvg/issues/2178
2024-09-10 11:44:32 +09:00
Hermet Park
a746e1fcd6 renderer: blending refactoring++
- reordered the blending types to align with lottie spec.
- removed source over.
2024-09-09 21:18:13 +09:00
Jinny You
b59e833c65
lottie/text: Support Text Based
Added support for Text Based of Text Range Selector, by processing further properties:
2. Character Excluding Spaces
3. Words
4. Lines

see: https://github.com/thorvg/thorvg/issues/2178
2024-09-09 12:03:59 +09:00
Mira Grudzinska
ce61a33756 svg_loader: fix text nodes issue
Since the text node wasn't pushed onto the loader's stack,
closing the text node incorrectly caused an element to be
popped from the stack (if one was present).
This could result in elements that were supposed to have
that element as a parent being rendered incorrectly or not
being rendered at all.
Now, the text node is correctly pushed onto the stack.

@Issue: https://github.com/thorvg/thorvg/issues/2706
2024-09-05 23:47:30 +09:00
Hermet Park
c1c51fbc10 lottie/parser: ++ null value handling
Note that, only dealt with a obivous case in practice.

issue: https://github.com/thorvg/thorvg/issues/2703
2024-09-03 19:03:54 +09:00
Łukasz Pomietło
31e7d44a92
loader/ttf: Spaces and invalid glyphs rendering fix
If for any reason an invalid glyph is found in text, 
it will now be skipped when rendering 
(instead of increasing offset by last valid glyph advance).

Issue: #2687
2024-09-02 17:44:31 +09:00
Mira Grudzinska
ac2b5c86e6 lottie: handle trim path edge cases
According to the definition of trim path elements,
the begin and end values are specified as percentages
in the range of 0-100% (this is also confirmed by AE,
where it's not possible to exceed this range).
Added clamping to align with spec.
2024-09-02 11:47:30 +09:00
Hermet Park
6b0c81bf36 lottie/expressions: rectified $bm_sum()
Added only a single element to x.
2024-08-29 21:16:58 +09:00
Hermet Park
b36db92a7b lottie/expressions: hotfix a crash
Stabilized $bm_sum(), by allowing the different dimensional
arguments.

issue: https://github.com/thorvg/thorvg/issues/2664
2024-08-29 19:41:37 +09:00
JunsuChoi
dd223b4065 svg_loader: Adjust hsl values out of range
The range of saturation and brightness values is 0 ~ 100% and range of hue is 0 ~ 360.
If a value greater than 100% is loaded, it will be modified to be 100%.

issue: https://github.com/thorvg/thorvg/issues/2678
2024-08-29 12:05:47 +02:00
Mira Grudzinska
bb3c6516e5 lottie: fix trim
The bug caused the trim path to not be applied
when it appeared in a group between different
shapes.
2024-08-29 17:30:41 +09:00
Mira Grudzinska
76c1b20dee lottie: fix trim path regression
To avoid editing the trim path values provided
by the user, the logic for their interpretation
was moved from the API to the renderer (7c87d8e).
This caused an issue in the lottie animations when
the trim path is applied more than once. Now fixed.

@issue: https://github.com/thorvg/thorvg/issues/2670
2024-08-28 23:03:44 +09:00
Łukasz Pomietło
c92cf4e139 renderer/text: fix a missing text update
previously font size & italic style had been ignored
even if its attributes are changed.

Co-Authored-By: Hermet Park <hermet@lottiefiles.com>

issue: https://github.com/thorvg/thorvg/issues/2676
2024-08-28 21:30:16 +09:00
Hermet Park
45358a70ca lottie/parser: enable logs to notify missing features 2024-08-26 20:30:33 +09:00
Hermet Park
4fda695c3c lottie/expressions: Improve safety
- Prevent expression processing if a property fails to parse.
- Fixed an incorrect usage of JerryScript.

This is a hotfix to address expression-related crashes.
2024-08-25 23:11:47 +09:00
Hermet Park
df2d3a95f8 lottie/jerryscript: ++build reliance 2024-08-23 15:08:55 +09:00
Mira Grudzinska
87d85047aa lottie: add offsetPath support
Due to the lack of an analytical solution for Bezier
curves offsetting, a simple and computationally cheap
approximation has been implemented. The algorithm shifts
the segments connecting control points and determines
new points based on their intersections.

@issue: https://github.com/thorvg/thorvg/issues/2230
2024-08-23 01:18:50 +09:00
Mira Grudzinska
e4ec2a8a0e lottie: roundness refactored based on #2295 2024-08-23 01:18:50 +09:00
Mira Grudzinska
09313ae307 lottie: fix text update
The occurrence of a 'carriage return' (13) or 'end of text' (3)
caused the skipping of the next character check, immediately
searching for it in the list of available characters.
If the next character was also 13 or 3, it led to incorrect
interpretation; however, if it was the last character in the
sequence, a crash occurred.
2024-08-22 21:27:25 +09:00
Hermet Park
5332876fe8 common: spec out TexMap
Spec out this incomplete experimental feature,
this is a still promising one, we will reintroduce
this officially after 1.0 release

size: -2kb

issue: https://github.com/thorvg/thorvg/issues/1372
2024-08-20 11:14:54 +09:00
Elliott Sales de Andrade
5f08b9ade4 build: Remove redundant comparisons
If a Meson option is typed as `boolean`, the `get_option` returns a
boolean, and comparing it with `true` is redundant. Meson also errors if
you try to compare across types, so it couldn't _not_ be a boolean.

Also, Meson is not C, so no need for parentheses around `if` conditions.
2024-08-19 17:42:40 +09:00
Hermet Park
9c36b78140 lottie: ensure a null terminator at the end of the copied data
In certain cases, the user might want to set mapped memory directly.
This update ensures that a null terminator is appended to the string data.

Co-Authored-By: Mira Grudzinska <mira@lottiefiles.com>

Issue: https://github.com/thorvg/thorvg/issues/2642
2024-08-17 13:37:10 +09:00
Mira Grudzinska
7c13da461a lottie: prioritization of roundness in rectangles
Added prioritization of rectangle roundness over
rounded corners, in line with AE results.
2024-08-14 11:16:54 +09:00
Mira Grudzinska
e50bf002de lottie: handle edge case for rounded rect
For rounded rectangles the roundness value should
be determined using to the formula:
r = min(r, max(size.x, size.y)/2)
rather than the previous method:
r = min(size.x/2, size.y/2, r)
2024-08-12 18:52:14 +09:00
Hermet Park
290b52198f lottie: code refactoring
getting too many parameters,
migrated static functions to class member functions,
reducing the binary size by 2KB

no logical changes
2024-08-12 17:41:51 +09:00
Hermet Park
7fb0762454 lottie: ++scene rendering optimization
Apply LottieRenderPooler to RenderContext propagators.
2024-08-12 13:55:31 +09:00
Hermet Park
62f88ec072 lottie: ++scene rendering optimization
Apply LottieRenderPooler to maskings.
2024-08-12 13:55:31 +09:00
Mira Grudzinska
75ed0e4e09 lottie: handle rounded polygons
The implementation of rounded polygons was
mistakenly omitted, now has been added.

@Issue: https://github.com/thorvg/thorvg/issues/2624
2024-08-10 13:40:44 +09:00
Hermet Park
3e78a95b57 lottie: support matte+masking combination
introduced an intermediate scene for embracing
the matte and maskings
2024-08-08 13:55:16 +09:00
Hermet Park
69dccc326a lottie/expressions: rectified fill color support
Assign the fill color value properly.
2024-08-07 19:27:34 +09:00
Hermet Park
de9da0b93a lottie: code refactoring
Moved common data declarations to tvgLottieCommon.h.
2024-08-07 19:27:34 +09:00
Hermet Park
f7221f7f89 lottie/expressions: revised exception handlings 2024-08-07 14:59:09 +09:00
Hermet Park
33d7425294 lottie/model: implement the missing property() interface 2024-08-07 14:59:04 +09:00
Hermet Park
ee3293401b renderer/picture: added a method to search for a paint object
This utility method allows access to a specific paint instance
by its unique identifier.

Experimental API:
- const Paint* Picture::paint(uint32_t id)
- const Tvg_Paint* tvg_picture_get_paint(Tvg_Paint* paint, uint32_t id)
2024-08-07 12:02:22 +09:00
Hermet Park
45352c9a1f API: introduce a Paint ID member as a reserved field
The "id" is a reserved field to specify a paint instance in a scene.
in this change, it assigns the layer id to the lottie scene as well.
2024-08-07 12:02:22 +09:00
Hermet Park
49f3395631 renderer: newly support the Lighten/Darken Masking options
Lighten is applied, where multiple masks intersect,
the highest transparency value is used.

Darken is applied, where multiple masks intersect,
the lowest transparency value is used.

Experimental API:
- CompositeMethod::LightenMask
- CompositeMethod::DarkenMask

issue: https://github.com/thorvg/thorvg/issues/2608
2024-08-07 11:04:38 +09:00
Hermet Park
2edb3abbfb lottie/expressions: add missing expressions property updates
apply expressions to separate x/y transform coordinates.
2024-08-01 19:53:49 +09:00
Hermet Park
b636590bf4 lottie: remove useless condition check.
lottie is always animatable.
2024-08-01 12:57:35 +09:00
Hermet Park
c257994d5c lottie/expressions: feature enhancement
added groupIndex() support
added property (ix) value support
2024-07-31 18:26:42 +09:00
Hermet Park
397e33b158 lottie: code refactoring
Access its type from a property instance,
through coherent data structure.
2024-07-31 18:26:42 +09:00
Łukasz Pomietło
dc0029a7e1
ttf_loader: Basic support for composite glyphs loading (#2600)
Adds the ability to load some composite glyphs and prevents an error when a composite glyph is used.

Implementation based on ttf glyf table documentation: https://learn.microsoft.com/en-us/typography/opentype/spec/glyf

There are still some missing features like scaling, parent glyph point based positioning etc. I think this is a topic for future work. Howerever, it looks like implemented features are enough for utf-8 latin subset in major fonts.

issue: #2599
2024-07-31 12:51:22 +09:00
Hermet Park
036ae3c2af renderer: code refactoring
Replaced the transformation with
a strong associated data field.

This helps to reduce the binary size (-1k).
2024-07-29 23:27:19 +09:00
Hermet Park
356b813f79 lottie/expressions: hotfix
- fixed a memory leak.
- corrected loopIn key value.
2024-07-26 16:03:55 +09:00
Hermet Park
c8c565df92 lottie/expressions: feature support enhancement
- revised the transformation building logic.
- rectified to properly search "this" composition layers.
- rectified the linear interpolation implementation.
- added "pingpong" looping attributes.
2024-07-24 11:26:20 +09:00
Hermet Park
3804bbec57 lottie: code refactoring
- removed unnecessary variables.
- migrated the composition methods to the precomp layer.
2024-07-24 11:26:20 +09:00
Hermet Park
c7ae3ae2af svg: resolve compiler warnings.
../src/loaders/svg/tvgSvgLoader.cpp: In function ‘bool _toColor(const char*, uint8_t*, uint8_t*, uint8_t*, char**)’:
../src/loaders/svg/tvgSvgLoader.cpp:108:17: warning: ‘hue’ may be used uninitialized [-Wmaybe-uninitialized]
  108 |     const char* _end = end ? *end : nullptr;
      |                 ^~~~
../src/loaders/svg/tvgSvgLoader.cpp:713:31: note: ‘hue’ was declared here
  713 |         const char *content, *hue, *saturation, *brightness;
      |                               ^~~
../src/loaders/svg/tvgSvgLoader.cpp:108:17: warning: ‘saturation’ may be used uninitialized [-Wmaybe-uninitialized]
  108 |     const char* _end = end ? *end : nullptr;
      |                 ^~~~
../src/loaders/svg/tvgSvgLoader.cpp:713:37: note: ‘saturation’ was declared here
  713 |         const char *content, *hue, *saturation, *brightness;
      |                                     ^~~~~~~~~~
../src/loaders/svg/tvgSvgLoader.cpp:108:17: warning: ‘brightness’ may be used uninitialized [-Wmaybe-uninitialized]
  108 |     const char* _end = end ? *end : nullptr;
      |                 ^~~~
../src/loaders/svg/tvgSvgLoader.cpp:713:50: note: ‘brightness’ was declared here
  713 |         const char *content, *hue, *saturation, *brightness;
      |                                                  ^~~~~~~~~~
2024-07-23 17:09:26 +09:00
Hermet Park
18eb465fe8 lottie: ++optimization with object culling
More precisely, culling the render objects by
determining if the group has no renderable objects.

Additionally, check opacity to quickly return
in the rendering process.
2024-07-22 17:17:08 +09:00
Hermet Park
bc30bca366 lottie: hotfix with an intermediate patch merge. 2024-07-22 12:28:17 +09:00