From 65ad8e6ac17cb53089fe5d0d325c9c6208e75530 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 23 Aug 2022 21:01:54 +0300 Subject: [PATCH] Moved out class for colored ministars to separate file. --- .../SourceFiles/boxes/gift_premium_box.cpp | 73 +------------------ .../ui/effects/premium_stars_colored.cpp | 73 +++++++++++++++++++ .../ui/effects/premium_stars_colored.h | 38 ++++++++++ Telegram/cmake/td_ui.cmake | 2 + 4 files changed, 115 insertions(+), 71 deletions(-) create mode 100644 Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp create mode 100644 Telegram/SourceFiles/ui/effects/premium_stars_colored.h diff --git a/Telegram/SourceFiles/boxes/gift_premium_box.cpp b/Telegram/SourceFiles/boxes/gift_premium_box.cpp index ddf91ac0b..89a324466 100644 --- a/Telegram/SourceFiles/boxes/gift_premium_box.cpp +++ b/Telegram/SourceFiles/boxes/gift_premium_box.cpp @@ -20,7 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/settings_premium.h" #include "ui/basic_click_handlers.h" // UrlClickHandler::Open. #include "ui/effects/premium_graphics.h" -#include "ui/effects/premium_stars.h" +#include "ui/effects/premium_stars_colored.h" #include "ui/layers/generic_box.h" #include "ui/special_buttons.h" #include "ui/text/format_values.h" @@ -90,76 +90,6 @@ GiftOptions GiftOptionFromTL(const MTPDuserFull &data) { return result; } -class ColoredMiniStars final { -public: - ColoredMiniStars(not_null parent); - - void setSize(const QSize &size); - void setPosition(QPoint position); - void paint(Painter &p); - -private: - Ui::Premium::MiniStars _ministars; - QRectF _ministarsRect; - QImage _frame; - QImage _mask; - QSize _size; - QPoint _position; - -}; - -ColoredMiniStars::ColoredMiniStars(not_null parent) -: _ministars([=](const QRect &r) { - parent->update(r.translated(_position)); -}, true) { -} - -void ColoredMiniStars::setSize(const QSize &size) { - _frame = QImage( - size * style::DevicePixelRatio(), - QImage::Format_ARGB32_Premultiplied); - _frame.setDevicePixelRatio(style::DevicePixelRatio()); - - _mask = _frame; - _mask.fill(Qt::transparent); - { - Painter p(&_mask); - auto gradient = QLinearGradient(0, 0, size.width(), 0); - gradient.setStops(Ui::Premium::GiftGradientStops()); - p.setPen(Qt::NoPen); - p.setBrush(gradient); - p.drawRect(0, 0, size.width(), size.height()); - } - - _size = size; - - { - const auto s = _size / Ui::Premium::MiniStars::kSizeFactor; - const auto margins = QMarginsF( - s.width() / 2., - s.height() / 2., - s.width() / 2., - s.height() / 2.); - _ministarsRect = QRectF(QPointF(), _size) - margins; - } -} - -void ColoredMiniStars::setPosition(QPoint position) { - _position = std::move(position); -} - -void ColoredMiniStars::paint(Painter &p) { - _frame.fill(Qt::transparent); - { - Painter q(&_frame); - _ministars.paint(q, _ministarsRect); - q.setCompositionMode(QPainter::CompositionMode_SourceIn); - q.drawImage(0, 0, _mask); - } - - p.drawImage(_position, _frame); -} - void GiftBox( not_null box, not_null controller, @@ -182,6 +112,7 @@ void GiftBox( + userpicPadding.bottom() + st::defaultUserpicButton.size.height())); + using ColoredMiniStars = Ui::Premium::ColoredMiniStars; const auto stars = box->lifetime().make_state(top); const auto userpic = Ui::CreateChild( diff --git a/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp b/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp new file mode 100644 index 000000000..7f537b1b3 --- /dev/null +++ b/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp @@ -0,0 +1,73 @@ +/* +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 +*/ +#include "ui/effects/premium_stars_colored.h" + +#include "ui/effects/premium_graphics.h" // GiftGradientStops. +#include "ui/rp_widget.h" + +namespace Ui { +namespace Premium { + +ColoredMiniStars::ColoredMiniStars(not_null parent) +: _ministars([=](const QRect &r) { + parent->update(r.translated(_position)); +}, true) { +} + +void ColoredMiniStars::setSize(const QSize &size) { + _frame = QImage( + size * style::DevicePixelRatio(), + QImage::Format_ARGB32_Premultiplied); + _frame.setDevicePixelRatio(style::DevicePixelRatio()); + + _mask = _frame; + _mask.fill(Qt::transparent); + { + Painter p(&_mask); + auto gradient = QLinearGradient(0, 0, size.width(), 0); + gradient.setStops(Ui::Premium::GiftGradientStops()); + p.setPen(Qt::NoPen); + p.setBrush(gradient); + p.drawRect(0, 0, size.width(), size.height()); + } + + _size = size; + + { + const auto s = _size / Ui::Premium::MiniStars::kSizeFactor; + const auto margins = QMarginsF( + s.width() / 2., + s.height() / 2., + s.width() / 2., + s.height() / 2.); + _ministarsRect = QRectF(QPointF(), _size) - margins; + } +} + +void ColoredMiniStars::setPosition(QPoint position) { + _position = std::move(position); +} + +void ColoredMiniStars::paint(Painter &p) { + _frame.fill(Qt::transparent); + { + Painter q(&_frame); + _ministars.paint(q, _ministarsRect); + q.setCompositionMode(QPainter::CompositionMode_SourceIn); + q.drawImage(0, 0, _mask); + } + + p.drawImage(_position, _frame); +} + +void ColoredMiniStars::setPaused(bool paused) { + _ministars.setPaused(paused); +} + +} // namespace Premium +} // namespace Ui diff --git a/Telegram/SourceFiles/ui/effects/premium_stars_colored.h b/Telegram/SourceFiles/ui/effects/premium_stars_colored.h new file mode 100644 index 000000000..294436764 --- /dev/null +++ b/Telegram/SourceFiles/ui/effects/premium_stars_colored.h @@ -0,0 +1,38 @@ +/* +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 "ui/effects/premium_stars.h" + +namespace Ui { +class RpWidget; + +namespace Premium { + +class ColoredMiniStars final { +public: + ColoredMiniStars(not_null parent); + + void setSize(const QSize &size); + void setPosition(QPoint position); + void paint(Painter &p); + + void setPaused(bool paused); + +private: + Ui::Premium::MiniStars _ministars; + QRectF _ministarsRect; + QImage _frame; + QImage _mask; + QSize _size; + QPoint _position; + +}; + +} // namespace Premium +} // namespace Ui diff --git a/Telegram/cmake/td_ui.cmake b/Telegram/cmake/td_ui.cmake index 269e48773..136b14cd5 100644 --- a/Telegram/cmake/td_ui.cmake +++ b/Telegram/cmake/td_ui.cmake @@ -234,6 +234,8 @@ PRIVATE ui/effects/premium_graphics.h ui/effects/premium_stars.cpp ui/effects/premium_stars.h + ui/effects/premium_stars_colored.cpp + ui/effects/premium_stars_colored.h ui/effects/round_checkbox.cpp ui/effects/round_checkbox.h ui/effects/scroll_content_shadow.cpp