diff --git a/Telegram/SourceFiles/statistics/chart_widget.cpp b/Telegram/SourceFiles/statistics/chart_widget.cpp index 7072e151a2..53238e7c47 100644 --- a/Telegram/SourceFiles/statistics/chart_widget.cpp +++ b/Telegram/SourceFiles/statistics/chart_widget.cpp @@ -1423,7 +1423,7 @@ void ChartWidget::setChartData( _chartView = CreateChartView(type); _chartView->setLinesFilterController(_linesFilterController); - _rulersView.setChartData(_chartData, type); + _rulersView.setChartData(_chartData, type, _linesFilterController); setupDetails(); setupFilterButtons(); diff --git a/Telegram/SourceFiles/statistics/view/chart_rulers_view.cpp b/Telegram/SourceFiles/statistics/view/chart_rulers_view.cpp index cc68434e1d..b77211168a 100644 --- a/Telegram/SourceFiles/statistics/view/chart_rulers_view.cpp +++ b/Telegram/SourceFiles/statistics/view/chart_rulers_view.cpp @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "statistics/view/chart_rulers_view.h" #include "data/data_statistics_chart.h" +#include "statistics/chart_lines_filter_controller.h" #include "statistics/statistics_common.h" #include "styles/style_basic.h" #include "styles/style_statistics.h" @@ -18,12 +19,16 @@ ChartRulersView::ChartRulersView() = default; void ChartRulersView::setChartData( const Data::StatisticalChart &chartData, - ChartViewType type) { + ChartViewType type, + std::shared_ptr linesFilter) { _rulers.clear(); _isDouble = (type == ChartViewType::DoubleLinear); if (_isDouble && (chartData.lines.size() == 2)) { + _linesFilter = std::move(linesFilter); _leftPen = QPen(chartData.lines.front().color); _rightPen = QPen(chartData.lines.back().color); + _leftLineId = chartData.lines.front().id; + _rightLineId = chartData.lines.back().id; const auto firstMax = chartData.lines.front().maxValue; const auto secondMax = chartData.lines.back().maxValue; @@ -62,10 +67,17 @@ void ChartRulersView::paintCaptionsToRulers( p.setFont(st::statisticsDetailsBottomCaptionStyle.font); const auto alpha = p.opacity(); for (auto &ruler : _rulers) { - p.setOpacity(alpha * ruler.alpha); + const auto rulerAlpha = alpha * ruler.alpha; + p.setOpacity(rulerAlpha); for (const auto &line : ruler.lines) { const auto y = offset + r.height() * line.relativeValue; - p.setPen(_isDouble ? _leftPen : st::windowSubTextFg); + const auto hasLinesFilter = _isDouble && _linesFilter; + if (hasLinesFilter) { + p.setPen(_leftPen); + p.setOpacity(rulerAlpha * _linesFilter->alpha(_leftLineId)); + } else { + p.setPen(st::windowSubTextFg); + } p.drawText( 0, y, @@ -74,7 +86,8 @@ void ChartRulersView::paintCaptionsToRulers( : _isLeftLineScaled ? line.scaledLineCaption : line.caption); - if (_isDouble) { + if (hasLinesFilter) { + p.setOpacity(rulerAlpha * _linesFilter->alpha(_rightLineId)); p.setPen(_rightPen); p.drawText( r.width() - line.rightCaptionWidth, diff --git a/Telegram/SourceFiles/statistics/view/chart_rulers_view.h b/Telegram/SourceFiles/statistics/view/chart_rulers_view.h index 126af9a5d9..7fdfb7d29c 100644 --- a/Telegram/SourceFiles/statistics/view/chart_rulers_view.h +++ b/Telegram/SourceFiles/statistics/view/chart_rulers_view.h @@ -17,6 +17,7 @@ namespace Statistic { enum class ChartViewType; struct Limits; +class LinesFilterController; struct ChartRulersView final { public: @@ -24,7 +25,8 @@ public: void setChartData( const Data::StatisticalChart &chartData, - ChartViewType type); + ChartViewType type, + std::shared_ptr linesFilter); void paintRulers(QPainter &p, const QRect &r); @@ -38,9 +40,13 @@ private: bool _isDouble = false; QPen _leftPen; QPen _rightPen; + int _leftLineId = 0; + int _rightLineId = 0; std::vector _rulers; + std::shared_ptr _linesFilter; + float64 _scaledLineRatio = 0.; bool _isLeftLineScaled = false;