diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index bfce8d325..fcb3a0cac 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -1295,6 +1295,9 @@ PRIVATE statistics/statistics_common.h statistics/statistics_data_deserialize.cpp statistics/statistics_data_deserialize.h + statistics/view/abstract_chart_view.h + statistics/view/chart_view_factory.cpp + statistics/view/chart_view_factory.h statistics/view/linear_chart_view.cpp statistics/view/linear_chart_view.h storage/details/storage_file_utilities.cpp diff --git a/Telegram/SourceFiles/statistics/chart_widget.cpp b/Telegram/SourceFiles/statistics/chart_widget.cpp index a9ddb0a0d..bc81da8e2 100644 --- a/Telegram/SourceFiles/statistics/chart_widget.cpp +++ b/Telegram/SourceFiles/statistics/chart_widget.cpp @@ -12,7 +12,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "statistics/chart_lines_filter_widget.h" #include "statistics/point_details_widget.h" -#include "statistics/view/linear_chart_view.h" +#include "statistics/view/abstract_chart_view.h" +#include "statistics/view/chart_view_factory.h" #include "ui/abstract_button.h" #include "ui/effects/animation_value_f.h" #include "ui/painter.h" @@ -529,11 +530,11 @@ ChartWidget::ChartAnimationController::ChartAnimationController( void ChartWidget::ChartAnimationController::setXPercentageLimits( Data::StatisticalChart &chartData, Limits xPercentageLimits, - const std::unique_ptr &linearChartView, + const std::unique_ptr &chartView, crl::time now) { if ((_animationValueXMin.to() == xPercentageLimits.min) && (_animationValueXMax.to() == xPercentageLimits.max) - && linearChartView->isFinished()) { + && chartView->isFinished()) { return; } start(); @@ -555,7 +556,7 @@ void ChartWidget::ChartAnimationController::setXPercentageLimits( auto minValueFull = std::numeric_limits::max(); auto maxValueFull = 0; for (auto &l : chartData.lines) { - if (!linearChartView->isEnabled(l.id)) { + if (!chartView->isEnabled(l.id)) { continue; } const auto lineMax = l.segmentTree.rMaxQ(startXIndex, endXIndex); @@ -574,7 +575,7 @@ void ChartWidget::ChartAnimationController::setXPercentageLimits( if (!_previousFullHeightLimits.max) { _previousFullHeightLimits = _finalHeightLimits; } - if (!linearChartView->isFinished()) { + if (!chartView->isFinished()) { _animationValueFooterHeightMin = anim::value( _animationValueFooterHeightMin.current(), minValueFull); @@ -618,7 +619,7 @@ void ChartWidget::ChartAnimationController::setXPercentageLimits( _dtHeight.currentAlpha = 0.; _addHorizontalLineRequests.fire({}); } - _dtHeight.speed = (!linearChartView->isFinished()) + _dtHeight.speed = (!chartView->isFinished()) ? kDtHeightSpeedFilter : (k > kDtHeightSpeedThreshold1) ? kDtHeightSpeed1 @@ -664,7 +665,7 @@ void ChartWidget::ChartAnimationController::tick( crl::time now, std::vector &horizontalLines, std::vector &dateLines, - const std::unique_ptr &linearChartView) { + const std::unique_ptr &chartView) { if (!_animation.animating()) { return; } @@ -715,7 +716,7 @@ void ChartWidget::ChartAnimationController::tick( const auto footerMinFinished = isFinished(_animationValueFooterHeightMin); const auto footerMaxFinished = isFinished(_animationValueFooterHeightMax); - linearChartView->tick(now); + chartView->tick(now); if (xFinished && yFinished @@ -723,7 +724,7 @@ void ChartWidget::ChartAnimationController::tick( && bottomLineAlphaFinished && footerMinFinished && footerMaxFinished - && linearChartView->isFinished()) { + && chartView->isFinished()) { const auto &lines = horizontalLines.back().lines; if ((_finalHeightLimits.min == _animationValueHeightMin.to()) && _finalHeightLimits.max == _animationValueHeightMax.to()) { @@ -875,8 +876,7 @@ ChartWidget::ChartWidget(not_null parent) , _footer(std::make_unique