summaryrefslogtreecommitdiff
path: root/src/svg/qsvgstyle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/svg/qsvgstyle.cpp')
-rw-r--r--src/svg/qsvgstyle.cpp39
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()