mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-17 05:25:43 +00:00
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.
This commit is contained in:
parent
a18f85cca8
commit
a6781734dc
2 changed files with 14 additions and 8 deletions
|
@ -1029,7 +1029,7 @@ static bool _attrParseClipPathNode(void* data, const char* key, const char* valu
|
||||||
{
|
{
|
||||||
SvgLoaderData* loader = (SvgLoaderData*)data;
|
SvgLoaderData* loader = (SvgLoaderData*)data;
|
||||||
SvgNode* node = loader->svgParse->node;
|
SvgNode* node = loader->svgParse->node;
|
||||||
SvgCompositeNode* comp = &(node->node.comp);
|
SvgClipNode* clip = &(node->node.clip);
|
||||||
|
|
||||||
if (!strcmp(key, "style")) {
|
if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
|
||||||
|
@ -1039,7 +1039,7 @@ static bool _attrParseClipPathNode(void* data, const char* key, const char* valu
|
||||||
if (node->id && value) free(node->id);
|
if (node->id && value) free(node->id);
|
||||||
node->id = _copyId(value);
|
node->id = _copyId(value);
|
||||||
} else if (!strcmp(key, "clipPathUnits")) {
|
} else if (!strcmp(key, "clipPathUnits")) {
|
||||||
if (!strcmp(value, "objectBoundingBox")) comp->userSpace = false;
|
if (!strcmp(value, "objectBoundingBox")) clip->userSpace = false;
|
||||||
} else {
|
} else {
|
||||||
return _parseStyleAttr(loader, key, value, false);
|
return _parseStyleAttr(loader, key, value, false);
|
||||||
}
|
}
|
||||||
|
@ -1051,7 +1051,7 @@ static bool _attrParseMaskNode(void* data, const char* key, const char* value)
|
||||||
{
|
{
|
||||||
SvgLoaderData* loader = (SvgLoaderData*)data;
|
SvgLoaderData* loader = (SvgLoaderData*)data;
|
||||||
SvgNode* node = loader->svgParse->node;
|
SvgNode* node = loader->svgParse->node;
|
||||||
SvgCompositeNode* comp = &(node->node.comp);
|
SvgMaskNode* mask = &(node->node.mask);
|
||||||
|
|
||||||
if (!strcmp(key, "style")) {
|
if (!strcmp(key, "style")) {
|
||||||
return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
|
return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
|
||||||
|
@ -1061,7 +1061,7 @@ static bool _attrParseMaskNode(void* data, const char* key, const char* value)
|
||||||
if (node->id && value) free(node->id);
|
if (node->id && value) free(node->id);
|
||||||
node->id = _copyId(value);
|
node->id = _copyId(value);
|
||||||
} else if (!strcmp(key, "maskContentUnits")) {
|
} else if (!strcmp(key, "maskContentUnits")) {
|
||||||
if (!strcmp(value, "objectBoundingBox")) comp->userSpace = false;
|
if (!strcmp(value, "objectBoundingBox")) mask->userSpace = false;
|
||||||
} else {
|
} else {
|
||||||
return _parseStyleAttr(loader, key, value, false);
|
return _parseStyleAttr(loader, key, value, false);
|
||||||
}
|
}
|
||||||
|
@ -1171,7 +1171,7 @@ static SvgNode* _createMaskNode(SvgLoaderData* loader, SvgNode* parent, TVG_UNUS
|
||||||
loader->svgParse->node = _createNode(parent, SvgNodeType::Mask);
|
loader->svgParse->node = _createNode(parent, SvgNodeType::Mask);
|
||||||
if (!loader->svgParse->node) return nullptr;
|
if (!loader->svgParse->node) return nullptr;
|
||||||
|
|
||||||
loader->svgParse->node->node.comp.userSpace = true;
|
loader->svgParse->node->node.mask.userSpace = true;
|
||||||
|
|
||||||
simpleXmlParseAttributes(buf, bufLength, _attrParseMaskNode, loader);
|
simpleXmlParseAttributes(buf, bufLength, _attrParseMaskNode, loader);
|
||||||
|
|
||||||
|
@ -1185,7 +1185,7 @@ static SvgNode* _createClipPathNode(SvgLoaderData* loader, SvgNode* parent, cons
|
||||||
if (!loader->svgParse->node) return nullptr;
|
if (!loader->svgParse->node) return nullptr;
|
||||||
|
|
||||||
loader->svgParse->node->display = false;
|
loader->svgParse->node->display = false;
|
||||||
loader->svgParse->node->node.comp.userSpace = true;
|
loader->svgParse->node->node.clip.userSpace = true;
|
||||||
|
|
||||||
simpleXmlParseAttributes(buf, bufLength, _attrParseClipPathNode, loader);
|
simpleXmlParseAttributes(buf, bufLength, _attrParseClipPathNode, loader);
|
||||||
|
|
||||||
|
|
|
@ -215,7 +215,12 @@ struct SvgPolygonNode
|
||||||
float* points;
|
float* points;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SvgCompositeNode
|
struct SvgClipNode
|
||||||
|
{
|
||||||
|
bool userSpace;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SvgMaskNode
|
||||||
{
|
{
|
||||||
bool userSpace;
|
bool userSpace;
|
||||||
};
|
};
|
||||||
|
@ -352,7 +357,8 @@ struct SvgNode
|
||||||
SvgPathNode path;
|
SvgPathNode path;
|
||||||
SvgLineNode line;
|
SvgLineNode line;
|
||||||
SvgImageNode image;
|
SvgImageNode image;
|
||||||
SvgCompositeNode comp;
|
SvgMaskNode mask;
|
||||||
|
SvgClipNode clip;
|
||||||
} node;
|
} node;
|
||||||
bool display;
|
bool display;
|
||||||
~SvgNode();
|
~SvgNode();
|
||||||
|
|
Loading…
Add table
Reference in a new issue