summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-10-02 13:53:31 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-10-07 14:00:31 +0200
commit35d967c954245e313017a1cab97ce7ee9f08b3a8 (patch)
tree2f13606cc03b62d3ee04b1eb0e4325b1aee648f9
parentf4c99c16bcf8638ccff7aabe4eff707150f11022 (diff)
downloadqtsvg-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>
-rw-r--r--src/svg/qsvggenerator.cpp18
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);