diff options
Diffstat (limited to 'src/svg/qsvgstyle.cpp')
-rw-r--r-- | src/svg/qsvgstyle.cpp | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/src/svg/qsvgstyle.cpp b/src/svg/qsvgstyle.cpp index d425923..cf17944 100644 --- a/src/svg/qsvgstyle.cpp +++ b/src/svg/qsvgstyle.cpp @@ -61,7 +61,8 @@ QSvgExtraStates::QSvgExtraStates() fontWeight(QFont::Normal), fillRule(Qt::WindingFill), strokeDashOffset(0), - vectorEffect(false) + vectorEffect(false), + imageRendering(QSvgQualityStyle::ImageRenderingAuto) { } @@ -81,16 +82,46 @@ void QSvgFillStyleProperty::revert(QPainter *, QSvgExtraStates &) QSvgQualityStyle::QSvgQualityStyle(int color) + : m_imageRendering(QSvgQualityStyle::ImageRenderingAuto) + , m_oldImageRendering(QSvgQualityStyle::ImageRenderingAuto) + , m_imageRenderingSet(0) { Q_UNUSED(color); } -void QSvgQualityStyle::apply(QPainter *, const QSvgNode *, QSvgExtraStates &) -{ +void QSvgQualityStyle::setImageRendering(ImageRendering hint) { + m_imageRendering = hint; + m_imageRenderingSet = 1; } -void QSvgQualityStyle::revert(QPainter *, QSvgExtraStates &) + +void QSvgQualityStyle::apply(QPainter *p, const QSvgNode *, QSvgExtraStates &states) { + m_oldImageRendering = states.imageRendering; + if (m_imageRenderingSet) { + states.imageRendering = m_imageRendering; + } + if (m_imageRenderingSet) { + bool smooth = false; + if (m_imageRendering == ImageRenderingAuto) + // auto (the spec says to prefer quality) + smooth = true; + else + smooth = (m_imageRendering == ImageRenderingOptimizeQuality); + p->setRenderHint(QPainter::SmoothPixmapTransform, smooth); + } +} +void QSvgQualityStyle::revert(QPainter *p, QSvgExtraStates &states) +{ + if (m_imageRenderingSet) { + states.imageRendering = m_oldImageRendering; + bool smooth = false; + if (m_oldImageRendering == ImageRenderingAuto) + smooth = true; + else + smooth = (m_oldImageRendering == ImageRenderingOptimizeQuality); + p->setRenderHint(QPainter::SmoothPixmapTransform, smooth); + } } QSvgFillStyle::QSvgFillStyle() |