Commit graph

229 commits

Author SHA1 Message Date
Mira Grudzinska
ada4d5e261 svg_loader: a css style node shouldn't have a parent
This node is supposed to be separeted from the main tree nodes.
2022-02-08 17:58:53 +09:00
Mira Grudzinska
5aab26302a svg_loader: css style functions moved to a separate file 2022-02-08 17:58:53 +09:00
Mira Grudzinska
863a98870f svg_loader: styling++ (no logical changes) 2022-02-08 17:58:53 +09:00
Mira Grudzinska
4a7310756d svg_loader: fixing cdata block reading
The CData block is read if it's inside the style tag.
In a case when the CData block was just after the style
block, the data was still read, although it shouldn't be.
Fixed.
2022-02-08 17:58:53 +09:00
Mira Grudzinska
dc518a83c8 svg_loader: some names changed, no logical changes 2022-02-08 17:58:53 +09:00
Mira Grudzinska
a5e5e48de4 svg_loader: restoring changes from ed3b17b228
(preventing memcpy from a nullptr)
2022-02-08 17:58:53 +09:00
Mira Grudzinska
b535803136 svg_loader: css styling supported also when defs were postponed
Defs can be defined at the end of the file. In such a case each
node with a defined class attribute has to be marked and checked
at the final stage of processing - the proper style node has to be found
and its style has to be applied.
2022-02-08 17:58:53 +09:00
Mira Grudzinska
85f23d7f6c svg_loader: supporting different target formats in css
Css styling supports now targets defined only by tag or only by name
(tag.name was already supported before).
Also proper precedence of a styling is fixed - flags were not set.
2022-02-08 17:58:53 +09:00
Mira Grudzinska
abd959bb54 svg_loader: proper precedence of a styling
The attribute values should be copied from a style node only if they
were set in the destination node using the attributes (in opocity to
a style attribute). A proper copyCssStyleAttr() function is introduced.
2022-02-08 17:58:53 +09:00
Mira Grudzinska
1799cd9a78 svg_loader: remove unnecessary variables 2022-02-08 17:58:53 +09:00
Mira Grudzinska
482add35e9 svg_loader: buflen arg used in the simpleXmlParseW3CAttribute()
While parsing the css internal style sheets the buflen has to be passed.
2022-02-08 17:58:53 +09:00
Mira Grudzinska
024594f3bb svg_loader: additional arg added into create...Node() functions
A function pointer added as an additional arg in order to make it
possible to use these functions to create a normal nodes and also
nodes defined inside a style tag. These two cases need to be parsed
using different functions: simpleXmlParseAttributes() and
simpleXmlParseW3CAttribute().
2022-02-08 17:58:53 +09:00
Mira Grudzinska
c3ed02fd22 svg_loader: intro to the implementation of the css internal style sheets parsing
Function simpleXmlParseCSSAttribute() used to parse the data inside the style tag.
For now the supported formats are: tag {}, .name {}, tag.name{}

_svgLoaderParserXmlStyle() used to deal with the results of the above - to create
the proper nodes. Will work after create...Node() are changed.

Note:
The geometric attributes are not copied from the node defining the style
to the node using it. The SVG2 standard has to be checked to decide
whether it should be supported.
2022-02-08 17:58:53 +09:00
Mira Grudzinska
0f51d798ce svg_loader: css style node introduced
For now it is assumed that only one style element is defined
in an svg file, although it can be easily changed if needed.
The style node will be used to define the style applied to a node
of a given type or in a case when a class attrib was used.
2022-02-08 17:58:53 +09:00
Mira Grudzinska
828a15cfdb svg_loader: class attribute added
It's the first step in introducing the css inline style sheets into tvg.
For now the class attribute is set only for SvgNodes (not for grads),
it's not used yet.
2022-02-08 17:58:53 +09:00
Hermet Park
0f87685c85 svg_loader: ++robustness
Prevent recursive calls by counting just in case.

The size is arbitrary value, we can adjust it experimentally.

@Issue: https://github.com/Samsung/thorvg/issues/1161
2022-01-20 19:18:22 +09:00
Mira Grudzinska
922e3e10c0 svg_loader: group tags misinterpreted as parent nodes
Group tags in a format <tag .../> finds no application
to the rest of the svg file and should be skipped.
2022-01-19 16:42:06 +09:00
Rémi Verschelde
0c6c37b616 build: Add missing <cstring> includes for MinGW compatibility 2022-01-19 16:40:30 +09:00
Mira Grudzinska
99da490ef7 svg_loader: memleak prevention
If image href set more than once, the memory was not freed.
2022-01-18 18:22:01 +01:00
Mira Grudzinska
ed3b17b228 svg_loader: preventing memcpy from a nullptr
In a case when a polygon/polyline had no points, there is nothing
to be copied.
2022-01-17 12:05:34 +09:00
Mira Grudzinska
04d3bb0ec0 svg_loader: fixing cyclic cloning of nodes
The reference node doesn't have to be placed inside the defs block,
so when refering to it, it is necessary to search the entire node tree.
In case of invalid svg file this can lead to circular references.
Added prevention against such a sutuation.
2022-01-17 12:03:57 +09:00
Mira Grudzinska
43e5644e8b svg_loader: fixing memleak
Memory was not freed before reallocation (grad->ref can be overwritten
without freeing memory first) - fixed.
2022-01-15 17:26:20 +01:00
Mira Grudzinska
6fb0984b49 svg_loader: postponed nodes properly cloned
In case when no defs tag was used, no child node was found.
Also the node attributes should not override those set in the ancestor.
2022-01-12 09:54:57 +01:00
Hermet Park
f0141e63de updated copyright date. 2022-01-12 14:08:48 +09:00
Mira Grudzinska
baf45823cb svg_loader: the color attribute properly inherited
The color attribute hat to be inherited regardles whether it is used
in the child node or not - it may be used i.e. in the grandchild node.
2022-01-11 14:04:39 +09:00
Mira Grudzinska
4b0037fe6a svg_loader: removing repeated lines
The clip-path and the mask attributes are both parsed in _attrParseGNode
function, which is called in th _attrParseUseNode.
2022-01-11 14:03:33 +09:00
Mira Grudzinska
333ff25c7e svg_loader: fix grad update
The grad update should be handled after the postponed nodes are cloned.
2022-01-11 13:56:14 +09:00
Mira Grudzinska
1f6c236fa3 svg_loader: preventing memory leak
A memory leak occured when the 'id' attribute was given multiple times
for a given gradient element. Fixed.
2022-01-11 13:55:21 +09:00
Mira Grudzinska
d3053777a8 svg_loader: typo fixed
_svgLoaderParerXmlClose -> _svgLoaderParserXmlClose
2022-01-08 00:39:21 +01:00
Mira Grudzinska
2f7e7e9923 svg_loader: mask-type attribute introduced
In an svg file the mask-type attribute can be specified.
It takes one of the two values: Luminosity or Alpha.
After the LumaMask is introduced into TVG, this attribute can be
properly read by the svg loader.
2022-01-07 12:45:34 +09:00
Hermet Park
1f5b66c256 svg_loader: ++robustness
prevent a crash with an exceptional handling.

@Issue: https://github.com/Samsung/thorvg/issues/1131
2022-01-06 13:40:00 +09:00
Mira Grudzinska
a6781734dc svg_loader: composite node splitted on mask and clip nodes
The SvgCompositeNode is replaced by the SvgMaskNode and SvgClipNode.
This is needed for using Luma/AlphaMask in the svg loader and in the future,
when we introduce other mask's features.
2022-01-03 12:30:01 +09:00
jykeon
bfaf26d99e svg_loader: Add nullptr check.
Signed-off-by: jykeon <jykeon@samsung.com>
2021-11-19 17:37:45 +09:00
Hermet Park
0fcdba8a4b common math: code refactoring
introduced mathZero(), mathEqual() for floating variables.
2021-11-15 17:10:54 +09:00
Mira Grudzinska
ed640630c1 svg_loader: mem properly freed
delete -> free
2021-11-12 10:46:53 +09:00
Mira Grudzinska
f3450e1760 svg_loader: memory properly released
delete->free
2021-11-11 21:49:13 +09:00
Hermet Park
c790e18de6
svg_loader: reduce binary size
saved 800 bytes.
2021-11-05 17:17:20 +09:00
Hermet Park
88d34f0d9a svg_loader: reduce binary size
removed the std::string usages.

saved 17kb.
2021-11-05 17:12:53 +09:00
Mira Grudzinska
40f2baabae svg_loader: SvgCompositeNode type introduced
Clips and masks require to implement some additional variables,
so the new node type has been introduced. Implementation of the usage
of these additional variables will be the subject of a separate
commit.
2021-11-05 13:10:14 +09:00
Mira Grudzinska
7176a5ddd4 svg_loader: define the scaling factors for units changing
The values in absolute units are calculated based on the pixel unit.
Till now the default value of 90dpi was used. Since CSS3 (now CSS4 is
the most recent) 1 inch equals to 96 pixels. The necessary constants
are introduces in this commit.
2021-11-02 11:29:41 +01:00
Hermet Park
3b2e1f4291 Revert "loaders: Consider colorspaces (#838)"
This reverts commit cd5116b053.

Ah this breaks the Stress example due to Picture::duplicate() is not available...

Need to consider and come back again.
2021-11-01 16:53:25 +09:00
Michal Maciola
cd5116b053
loaders: Consider colorspaces (#838)
* common: added colorSpace() function

This patch introduces colorSpace() function for SW and GL engine.

* infra: change LoadModule:read() into LoadModule:read(uint32_t colorspace)

This patch changes LoadModule:read() into LoadModule:read(uint32_t colorspace)

* picture: implement passing colorspace into loader

This patch implements passing colorspace into loaders.
Loader->read is now called on the first update.

* external_jpg_loader: support colorspaces

* external_png_loader: support colorspaces
2021-11-01 16:10:22 +09:00
Hermet Park
875e200767 common: code refactoring
removed invalid nullptr checks.

New allocation doesn't gurantee that returns nullptr when it's failed.
It's useless on the modern compliers and our policy respects it.
2021-11-01 12:09:32 +09:00
Michal Maciola
00dfd55f18 SVG: Support geometry properties of use tag
This patch adds a support for geometry properties (x, y) of <use> tag
2021-10-29 14:10:44 +09:00
JunsuChoi
664e95859c svg_loader SvgLoader: Fix gradient default value
If isXXPercentage is true, then it is calculated accordingly.
2021-10-25 11:14:03 +02:00
Mira Grudzinska
5fc5fd7f2d svg_loader: requested changes applied 2021-10-25 11:15:58 +09:00
Mira Grudzinska
60029327f0 svg_loader: gradient handling and recalculation changed
The need to convert the gradient values occurs only when they are given
as nominal values in the current user coordinate system (userSpaceOnUse).
2021-10-25 11:15:58 +09:00
Mira Grudzinska
a93b5b98a9 svg loader: converting the image path to the absolute one
The href image tag should point to an absolute image path.
2021-10-23 02:26:55 +02:00
Hermet Park
9c8e785fdc updated license
Add missing original copyright texts in the source code.
2021-10-20 22:50:07 +09:00
Michal Maciola
d7a3aa580a svg_loader: fix potential mem corruption in _idFromUrl function
This patch fixes some potential memory corruptions in _idFromUrl function
when name (url) is longer than 50 chars or is incorrectly terminated.
2021-10-20 10:34:02 +09:00