summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--src/svg/qsvggenerator.cpp34
-rw-r--r--tests/auto/qsvggenerator/referenceSvgs/fileName_output.svg2
-rw-r--r--tests/auto/qsvggenerator/referenceSvgs/radial_gradient.svg4
4 files changed, 38 insertions, 4 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 28e9cfd..7fcbf65 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -2,4 +2,4 @@ load(qt_build_config)
CONFIG += qt_example_installs
CONFIG += warning_clean
-MODULE_VERSION = 5.4.0
+MODULE_VERSION = 5.5.0
diff --git a/src/svg/qsvggenerator.cpp b/src/svg/qsvggenerator.cpp
index 5d58fa3..a06170f 100644
--- a/src/svg/qsvggenerator.cpp
+++ b/src/svg/qsvggenerator.cpp
@@ -162,9 +162,11 @@ public:
void updateState(const QPaintEngineState &state);
void popGroup();
+ void drawEllipse(const QRectF &r) Q_DECL_OVERRIDE;
void drawPath(const QPainterPath &path);
void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr);
void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
+ void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE;
void drawTextItem(const QPointF &pt, const QTextItem &item);
void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
Qt::ImageConversionFlags flags = Qt::AutoColor);
@@ -965,6 +967,23 @@ void QSvgPaintEngine::updateState(const QPaintEngineState &state)
d->afterFirstUpdate = true;
}
+void QSvgPaintEngine::drawEllipse(const QRectF &r)
+{
+ Q_D(QSvgPaintEngine);
+
+ const bool isCircle = r.width() == r.height();
+ *d->stream << '<' << (isCircle ? "circle" : "ellipse");
+ if (state->pen().isCosmetic())
+ *d->stream << " vector-effect=\"non-scaling-stroke\"";
+ const QPointF c = r.center();
+ *d->stream << " cx=\"" << c.x() << "\" cy=\"" << c.y();
+ if (isCircle)
+ *d->stream << "\" r=\"" << r.width() / qreal(2.0);
+ else
+ *d->stream << "\" rx=\"" << r.width() / qreal(2.0) << "\" ry=\"" << r.height() / qreal(2.0);
+ *d->stream << "\"/>" << endl;
+}
+
void QSvgPaintEngine::drawPath(const QPainterPath &p)
{
Q_D(QSvgPaintEngine);
@@ -1035,6 +1054,21 @@ void QSvgPaintEngine::drawPolygon(const QPointF *points, int pointCount,
}
}
+void QSvgPaintEngine::drawRects(const QRectF *rects, int rectCount)
+{
+ Q_D(QSvgPaintEngine);
+
+ for (int i=0; i < rectCount; ++i) {
+ const QRectF &rect = rects[i];
+ *d->stream << "<rect";
+ if (state->pen().isCosmetic())
+ *d->stream << " vector-effect=\"non-scaling-stroke\"";
+ *d->stream << " x=\"" << rect.x() << "\" y=\"" << rect.y()
+ << "\" width=\"" << rect.width() << "\" height=\"" << rect.height()
+ << "\"/>" << endl;
+ }
+}
+
void QSvgPaintEngine::drawTextItem(const QPointF &pt, const QTextItem &textItem)
{
Q_D(QSvgPaintEngine);
diff --git a/tests/auto/qsvggenerator/referenceSvgs/fileName_output.svg b/tests/auto/qsvggenerator/referenceSvgs/fileName_output.svg
index 1e78e17..3519f6a 100644
--- a/tests/auto/qsvggenerator/referenceSvgs/fileName_output.svg
+++ b/tests/auto/qsvggenerator/referenceSvgs/fileName_output.svg
@@ -9,7 +9,7 @@
<g fill="#ff0000" fill-opacity="1" stroke="none" transform="matrix(1,0,0,1,0,0)"
font-family="Sans Serif" font-size="8.25" font-weight="400" font-style="normal"
>
-<path vector-effect="none" fill-rule="evenodd" d="M0,0 L100,0 L100,100 L0,100 L0,0"/>
+<rect x="0" y="0" width="100" height="100"/>
</g>
</g>
</svg>
diff --git a/tests/auto/qsvggenerator/referenceSvgs/radial_gradient.svg b/tests/auto/qsvggenerator/referenceSvgs/radial_gradient.svg
index 2c5c03e..a56674c 100644
--- a/tests/auto/qsvggenerator/referenceSvgs/radial_gradient.svg
+++ b/tests/auto/qsvggenerator/referenceSvgs/radial_gradient.svg
@@ -18,13 +18,13 @@
<g fill="url(#gradient1)" stroke="none" transform="matrix(1,0,0,1,0,0)"
font-family="Sans Serif" font-size="8.25" font-weight="400" font-style="normal"
>
-<path vector-effect="none" fill-rule="evenodd" d="M0,0 L100,0 L100,100 L0,100 L0,0"/>
+<rect x="0" y="0" width="100" height="100"/>
</g>
<g fill="url(#gradient2)" stroke="none" transform="matrix(1,0,0,1,0,0)"
font-family="Sans Serif" font-size="8.25" font-weight="400" font-style="normal"
>
-<path vector-effect="none" fill-rule="evenodd" d="M100,0 L200,0 L200,100 L100,100 L100,0"/>
+<rect x="100" y="0" width="100" height="100"/>
</g>
</g>
</svg>