diff --git a/Telegram/Resources/art/verified_bg.webp b/Telegram/Resources/art/verified_bg.webp
new file mode 100644
index 000000000..f08059f45
Binary files /dev/null and b/Telegram/Resources/art/verified_bg.webp differ
diff --git a/Telegram/Resources/art/verified_fg.webp b/Telegram/Resources/art/verified_fg.webp
new file mode 100644
index 000000000..353512349
Binary files /dev/null and b/Telegram/Resources/art/verified_fg.webp differ
diff --git a/Telegram/Resources/icons/dialogs/dialogs_verified_check.png b/Telegram/Resources/icons/dialogs/dialogs_verified_check.png
index dc9c4b0da..27b8ca7e9 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 677770111..e360526c7 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 ceffe4197..461255463 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 24adac8ca..e5a02de92 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 98d33bd22..813641ebb 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 55734f48e..699f94d8b 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/qrc/telegram/telegram.qrc b/Telegram/Resources/qrc/telegram/telegram.qrc
index a5459ef75..232d074a4 100644
--- a/Telegram/Resources/qrc/telegram/telegram.qrc
+++ b/Telegram/Resources/qrc/telegram/telegram.qrc
@@ -34,6 +34,8 @@
../../art/topic_icons/general.svg
../../icons/info/edit/links_subscription.svg
../../icons/plane_white.svg
+ ../../art/verified_bg.webp
+ ../../art/verified_fg.webp
../../icons/calls/hands.lottie
diff --git a/Telegram/SourceFiles/boxes/peer_list_box.cpp b/Telegram/SourceFiles/boxes/peer_list_box.cpp
index c72c392a0..72d257d99 100644
--- a/Telegram/SourceFiles/boxes/peer_list_box.cpp
+++ b/Telegram/SourceFiles/boxes/peer_list_box.cpp
@@ -799,9 +799,6 @@ int PeerListRow::paintNameIconGetWidth(
outerWidth,
{
.peer = peer(),
- .verified = &(selected
- ? st::dialogsVerifiedIconOver
- : st::dialogsVerifiedIcon),
.premium = &(selected
? st::dialogsPremiumIcon.over
: st::dialogsPremiumIcon.icon),
diff --git a/Telegram/SourceFiles/chat_helpers/stickers_lottie.cpp b/Telegram/SourceFiles/chat_helpers/stickers_lottie.cpp
index 9c830dc57..1a189fa7f 100644
--- a/Telegram/SourceFiles/chat_helpers/stickers_lottie.cpp
+++ b/Telegram/SourceFiles/chat_helpers/stickers_lottie.cpp
@@ -31,6 +31,12 @@ namespace {
constexpr auto kDontCacheLottieAfterArea = 512 * 512;
+[[nodiscard]] uint64 LocalStickerId(QStringView name) {
+ auto full = u"local_sticker:"_q;
+ full.append(name);
+ return XXH64(full.data(), full.size() * sizeof(QChar), 0);
+}
+
} // namespace
uint8 LottieCacheKeyShift(uint8 replacementsTag, StickerLottieSize sizeTag) {
@@ -315,16 +321,9 @@ QSize ComputeStickerSize(not_null document, QSize box) {
return HistoryView::NonEmptySize(request.size(dimensions, 8) / ratio);
}
-[[nodiscard]] uint64 LocalTgsStickerId(QStringView name) {
- auto full = u"local_tgs_sticker:"_q;
- full.append(name);
- return XXH64(full.data(), full.size() * sizeof(QChar), 0);
-}
-
-not_null GenerateLocalTgsSticker(
+not_null GenerateLocalSticker(
not_null session,
- const QString &name) {
- const auto path = u":/animations/"_q + name + u".tgs"_q;
+ const QString &path) {
auto task = FileLoadTask(
session,
path,
@@ -335,7 +334,7 @@ not_null GenerateLocalTgsSticker(
{},
false,
nullptr,
- LocalTgsStickerId(name));
+ LocalStickerId(path));
task.process({ .generateGoodThumbnail = false });
const auto result = task.peekResult();
Assert(result != nullptr);
@@ -348,8 +347,18 @@ not_null GenerateLocalTgsSticker(
document->setLocation(Core::FileLocation(path));
Ensures(document->sticker());
- Ensures(document->sticker()->isLottie());
return document;
}
+not_null GenerateLocalTgsSticker(
+ not_null session,
+ const QString &name) {
+ const auto result = GenerateLocalSticker(
+ session,
+ u":/animations/"_q + name + u".tgs"_q);
+
+ Ensures(result->sticker()->isLottie());
+ return result;
+}
+
} // namespace ChatHelpers
diff --git a/Telegram/SourceFiles/chat_helpers/stickers_lottie.h b/Telegram/SourceFiles/chat_helpers/stickers_lottie.h
index e659329dd..d213f82bc 100644
--- a/Telegram/SourceFiles/chat_helpers/stickers_lottie.h
+++ b/Telegram/SourceFiles/chat_helpers/stickers_lottie.h
@@ -130,6 +130,10 @@ bool PaintStickerThumbnailPath(
not_null document,
QSize box);
+[[nodiscard]] not_null GenerateLocalSticker(
+ not_null session,
+ const QString &path);
+
[[nodiscard]] not_null GenerateLocalTgsSticker(
not_null session,
const QString &name);
diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp
index dc952ddc6..e8173de68 100644
--- a/Telegram/SourceFiles/data/data_session.cpp
+++ b/Telegram/SourceFiles/data/data_session.cpp
@@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "api/api_bot.h"
#include "api/api_text_entities.h"
#include "api/api_user_names.h"
+#include "chat_helpers/stickers_lottie.h"
#include "core/application.h"
#include "core/core_settings.h"
#include "core/mime_type.h" // Core::IsMimeSticker
@@ -353,11 +354,16 @@ Session::Session(not_null session)
Ui::VerifyDetails Session::verifiedByTelegram() {
if (_verifiedByTelegramIconBgId.isEmpty()) {
- auto &manager = customEmojiManager();
- _verifiedByTelegramIconBgId = manager.registerInternalEmoji(
- st::dialogsVerifiedBg);
- _verifiedByTelegramIconFgId = manager.registerInternalEmoji(
- st::dialogsVerifiedFg);
+ const auto bg = ChatHelpers::GenerateLocalSticker(
+ _session,
+ u":/gui/art/verified_bg.webp"_q);
+ bg->overrideEmojiUsesTextColor(true);
+ const auto fg = ChatHelpers::GenerateLocalSticker(
+ _session,
+ u":/gui/art/verified_fg.webp"_q);
+ fg->overrideEmojiUsesTextColor(true);
+ _verifiedByTelegramIconBgId = Data::SerializeCustomEmojiId(bg);
+ _verifiedByTelegramIconFgId = Data::SerializeCustomEmojiId(fg);
}
return {
.iconBgId = _verifiedByTelegramIconBgId,
diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style
index a5d322962..7e27ab419 100644
--- a/Telegram/SourceFiles/dialogs/dialogs.style
+++ b/Telegram/SourceFiles/dialogs/dialogs.style
@@ -409,6 +409,7 @@ dialogsLockIcon: ThreeStateIcon {
dialogsVerifiedBg: icon{{ "dialogs/dialogs_verified_star", dialogsVerifiedIconBg }};
dialogsVerifiedFg: icon{{ "dialogs/dialogs_verified_check", dialogsVerifiedIconFg }};
+dialogsVerifiedPadding: margins(0px, 3px, 0px, 0px);
dialogsVerifiedColors: VerifiedBadge {
height: 20px;
bg: dialogsVerifiedIconBg;
@@ -423,18 +424,6 @@ dialogsVerifiedColorsActive: VerifiedBadge(dialogsVerifiedColors) {
fg: dialogsVerifiedIconFgActive;
}
-dialogsVerifiedIcon: icon {
- { "dialogs/dialogs_verified_star", dialogsVerifiedIconBg },
- { "dialogs/dialogs_verified_check", dialogsVerifiedIconFg },
-};
-dialogsVerifiedIconOver: icon {
- { "dialogs/dialogs_verified_star", dialogsVerifiedIconBgOver },
- { "dialogs/dialogs_verified_check", dialogsVerifiedIconFgOver },
-};
-dialogsVerifiedIconActive: icon {
- { "dialogs/dialogs_verified_star", dialogsVerifiedIconBgActive },
- { "dialogs/dialogs_verified_check", dialogsVerifiedIconFgActive },
-};
dialogsPremiumIcon: ThreeStateIcon {
icon: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBg }};
over: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBgOver }};
diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp
index 51dc9f11e..44ef4f6a6 100644
--- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp
+++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp
@@ -1398,11 +1398,6 @@ void InnerWidget::paintPeerSearchResult(
context.width,
{
.peer = peer,
- .verified = (context.active
- ? &st::dialogsVerifiedIconActive
- : context.selected
- ? &st::dialogsVerifiedIconOver
- : &st::dialogsVerifiedIcon),
.premium = &ThreeStateIcon(
st::dialogsPremiumIcon,
context.active,
diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp
index 350ea38ba..e4243c7ae 100644
--- a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp
+++ b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp
@@ -732,11 +732,6 @@ void PaintRow(
context.width,
{
.peer = from,
- .verified = (context.active
- ? &st::dialogsVerifiedIconActive
- : context.selected
- ? &st::dialogsVerifiedIconOver
- : &st::dialogsVerifiedIcon),
.premium = &ThreeStateIcon(
st::dialogsPremiumIcon,
context.active,
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 0e2da0d49..4d89cd300 100644
--- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp
+++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp
@@ -589,7 +589,6 @@ void TopBarWidget::paintTopBar(Painter &p) {
width(),
{
.peer = namePeer,
- .verified = &st::dialogsVerifiedIcon,
.premium = &st::dialogsPremiumIcon.icon,
.scam = &st::attentionButtonFg,
.premiumFg = &st::dialogsVerifiedIconBg,
diff --git a/Telegram/SourceFiles/info/info.style b/Telegram/SourceFiles/info/info.style
index f121010da..1ae86e9d3 100644
--- a/Telegram/SourceFiles/info/info.style
+++ b/Telegram/SourceFiles/info/info.style
@@ -22,7 +22,6 @@ InfoToggle {
}
InfoPeerBadge {
- verified: icon;
premium: icon;
premiumFg: color;
premiumInnerFg: color;
@@ -437,7 +436,6 @@ infoVerifiedCheck: icon {
infoPremiumStar: icon {{ "profile_premium", profileVerifiedCheckBg }};
infoPeerBadge: InfoPeerBadge {
- verified: infoVerifiedCheck;
premium: infoPremiumStar;
premiumFg: profileVerifiedCheckBg;
premiumInnerFg: profileVerifiedCheckFg;
diff --git a/Telegram/SourceFiles/info/profile/info_profile_badge.cpp b/Telegram/SourceFiles/info/profile/info_profile_badge.cpp
index a2d15131e..ee2c1a035 100644
--- a/Telegram/SourceFiles/info/profile/info_profile_badge.cpp
+++ b/Telegram/SourceFiles/info/profile/info_profile_badge.cpp
@@ -35,7 +35,12 @@ namespace {
} else if (emojiStatusId && badge == BadgeType::None) {
badge = BadgeType::Premium;
}
- return Badge::Content{ badge, emojiStatusId };
+ return Badge::Content{
+ badge,
+ (emojiStatusId
+ ? Data::SerializeCustomEmojiId(emojiStatusId)
+ : QString()),
+ };
});
}
@@ -115,14 +120,14 @@ void Badge::setContent(Content content) {
case BadgeType::Premium: {
const auto id = _content.emojiStatusId;
const auto innerId = _content.emojiStatusInnerId;
- if (id || innerId) {
- _emojiStatus = id
+ if (!id.isEmpty() || !innerId.isEmpty()) {
+ _emojiStatus = !id.isEmpty()
? _session->data().customEmojiManager().create(
id,
[raw = _view.data()] { raw->update(); },
sizeTag())
: nullptr;
- _statusInner = innerId
+ _statusInner = !innerId.isEmpty()
? _session->data().customEmojiManager().create(
innerId,
[raw = _view.data()] { raw->update(); },
@@ -162,9 +167,7 @@ void Badge::setContent(Content content) {
}
}, _view->lifetime());
} else {
- const auto icon = (_content.badge == BadgeType::Verified)
- ? &_st.verified
- : &_st.premium;
+ const auto icon = &_st.premium;
_view->resize(icon->size());
_view->paintRequest(
) | rpl::start_with_next([=, check = _view.data()]{
@@ -224,9 +227,9 @@ void Badge::move(int left, int top, int bottom) {
return;
}
const auto star = !_emojiStatus
- && (_content.badge == BadgeType::Premium
- || _content.badge == BadgeType::Verified);
- const auto fake = !_emojiStatus && !star;
+ && (_content.badge == BadgeType::Premium);
+ const auto fake = (!_emojiStatus && !star)
+ || (_content.badge == BadgeType::Verified);
const auto skip = fake ? 0 : _st.position.x();
const auto badgeLeft = left + skip;
const auto badgeTop = top
diff --git a/Telegram/SourceFiles/info/profile/info_profile_badge.h b/Telegram/SourceFiles/info/profile/info_profile_badge.h
index efff823cb..ea24f2fb6 100644
--- a/Telegram/SourceFiles/info/profile/info_profile_badge.h
+++ b/Telegram/SourceFiles/info/profile/info_profile_badge.h
@@ -58,8 +58,8 @@ public:
struct Content {
BadgeType badge = BadgeType::None;
- DocumentId emojiStatusId = 0;
- DocumentId emojiStatusInnerId = 0;
+ QString emojiStatusId;
+ QString emojiStatusInnerId;
friend inline constexpr bool operator==(Content, Content) = default;
};
diff --git a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp
index 02ad4f532..0b69500b4 100644
--- a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp
+++ b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp
@@ -302,10 +302,8 @@ Cover::Cover(
const auto details = peer->verifyDetails();
return Badge::Content{
.badge = details ? BadgeType::Verified : BadgeType::None,
- .emojiStatusId = details ? details->iconBgId.toULongLong() : 0,
- .emojiStatusInnerId = (details
- ? details->iconFgId.toULongLong()
- : 0),
+ .emojiStatusId = details ? details->iconBgId : QString(),
+ .emojiStatusInnerId = details ? details->iconFgId : QString(),
};
});
}
diff --git a/Telegram/SourceFiles/settings/settings.style b/Telegram/SourceFiles/settings/settings.style
index 4453a307e..4e472b96a 100644
--- a/Telegram/SourceFiles/settings/settings.style
+++ b/Telegram/SourceFiles/settings/settings.style
@@ -197,10 +197,6 @@ settingsInfoPhotoSkip: 7px;
settingsInfoNameSkip: -1px;
settingsInfoUploadLeft: 6px;
settingsInfoPeerBadge: InfoPeerBadge {
- verified: icon {
- { "dialogs/dialogs_verified_star", dialogsVerifiedIconBg },
- { "dialogs/dialogs_verified_check", dialogsVerifiedIconFg },
- };
premium: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBg }};
premiumFg: dialogsVerifiedIconBg;
premiumInnerFg: dialogsVerifiedIconFg;