From ff3ebd9abda522dc9be625a661a77e8dab21e754 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 8 Feb 2022 18:43:03 +0900 Subject: [PATCH] svg_loader: code refactoring. follow strict coding-style. no logic changes. --- src/loaders/svg/tvgSvgCssStyle.cpp | 54 ++++++++++++++---------------- src/loaders/svg/tvgSvgCssStyle.h | 10 +++--- src/loaders/svg/tvgSvgLoader.cpp | 31 ++++++++--------- 3 files changed, 45 insertions(+), 50 deletions(-) diff --git a/src/loaders/svg/tvgSvgCssStyle.cpp b/src/loaders/svg/tvgSvgCssStyle.cpp index 67fb39c7..e537cfa2 100644 --- a/src/loaders/svg/tvgSvgCssStyle.cpp +++ b/src/loaders/svg/tvgSvgCssStyle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,14 +20,13 @@ * SOFTWARE. */ -#include #include "tvgSvgCssStyle.h" /************************************************************************/ /* Internal Class Implementation */ /************************************************************************/ -static void _cssStyleCopy(SvgStyleProperty* to, const SvgStyleProperty* from) +static void _copyStyle(SvgStyleProperty* to, const SvgStyleProperty* from) { if (from == nullptr) return; //Copy the properties of 'from' only if they were explicitly set (not the default ones). @@ -108,7 +107,7 @@ static void _cssStyleCopy(SvgStyleProperty* to, const SvgStyleProperty* from) /* External Class Implementation */ /************************************************************************/ -void copyCssStyleAttr(SvgNode* to, const SvgNode* from) +void cssCopyStyleAttr(SvgNode* to, const SvgNode* from) { //Copy matrix attribute if (from->transform && !((int)to->style->flags & (int)SvgStyleFlags::Transform)) { @@ -119,19 +118,19 @@ void copyCssStyleAttr(SvgNode* to, const SvgNode* from) } } //Copy style attribute - _cssStyleCopy(to->style, from->style); + _copyStyle(to->style, from->style); if (from->style->clipPath.url) to->style->clipPath.url = strdup(from->style->clipPath.url); if (from->style->mask.url) to->style->mask.url = strdup(from->style->mask.url); } -SvgNode* findCssStyleNode(const SvgNode* cssStyle, const char* title, SvgNodeType type) +SvgNode* cssFindStyleNode(const SvgNode* style, const char* title, SvgNodeType type) { - if (!cssStyle) return nullptr; + if (!style) return nullptr; - auto child = cssStyle->child.data; - for (uint32_t i = 0; i < cssStyle->child.count; ++i, ++child) { + auto child = style->child.data; + for (uint32_t i = 0; i < style->child.count; ++i, ++child) { if ((*child)->type == type) { if ((!title && !(*child)->id) || (title && (*child)->id && !strcmp((*child)->id, title))) return (*child); } @@ -140,12 +139,12 @@ SvgNode* findCssStyleNode(const SvgNode* cssStyle, const char* title, SvgNodeTyp } -SvgNode* findCssStyleNode(const SvgNode* cssStyle, const char* title) +SvgNode* cssFindStyleNode(const SvgNode* style, const char* title) { - if (!cssStyle) return nullptr; + if (!style) return nullptr; - auto child = cssStyle->child.data; - for (uint32_t i = 0; i < cssStyle->child.count; ++i, ++child) { + auto child = style->child.data; + for (uint32_t i = 0; i < style->child.count; ++i, ++child) { if ((*child)->type == SvgNodeType::CssStyle) { if ((title && (*child)->id && !strcmp((*child)->id, title))) return (*child); } @@ -154,35 +153,34 @@ SvgNode* findCssStyleNode(const SvgNode* cssStyle, const char* title) } -void updateCssStyle(SvgNode* doc, SvgNode* cssStyle) +void cssUpdateStyle(SvgNode* doc, SvgNode* style) { if (doc->child.count > 0) { auto child = doc->child.data; for (uint32_t i = 0; i < doc->child.count; ++i, ++child) { - if (auto cssNode = findCssStyleNode(cssStyle, nullptr, (*child)->type)) { - copyCssStyleAttr(*child, cssNode); + if (auto cssNode = cssFindStyleNode(style, nullptr, (*child)->type)) { + cssCopyStyleAttr(*child, cssNode); } - if (auto cssNode = findCssStyleNode(cssStyle, nullptr)) { - copyCssStyleAttr(*child, cssNode); + if (auto cssNode = cssFindStyleNode(style, nullptr)) { + cssCopyStyleAttr(*child, cssNode); } - updateCssStyle(*child, cssStyle); + cssUpdateStyle(*child, style); } } } -void stylePostponedNodes(Array* nodesToStyle, SvgNode* cssStyle) +void cssApplyStyleToPostponeds(Array& postponeds, SvgNode* style) { - for (uint32_t i = 0; i < nodesToStyle->count; ++i) { - auto nodeIdPair = nodesToStyle->data[i]; + for (uint32_t i = 0; i < postponeds.count; ++i) { + auto nodeIdPair = postponeds.data[i]; //css styling: tag.name has higher priority than .name - if (auto cssNode = findCssStyleNode(cssStyle, nodeIdPair.id, nodeIdPair.node->type)) { - copyCssStyleAttr(nodeIdPair.node, cssNode); + if (auto cssNode = cssFindStyleNode(style, nodeIdPair.id, nodeIdPair.node->type)) { + cssCopyStyleAttr(nodeIdPair.node, cssNode); } - if (auto cssNode = findCssStyleNode(cssStyle, nodeIdPair.id)) { - copyCssStyleAttr(nodeIdPair.node, cssNode); + if (auto cssNode = cssFindStyleNode(style, nodeIdPair.id)) { + cssCopyStyleAttr(nodeIdPair.node, cssNode); } } -} - +} \ No newline at end of file diff --git a/src/loaders/svg/tvgSvgCssStyle.h b/src/loaders/svg/tvgSvgCssStyle.h index 90fbcbf0..66477c1a 100644 --- a/src/loaders/svg/tvgSvgCssStyle.h +++ b/src/loaders/svg/tvgSvgCssStyle.h @@ -25,10 +25,10 @@ #include "tvgSvgLoaderCommon.h" -void copyCssStyleAttr(SvgNode* to, const SvgNode* from); -SvgNode* findCssStyleNode(const SvgNode* cssStyle, const char* title, SvgNodeType type); -SvgNode* findCssStyleNode(const SvgNode* cssStyle, const char* title); -void updateCssStyle(SvgNode* doc, SvgNode* cssStyle); -void stylePostponedNodes(Array* nodesToStyle, SvgNode* cssStyle); +void cssCopyStyleAttr(SvgNode* to, const SvgNode* from); +SvgNode* cssFindStyleNode(const SvgNode* style, const char* title, SvgNodeType type); +SvgNode* cssFindStyleNode(const SvgNode* style, const char* title); +void cssUpdateStyle(SvgNode* doc, SvgNode* style); +void cssApplyStyleToPostponeds(Array& postponeds, SvgNode* style); #endif //_TVG_SVG_CSS_STYLE_H_ diff --git a/src/loaders/svg/tvgSvgLoader.cpp b/src/loaders/svg/tvgSvgLoader.cpp index fc0d0eec..ce8eab31 100644 --- a/src/loaders/svg/tvgSvgLoader.cpp +++ b/src/loaders/svg/tvgSvgLoader.cpp @@ -80,9 +80,6 @@ typedef bool (*parseAttributes)(const char* buf, unsigned bufLength, simpleXMLAt typedef SvgNode* (*FactoryMethod)(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func); typedef SvgStyleGradient* (*GradientFactoryMethod)(SvgLoaderData* loader, const char* buf, unsigned bufLength); -static void _postponeCloneNode(Array* nodes, SvgNode *node, char* id); - - static char* _skipSpace(const char* str, const char* end) { while (((end && str < end) || (!end && *str != '\0')) && isspace(*str)) { @@ -737,6 +734,12 @@ error: } +static void _postpone(Array& nodes, SvgNode *node, char* id) +{ + nodes.push({node, id}); +} + + /* // TODO - remove? static constexpr struct @@ -960,16 +963,16 @@ static void _handleCssClassAttr(SvgLoaderData* loader, SvgNode* node, const char bool cssClassFound = false; //css styling: tag.name has higher priority than .name - if (auto cssNode = findCssStyleNode(loader->cssStyle, *cssClass, node->type)) { + if (auto cssNode = cssFindStyleNode(loader->cssStyle, *cssClass, node->type)) { cssClassFound = true; - copyCssStyleAttr(node, cssNode); + cssCopyStyleAttr(node, cssNode); } - if (auto cssNode = findCssStyleNode(loader->cssStyle, *cssClass)) { + if (auto cssNode = cssFindStyleNode(loader->cssStyle, *cssClass)) { cssClassFound = true; - copyCssStyleAttr(node, cssNode); + cssCopyStyleAttr(node, cssNode); } - if (!cssClassFound) _postponeCloneNode(&loader->nodesToStyle, node, *cssClass); + if (!cssClassFound) _postpone(loader->nodesToStyle, node, *cssClass); } @@ -2031,12 +2034,6 @@ static void _cloneNode(SvgNode* from, SvgNode* parent, int depth) } -static void _postponeCloneNode(Array* nodes, SvgNode *node, char* id) -{ - nodes->push({node, id}); -} - - static void _clonePostponedNodes(Array* cloneNodes, SvgNode* doc) { for (uint32_t i = 0; i < cloneNodes->count; ++i) { @@ -2091,7 +2088,7 @@ static bool _attrParseUseNode(void* data, const char* key, const char* value) //some svg export software include element at the end of the file //if so the 'from' element won't be found now and we have to repeat finding //after the whole file is parsed - _postponeCloneNode(&loader->cloneNodes, node, id); + _postpone(loader->cloneNodes, node, id); } } else { return _attrParseGNode(data, key, value); @@ -3047,8 +3044,8 @@ void SvgLoader::run(unsigned tid) if (loaderData.doc) { auto defs = loaderData.doc->node.doc.defs; - if (loaderData.nodesToStyle.count > 0) stylePostponedNodes(&loaderData.nodesToStyle, loaderData.cssStyle); - if (loaderData.cssStyle) updateCssStyle(loaderData.doc, loaderData.cssStyle); + if (loaderData.nodesToStyle.count > 0) cssApplyStyleToPostponeds(loaderData.nodesToStyle, loaderData.cssStyle); + if (loaderData.cssStyle) cssUpdateStyle(loaderData.doc, loaderData.cssStyle); _updateComposite(loaderData.doc, loaderData.doc); if (defs) _updateComposite(loaderData.doc, defs);