diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-10-02 13:53:31 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-10-07 14:00:31 +0200 |
commit | 35d967c954245e313017a1cab97ce7ee9f08b3a8 (patch) | |
tree | 2f13606cc03b62d3ee04b1eb0e4325b1aee648f9 /src/svg/qsvggenerator.cpp | |
parent | f4c99c16bcf8638ccff7aabe4eff707150f11022 (diff) | |
download | qtsvg-35d967c954245e313017a1cab97ce7ee9f08b3a8.tar.gz |
QSvgGenerator: make use of the <circle> and <ellipse> elements
[ChangeLog][][QSvgGenerator] Make use of the <ellipse> element for
drawing ellipses. Ellipses that are circles are rendered using the
<circle> element.
Task-number: QTBUG-1359
Change-Id: I3d451e8670202be8ffb5c4feb8523aaf05bfbdfb
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Diffstat (limited to 'src/svg/qsvggenerator.cpp')
-rw-r--r-- | src/svg/qsvggenerator.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
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); |