tdesktop/Telegram/SourceFiles/ui/effects/premium_graphics.h

150 lines
3.4 KiB
C++

/*
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/round_checkbox.h"
namespace style {
struct PremiumLimits;
} // namespace style
namespace tr {
template <typename ...>
struct phrase;
} // namespace tr
enum lngtag_count : int;
namespace Data {
struct SubscriptionOption;
} // namespace Data
namespace style {
struct RoundImageCheckbox;
struct PremiumOption;
struct TextStyle;
struct PremiumBubble;
} // namespace style
namespace Ui {
class GenericBox;
class RadiobuttonGroup;
class VerticalLayout;
namespace Premium {
inline constexpr auto kLimitRowRatio = 0.5;
void AddBubbleRow(
not_null<Ui::VerticalLayout*> parent,
const style::PremiumBubble &st,
rpl::producer<> showFinishes,
int min,
int current,
int max,
bool premiumPossible,
std::optional<tr::phrase<lngtag_count>> phrase,
const style::icon *icon);
struct BubbleRowState {
int counter = 0;
float64 ratio = 0.;
bool animateFromZero = false;
bool dynamic = false;
};
void AddBubbleRow(
not_null<Ui::VerticalLayout*> parent,
const style::PremiumBubble &st,
rpl::producer<> showFinishes,
rpl::producer<BubbleRowState> state,
bool premiumPossible,
Fn<QString(int)> text,
const style::icon *icon,
const style::margins &outerPadding);
void AddLimitRow(
not_null<Ui::VerticalLayout*> parent,
const style::PremiumLimits &st,
QString max,
QString min = {},
float64 ratio = kLimitRowRatio);
void AddLimitRow(
not_null<Ui::VerticalLayout*> parent,
const style::PremiumLimits &st,
int max,
std::optional<tr::phrase<lngtag_count>> phrase,
int min = 0,
float64 ratio = kLimitRowRatio);
struct LimitRowLabels {
rpl::producer<QString> leftLabel;
rpl::producer<QString> leftCount;
rpl::producer<QString> rightLabel;
rpl::producer<QString> rightCount;
};
struct LimitRowState {
float64 ratio = 0.;
bool animateFromZero = false;
bool dynamic = false;
};
void AddLimitRow(
not_null<Ui::VerticalLayout*> parent,
const style::PremiumLimits &st,
LimitRowLabels labels,
rpl::producer<LimitRowState> state,
const style::margins &padding);
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);
[[nodiscard]] QGradientStops LimitGradientStops();
[[nodiscard]] QGradientStops ButtonGradientStops();
[[nodiscard]] QGradientStops LockGradientStops();
[[nodiscard]] QGradientStops FullHeightGradientStops();
[[nodiscard]] QGradientStops GiftGradientStops();
struct ListEntry final {
rpl::producer<QString> title;
rpl::producer<TextWithEntities> about;
int leftNumber = 0;
int rightNumber = 0;
std::optional<QString> customRightText;
const style::icon *icon = nullptr;
};
void ShowListBox(
not_null<Ui::GenericBox*> box,
const style::PremiumLimits &st,
std::vector<ListEntry> entries);
void AddGiftOptions(
not_null<Ui::VerticalLayout*> parent,
std::shared_ptr<Ui::RadiobuttonGroup> group,
std::vector<Data::SubscriptionOption> gifts,
const style::PremiumOption &st,
bool topBadges = false);
} // namespace Premium
} // namespace Ui