}
+#ifdef THORVG_LOG_ENABLED
+static void _inefficientNodeCheck(SvgNode* node){
+ if (!node->display) printf("SVG: Inefficient elements used [Display is none][Node Type : %s]\n", _nodeTypeToString(node->type).c_str());
+ if (node->style->opacity == 0) printf("SVG: Inefficient elements used [Opacity is zero][Node Type : %s]\n", _nodeTypeToString(node->type).c_str());
+ if (node->style->fill.opacity == 0 && node->style->stroke.opacity == 0) printf("SVG: Inefficient elements used [Fill opacity and stroke opacity are zero][Node Type : %s]\n", _nodeTypeToString(node->type).c_str());
+
+ switch (node->type) {
+ case SvgNodeType::Path: {
+ if (!node->node.path.path || node->node.path.path->empty()) printf("SVG: Inefficient elements used [Empty path][Node Type : %s]\n", _nodeTypeToString(node->type).c_str());
+ break;
+ }
+ case SvgNodeType::Ellipse: {
+ if (node->node.ellipse.rx == 0 && node->node.ellipse.ry == 0) printf("SVG: Inefficient elements used [Size is zero][Node Type : %s]\n", _nodeTypeToString(node->type).c_str());
+ break;
+ }
+ case SvgNodeType::Polygon:
+ case SvgNodeType::Polyline: {
+ if (node->node.polygon.pointsCount < 2) printf("SVG: Inefficient elements used [Invalid Polygon][Node Type : %s]\n", _nodeTypeToString(node->type).c_str());
+ break;
+ }
+ case SvgNodeType::Circle: {
+ if (node->node.circle.r == 0) printf("SVG: Inefficient elements used [Size is zero][Node Type : %s]\n", _nodeTypeToString(node->type).c_str());
+ break;
+ }
+ case SvgNodeType::Rect: {
+ if (node->node.rect.w == 0 && node->node.rect.h) printf("SVG: Inefficient elements used [Size is zero][Node Type : %s]\n", _nodeTypeToString(node->type).c_str());
+ break;
+ }
+ case SvgNodeType::Line: {
+ if (node->node.line.x1 == node->node.line.x2 && node->node.line.y1 == node->node.line.y2) printf("SVG: Inefficient elements used [Size is zero][Node Type : %s]\n", _nodeTypeToString(node->type).c_str());
+ break;
+ }
+ default: break;
+ }
+}
+#endif
+
static void _updateStyle(SvgNode* node, SvgStyleProperty* parentStyle)
{
_styleInherit(node->style, parentStyle);
+#ifdef THORVG_LOG_ENABLED
+ _inefficientNodeCheck(node);
+#endif
auto child = node->child.data;
for (uint32_t i = 0; i < node->child.count; ++i, ++child) {
#include "tvgXmlParser.h"
#ifdef THORVG_LOG_ENABLED
-static string nodeTypeToString(SvgNodeType type)
+string _nodeTypeToString(SvgNodeType type)
{
switch (type) {
case SvgNodeType::Doc: return "Doc";
tval[valueEnd - value] = '\0';
#ifdef THORVG_LOG_ENABLED
- if (!func((void*)data, tmpBuf, tval)) printf("SVG: Unsupported attributes used [Elements type: %s][Attribute: %s]\n", nodeTypeToString(((SvgLoaderData*)data)->svgParse->node->type).c_str(), tmpBuf);
+ if (!func((void*)data, tmpBuf, tval)) printf("SVG: Unsupported attributes used [Elements type: %s][Attribute: %s]\n", _nodeTypeToString(((SvgLoaderData*)data)->svgParse->node->type).c_str(), tmpBuf);
#else
func((void*)data, tmpBuf, tval);
#endif