mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-08 16:13:56 +02:00
Moved out search of clicked index on chart to chart view.
This commit is contained in:
parent
54d5358b75
commit
7a436f32dd
6 changed files with 61 additions and 15 deletions
|
@ -1183,26 +1183,17 @@ void ChartWidget::setupDetails() {
|
||||||
case QEvent::MouseButtonPress:
|
case QEvent::MouseButtonPress:
|
||||||
case QEvent::MouseMove: {
|
case QEvent::MouseMove: {
|
||||||
const auto chartRect = chartAreaRect();
|
const auto chartRect = chartAreaRect();
|
||||||
const auto pointerRatio = std::clamp(
|
|
||||||
state.point.x() / float64(chartRect.width()),
|
|
||||||
0.,
|
|
||||||
1.);
|
|
||||||
const auto currentXLimits = _animationController.finalXLimits();
|
const auto currentXLimits = _animationController.finalXLimits();
|
||||||
const auto rawXPercentage = anim::interpolateF(
|
const auto nearestXIndex = _chartView->findXIndexByPosition(
|
||||||
currentXLimits.min,
|
_chartData,
|
||||||
currentXLimits.max,
|
currentXLimits,
|
||||||
pointerRatio);
|
chartRect,
|
||||||
const auto nearestXPercentageIt = ranges::lower_bound(
|
state.point.x());
|
||||||
_chartData.xPercentage,
|
|
||||||
rawXPercentage);
|
|
||||||
const auto nearestXIndex = std::distance(
|
|
||||||
begin(_chartData.xPercentage),
|
|
||||||
nearestXPercentageIt);
|
|
||||||
const auto currentX = 0
|
const auto currentX = 0
|
||||||
+ chartRect.width() * InterpolationRatio(
|
+ chartRect.width() * InterpolationRatio(
|
||||||
currentXLimits.min,
|
currentXLimits.min,
|
||||||
currentXLimits.max,
|
currentXLimits.max,
|
||||||
*nearestXPercentageIt);
|
_chartData.xPercentage[nearestXIndex]);
|
||||||
const auto xLeft = currentX
|
const auto xLeft = currentX
|
||||||
- _details.widget->width();
|
- _details.widget->width();
|
||||||
const auto x = (xLeft >= 0)
|
const auto x = (xLeft >= 0)
|
||||||
|
|
|
@ -37,6 +37,12 @@ public:
|
||||||
int selectedXIndex,
|
int selectedXIndex,
|
||||||
float64 progress) = 0;
|
float64 progress) = 0;
|
||||||
|
|
||||||
|
[[nodiscard]] virtual int findXIndexByPosition(
|
||||||
|
const Data::StatisticalChart &chartData,
|
||||||
|
const Limits &xPercentageLimits,
|
||||||
|
const QRect &rect,
|
||||||
|
float64 x) = 0;
|
||||||
|
|
||||||
virtual void setEnabled(int id, bool enabled, crl::time now) = 0;
|
virtual void setEnabled(int id, bool enabled, crl::time now) = 0;
|
||||||
[[nodiscard]] virtual bool isEnabled(int id) const = 0;
|
[[nodiscard]] virtual bool isEnabled(int id) const = 0;
|
||||||
[[nodiscard]] virtual bool isFinished() const = 0;
|
[[nodiscard]] virtual bool isFinished() const = 0;
|
||||||
|
|
|
@ -189,6 +189,35 @@ void LinearChartView::paintSelectedXIndex(
|
||||||
_selectedPoints.lastXLimits = xPercentageLimits;
|
_selectedPoints.lastXLimits = xPercentageLimits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LinearChartView::findXIndexByPosition(
|
||||||
|
const Data::StatisticalChart &chartData,
|
||||||
|
const Limits &xPercentageLimits,
|
||||||
|
const QRect &rect,
|
||||||
|
float64 x) {
|
||||||
|
if (x < rect.x()) {
|
||||||
|
return 0;
|
||||||
|
} else if (x > (rect.x() + rect.width())) {
|
||||||
|
return chartData.xPercentage.size() - 1;
|
||||||
|
}
|
||||||
|
const auto pointerRatio = std::clamp(
|
||||||
|
(x - rect.x()) / rect.width(),
|
||||||
|
0.,
|
||||||
|
1.);
|
||||||
|
const auto rawXPercentage = anim::interpolateF(
|
||||||
|
xPercentageLimits.min,
|
||||||
|
xPercentageLimits.max,
|
||||||
|
pointerRatio);
|
||||||
|
const auto it = ranges::lower_bound(
|
||||||
|
chartData.xPercentage,
|
||||||
|
rawXPercentage);
|
||||||
|
const auto left = rawXPercentage - (*(it - 1));
|
||||||
|
const auto right = (*it) - rawXPercentage;
|
||||||
|
const auto nearestXPercentageIt = ((right) > (left)) ? (it - 1) : it;
|
||||||
|
return std::distance(
|
||||||
|
begin(chartData.xPercentage),
|
||||||
|
nearestXPercentageIt);
|
||||||
|
}
|
||||||
|
|
||||||
void LinearChartView::setEnabled(int id, bool enabled, crl::time now) {
|
void LinearChartView::setEnabled(int id, bool enabled, crl::time now) {
|
||||||
const auto it = _entries.find(id);
|
const auto it = _entries.find(id);
|
||||||
if (it == end(_entries)) {
|
if (it == end(_entries)) {
|
||||||
|
|
|
@ -41,6 +41,12 @@ public:
|
||||||
int selectedXIndex,
|
int selectedXIndex,
|
||||||
float64 progress) override;
|
float64 progress) override;
|
||||||
|
|
||||||
|
int findXIndexByPosition(
|
||||||
|
const Data::StatisticalChart &chartData,
|
||||||
|
const Limits &xPercentageLimits,
|
||||||
|
const QRect &rect,
|
||||||
|
float64 x) override;
|
||||||
|
|
||||||
void setEnabled(int id, bool enabled, crl::time now) override;
|
void setEnabled(int id, bool enabled, crl::time now) override;
|
||||||
[[nodiscard]] bool isEnabled(int id) const override;
|
[[nodiscard]] bool isEnabled(int id) const override;
|
||||||
[[nodiscard]] bool isFinished() const override;
|
[[nodiscard]] bool isFinished() const override;
|
||||||
|
|
|
@ -98,6 +98,14 @@ void StackChartView::paintSelectedXIndex(
|
||||||
float64 progress) {
|
float64 progress) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int StackChartView::findXIndexByPosition(
|
||||||
|
const Data::StatisticalChart &chartData,
|
||||||
|
const Limits &xPercentageLimits,
|
||||||
|
const QRect &rect,
|
||||||
|
float64 xPos) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void StackChartView::setEnabled(int id, bool enabled, crl::time now) {
|
void StackChartView::setEnabled(int id, bool enabled, crl::time now) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,12 @@ public:
|
||||||
int selectedXIndex,
|
int selectedXIndex,
|
||||||
float64 progress) override;
|
float64 progress) override;
|
||||||
|
|
||||||
|
int findXIndexByPosition(
|
||||||
|
const Data::StatisticalChart &chartData,
|
||||||
|
const Limits &xPercentageLimits,
|
||||||
|
const QRect &rect,
|
||||||
|
float64 x) override;
|
||||||
|
|
||||||
void setEnabled(int id, bool enabled, crl::time now) override;
|
void setEnabled(int id, bool enabled, crl::time now) override;
|
||||||
[[nodiscard]] bool isEnabled(int id) const override;
|
[[nodiscard]] bool isEnabled(int id) const override;
|
||||||
[[nodiscard]] bool isFinished() const override;
|
[[nodiscard]] bool isFinished() const override;
|
||||||
|
|
Loading…
Add table
Reference in a new issue