diff options
Diffstat (limited to 'stats')
-rw-r--r-- | stats/barseries.cpp | 24 | ||||
-rw-r--r-- | stats/barseries.h | 6 | ||||
-rw-r--r-- | stats/chartitem.cpp | 7 | ||||
-rw-r--r-- | stats/chartitem.h | 3 | ||||
-rw-r--r-- | stats/pieseries.cpp | 8 |
5 files changed, 29 insertions, 19 deletions
diff --git a/stats/barseries.cpp b/stats/barseries.cpp index ab9521315..766843703 100644 --- a/stats/barseries.cpp +++ b/stats/barseries.cpp @@ -92,7 +92,7 @@ BarSeries::BarLabel::BarLabel(StatsView &view, const std::vector<QString> &label { QFont f; // make configurable item = view.createChartItem<ChartTextItem>(ChartZValue::SeriesLabels, f, labels, true); - highlight(false, bin_nr, binCount); + //highlight(false, bin_nr, binCount); } void BarSeries::BarLabel::setVisible(bool visible) @@ -100,13 +100,16 @@ void BarSeries::BarLabel::setVisible(bool visible) item->setVisible(visible); } -void BarSeries::BarLabel::highlight(bool highlight, int bin_nr, int binCount) +void BarSeries::BarLabel::highlight(bool highlight, int bin_nr, int binCount, const QColor &background) { - item->setColor(highlight || isOutside ? darkLabelColor : labelColor(bin_nr, binCount)); + // For labels that are on top of a bar, use the corresponding bar color + // as background. Rendering on a transparent background gives ugly artifacts. + item->setColor(highlight || isOutside ? darkLabelColor : labelColor(bin_nr, binCount), + isOutside ? Qt::transparent : background); } void BarSeries::BarLabel::updatePosition(bool horizontal, bool center, const QRectF &rect, - int bin_nr, int binCount) + int bin_nr, int binCount, const QColor &background) { QSizeF itemSize = item->getRect().size(); if (!horizontal) { @@ -153,7 +156,7 @@ void BarSeries::BarLabel::updatePosition(bool horizontal, bool center, const QRe } setVisible(true); // If label changed from inside to outside, or vice-versa, the color might change. - highlight(false, bin_nr, binCount); + highlight(false, bin_nr, binCount, background); } BarSeries::Item::Item(BarSeries *series, double lowerBound, double upperBound, @@ -181,12 +184,11 @@ void BarSeries::Item::highlight(int subitem, bool highlight, int binCount) void BarSeries::SubItem::highlight(bool highlight, int binCount) { - if (highlight) - item->setColor(highlightedColor, highlightedBorderColor); - else - item->setColor(binColor(bin_nr, binCount), ::borderColor); + fill = highlight ? highlightedColor : binColor(bin_nr, binCount); + QColor border = highlight ? highlightedBorderColor : ::borderColor; + item->setColor(fill, border); if (label) - label->highlight(highlight, bin_nr, binCount); + label->highlight(highlight, bin_nr, binCount, fill); } void BarSeries::Item::updatePosition(BarSeries *series, bool horizontal, bool stacked, int binCount) @@ -229,7 +231,7 @@ void BarSeries::SubItem::updatePosition(BarSeries *series, bool horizontal, bool QRectF rect(topLeft, bottomRight); item->setRect(rect); if (label) - label->updatePosition(horizontal, stacked, rect, bin_nr, binCount); + label->updatePosition(horizontal, stacked, rect, bin_nr, binCount, fill); } std::vector<BarSeries::SubItem> BarSeries::makeSubItems(const std::vector<std::pair<double, std::vector<QString>>> &values) const diff --git a/stats/barseries.h b/stats/barseries.h index 50ef1e72d..9f9586fe8 100644 --- a/stats/barseries.h +++ b/stats/barseries.h @@ -11,6 +11,7 @@ #include <memory> #include <vector> +#include <QColor> #include <QRectF> class ChartBarItem; @@ -86,8 +87,8 @@ private: bool isOutside; // Is shown outside of bar BarLabel(StatsView &view, const std::vector<QString> &labels, int bin_nr, int binCount); void setVisible(bool visible); - void updatePosition(bool horizontal, bool center, const QRectF &rect, int bin_nr, int binCount); - void highlight(bool highlight, int bin_nr, int binCount); + void updatePosition(bool horizontal, bool center, const QRectF &rect, int bin_nr, int binCount, const QColor &background); + void highlight(bool highlight, int bin_nr, int binCount, const QColor &background); }; struct SubItem { @@ -96,6 +97,7 @@ private: double value_from; double value_to; int bin_nr; + QColor fill; void updatePosition(BarSeries *series, bool horizontal, bool stacked, double from, double to, int binCount); void highlight(bool highlight, int binCount); diff --git a/stats/chartitem.cpp b/stats/chartitem.cpp index 7c5339596..c8bdd130e 100644 --- a/stats/chartitem.cpp +++ b/stats/chartitem.cpp @@ -242,7 +242,12 @@ ChartTextItem::ChartTextItem(StatsView &v, ChartZValue z, const QFont &f, const void ChartTextItem::setColor(const QColor &c) { - img->fill(Qt::transparent); + setColor(c, Qt::transparent); +} + +void ChartTextItem::setColor(const QColor &c, const QColor &background) +{ + img->fill(background); double y = 0.0; painter->setPen(QPen(c)); painter->setFont(f); diff --git a/stats/chartitem.h b/stats/chartitem.h index 6c8919dec..cf20f55a8 100644 --- a/stats/chartitem.h +++ b/stats/chartitem.h @@ -89,7 +89,8 @@ class ChartTextItem : public ChartPixmapItem { public: ChartTextItem(StatsView &v, ChartZValue z, const QFont &f, const std::vector<QString> &text, bool center); ChartTextItem(StatsView &v, ChartZValue z, const QFont &f, const QString &text); - void setColor(const QColor &color); + void setColor(const QColor &color); // Draw on transparent background + void setColor(const QColor &color, const QColor &background); // Fill rectangle with given background color private: QFont f; double fontHeight; diff --git a/stats/pieseries.cpp b/stats/pieseries.cpp index 50c76a8ed..8db3bdbe3 100644 --- a/stats/pieseries.cpp +++ b/stats/pieseries.cpp @@ -65,11 +65,11 @@ void PieSeries::Item::updatePositions(const QPointF ¢er, double radius) void PieSeries::Item::highlight(ChartPieItem &item, int bin_nr, bool highlight, int numBins) { + QColor fill = highlight ? highlightedColor : binColor(bin_nr, numBins); + QColor border = highlight ? highlightedBorderColor : ::borderColor; if (innerLabel) - innerLabel->setColor(highlight ? darkLabelColor : labelColor(bin_nr, numBins)); - item.drawSegment(angleFrom, angleTo, - highlight ? highlightedColor : binColor(bin_nr, numBins), - highlight ? highlightedBorderColor : ::borderColor); + innerLabel->setColor(highlight ? darkLabelColor : labelColor(bin_nr, numBins), fill); + item.drawSegment(angleFrom, angleTo, fill, border); } PieSeries::PieSeries(StatsView &view, StatsAxis *xAxis, StatsAxis *yAxis, const QString &categoryName, |