From bef216bc93f42a09964fab40ba79ae6819ac5822 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 19 Jun 2024 17:00:07 +0300 Subject: [PATCH] Moved out colorizing of svg star to td_ui. --- .../boxes/peers/edit_peer_info_box.cpp | 2 +- .../ui/effects/premium_graphics.cpp | 66 +++++++++++++++++++ .../SourceFiles/ui/effects/premium_graphics.h | 4 ++ .../ui/effects/premium_top_bar.cpp | 66 ------------------- .../SourceFiles/ui/effects/premium_top_bar.h | 4 -- 5 files changed, 71 insertions(+), 71 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp index 5ecab2999..86588f203 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp @@ -54,7 +54,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/boxes/boost_box.h" #include "ui/controls/emoji_button.h" #include "ui/controls/userpic_button.h" -#include "ui/effects/premium_top_bar.h" +#include "ui/effects/premium_graphics.h" #include "ui/rect.h" #include "ui/rp_widget.h" #include "ui/vertical_list.h" diff --git a/Telegram/SourceFiles/ui/effects/premium_graphics.cpp b/Telegram/SourceFiles/ui/effects/premium_graphics.cpp index d04dae62b..54361d545 100644 --- a/Telegram/SourceFiles/ui/effects/premium_graphics.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_graphics.cpp @@ -27,7 +27,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_settings.h" #include "styles/style_window.h" +#include #include +#include namespace Ui { namespace Premium { @@ -903,6 +905,70 @@ void Line::recache(const QSize &s) { } // namespace +QString Svg() { + return u":/gui/icons/settings/star.svg"_q; +} + +QByteArray ColorizedSvg(const QGradientStops &gradientStops) { + auto f = QFile(Svg()); + if (!f.open(QIODevice::ReadOnly)) { + return QByteArray(); + } + auto content = QString::fromUtf8(f.readAll()); + auto stops = [&] { + auto s = QString(); + for (const auto &stop : gradientStops) { + s += QString("") + .arg(QString::number(stop.first), stop.second.name()); + } + return s; + }(); + const auto color = QString("%5") + .arg(0) + .arg(1) + .arg(1) + .arg(0) + .arg(std::move(stops)); + content.replace(u"gradientPlaceholder"_q, color); + content.replace(u"#fff"_q, u"url(#Gradient2)"_q); + f.close(); + return content.toUtf8(); +} + +QImage GenerateStarForLightTopBar(QRectF rect) { + auto svg = QSvgRenderer(Ui::Premium::Svg()); + + const auto size = rect.size().toSize(); + auto frame = QImage( + size * style::DevicePixelRatio(), + QImage::Format_ARGB32_Premultiplied); + frame.setDevicePixelRatio(style::DevicePixelRatio()); + + auto mask = frame; + mask.fill(Qt::transparent); + { + auto p = QPainter(&mask); + auto gradient = QLinearGradient( + 0, + size.height(), + size.width(), + 0); + gradient.setStops(Ui::Premium::ButtonGradientStops()); + p.setPen(Qt::NoPen); + p.setBrush(gradient); + p.drawRect(0, 0, size.width(), size.height()); + } + frame.fill(Qt::transparent); + { + auto q = QPainter(&frame); + svg.render(&q, QRect(QPoint(), size)); + q.setCompositionMode(QPainter::CompositionMode_SourceIn); + q.drawImage(0, 0, mask); + } + return frame; +} + void AddBubbleRow( not_null parent, const style::PremiumBubble &st, diff --git a/Telegram/SourceFiles/ui/effects/premium_graphics.h b/Telegram/SourceFiles/ui/effects/premium_graphics.h index 339d49a3d..d1ba4f9d7 100644 --- a/Telegram/SourceFiles/ui/effects/premium_graphics.h +++ b/Telegram/SourceFiles/ui/effects/premium_graphics.h @@ -41,6 +41,10 @@ namespace Premium { inline constexpr auto kLimitRowRatio = 0.5; +[[nodiscard]] QString Svg(); +[[nodiscard]] QByteArray ColorizedSvg(const QGradientStops &gradientStops); +[[nodiscard]] QImage GenerateStarForLightTopBar(QRectF rect); + void AddBubbleRow( not_null parent, const style::PremiumBubble &st, diff --git a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp index 640a96b3e..e2b619273 100644 --- a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp @@ -16,8 +16,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_settings.h" #include "styles/style_premium.h" -#include - namespace Ui::Premium { namespace { @@ -42,70 +40,6 @@ constexpr auto kMinAcceptableContrast = 4.5; // 1.14; } // namespace -QString Svg() { - return u":/gui/icons/settings/star.svg"_q; -} - -QByteArray ColorizedSvg(const QGradientStops &gradientStops) { - auto f = QFile(Svg()); - if (!f.open(QIODevice::ReadOnly)) { - return QByteArray(); - } - auto content = QString::fromUtf8(f.readAll()); - auto stops = [&] { - auto s = QString(); - for (const auto &stop : gradientStops) { - s += QString("") - .arg(QString::number(stop.first), stop.second.name()); - } - return s; - }(); - const auto color = QString("%5") - .arg(0) - .arg(1) - .arg(1) - .arg(0) - .arg(std::move(stops)); - content.replace(u"gradientPlaceholder"_q, color); - content.replace(u"#fff"_q, u"url(#Gradient2)"_q); - f.close(); - return content.toUtf8(); -} - -QImage GenerateStarForLightTopBar(QRectF rect) { - auto svg = QSvgRenderer(Ui::Premium::Svg()); - - const auto size = rect.size().toSize(); - auto frame = QImage( - size * style::DevicePixelRatio(), - QImage::Format_ARGB32_Premultiplied); - frame.setDevicePixelRatio(style::DevicePixelRatio()); - - auto mask = frame; - mask.fill(Qt::transparent); - { - auto p = QPainter(&mask); - auto gradient = QLinearGradient( - 0, - size.height(), - size.width(), - 0); - gradient.setStops(Ui::Premium::ButtonGradientStops()); - p.setPen(Qt::NoPen); - p.setBrush(gradient); - p.drawRect(0, 0, size.width(), size.height()); - } - frame.fill(Qt::transparent); - { - auto q = QPainter(&frame); - svg.render(&q, QRect(QPoint(), size)); - q.setCompositionMode(QPainter::CompositionMode_SourceIn); - q.drawImage(0, 0, mask); - } - return frame; -} - TopBarAbstract::TopBarAbstract( QWidget *parent, const style::PremiumCover &st) diff --git a/Telegram/SourceFiles/ui/effects/premium_top_bar.h b/Telegram/SourceFiles/ui/effects/premium_top_bar.h index 86c8158ff..194527025 100644 --- a/Telegram/SourceFiles/ui/effects/premium_top_bar.h +++ b/Telegram/SourceFiles/ui/effects/premium_top_bar.h @@ -25,10 +25,6 @@ class FlatLabel; namespace Ui::Premium { -[[nodiscard]] QString Svg(); -[[nodiscard]] QByteArray ColorizedSvg(const QGradientStops &gradientStops); -[[nodiscard]] QImage GenerateStarForLightTopBar(QRectF rect); - class TopBarAbstract : public RpWidget { public: TopBarAbstract(