diff options
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | src/svg/qsvggenerator.cpp | 34 | ||||
-rw-r--r-- | tests/auto/qsvggenerator/referenceSvgs/fileName_output.svg | 2 | ||||
-rw-r--r-- | tests/auto/qsvggenerator/referenceSvgs/radial_gradient.svg | 4 |
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> |