Skip to content

Commit b2114d0

Browse files
committed
read opacity values directly from fill/stroke elements if present
and don't rely on parent group elements which may be absent (fixes #292)
1 parent c4f9312 commit b2114d0

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

src/PDFHandler.cpp

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -440,33 +440,35 @@ static unique_ptr<SVGElement> create_path_element (XMLElement *srcPathElement, b
440440
}
441441

442442

443+
static const char* attribute_value (const string &attr, XMLElement *elem) {
444+
const char *val = elem->getAttributeValue(attr);
445+
if (val == nullptr) {
446+
if (XMLElement *parent = elem->parent()->toElement())
447+
val = parent->getAttributeValue(attr);
448+
}
449+
return val;
450+
}
451+
452+
443453
void PDFHandler::doFillPath (XMLElement *trcFillPathElement) {
444454
if (auto pathElement = create_path_element(trcFillPathElement, false)) {
445-
if (XMLElement *parent = trcFillPathElement->parent()->toElement()) {
446-
if (parent->name() == "group") {
447-
if (const char *valstr = parent->getAttributeValue("blendmode"))
448-
pathElement->setFillOpacity(Opacity::blendMode(valstr));
449-
if (const char *valstr = parent->getAttributeValue("alpha"))
450-
pathElement->setFillOpacity(OpacityAlpha(parse_value<double>(valstr)));
451-
}
452-
}
455+
if (const char *valstr = attribute_value("blendmode", trcFillPathElement))
456+
pathElement->setFillOpacity(Opacity::blendMode(valstr));
457+
if (const char *valstr = attribute_value("alpha", trcFillPathElement))
458+
pathElement->setFillOpacity(OpacityAlpha(parse_value<double>(valstr)));
453459
_svg->appendToPage(std::move(pathElement));
454460
}
455461
}
456462

457463

458464
void PDFHandler::doStrokePath (XMLElement *trcStrokePathElement) {
459465
if (auto pathElement = create_path_element(trcStrokePathElement, true)) {
460-
if (XMLElement *parent = trcStrokePathElement->parent()->toElement()) {
461-
if (parent->name() == "group") {
462-
Opacity opacity;
463-
if (const char *valstr = parent->getAttributeValue("blendmode"))
464-
opacity.setBlendMode(Opacity::blendMode(valstr));
465-
if (const char *valstr = parent->getAttributeValue("alpha"))
466-
opacity.strokealpha().setConstAlpha(parse_value<double>(valstr));
467-
pathElement->setStrokeOpacity(opacity);
468-
}
469-
}
466+
Opacity opacity;
467+
if (const char *valstr = attribute_value("blendmode", trcStrokePathElement))
468+
opacity.setBlendMode(Opacity::blendMode(valstr));
469+
if (const char *valstr = attribute_value("alpha", trcStrokePathElement))
470+
opacity.strokealpha().setConstAlpha(parse_value<double>(valstr));
471+
pathElement->setStrokeOpacity(opacity);
470472
_svg->appendToPage(std::move(pathElement));
471473
}
472474
}

0 commit comments

Comments
 (0)