2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-08-23 10:47:11 +00:00
tdesktop/Telegram/SourceFiles/ui/effects/premium_graphics.h

134 lines
3.2 KiB
C
Raw Normal View History

/*
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
2022-05-31 13:32:07 +03:00
#include "ui/effects/round_checkbox.h"
2022-05-20 18:57:01 +04:00
namespace style {
struct PremiumLimits;
} // namespace style
namespace tr {
template <typename ...>
struct phrase;
} // namespace tr
enum lngtag_count : int;
namespace Data {
struct PremiumSubscriptionOption;
} // namespace Data
2022-05-31 13:32:07 +03:00
namespace style {
struct RoundImageCheckbox;
struct PremiumOption;
2022-05-31 13:32:07 +03:00
struct TextStyle;
2023-09-12 21:00:39 +04:00
struct PremiumBubble;
2022-05-31 13:32:07 +03:00
} // namespace style
namespace Ui {
class GenericBox;
2022-05-31 13:32:07 +03:00
class RadiobuttonGroup;
class VerticalLayout;
namespace Premium {
inline constexpr auto kLimitRowRatio = 0.5;
[[nodiscard]] QString Svg();
[[nodiscard]] QByteArray ColorizedSvg(const QGradientStops &gradientStops);
[[nodiscard]] QImage GenerateStarForLightTopBar(QRectF rect);
2022-06-14 14:54:30 +04:00
void AddLimitRow(
not_null<Ui::VerticalLayout*> parent,
const style::PremiumLimits &st,
2022-06-14 14:54:30 +04:00
QString max,
QString min = {},
float64 ratio = kLimitRowRatio);
2022-06-14 14:54:30 +04:00
void AddLimitRow(
not_null<Ui::VerticalLayout*> parent,
const style::PremiumLimits &st,
int max,
2022-05-31 13:32:07 +03:00
std::optional<tr::phrase<lngtag_count>> phrase,
int min = 0,
float64 ratio = kLimitRowRatio);
2022-05-31 13:32:07 +03:00
2023-09-12 21:00:39 +04:00
struct LimitRowLabels {
rpl::producer<QString> leftLabel;
rpl::producer<QString> leftCount;
rpl::producer<QString> rightLabel;
rpl::producer<QString> rightCount;
2025-07-31 22:20:00 +04:00
Fn<QBrush()> activeLineBg;
};
struct LimitRowState {
float64 ratio = 0.;
bool animateFromZero = false;
2023-09-12 21:00:39 +04:00
bool dynamic = false;
};
2023-09-12 21:00:39 +04:00
void AddLimitRow(
not_null<Ui::VerticalLayout*> parent,
const style::PremiumLimits &st,
LimitRowLabels labels,
rpl::producer<LimitRowState> state,
2023-10-21 00:20:59 +03:00
const style::margins &padding);
2023-09-12 21:00:39 +04:00
2022-05-31 13:32:07 +03:00
struct AccountsRowArgs final {
std::shared_ptr<Ui::RadiobuttonGroup> group;
const style::RoundImageCheckbox &st;
const style::TextStyle &stName;
const style::color &stNameFg;
struct Entry final {
QString name;
Ui::RoundImageCheckbox::PaintRoundImage paintRoundImage;
};
std::vector<Entry> entries;
};
void AddAccountsRow(
not_null<Ui::VerticalLayout*> parent,
AccountsRowArgs &&args);
2022-05-20 18:57:01 +04:00
[[nodiscard]] QGradientStops LimitGradientStops();
[[nodiscard]] QGradientStops ButtonGradientStops();
[[nodiscard]] QGradientStops LockGradientStops();
[[nodiscard]] QGradientStops FullHeightGradientStops();
[[nodiscard]] QGradientStops GiftGradientStops();
[[nodiscard]] QGradientStops CreditsIconGradientStops();
2024-08-07 18:09:32 +02:00
[[nodiscard]] QLinearGradient ComputeGradient(
not_null<QWidget*> content,
int left,
int width);
struct ListEntry final {
2023-08-04 08:07:37 +02:00
rpl::producer<QString> title;
rpl::producer<TextWithEntities> about;
int leftNumber = 0;
int rightNumber = 0;
std::optional<QString> customRightText;
2023-08-04 08:07:37 +02:00
const style::icon *icon = nullptr;
};
void ShowListBox(
not_null<Ui::GenericBox*> box,
const style::PremiumLimits &st,
std::vector<ListEntry> entries);
2022-05-20 18:57:01 +04:00
void AddGiftOptions(
not_null<Ui::VerticalLayout*> parent,
std::shared_ptr<Ui::RadiobuttonGroup> group,
std::vector<Data::PremiumSubscriptionOption> gifts,
const style::PremiumOption &st,
bool topBadges = false);
} // namespace Premium
} // namespace Ui