Fixed display of selected days in zoomed stack linear chart view.

This commit is contained in:
23rd 2023-09-26 02:44:05 +03:00 committed by John Preston
parent 5a2b8d06e3
commit 21c1ba7607
3 changed files with 25 additions and 9 deletions

View File

@ -1267,15 +1267,31 @@ void ChartWidget::processLocalZoom(int xIndex) {
zoomOutButton->moveToLeft(0, 0);
const auto finish = [=](const Limits &zoomLimit) {
const auto finish = [=](const Limits &zoomLimitIndices) {
_footer->xPercentageLimitsChange(
) | rpl::start_with_next([=](const Limits &l) {
const auto result = FindNearestElements(
const auto zoomLimit = Limits{
_chartData.xPercentage[zoomLimitIndices.min],
_chartData.xPercentage[zoomLimitIndices.max],
};
const auto offset = (zoomLimit.max == 1.) ? 0 : -1;
const auto minIt = ranges::upper_bound(
_chartData.xPercentage,
Limits{
anim::interpolateF(zoomLimit.min, zoomLimit.max, l.min),
anim::interpolateF(zoomLimit.min, zoomLimit.max, l.max),
});
anim::interpolateF(zoomLimit.min, zoomLimit.max, l.min));
const auto maxIt = ranges::upper_bound(
_chartData.xPercentage,
anim::interpolateF(zoomLimit.min, zoomLimit.max, l.max));
const auto start = begin(_chartData.xPercentage);
const auto result = Limits{
.min = std::clamp(
float64(std::distance(start, minIt) + offset),
zoomLimitIndices.min,
zoomLimitIndices.max),
.max = std::clamp(
float64(std::distance(start, maxIt) + offset),
zoomLimitIndices.min,
zoomLimitIndices.max),
};
header->setRightInfo(HeaderRightInfo(_chartData, result));
header->update();
}, header->lifetime());
@ -1301,7 +1317,7 @@ void ChartWidget::processLocalZoom(int xIndex) {
if (lifetime) {
lifetime->destroy();
}
finish(zoom.limit);
finish(zoom.limitIndices);
}
}, 0., 1., kFooterZoomDuration, anim::easeOutCirc);
}

View File

@ -62,7 +62,7 @@ public:
struct LocalZoomResult final {
bool hasZoom = false;
Limits limit;
Limits limitIndices;
Limits range;
};

View File

@ -972,7 +972,7 @@ auto StackLinearChartView::maybeLocalZoom(
_transition.zoomedInLimit.max,
_transition.zoomedInRange.max),
};
return { true, _transition.zoomedInLimit, resultRange };
return { true, _transition.zoomedInLimitXIndices, resultRange };
}
void StackLinearChartView::tick(crl::time now) {