From bc6556ebc40278f2f0e9ba8ee8aa2f8c673d4912 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 17 Nov 2023 02:37:09 +0300 Subject: [PATCH] Moved out class for cached selected points on chart from private space. --- .../statistics/view/abstract_chart_view.h | 27 +++++++++---------- .../statistics/view/linear_chart_view.cpp | 6 +---- .../statistics/view/linear_chart_view.h | 8 +----- Telegram/cmake/td_ui.cmake | 1 + 4 files changed, 16 insertions(+), 26 deletions(-) diff --git a/Telegram/SourceFiles/statistics/view/abstract_chart_view.h b/Telegram/SourceFiles/statistics/view/abstract_chart_view.h index 0f74a270e..3c6f7ce6f 100644 --- a/Telegram/SourceFiles/statistics/view/abstract_chart_view.h +++ b/Telegram/SourceFiles/statistics/view/abstract_chart_view.h @@ -25,6 +25,15 @@ struct PaintContext final { bool footer = false; }; +struct CachedSelectedPoints final { + [[nodiscard]] bool isSame(int x, const PaintContext &c) const; + + int lastXIndex = -1; + Limits lastHeightLimits; + Limits lastXLimits; + base::flat_map points; +}; + class AbstractChartView { public: virtual ~AbstractChartView() = default; @@ -82,24 +91,14 @@ public: const QPoint &p) { } - void setUpdateCallback(Fn callback) { - _updateCallback = std::move(callback); - } - void update() { - if (_updateCallback) { - _updateCallback(); - } - } + void setUpdateCallback(Fn callback); + void update(); - void setLinesFilterController(std::shared_ptr c) { - _linesFilterController = std::move(c); - } + void setLinesFilterController(std::shared_ptr c); protected: using LinesFilterControllerPtr = std::shared_ptr; - [[nodiscard]] LinesFilterControllerPtr linesFilterController() { - return _linesFilterController; - } + [[nodiscard]] LinesFilterControllerPtr linesFilterController() const; private: LinesFilterControllerPtr _linesFilterController; diff --git a/Telegram/SourceFiles/statistics/view/linear_chart_view.cpp b/Telegram/SourceFiles/statistics/view/linear_chart_view.cpp index 23fb14d3c..50af763a8 100644 --- a/Telegram/SourceFiles/statistics/view/linear_chart_view.cpp +++ b/Telegram/SourceFiles/statistics/view/linear_chart_view.cpp @@ -140,11 +140,7 @@ void LinearChartView::paintSelectedXIndex( p.setBrush(st::boxBg); const auto r = st::statisticsDetailsDotRadius; const auto i = selectedXIndex; - const auto isSameToken = (_selectedPoints.lastXIndex == selectedXIndex) - && (_selectedPoints.lastHeightLimits.min == c.heightLimits.min) - && (_selectedPoints.lastHeightLimits.max == c.heightLimits.max) - && (_selectedPoints.lastXLimits.min == c.xPercentageLimits.min) - && (_selectedPoints.lastXLimits.max == c.xPercentageLimits.max); + const auto isSameToken = _selectedPoints.isSame(selectedXIndex, c); auto linePainted = false; for (const auto &line : c.chartData.lines) { const auto lineAlpha = linesFilter->alpha(line.id); diff --git a/Telegram/SourceFiles/statistics/view/linear_chart_view.h b/Telegram/SourceFiles/statistics/view/linear_chart_view.h index 02b7daedc..f7e127125 100644 --- a/Telegram/SourceFiles/statistics/view/linear_chart_view.h +++ b/Telegram/SourceFiles/statistics/view/linear_chart_view.h @@ -90,13 +90,7 @@ private: base::flat_map _mainCaches; base::flat_map _footerCaches; - struct SelectedPoints final { - int lastXIndex = -1; - Limits lastHeightLimits; - Limits lastXLimits; - base::flat_map points; - }; - SelectedPoints _selectedPoints; + CachedSelectedPoints _selectedPoints; }; diff --git a/Telegram/cmake/td_ui.cmake b/Telegram/cmake/td_ui.cmake index be1396183..7ec4ac6f9 100644 --- a/Telegram/cmake/td_ui.cmake +++ b/Telegram/cmake/td_ui.cmake @@ -183,6 +183,7 @@ PRIVATE statistics/statistics_common.h statistics/statistics_data_deserialize.cpp statistics/statistics_data_deserialize.h + statistics/view/abstract_chart_view.cpp statistics/view/abstract_chart_view.h statistics/view/chart_rulers_view.cpp statistics/view/chart_rulers_view.h