diff --git a/Telegram/Resources/icons/dialogs/dialogs_premium.png b/Telegram/Resources/icons/dialogs/dialogs_premium.png new file mode 100644 index 000000000..f5c5f4f50 Binary files /dev/null and b/Telegram/Resources/icons/dialogs/dialogs_premium.png differ diff --git a/Telegram/Resources/icons/dialogs/dialogs_premium@2x.png b/Telegram/Resources/icons/dialogs/dialogs_premium@2x.png new file mode 100644 index 000000000..cc99ef714 Binary files /dev/null and b/Telegram/Resources/icons/dialogs/dialogs_premium@2x.png differ diff --git a/Telegram/Resources/icons/dialogs/dialogs_premium@3x.png b/Telegram/Resources/icons/dialogs/dialogs_premium@3x.png new file mode 100644 index 000000000..3d3d035f8 Binary files /dev/null and b/Telegram/Resources/icons/dialogs/dialogs_premium@3x.png differ diff --git a/Telegram/Resources/icons/dialogs/dialogs_verified_check.png b/Telegram/Resources/icons/dialogs/dialogs_verified_check.png index 14dfa4ee6..dc9c4b0da 100644 Binary files a/Telegram/Resources/icons/dialogs/dialogs_verified_check.png and b/Telegram/Resources/icons/dialogs/dialogs_verified_check.png differ diff --git a/Telegram/Resources/icons/dialogs/dialogs_verified_check@2x.png b/Telegram/Resources/icons/dialogs/dialogs_verified_check@2x.png index 1caf9a685..677770111 100644 Binary files a/Telegram/Resources/icons/dialogs/dialogs_verified_check@2x.png and b/Telegram/Resources/icons/dialogs/dialogs_verified_check@2x.png differ diff --git a/Telegram/Resources/icons/dialogs/dialogs_verified_check@3x.png b/Telegram/Resources/icons/dialogs/dialogs_verified_check@3x.png index f2b4cea40..ceffe4197 100644 Binary files a/Telegram/Resources/icons/dialogs/dialogs_verified_check@3x.png and b/Telegram/Resources/icons/dialogs/dialogs_verified_check@3x.png differ diff --git a/Telegram/Resources/icons/dialogs/dialogs_verified_star.png b/Telegram/Resources/icons/dialogs/dialogs_verified_star.png index 334e70cdf..24adac8ca 100644 Binary files a/Telegram/Resources/icons/dialogs/dialogs_verified_star.png and b/Telegram/Resources/icons/dialogs/dialogs_verified_star.png differ diff --git a/Telegram/Resources/icons/dialogs/dialogs_verified_star@2x.png b/Telegram/Resources/icons/dialogs/dialogs_verified_star@2x.png index 9bfd666d5..98d33bd22 100644 Binary files a/Telegram/Resources/icons/dialogs/dialogs_verified_star@2x.png and b/Telegram/Resources/icons/dialogs/dialogs_verified_star@2x.png differ diff --git a/Telegram/Resources/icons/dialogs/dialogs_verified_star@3x.png b/Telegram/Resources/icons/dialogs/dialogs_verified_star@3x.png index bcfd5eeb7..55734f48e 100644 Binary files a/Telegram/Resources/icons/dialogs/dialogs_verified_star@3x.png and b/Telegram/Resources/icons/dialogs/dialogs_verified_star@3x.png differ diff --git a/Telegram/Resources/icons/profile_premium.png b/Telegram/Resources/icons/profile_premium.png new file mode 100644 index 000000000..e0d145538 Binary files /dev/null and b/Telegram/Resources/icons/profile_premium.png differ diff --git a/Telegram/Resources/icons/profile_premium@2x.png b/Telegram/Resources/icons/profile_premium@2x.png new file mode 100644 index 000000000..0c3844ad2 Binary files /dev/null and b/Telegram/Resources/icons/profile_premium@2x.png differ diff --git a/Telegram/Resources/icons/profile_premium@3x.png b/Telegram/Resources/icons/profile_premium@3x.png new file mode 100644 index 000000000..a8640a02a Binary files /dev/null and b/Telegram/Resources/icons/profile_premium@3x.png differ diff --git a/Telegram/Resources/icons/profile_verified_check.png b/Telegram/Resources/icons/profile_verified_check.png index fafa4023a..45ce8c9ec 100644 Binary files a/Telegram/Resources/icons/profile_verified_check.png and b/Telegram/Resources/icons/profile_verified_check.png differ diff --git a/Telegram/Resources/icons/profile_verified_check@2x.png b/Telegram/Resources/icons/profile_verified_check@2x.png index 790cc94cd..b9180a6b1 100644 Binary files a/Telegram/Resources/icons/profile_verified_check@2x.png and b/Telegram/Resources/icons/profile_verified_check@2x.png differ diff --git a/Telegram/Resources/icons/profile_verified_check@3x.png b/Telegram/Resources/icons/profile_verified_check@3x.png index 511c349f2..3b61b0f78 100644 Binary files a/Telegram/Resources/icons/profile_verified_check@3x.png and b/Telegram/Resources/icons/profile_verified_check@3x.png differ diff --git a/Telegram/Resources/icons/profile_verified_star.png b/Telegram/Resources/icons/profile_verified_star.png index ef20dc84b..bc19c2dcb 100644 Binary files a/Telegram/Resources/icons/profile_verified_star.png and b/Telegram/Resources/icons/profile_verified_star.png differ diff --git a/Telegram/Resources/icons/profile_verified_star@2x.png b/Telegram/Resources/icons/profile_verified_star@2x.png index 967762a59..8db01d0be 100644 Binary files a/Telegram/Resources/icons/profile_verified_star@2x.png and b/Telegram/Resources/icons/profile_verified_star@2x.png differ diff --git a/Telegram/Resources/icons/profile_verified_star@3x.png b/Telegram/Resources/icons/profile_verified_star@3x.png index 8ada01147..c999dabaa 100644 Binary files a/Telegram/Resources/icons/profile_verified_star@3x.png and b/Telegram/Resources/icons/profile_verified_star@3x.png differ diff --git a/Telegram/Resources/icons/settings/premium/files.png b/Telegram/Resources/icons/settings/premium/files.png new file mode 100644 index 000000000..f82c4e495 Binary files /dev/null and b/Telegram/Resources/icons/settings/premium/files.png differ diff --git a/Telegram/Resources/icons/settings/premium/files@2x.png b/Telegram/Resources/icons/settings/premium/files@2x.png new file mode 100644 index 000000000..cffe00909 Binary files /dev/null and b/Telegram/Resources/icons/settings/premium/files@2x.png differ diff --git a/Telegram/Resources/icons/settings/premium/files@3x.png b/Telegram/Resources/icons/settings/premium/files@3x.png new file mode 100644 index 000000000..4c20f6d87 Binary files /dev/null and b/Telegram/Resources/icons/settings/premium/files@3x.png differ diff --git a/Telegram/SourceFiles/boxes/add_contact_box.cpp b/Telegram/SourceFiles/boxes/add_contact_box.cpp index 98099b526..f9b263d92 100644 --- a/Telegram/SourceFiles/boxes/add_contact_box.cpp +++ b/Telegram/SourceFiles/boxes/add_contact_box.cpp @@ -1711,6 +1711,7 @@ void RevokePublicLinkBox::Inner::paintChat( const auto badgeStyle = Ui::PeerBadgeStyle{ &st::dialogsVerifiedIcon, + nullptr, // premium &st::attentionButtonFg }; namew -= Ui::DrawPeerBadgeGetWidth( diff --git a/Telegram/SourceFiles/data/data_peer_values.cpp b/Telegram/SourceFiles/data/data_peer_values.cpp index efd30aadb..97eee770e 100644 --- a/Telegram/SourceFiles/data/data_peer_values.cpp +++ b/Telegram/SourceFiles/data/data_peer_values.cpp @@ -323,15 +323,23 @@ rpl::producer CanManageGroupCallValue(not_null peer) { return rpl::single(false); } -rpl::producer AmPremiumValue(not_null session) { - return session->user()->flagsValue( +rpl::producer PeerPremiumValue(not_null peer) { + const auto user = peer->asUser(); + if (!user) { + return rpl::single(false); + } + return user->flagsValue( ) | rpl::filter([=](UserData::Flags::Change change) { return (change.diff & UserDataFlag::Premium); }) | rpl::map([=] { - return session->user()->isPremium(); + return user->isPremium(); }); } +rpl::producer AmPremiumValue(not_null session) { + return PeerPremiumValue(session->user()); +} + TimeId SortByOnlineValue(not_null user, TimeId now) { if (user->isServiceUser() || user->isBot()) { return -1; diff --git a/Telegram/SourceFiles/data/data_peer_values.h b/Telegram/SourceFiles/data/data_peer_values.h index c1f73eef5..6245b382e 100644 --- a/Telegram/SourceFiles/data/data_peer_values.h +++ b/Telegram/SourceFiles/data/data_peer_values.h @@ -108,6 +108,7 @@ inline auto PeerFullFlagValue( not_null peer); [[nodiscard]] rpl::producer CanManageGroupCallValue( not_null peer); +[[nodiscard]] rpl::producer PeerPremiumValue(not_null peer); [[nodiscard]] rpl::producer AmPremiumValue( not_null session); diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style index f5d842caa..3cbe1459a 100644 --- a/Telegram/SourceFiles/dialogs/dialogs.style +++ b/Telegram/SourceFiles/dialogs/dialogs.style @@ -232,6 +232,9 @@ dialogsVerifiedIconActive: icon { { "dialogs/dialogs_verified_star", dialogsVerifiedIconBgActive }, { "dialogs/dialogs_verified_check", dialogsVerifiedIconFgActive }, }; +dialogsPremiumIcon: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBg }}; +dialogsPremiumIconOver: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBgOver }}; +dialogsPremiumIconActive: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBgActive }}; historySendingIcon: icon {{ "dialogs/dialogs_sending", historySendingOutIconFg, point(5px, 5px) }}; historySendingInvertedIcon: icon {{ "dialogs/dialogs_sending", historySendingInvertedIconFg, point(5px, 5px) }}; diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index d7aa1fc0e..cb021a7d0 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp @@ -780,6 +780,11 @@ void InnerWidget::paintPeerSearchResult( : selected ? &st::dialogsVerifiedIconOver : &st::dialogsVerifiedIcon), + (active + ? &st::dialogsPremiumIconActive + : selected + ? &st::dialogsPremiumIconOver + : &st::dialogsPremiumIcon), (active ? &st::dialogsScamFgActive : selected diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp index d29a52d88..638107a4c 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp @@ -568,6 +568,11 @@ void paintRow( : selected ? &st::dialogsVerifiedIconOver : &st::dialogsVerifiedIcon), + (active + ? &st::dialogsPremiumIconActive + : selected + ? &st::dialogsPremiumIconOver + : &st::dialogsPremiumIcon), (active ? &st::dialogsScamFgActive : selected diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp index 3c592b0b7..017404496 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp @@ -512,7 +512,8 @@ void TopBarWidget::paintTopBar(Painter &p) { const auto peer = history->peer; const auto &text = peer->topBarNameText(); const auto badgeStyle = Ui::PeerBadgeStyle{ - nullptr, + nullptr, // verified + &st::dialogsPremiumIcon, // premium &st::attentionButtonFg }; const auto badgeWidth = Ui::DrawPeerBadgeGetWidth( peer, diff --git a/Telegram/SourceFiles/info/info.style b/Telegram/SourceFiles/info/info.style index 30aaceb97..52051244c 100644 --- a/Telegram/SourceFiles/info/info.style +++ b/Telegram/SourceFiles/info/info.style @@ -301,9 +301,10 @@ infoProfileNameLabel: FlatLabel(infoProfileStatusLabel) { } infoVerifiedCheckPosition: point(10px, 2px); infoVerifiedCheck: icon { - { "profile_verified_star", profileVerifiedCheckBg, point(0px, 0px) }, - { "profile_verified_check", profileVerifiedCheckFg, point(4px, 4px) } + { "profile_verified_star", profileVerifiedCheckBg }, + { "profile_verified_check", profileVerifiedCheckFg } }; +infoPremiumStar: icon {{ "profile_premium", profileVerifiedCheckBg }}; infoProfileSkip: 7px; diff --git a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp index 75d143503..b9b9f0f4b 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp @@ -356,15 +356,19 @@ void Cover::setBadge(Badge badge) { _scamFakeBadge.destroy(); switch (_badge) { case Badge::Verified: + case Badge::Premium: { + const auto icon = (_badge == Badge::Verified) + ? &st::infoVerifiedCheck + : &st::infoPremiumStar; _verifiedCheck.create(this); _verifiedCheck->show(); - _verifiedCheck->resize(st::infoVerifiedCheck.size()); + _verifiedCheck->resize(icon->size()); _verifiedCheck->paintRequest( - ) | rpl::start_with_next([check = _verifiedCheck.data()]{ + ) | rpl::start_with_next([icon, check = _verifiedCheck.data()] { Painter p(check); - st::infoVerifiedCheck.paint(p, 0, 0, check->width()); - }, _verifiedCheck->lifetime()); - break; + icon->paint(p, 0, 0, check->width()); + }, _verifiedCheck->lifetime()); + } break; case Badge::Scam: case Badge::Fake: { const auto fake = (_badge == Badge::Fake); diff --git a/Telegram/SourceFiles/info/profile/info_profile_values.cpp b/Telegram/SourceFiles/info/profile/info_profile_values.cpp index f3315a7bd..9262d7e58 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_values.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_values.cpp @@ -466,12 +466,16 @@ rpl::producer AllowedReactionsCountValue(not_null peer) { template rpl::producer BadgeValueFromFlags(Peer peer) { - return Data::PeerFlagsValue( - peer, - Flag::Verified | Flag::Scam | Flag::Fake - ) | rpl::map([=](base::flags value) { + return rpl::combine( + Data::PeerFlagsValue( + peer, + Flag::Verified | Flag::Scam | Flag::Fake), + Data::PeerPremiumValue(peer) + ) | rpl::map([=](base::flags value, bool premium) { return (value & Flag::Verified) ? Badge::Verified + : premium + ? Badge::Premium : (value & Flag::Scam) ? Badge::Scam : (value & Flag::Fake) diff --git a/Telegram/SourceFiles/info/profile/info_profile_values.h b/Telegram/SourceFiles/info/profile/info_profile_values.h index 07bc10fb4..c245d8b70 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_values.h +++ b/Telegram/SourceFiles/info/profile/info_profile_values.h @@ -93,6 +93,7 @@ rpl::producer> MigratedOrMeValue( enum class Badge { None, Verified, + Premium, Scam, Fake, }; diff --git a/Telegram/SourceFiles/profile/profile.style b/Telegram/SourceFiles/profile/profile.style index 8546229f7..548bc0c07 100644 --- a/Telegram/SourceFiles/profile/profile.style +++ b/Telegram/SourceFiles/profile/profile.style @@ -121,12 +121,6 @@ profileReportReasonOther: InputField(defaultInputField) { heightMax: 135px; } -profileVerifiedCheckShift: -3px; -profileVerifiedCheck: icon { - { "profile_verified_star", profileVerifiedCheckBg, point(0px, 7px) }, - { "profile_verified_check", profileVerifiedCheckFg, point(4px, 11px) } -}; - profileCommonGroupsSkip: 24px; profileCommonGroupsLeftMin: 24px; profileCommonGroupsLeftMax: 36px; diff --git a/Telegram/SourceFiles/settings/settings_main.cpp b/Telegram/SourceFiles/settings/settings_main.cpp index ce81ff5fc..75beca50b 100644 --- a/Telegram/SourceFiles/settings/settings_main.cpp +++ b/Telegram/SourceFiles/settings/settings_main.cpp @@ -338,7 +338,7 @@ void SetupSections( addSection( tr::lng_premium_summary_title(), PremiumId(), - { &st::settingsIconCalls, kIconGreen }); + { &st::settingsPremiumIconStar, kIconLightBlue }); AddSkip(container); } diff --git a/Telegram/SourceFiles/ui/unread_badge.cpp b/Telegram/SourceFiles/ui/unread_badge.cpp index bc82d4a50..c0bea237d 100644 --- a/Telegram/SourceFiles/ui/unread_badge.cpp +++ b/Telegram/SourceFiles/ui/unread_badge.cpp @@ -117,6 +117,14 @@ int DrawPeerBadgeGetWidth( rectForName.y(), outerWidth); return iconw; + } else if (peer->isPremium() && st.premium) { + const auto iconw = st.premium->width(); + st.premium->paint( + p, + rectForName.x() + qMin(nameWidth, rectForName.width() - iconw), + rectForName.y(), + outerWidth); + return iconw; } else if ((peer->isScam() || peer->isFake()) && st.scam) { const auto phrase = peer->isScam() ? tr::lng_scam_badge(tr::now) diff --git a/Telegram/SourceFiles/ui/unread_badge.h b/Telegram/SourceFiles/ui/unread_badge.h index 7cd1a790c..7fd64c932 100644 --- a/Telegram/SourceFiles/ui/unread_badge.h +++ b/Telegram/SourceFiles/ui/unread_badge.h @@ -29,6 +29,7 @@ private: struct PeerBadgeStyle { const style::icon *verified = nullptr; + const style::icon *premium = nullptr; const style::color *scam = nullptr; }; int DrawPeerBadgeGetWidth(