Fixed animation of line filtering in stack linear chart view.

This commit is contained in:
23rd 2023-09-27 18:33:07 +03:00 committed by John Preston
parent 8ded88baf5
commit aeee016dc9

View file

@ -129,12 +129,12 @@ void StackLinearChartView::prepareZoom(
auto sum = 0.; auto sum = 0.;
auto drawingLinesCount = 0; auto drawingLinesCount = 0;
for (const auto &line : c.chartData.lines) { for (const auto &line : c.chartData.lines) {
if (!linesFilter->isEnabled(line.id)) {
continue;
}
if (line.y[i] > 0) { if (line.y[i] > 0) {
sum += line.y[i] * linesFilter->alpha(line.id); const auto alpha = linesFilter->alpha(line.id);
drawingLinesCount++; sum += line.y[i] * alpha;
if (alpha > 0.) {
drawingLinesCount++;
}
} }
} }
@ -143,9 +143,6 @@ void StackLinearChartView::prepareZoom(
? _transition.lines[k].end ? _transition.lines[k].end
: _transition.lines[k].start); : _transition.lines[k].start);
const auto &line = c.chartData.lines[k]; const auto &line = c.chartData.lines[k];
if (!linesFilter->isEnabled(line.id)) {
continue;
}
const auto yPercentage = (drawingLinesCount == 1) const auto yPercentage = (drawingLinesCount == 1)
? (line.y[i] ? linesFilter->alpha(line.id) : 0) ? (line.y[i] ? linesFilter->alpha(line.id) : 0)
: (sum : (sum
@ -331,11 +328,12 @@ void StackLinearChartView::paintChartOrZoomAnimation(
for (auto k = 0; k < c.chartData.lines.size(); k++) { for (auto k = 0; k < c.chartData.lines.size(); k++) {
const auto &line = c.chartData.lines[k]; const auto &line = c.chartData.lines[k];
if (!linesFilter->isEnabled(line.id)) { const auto alpha = linesFilter->alpha(line.id);
if (!alpha) {
continue; continue;
} }
if (line.y[i] > 0) { if (line.y[i] > 0) {
sum += line.y[i] * linesFilter->alpha(line.id); sum += line.y[i] * alpha;
drawingLinesCount++; drawingLinesCount++;
} }
lastEnabled = k; lastEnabled = k;
@ -345,11 +343,11 @@ void StackLinearChartView::paintChartOrZoomAnimation(
const auto &line = c.chartData.lines[k]; const auto &line = c.chartData.lines[k];
const auto isLastLine = (k == lastEnabled); const auto isLastLine = (k == lastEnabled);
const auto &transitionLine = _transition.lines[k]; const auto &transitionLine = _transition.lines[k];
if (!linesFilter->isEnabled(line.id)) { const auto lineAlpha = linesFilter->alpha(line.id);
if (!lineAlpha) {
continue; continue;
} }
const auto &y = line.y; const auto &y = line.y;
const auto lineAlpha = linesFilter->alpha(line.id);
auto &chartPath = paths[k]; auto &chartPath = paths[k];
@ -516,7 +514,6 @@ void StackLinearChartView::paintChartOrZoomAnimation(
continue; continue;
} }
const auto &line = c.chartData.lines[k]; const auto &line = c.chartData.lines[k];
p.setOpacity(linesFilter->alpha(line.id) * opacity);
p.setPen(Qt::NoPen); p.setPen(Qt::NoPen);
p.fillPath(paths[k], line.color); p.fillPath(paths[k], line.color);
} }
@ -633,11 +630,11 @@ void StackLinearChartView::paintZoomedFooter(
auto sum = 0.; auto sum = 0.;
auto lastEnabledId = int(0); auto lastEnabledId = int(0);
for (const auto &line : c.chartData.lines) { for (const auto &line : c.chartData.lines) {
if (!linesFilterController()->isEnabled(line.id)) { const auto alpha = linesFilterController()->alpha(line.id);
continue; sum += line.y[i] * alpha;
if (alpha > 0.) {
lastEnabledId = line.id;
} }
sum += line.y[i] * linesFilterController()->alpha(line.id);
lastEnabledId = line.id;
} }
const auto columnMargins = QMarginsF( const auto columnMargins = QMarginsF(
@ -655,10 +652,11 @@ void StackLinearChartView::paintZoomedFooter(
auto stack = 0.; auto stack = 0.;
for (auto k = int(c.chartData.lines.size() - 1); k >= 0; k--) { for (auto k = int(c.chartData.lines.size() - 1); k >= 0; k--) {
const auto &line = c.chartData.lines[k]; const auto &line = c.chartData.lines[k];
if (!linesFilterController()->isEnabled(line.id)) { const auto visibleHeight = c.rect.height()
* (line.y[i] * linesFilterController()->alpha(line.id) / sum);
if (!visibleHeight) {
continue; continue;
} }
const auto visibleHeight = c.rect.height() * (line.y[i] / sum);
const auto height = (line.id == lastEnabledId) const auto height = (line.id == lastEnabledId)
? c.rect.height() ? c.rect.height()
: visibleHeight; : visibleHeight;