From 38b5cab006fe256de7115be3d7f925d62c4c684c Mon Sep 17 00:00:00 2001
From: AlexeyZavar <sltkval1@gmail.com>
Date: Mon, 11 Nov 2024 16:37:55 +0300
Subject: [PATCH] feat: new badges

---
 .../ayu/{exterabadge.png => extera_badge.png} | Bin
 ...exterabadge@2x.png => extera_badge@2x.png} | Bin
 ...exterabadge@3x.png => extera_badge@3x.png} | Bin
 .../Resources/icons/ayu/extera_official.png   | Bin 0 -> 506 bytes
 .../icons/ayu/extera_official@2x.png          | Bin 0 -> 882 bytes
 .../icons/ayu/extera_official@3x.png          | Bin 0 -> 1249 bytes
 Telegram/SourceFiles/ayu/ui/ayu_icons.style   |   3 ++-
 .../info/profile/info_profile_badge.cpp       |  15 ++++++++-----
 .../info/profile/info_profile_badge.h         |   4 ++--
 .../info/profile/info_profile_cover.cpp       |  20 ++++++++++++------
 10 files changed, 28 insertions(+), 14 deletions(-)
 rename Telegram/Resources/icons/ayu/{exterabadge.png => extera_badge.png} (100%)
 rename Telegram/Resources/icons/ayu/{exterabadge@2x.png => extera_badge@2x.png} (100%)
 rename Telegram/Resources/icons/ayu/{exterabadge@3x.png => extera_badge@3x.png} (100%)
 create mode 100644 Telegram/Resources/icons/ayu/extera_official.png
 create mode 100644 Telegram/Resources/icons/ayu/extera_official@2x.png
 create mode 100644 Telegram/Resources/icons/ayu/extera_official@3x.png

diff --git a/Telegram/Resources/icons/ayu/exterabadge.png b/Telegram/Resources/icons/ayu/extera_badge.png
similarity index 100%
rename from Telegram/Resources/icons/ayu/exterabadge.png
rename to Telegram/Resources/icons/ayu/extera_badge.png
diff --git a/Telegram/Resources/icons/ayu/exterabadge@2x.png b/Telegram/Resources/icons/ayu/extera_badge@2x.png
similarity index 100%
rename from Telegram/Resources/icons/ayu/exterabadge@2x.png
rename to Telegram/Resources/icons/ayu/extera_badge@2x.png
diff --git a/Telegram/Resources/icons/ayu/exterabadge@3x.png b/Telegram/Resources/icons/ayu/extera_badge@3x.png
similarity index 100%
rename from Telegram/Resources/icons/ayu/exterabadge@3x.png
rename to Telegram/Resources/icons/ayu/extera_badge@3x.png
diff --git a/Telegram/Resources/icons/ayu/extera_official.png b/Telegram/Resources/icons/ayu/extera_official.png
new file mode 100644
index 0000000000000000000000000000000000000000..8786c7c1477c11afa5fce35ab3d432fd13e8090f
GIT binary patch
literal 506
zcmV<W0R{evP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000XU
z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0gp*UK~#7F#g;LS
z!Y~j;KWHfci3W)Z3Ml9}1qYz!5*&b2a24q3p@s$uD4>BZMUo<scJ(bea_n)Gjfi-X
zMda8sp6{6<4FJEWktS;9r|iPXWP<5*iX=&JyWMcV-%IUlpoBy;%wcl9Ue&1NfW~^g
z9$Kvy+U+(vosPIUj$=eoq@JJ8CmxT7v&NBVG#WXl^+D$xq~GtWXFDqAl83_~s=}yk
zKAJ_8)W(s>r?<&$Hp6&4#`%0!8Ku#3c^y!DX^}R{F`v&d7!1_hcDv0v;NfV)yobzz
z&U2G)w~NJMkuz#?I2@cgT`RgyvO8eNHgvjNE=A+7*GowxVIDMdAYIVubi!t{!TbFd
z-}zt!j)TkPA}-$V_gJk~Ij!})53`Ll%}HPBhhd2IdaZs*kvy~^I?yk5=}S(SHN+<m
z_u7Ya>VW;lR|~t{uCSAGuZ`m%O;h+_6vyKc|G{Y$K@gxSQa2UbH5(qgDk*B$)SR*~
wY935VlJETCNU+j5Sdexqe#AjlYX7SE1NB?O4r(5*c>n+a07*qoM6N<$f-G*{1^@s6

literal 0
HcmV?d00001

diff --git a/Telegram/Resources/icons/ayu/extera_official@2x.png b/Telegram/Resources/icons/ayu/extera_official@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..641fd8c14ad19b40f5d5fdf9849711403892af40
GIT binary patch
literal 882
zcmV-&1C9KNP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00009a7bBm000&x
z000&x0ZCFM@Bjb+0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0|!Y&K~#7F?V3Gn
zGC>f>C&2^~QNcnjY_zcO1?>C+wtfqHdq0Kt_SRZ!ubtpaVWEW<DkvzZpu+R;UpO%5
z-tF$O-bKg{4n;gO|DD;H*}1$C(LZ`&-s#2p6W}#IdIF(Ph|=jad-eHzv|6obGMUin
zbRylnk>*XDOeUG}JjUZO&F6E{iB<urREk}8Os7+J=|WowWilB`Boe~!83J{QQ1Za{
z_cw*ZVfOm*@xd+-i^W*1t8hM_X}{mo?RKN<^~x^1$9_@SD^dbrXg;5(Xf#T0uv{)_
zG#W8MBBatN!ow}&K|CI33nqh50Kx@7=r#yT{B03J0r(-Wz<v`U6rj2}b)v-sMyBxs
znZ^6n0zN-Kh2QZ+fZy*YT?l;?3<gODxm=D4g#s0eMJ8Z2n^C1wvAstob=wL++5h_b
zBBz**z6VWTBod*`W@C9jypI}$CeR8?0Wyu5s?lcbj5k1kg*L;gcj5}b>Zlm6Vzfc8
z*CSbA3q<f*@dp9Oy;l9a8N_J4UU#%9RRjQp(ssM0!{PAb^LO4CWhs?Pjx&m?0Kl{D
zL4Zorc03-*2{7Kty}XS0AV8*tHE6fn)a`aj6(_3?cs1!k01g?lU=?e%8kNgsB_U1)
z;IL!nK>(%)s;t**CIp2^lp39e58%}Ut_SQ2haIS{)oRsNgwxfBO*n>{;r2qvw@we;
zhBvHmA^^5njbq-O+$3T+9CG(Wr_)gmAJG`bwi|`pRI<`N&1UoAGu73{bV3vf!giXs
z^JPFN-5ZRR@Avzpg1PGQc<Onv(P*$rjpEp9wMZ2i?+fQbvJ<ywfUG7;>%tI17w8pQ
z23yY<iOV9hctQcY-HyCMCV@zK02#$?7K;V9@|uyFjSdC__JeMLm6vU2l*a2g;A7N?
zwiZJt%x&;K5C}+3(e6Qf8=k#fE^NcX+Xz|h<8>KSh5$0@Q5J25%qaP8KVs7UkPk)A
z>RkQnAMzPsuVk}X)<PiG(bK?qnchZ~rwDM9zkfCGnwJ;wAKEB%r+ZQ)LjV8(07*qo
IM6N<$f^RjDbpQYW

literal 0
HcmV?d00001

diff --git a/Telegram/Resources/icons/ayu/extera_official@3x.png b/Telegram/Resources/icons/ayu/extera_official@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..234720bbba1d3cf8c70a671bb1d84312010402bd
GIT binary patch
literal 1249
zcmV<71Rnc|P)<h;3K|Lk000e1NJLTq002k;002k`1^@s6RqeA!00009a7bBm001F4
z001F40Y#QEU;qFB0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1a?V8K~#7F?VG<Z
zEkP8=4-W|v3XOsU1qqQzNJPy)K}+vncz*)_1U0=vMM5JeC=e7#6eLL8o4ohFn@qCr
z=FZNXGiP^pV?W6TcbAy&&iOHC&U6sbAF8p^Ni~_&0y(G!a!?E8pccqM7e%JKyPL+x
z$7yJ2D7nDf+Z)~8-O<Ct1I4C;B8GVgGB-Czy}i9{?|*%L(aFgPy}!RxETRcCF)=~Y
z)6-thUS3|(?d>haAc{bflatBC;rjYIxr(N6CoK^t<o7};YzDy@V}NkTA;8qGuCA!r
zY*G=Z2?PP)Y;oaxLr+gn^4aL<D0Ow|1Wh>ar>Cdn>-YEff1d+5^+uyX8Uzc3S&<IW
zWkD-d5DV1T*GCHr3p6k=KxGEA>gec*K0iN6g4jtfEiIK^902p4pPwfwB7xvfY{^|2
z85|rGM?jH4p^+#CQXk0{2ob6Zrqv1rl0;FqKvfjSfWX4#N0mDyev>Uwm7H@c=>*o7
zx?tv@7RUixAgrybip0d&aW9q+nw_1c#l=PH@9(FJiwin9I3O;P|D7ce-oWtiFcpOn
zWo2b05yoJC-rwIR4p;%8=*B6PumnQ7p7#v0iPG*lu0VLfQ&Uq(3D*~Ifi#L;Hhe`%
z<NI7I7z1iWzU5mlf$}JKN<>K`@j(VN79WwE0%7+-OPo+q(wv{4QwSInW|C{SBvT-i
z34FI^Y-oyNfH*HNFBHnm%uG_AeSLkkK9eaBDuyAft*z1O>MCgyVqUFa<MQzE&>GpS
ziK0ePY<YQ^@*vc_(qN2mBQ~r8X+$h7lS-pyUTLz5X;y(W>OMC&H>8cGc^O0kX|TP$
zt!fTH`|r8<_3!%K?gmtqRN&Hle0(Ht{P_4dS>$Hfx(^VCn?3u0J+%A#`?mM2Gbk(c
zaY3%JwY5bX8yi9XBM<WeS-DVW)-Opn+iW~PKhyg9I_>Q2kc2$U3uAnIe6-%T3WO~4
z?Cgy4V0U*nnNb|_h+g3I^fdE+rjv%5aaO(@U@jby@-Q!q&DFi;jAAggyc(A<=)Ju?
zuV=N*3uE%>TJs9?d3JZf++3!kZC;%5c;`XBigQ6K;4(E$^Fs2<dD*N)kz20x1v4be
zgtW{H5sPaHEP)W&^6FiNskKAXywH`#eZlOdhG}!t#wLWOc}f0vwm|8gKyBcQ;FApS
z7n%Y|`WB-fMM#5Lw7I!SV`F29P}u*9O{oL|SdQQ-3v3fBsy{go3h_aCIq9;(7D#)A
zUnHpeaA6CCNT69ODhh}raSx)BYZV2OE|Ww8AzhDo$c>AuD3*n|XpfVCRq#hJEgVIV
z5`36tWMm{M#+R)<7;XSpXqiUsI24++v6m0hJF@1O6dJEWcS#Ip(TtQMy?lTZ#%IXF
zweq#f9jG()oXQ=j^ChI$D8{+f!rOqQgN${kH`=jqm>T+XeE4z4!VPfhIP7L~-bf>`
zHy1N8jVh3#HB~Sn8V)&j^`I02m6`gihJ#ul2em*BYJnWo0y+2#*Kjex;2EYc00000
LNkvXXu0mjf&ww|B

literal 0
HcmV?d00001

diff --git a/Telegram/SourceFiles/ayu/ui/ayu_icons.style b/Telegram/SourceFiles/ayu/ui/ayu_icons.style
index 4f4934b86..2cf747de7 100644
--- a/Telegram/SourceFiles/ayu/ui/ayu_icons.style
+++ b/Telegram/SourceFiles/ayu/ui/ayu_icons.style
@@ -30,6 +30,7 @@ inChannelBadgeSelectedIcon: icon {{ "ayu/channel", msgInDateFgSelected }};
 outChannelBadgeIcon: icon {{ "ayu/channel", msgOutDateFg }};
 outChannelBadgeSelectedIcon: icon {{ "ayu/channel", msgOutDateFgSelected }};
 
-infoExteraBadge: icon {{ "ayu/exterabadge", profileVerifiedCheckBg }};
+infoExteraOfficialBadge: icon {{ "ayu/extera_official", profileVerifiedCheckBg }};
+infoExteraSupporterBadge: icon {{ "ayu/extera_badge", profileVerifiedCheckBg }};
 
 winEnterWithGuestIcon: icon {{ "ayu/ghost_tray", windowFg }};
diff --git a/Telegram/SourceFiles/info/profile/info_profile_badge.cpp b/Telegram/SourceFiles/info/profile/info_profile_badge.cpp
index 170654838..f04ffbf29 100644
--- a/Telegram/SourceFiles/info/profile/info_profile_badge.cpp
+++ b/Telegram/SourceFiles/info/profile/info_profile_badge.cpp
@@ -187,14 +187,19 @@ void Badge::setContent(Content content) {
 				st::attentionButtonFg);
 			}, _view->lifetime());
 	} break;
-	case BadgeType::AyuGram:
-	case BadgeType::Extera: {
-		const auto icon = &st::infoExteraBadge;
-		_view->resize(icon->size());
+	case BadgeType::Extera:
+	case BadgeType::ExteraSupporter: {
+		const auto icon = (_content.badge == BadgeType::Extera
+							   ? &st::infoExteraOfficialBadge
+							   : &st::infoExteraSupporterBadge);
+		const auto skip = st::infoVerifiedCheckPosition.x();
+		_view->resize(
+			icon->width() + skip,
+			icon->height());
 		_view->paintRequest(
 		) | rpl::start_with_next([=, check = _view.data()]{
 			Painter p(check);
-			icon->paint(p, 0, 0, check->width());
+			icon->paint(p, skip, 0, check->width());
 		}, _view->lifetime());
 	} break;
 	}
diff --git a/Telegram/SourceFiles/info/profile/info_profile_badge.h b/Telegram/SourceFiles/info/profile/info_profile_badge.h
index cffe08a81..219b8dc3f 100644
--- a/Telegram/SourceFiles/info/profile/info_profile_badge.h
+++ b/Telegram/SourceFiles/info/profile/info_profile_badge.h
@@ -42,8 +42,8 @@ enum class BadgeType {
 	Premium = 0x04,
 	Scam = 0x08,
 	Fake = 0x10,
-	AyuGram = 0x20,
-	Extera = 0x40,
+	Extera = 0x20,
+	ExteraSupporter = 0x40,
 };
 inline constexpr bool is_flag_type(BadgeType) { return true; }
 
diff --git a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp
index 0ca3ae4b3..7b2796cce 100644
--- a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp
+++ b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp
@@ -369,7 +369,7 @@ Cover::Cover(
 				Window::GifPauseReason::Layer);
 		},
 		0,
-		BadgeType::None | BadgeType::AyuGram | BadgeType::Extera))
+		BadgeType::None | BadgeType::Extera | BadgeType::ExteraSupporter))
 , _userpic(topic
 	? nullptr
 	: object_ptr<Ui::UserpicButton>(
@@ -418,10 +418,10 @@ Cover::Cover(
 		refreshNameGeometry(width());
 	}, _name->lifetime());
 
-	if (isAyuGramRelated(getBareID(_peer))) {
-		_devBadge->setContent(Info::Profile::Badge::Content{BadgeType::AyuGram});
-	} else if (isExteraRelated(getBareID(_peer))) {
+	if (isExteraRelated(getBareID(_peer)) || isAyuGramRelated(getBareID(_peer))) {
 		_devBadge->setContent(Info::Profile::Badge::Content{BadgeType::Extera});
+	} else if (false) {
+		_devBadge->setContent(Info::Profile::Badge::Content{BadgeType::ExteraSupporter});
 	} else {
 		_devBadge->setContent(Info::Profile::Badge::Content{BadgeType::None});
 	}
@@ -770,7 +770,12 @@ void Cover::refreshNameGeometry(int newWidth) {
 		nameWidth -= st::infoVerifiedCheckPosition.x() + widget->width();
 	}
 	if (const auto widget = _devBadge->widget()) {
-		nameWidth -= st::infoVerifiedCheckPosition.x() + widget->width();
+		nameWidth -= st::infoVerifiedCheckPosition.x()
+			+ widget->width()
+			+ (_badge->widget()
+				   ? (_badge->widget()->width() +
+					   st::infoVerifiedCheckPosition.x())
+				   : 0);
 	}
 	auto nameLeft = _st.nameLeft;
 	const auto badgeTop = _st.nameTop;
@@ -789,7 +794,10 @@ void Cover::refreshNameGeometry(int newWidth) {
 	const auto badgeLeft = nameLeft + _name->width();
 	_badge->move(badgeLeft, badgeTop, badgeBottom);
 
-	const auto devBadgeLeft = badgeLeft + (_badge->widget() ? (_badge->widget()->width() + 2) : 0) + 4;
+	const auto devBadgeLeft = badgeLeft
+		+ (_badge->widget()
+			   ? (_badge->widget()->width() + st::infoVerifiedCheckPosition.x())
+			   : 0);
 	const auto devBadgeTop = _st.nameTop;
 	const auto devBadgeBottom = _st.nameTop + _name->height();
 	_devBadge->move(devBadgeLeft, devBadgeTop, devBadgeBottom);