From ea3d79f5f341ac1b17f66c69d59af6e8e033a7ec Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 6 Jul 2021 10:39:00 +0900 Subject: [PATCH] svg_loader: Support percentage unit of dash-array Refers to the diagonal length of the viewport. https://www.w3.org/TR/SVG2/coords.html#Units --- src/loaders/svg/tvgSvgLoader.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/loaders/svg/tvgSvgLoader.cpp b/src/loaders/svg/tvgSvgLoader.cpp index 2eff3b6f..5f58c83e 100644 --- a/src/loaders/svg/tvgSvgLoader.cpp +++ b/src/loaders/svg/tvgSvgLoader.cpp @@ -244,7 +244,7 @@ _PARSE_TAG(FillRule, fillRule, FillRule, fillRuleTags, FillRule::Winding) * https://www.w3.org/TR/SVG/painting.html */ static inline void -_parseDashArray(const char *str, SvgDash* dash) +_parseDashArray(SvgLoaderData* loader, const char *str, SvgDash* dash) { if (!strncmp(str, "none", 4)) return; @@ -257,7 +257,9 @@ _parseDashArray(const char *str, SvgDash* dash) if (parsedValue <= 0.0f) break; if (*end == '%') { ++end; - //TODO: multiply percentage value + //Refers to the diagonal length of the viewport. + //https://www.w3.org/TR/SVG2/coords.html#Units + parsedValue = (sqrt(pow(loader->svgParse->global.w, 2) + pow(loader->svgParse->global.h, 2)) / sqrt(2.0f)) * (parsedValue / 100.0f); } (*dash).array.push(parsedValue); str = end; @@ -815,10 +817,10 @@ static void _handleStrokeOpacityAttr(TVG_UNUSED SvgLoaderData* loader, SvgNode* node->style->stroke.opacity = _toOpacity(value); } -static void _handleStrokeDashArrayAttr(TVG_UNUSED SvgLoaderData* loader, SvgNode* node, const char* value) +static void _handleStrokeDashArrayAttr(SvgLoaderData* loader, SvgNode* node, const char* value) { node->style->stroke.flags = (SvgStrokeFlags)((int)node->style->stroke.flags | (int)SvgStrokeFlags::Dash); - _parseDashArray(value, &node->style->stroke.dash); + _parseDashArray(loader, value, &node->style->stroke.dash); } static void _handleStrokeWidthAttr(SvgLoaderData* loader, SvgNode* node, const char* value)