Hermet Park
86fd0f67cf
svg_loader: prevent heap memory overflow.
...
if the input points are odd-numberd by invalid svg data, it could access invalid memory.
Prevents it just in case.
2021-06-24 16:54:07 +09:00
JunsuChoi
5da4c81138
svg_loader SvgPath: Added corner case handling for flags of Arc
...
It handles the case what the flag of the arc of the path is defined
without spaces or commas, such as 00, 01, 11 or 10.
2021-06-24 08:52:30 +02:00
Hermet Park
80090e1189
tvg_loader: recover wrongly introduced change by my mistake.
2021-06-23 19:48:10 +09:00
Hermet Park
c2b84dc500
+++
2021-06-23 18:59:26 +09:00
Hermet Park
135cba001f
tvg_loader: code refactoring.
...
keep it neat & clean code for better readibility and maintenence.
2021-06-23 18:59:26 +09:00
Hermet Park
87b94b7a7f
common: fix compatibility issue for MSVC
...
Math Constants are not defined in Standard C/C++
for this, we can use _USE_MATH_DEFINES before math headers.
2021-06-23 13:38:46 +09:00
Mira Grudzinska
5679d666a6
svg_loader: correct parsing ColorStop offset values
...
Values different from numbers and percentages should be ignored
and the default values should be applied (zeros).
2021-06-23 10:35:58 +09:00
JunsuChoi
f20ef0dc15
svg_loader SvgLoader: Copy the missing composite url
...
When copying an attribute, url information of stype's composite is overwritten with memcpy.
This causes double free by deleting the wrong string in freeNodeStyle.
2021-06-22 10:26:05 +02:00
Hermet Park
58f251163b
tvg_loader: code refactoring.
...
remove if-def code.
Actually, tvg log is supposed to print some useful info for users,
not debugging info for our engine developers.
2021-06-22 17:07:56 +09:00
JunsuChoi
a2d348242b
svg_loader SvgLoader: Prevent invalid access
...
If there is no path information, it is not copied.
2021-06-22 09:55:13 +02:00
JunsuChoi
b791924983
svg_loader XmlParser: Fix check the end of string
...
While skipping the string, check the end of the string first.
Prevents an invalid read when parser really get to the end of the string.
2021-06-22 13:47:26 +09:00
Hermet Park
0df8c00519
loaders: revise code from cce4b443b3
...
use copy variable instead of additional buffer pointer.
2021-06-22 10:42:34 +09:00
Michal Maciola
cce4b443b3
loaders: added copy param for Picture::load
...
@API Changed:
Result Picture::load(const char* data, uint32_t size, bool copy /*=false*/) noexcept
TVG_EXPORT Tvg_Result tvg_picture_load_data(Tvg_Paint* paint, const char *data, uint32_t size, bool copy);
2021-06-21 19:52:38 +09:00
Mira Grudzinska
8bb10fb261
svg_loader: radial gradient transformation support
...
For now the gradient radius is scales like x-axis - it has to be changed
after issue #37 will be resolved.
2021-06-21 10:23:42 +09:00
Mira Grudzinska
2bf21dae3d
svg_loader: key and value in the simpleXmlParseW3CAttribute needed to be cleared out of spaces
2021-06-17 11:17:39 +09:00
Mira Grudzinska
7ffeb2e606
svg_loader: fixing color parsing
...
For colors given in a style attribute in the format "rgb(rrr, ggg, bbb)"
a parsing was incorect. Now fixed.
2021-06-17 11:12:33 +09:00
Mira Grudzinska
20e926c950
svg_loader: after reading an unsupported style attribute no other values were loaded
...
After finding an unsupported style attribute the log is printed (on request)
and processing of other values continues.
2021-06-17 10:46:20 +09:00
Mira Grudzinska
e0a1aa9355
svg_loader: adding check if stroke-dasharray attribute != none
...
The stroke-dasharray value equal to "none" was causing a segfault
during a conversion to float. Fixed now.
2021-06-17 10:16:05 +09:00
Mira Grudzinska
a3e784b6b5
svg_loader: gradient update takes into account a stroke and a fill
...
For shapes with a grad fill and a grad stroke only the fill was drawn.
After this fix both can have a valid gradient.
2021-06-15 14:25:17 +09:00
Hermet Park
26fd6b5dfd
tvg_loader: code refactoring.
...
renamed internal functions, no logical changes.
2021-06-14 14:32:05 +09:00
mmaciola
fa15b9a2af
tvg_loader: added tvg format verification
...
TVG format verification was added on TvgLoader:open()
2021-06-14 14:18:10 +09:00
Michal Maciola
8123250f52
tvg_loader: Fixed missing 'this->' keyword
...
Fixed missed 'this->' in tvgTvgLoader.cpp
2021-06-11 23:39:10 +09:00
Hermet Park
15b56a66de
tvg_loader: code refactoring.
...
revise it under the tvg coding convention.
2021-06-11 20:51:50 +09:00
mmaciola
16e39ee81b
TVG Loader/Saver: tvg loader introduced
...
This patch introduces tvg loader module for loading .tvg binary files.
This allows to load and reuse pregenerated scene.
tvg file format:
.tvg is a binary file format designed for saving/restoring the scene content.
It allows to save scenes and reuse them in other apps or to restore state of
the application.
@Example:
auto picture = tvg::Picture::gen();
picture->load(EXAMPLE_DIR"/tvg_file.tvg");
canvas->push(move(picture));
@API Additions:
Result paint(std::unique_ptr<Paint> paint) noexcept;
@Issue: Issue ticket is #375 .
2021-06-11 12:49:37 +09:00
Mira Grudzinska
9b1356e7cb
svg_loader: support stroke gradient
...
The loader was ready to handle the gradient stroke, but there was no API to support
it when the loader was introduced. We've had this API for a while already, so
its call has been added.
2021-06-10 11:36:20 +09:00
JunsuChoi
3c19f2aaf5
svg_loader SceneBuilder: Remove incorrect calculation for radial gradient
...
We are doing enough calculations in the parser if the unit is user space.
This causes the cx,cy coordinates of radial gradient to be calculated incorrectly.
So remove it.
2021-06-07 19:12:17 +09:00
JunsuChoi
bd566bdcb2
svg_loader SceneBuilder: Remove incorrect calculation for linear gradient
...
Calculation of objectBoundingBox case in linear gradient is incorrect code.
This causes the x,y coordinates of the linear gradient to be calculated incorrectly.
So remove it.
2021-06-07 19:12:17 +09:00
Mira Grudzinska
ae5673658e
svg_loader: initializing uninitialized variables
...
The 'loader->svgParse->global' variable was uninitialized when no viewBox attribute
was set. If gradient was applied, the division by zero occured and no gradient was drawn.
2021-06-07 12:30:56 +09:00
Mira Grudzinska
3911a252e2
svg_loader: the viewBox clipping composite layer added independently of the shapes bounds
...
For now the bounding box of all the shapes was established and if it was larger
than the viewBox of the SVG, the clipping layer was added. The bounds api
returns the rectangle that encloses the shapes before any transformations.
So comparing it with the viewBox doesn't make sense. The comparison is removed
and the clipping layer is always added.
2021-05-28 14:39:02 +09:00
Mira Grudzinska
f1d5571aad
Revert "svg_loader: clipping composite layer is added independently on the bounds of the shapes"
...
This reverts commit c38e4e40a7
.
It was pushed by mistake. The same changes are currently under rev in PR #399
2021-05-28 04:30:09 +02:00
Mira Grudzinska
c38e4e40a7
svg_loader: clipping composite layer is added independently on the bounds of the shapes
2021-05-27 12:54:08 +02:00
JunsuChoi
f8f90f3f34
log SvgLoader: Enhance log message
...
- Change tag name "Doc" to "Svg"
- Fix "Mask" tag name.
- Add element to skip output
- title
- Add attribute to skip output
- id, data-name, version, overflow=visible, xmlns*, xml:space
2021-05-13 23:46:17 +09:00
JunsuChoi
475fc22f6d
loader SvgLoader: Fix memory leak
...
Add memory release for style->comp.url, which is the leaking memory.
[Valgrind Test Result]
==21595== 32 bytes in 1 blocks are definitely lost in loss record 29 of 152
==21595== at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==21595== by 0x5C248C6: _idFromUrl(char const*) (tvgSvgLoader.cpp:272)
==21595== by 0x5C24DE1: _handleClipPathAttr(SvgLoaderData*, SvgNode*, char const*) (tvgSvgLoader.cpp:860)
==21595== by 0x5C260CC: _attrParseGNode(void*, char const*, char const*) (tvgSvgLoader.cpp:953)
==21595== by 0x5C2ABA9: simpleXmlParseAttributes(char const*, unsigned int, bool (*)(void*, char const*, char const*), void const*) (tvgXmlParser.cpp:272)
==21595== by 0x5C26F6E: _createGNode(SvgLoaderData*, SvgNode*, char const*, unsigned int) (tvgSvgLoader.cpp:1063)
==21595== by 0x5C27A04: _svgLoaderParserXmlOpen(SvgLoaderData*, char const*, unsigned int, bool) (tvgSvgLoader.cpp:2168)
==21595== by 0x5C27CE9: _svgLoaderParser(void*, SimpleXMLType, char const*, unsigned int) (tvgSvgLoader.cpp:2226)
==21595== by 0x5C2AC8C: simpleXmlParse(char const*, unsigned int, bool, bool (*)(void*, SimpleXMLType, char const*, unsigned int), void const*) (tvgXmlParser.cpp:378)
==21595== by 0x5C27E09: SvgLoader::run(unsigned int) (tvgSvgLoader.cpp:2571)
==21595== by 0x5C1A7C1: operator() (tvgTaskScheduler.h:68)
==21595== by 0x5C1A7C1: tvg::TaskSchedulerImpl::run(unsigned int) (tvgTaskScheduler.cpp:138)
==21595== by 0x5EED6DE: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
2021-05-03 16:29:30 +09:00
Hermet Park
1d923a8632
loader svg: fix build break due to typo
2021-05-01 12:37:45 +09:00
Hermet Park
e1ebcf6153
loaders svg: code refactoring
...
split functions as its purpose.
2021-04-21 11:12:22 +09:00
JunsuChoi
51e4757a3b
loader SvgLoader: Fix wrong debug log
...
1.
Modify that attribute information used for use type
looks like it was used for g type.
2.
Fix clippath node looking like setting "none"
(clippath's display = false is intentional)
2021-04-21 11:11:37 +09:00
JunsuChoi
8b54b6768a
loader SvgLoader: add locale-independent strtof function
...
strtof's behavior is changed by system locale.
https://linux.die.net/man/3/strtof
Because of this, strtof(10.0000) returns 0.0 in some locales.
When a given value string is locale-independent, strtof has to be
replaced to custom function.
2021-04-20 19:44:04 +09:00
Hermet Park
b541a0654c
loaders svg: ++safety
...
prevent buffer overflow just in case.
2021-04-20 17:49:48 +09:00
Mira Grudzinska
332012dd6b
loader svg: displaying SVG images without the specified viewBox attribute
...
If no viewBox attribute is given, the height and width attributes are used
to establish the viewBox size. However, this information was not available
inside the scene builder, even though it was needed.
2021-04-15 04:34:44 -07:00
JunsuChoi
5d81fe2446
loader SvgLoader: Fix for coding convention
2021-04-13 19:01:19 +09:00
JunsuChoi
b75e7ea91a
loader SvgLoader: return null if transform attribute invalid
...
In transform matrix parsing, null is returned if any of the matrices are invalid.
2021-04-13 19:01:19 +09:00
Hermet Park
d3a73f7ee9
loaders svg: fix a wrongly handles the corner case.
...
Stop the internel loop quick as possible, and state must be reset.
2021-04-13 17:49:29 +09:00
Hermet Park
b3559ecf56
loaders svg: code refactoring.
...
keep it clean & neat within tvg coding convention.
2021-04-13 17:16:38 +09:00
Hermet Park
d2c04f6037
wasm: fix compile errors.
2021-04-09 22:18:57 +09:00
Hermet Park
5c9016158e
loader svg: fix composition(mask/clip) issue.
...
composition target missed transform of its source.
That brings incorrect composition area.
This fixes it.
2021-04-09 21:02:55 +09:00
Hermet Park
35fdc9a278
loaders svg: set default color for composition paint.
...
not only clippath but alpha compositions might also have any valid color.
Set it default and let it override values while appending shapes if it's necessary.
2021-04-09 17:10:20 +09:00
Hermet Park
903df3da6a
loaders svg: prevent composition setting if the result shape is invalid.
...
Current loader could return invalid shapes -default, from _appendShape()-
by a certain interpretation result,
Though it's a wrong or exception case, we can prevent worse case by avoiding it.
2021-04-09 16:51:05 +09:00
Hermet Park
e1eb98af79
loaders svg: code refactoring
...
clean up code and remove unnecessary internal class.
this also helps to reduce binary size by 5.5kb
no logical changes.
2021-04-09 15:57:23 +09:00
Hermet Park
adf1312a5e
loaders svg: ++ log info for wrong situation.
...
if either log is printed, we need to improve the composition method.
2021-04-09 11:02:35 +09:00
Hermet Park
605a3bf175
loaders svg: code refactoring
...
++ clean code.
2021-04-09 10:55:09 +09:00