Fix regression in opacity handling of pdf path stroke
Specifically when rendering svg to a pdf, when painter opacity is set, path strokes were transformed incorrectly due to missed setting of dirtyTransform flag. Task-number: QTBUG-38675 Change-Id: I861353822ccddd394910b8612687a244d195a41e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
This commit is contained in:
parent
838212b8e6
commit
32957d8893
@ -1051,7 +1051,7 @@ void QPdfEngine::drawPath (const QPainterPath &p)
|
||||
if (!d->hasPen && !d->hasBrush)
|
||||
return;
|
||||
|
||||
if (d->simplePen && d->opacity == 1.0) {
|
||||
if (d->simplePen) {
|
||||
// draw strokes natively in this case for better output
|
||||
*d->currentPage << QPdf::generatePath(p, QTransform(), d->hasBrush ? QPdf::FillAndStrokePath : QPdf::StrokePath);
|
||||
} else {
|
||||
@ -1198,7 +1198,7 @@ void QPdfEngine::updateState(const QPaintEngineState &state)
|
||||
d->stroker.setPen(d->pen, state.renderHints());
|
||||
QBrush penBrush = d->pen.brush();
|
||||
bool oldSimple = d->simplePen;
|
||||
d->simplePen = (d->hasPen && (penBrush.style() == Qt::SolidPattern) && penBrush.isOpaque());
|
||||
d->simplePen = (d->hasPen && (penBrush.style() == Qt::SolidPattern) && penBrush.isOpaque() && d->opacity == 1.0);
|
||||
if (oldSimple != d->simplePen)
|
||||
flags |= DirtyTransform;
|
||||
} else if (flags & DirtyHints) {
|
||||
@ -1214,8 +1214,13 @@ void QPdfEngine::updateState(const QPaintEngineState &state)
|
||||
d->brushOrigin = state.brushOrigin();
|
||||
flags |= DirtyBrush;
|
||||
}
|
||||
if (flags & DirtyOpacity)
|
||||
if (flags & DirtyOpacity) {
|
||||
d->opacity = state.opacity();
|
||||
if (d->simplePen && d->opacity != 1.0) {
|
||||
d->simplePen = false;
|
||||
flags |= DirtyTransform;
|
||||
}
|
||||
}
|
||||
|
||||
bool ce = d->clipEnabled;
|
||||
if (flags & DirtyClipPath) {
|
||||
|
Loading…
Reference in New Issue
Block a user