From 35d967c954245e313017a1cab97ce7ee9f08b3a8 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 2 Oct 2014 13:53:31 +0200 Subject: QSvgGenerator: make use of the and elements [ChangeLog][][QSvgGenerator] Make use of the element for drawing ellipses. Ellipses that are circles are rendered using the element. Task-number: QTBUG-1359 Change-Id: I3d451e8670202be8ffb5c4feb8523aaf05bfbdfb Reviewed-by: Friedemann Kleint Reviewed-by: Andy Shaw --- src/svg/qsvggenerator.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/svg/qsvggenerator.cpp b/src/svg/qsvggenerator.cpp index 1cb342a..d8ada6e 100644 --- a/src/svg/qsvggenerator.cpp +++ b/src/svg/qsvggenerator.cpp @@ -162,6 +162,7 @@ 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); @@ -969,6 +970,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); -- cgit v1.2.1