diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2021-01-18 12:08:46 +0100 |
---|---|---|
committer | bstoeger <32835590+bstoeger@users.noreply.github.com> | 2021-01-20 08:47:18 +0100 |
commit | b068b2b0e70c131ee146cc7962979684a0b3a527 (patch) | |
tree | 949c2a4b4ca0d7b219af435e29286e26fc65e4ee /stats/chartitem.cpp | |
parent | b07a7fe5f10529f7fde0b7d5f614aa311b18dcc7 (diff) | |
download | subsurface-b068b2b0e70c131ee146cc7962979684a0b3a527.tar.gz |
statistics: replace PieSeries by QSG nodes
Since there are no disk-segment QSG primitives (one could draw
a triangle fan, but that doesn't seem optimal), this draws
into a pixmap and blits that as a QSG node.
Since this is the only series without axis, it needs a function
that returns the size of the plot area. This didn't exist, so
add it.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'stats/chartitem.cpp')
-rw-r--r-- | stats/chartitem.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/stats/chartitem.cpp b/stats/chartitem.cpp index b8bf0f189..be2b3d635 100644 --- a/stats/chartitem.cpp +++ b/stats/chartitem.cpp @@ -224,6 +224,11 @@ ChartTextItem::ChartTextItem(StatsView &v, ChartZValue z, const QFont &f, const resize(QSizeF(totalWidth, totalHeight)); } +ChartTextItem::ChartTextItem(StatsView &v, ChartZValue z, const QFont &f, const QString &text) : + ChartTextItem(v, z, f, std::vector<QString>({ text }), true) +{ +} + void ChartTextItem::setColor(const QColor &c) { img->fill(Qt::transparent); @@ -240,6 +245,31 @@ void ChartTextItem::setColor(const QColor &c) setTextureDirty(); } +ChartPieItem::ChartPieItem(StatsView &v, ChartZValue z, double borderWidth) : ChartPixmapItem(v, z), + borderWidth(borderWidth) +{ +} + +void ChartPieItem::drawSegment(double from, double to, QColor fill, QColor border) +{ + painter->setPen(QPen(border, borderWidth)); + painter->setBrush(QBrush(fill)); + // For whatever obscure reason, angles of pie pieces are given as 16th of a degree...? + // Angles increase CCW, whereas pie charts usually are read CW. Therfore, startAngle + // is dervied from "from" and subtracted from the origin angle at 12:00. + int startAngle = 90 * 16 - static_cast<int>(round(to * 360.0 * 16.0)); + int spanAngle = static_cast<int>(round((to - from) * 360.0 * 16.0)); + QRectF drawRect(QPointF(0.0, 0.0), rect.size()); + painter->drawPie(drawRect, startAngle, spanAngle); + setTextureDirty(); +} + +void ChartPieItem::resize(QSizeF size) +{ + ChartPixmapItem::resize(size); + img->fill(Qt::transparent); +} + ChartLineItem::ChartLineItem(StatsView &v, ChartZValue z, QColor color, double width) : HideableChartItem(v, z), color(color), width(width), positionDirty(false), materialDirty(false) { |