| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- This file is part of Telegram Desktop,
- the official desktop application for the Telegram messaging service.
- For license and copyright information please follow this link:
- https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
- */
- #pragma once
- #include "statistics/statistics_common.h"
- #include "statistics/view/abstract_chart_view.h"
- namespace Data {
- struct StatisticalChart;
- } // namespace Data
- namespace Statistic {
- struct Limits;
- class LinearChartView final : public AbstractChartView {
- public:
- LinearChartView(bool isDouble);
- ~LinearChartView() override final;
- void paint(QPainter &p, const PaintContext &c) override;
- void paintSelectedXIndex(
- QPainter &p,
- const PaintContext &c,
- int selectedXIndex,
- float64 progress) override;
- int findXIndexByPosition(
- const Data::StatisticalChart &chartData,
- const Limits &xPercentageLimits,
- const QRect &rect,
- float64 x) override;
- [[nodiscard]] HeightLimits heightLimits(
- Data::StatisticalChart &chartData,
- Limits xIndices) override;
- private:
- DoubleLineRatios _cachedLineRatios;
- [[nodiscard]] float64 lineRatio() const;
- struct CacheToken final {
- explicit CacheToken() = default;
- explicit CacheToken(
- Limits xIndices,
- Limits xPercentageLimits,
- Limits heightLimits,
- QSize rectSize)
- : xIndices(std::move(xIndices))
- , xPercentageLimits(std::move(xPercentageLimits))
- , heightLimits(std::move(heightLimits))
- , rectSize(std::move(rectSize)) {
- }
- bool operator==(const CacheToken &other) const {
- return (rectSize == other.rectSize)
- && (xIndices.min == other.xIndices.min)
- && (xIndices.max == other.xIndices.max)
- && (xPercentageLimits.min == other.xPercentageLimits.min)
- && (xPercentageLimits.max == other.xPercentageLimits.max)
- && (heightLimits.min == other.heightLimits.min)
- && (heightLimits.max == other.heightLimits.max);
- }
- bool operator!=(const CacheToken &other) const {
- return !(*this == other);
- }
- Limits xIndices;
- Limits xPercentageLimits;
- Limits heightLimits;
- QSize rectSize;
- };
- struct Cache final {
- QImage image;
- CacheToken lastToken;
- bool hq = false;
- };
- base::flat_map<int, Cache> _mainCaches;
- base::flat_map<int, Cache> _footerCaches;
- CachedSelectedPoints _selectedPoints;
- };
- } // namespace Statistic
|