0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-24 08:34:38 +03:00
LimeReport/limereport/items/charts/lrhorizontalbarchart.cpp
Андрей Лухнов 0fca7169d3 Define code style and format all source file using clang-format-14
except those placed in 3rdparty directories.
2024-09-19 21:09:38 +03:00

81 lines
2.8 KiB
C++

#include "lrhorizontalbarchart.h"
namespace LimeReport {
void HorizontalBarChart::paintChart(QPainter* painter, QRectF chartRect)
{
updateMinAndMaxValues();
const qreal valuesVMargin = this->valuesVMargin(painter);
QRectF calcRect = verticalLabelsRect(
painter,
chartRect.adjusted(hPadding(chartRect), vPadding(chartRect) * 2, -(chartRect.width() * 0.9),
-(vPadding(chartRect) * 2 + valuesVMargin)));
qreal barsShift = calcRect.width();
paintHorizontalGrid(painter,
chartRect.adjusted(hPadding(chartRect) + barsShift, vPadding(chartRect),
-(hPadding(chartRect)), -vPadding(chartRect)));
paintHorizontalBars(painter,
chartRect.adjusted(hPadding(chartRect) + barsShift, vPadding(chartRect) * 2,
-(hPadding(chartRect)), -(vPadding(chartRect) * 2)));
paintVerticalLabels(painter, calcRect);
}
void HorizontalBarChart::paintHorizontalBars(QPainter* painter, QRectF barsRect)
{
if (seriesCount() == 0)
return;
painter->save();
painter->setRenderHint(QPainter::Antialiasing, false);
const AxisData& yAxisData = this->yAxisData();
const qreal delta = yAxisData.delta();
const qreal verticalOffset = painter->fontMetrics().height();
qreal vStep = (barsRect.height() - verticalOffset) / valuesCount() / seriesCount();
qreal hStep = (barsRect.width()
- painter->fontMetrics().boundingRect(QString::number(maxValue())).width())
/ delta;
if (!m_chartItem->series().isEmpty() && (m_chartItem->itemMode() != DesignMode)) {
qreal curVOffset = barsRect.top();
if (m_chartItem->horizontalAxisOnTop()) {
curVOffset += verticalOffset;
}
foreach (SeriesItem* series, m_chartItem->series()) {
painter->setBrush(series->color());
qreal y = curVOffset;
foreach (qreal value, series->data()->values()) {
painter->drawRect(
QRectF((-minValue() * hStep) + barsRect.left(), y, value * hStep, vStep));
y += vStep * seriesCount();
}
curVOffset += vStep;
}
} else {
qreal curVOffset = barsRect.top();
if (m_chartItem->horizontalAxisOnTop()) {
curVOffset += verticalOffset;
}
int curColor = 0;
for (int i = 0; i < 9; ++i) {
if (curColor == 3)
curColor = 0;
painter->setBrush(color_map[curColor]);
painter->drawRect(
QRectF(barsRect.left(), curVOffset, designValues()[i] * hStep, vStep));
curVOffset += vStep;
curColor++;
}
}
painter->restore();
}
} // namespace LimeReport