Improve invite links UI.
BIN
Telegram/Resources/icons/info/edit/links_reactivate.png
Normal file
After Width: | Height: | Size: 347 B |
BIN
Telegram/Resources/icons/info/edit/links_reactivate@2x.png
Normal file
After Width: | Height: | Size: 584 B |
BIN
Telegram/Resources/icons/info/edit/links_reactivate@3x.png
Normal file
After Width: | Height: | Size: 863 B |
BIN
Telegram/Resources/icons/info/edit/links_revoked.png
Normal file
After Width: | Height: | Size: 737 B |
BIN
Telegram/Resources/icons/info/edit/links_revoked@2x.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
Telegram/Resources/icons/info/edit/links_revoked@3x.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 289 B After Width: | Height: | Size: 287 B |
Before Width: | Height: | Size: 460 B After Width: | Height: | Size: 465 B |
Before Width: | Height: | Size: 752 B After Width: | Height: | Size: 787 B |
|
@ -1229,11 +1229,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_group_invite_custom_limit" = "Enter custom limit";
|
"lng_group_invite_custom_limit" = "Enter custom limit";
|
||||||
"lng_group_invite_usage_any" = "No limit";
|
"lng_group_invite_usage_any" = "No limit";
|
||||||
"lng_group_invite_usage_custom" = "Custom";
|
"lng_group_invite_usage_custom" = "Custom";
|
||||||
"lng_group_invite_other_title" = "Invite links created by other admins";
|
"lng_group_invite_other_title" = "Links created by other admins";
|
||||||
"lng_group_invite_other_count#one" = "{count} invite link";
|
"lng_group_invite_other_count#one" = "{count} invite link";
|
||||||
"lng_group_invite_other_count#other" = "{count} invite links";
|
"lng_group_invite_other_count#other" = "{count} invite links";
|
||||||
"lng_group_invite_permanent_other" = "Permanent link of this admin";
|
"lng_group_invite_permanent_other" = "Permanent link of this admin";
|
||||||
"lng_group_invite_other_list" = "Invite links created by this admin";
|
"lng_group_invite_other_list" = "Links created by this admin";
|
||||||
"lng_group_invite_expired_about" = "The time limit for this link has expired.";
|
"lng_group_invite_expired_about" = "The time limit for this link has expired.";
|
||||||
"lng_group_invite_used_about" = "This link reached its usage limit.";
|
"lng_group_invite_used_about" = "This link reached its usage limit.";
|
||||||
"lng_group_invite_can_join_via_link#one" = "{count} person can join via this link.";
|
"lng_group_invite_can_join_via_link#one" = "{count} person can join via this link.";
|
||||||
|
|
|
@ -865,9 +865,11 @@ void ShowInviteLinkBox(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto now = base::unixtime::now();
|
const auto now = base::unixtime::now();
|
||||||
box->setTitle(IsExpiredLink(link, now)
|
box->setTitle(link.revoked
|
||||||
|
? tr::lng_manage_peer_link_invite()
|
||||||
|
: IsExpiredLink(link, now)
|
||||||
? tr::lng_manage_peer_link_expired()
|
? tr::lng_manage_peer_link_expired()
|
||||||
: (link.permanent && !link.revoked)
|
: link.permanent
|
||||||
? tr::lng_manage_peer_link_permanent()
|
? tr::lng_manage_peer_link_permanent()
|
||||||
: tr::lng_manage_peer_link_invite());
|
: tr::lng_manage_peer_link_invite());
|
||||||
}, box->lifetime());
|
}, box->lifetime());
|
||||||
|
|
|
@ -691,6 +691,7 @@ void LinksController::rowPaintIcon(
|
||||||
}
|
}
|
||||||
Unexpected("Color in LinksController::rowPaintIcon.");
|
Unexpected("Color in LinksController::rowPaintIcon.");
|
||||||
}();
|
}();
|
||||||
|
const auto stroke = st::inviteLinkIconStroke;
|
||||||
auto &icon = _icons[int(color)];
|
auto &icon = _icons[int(color)];
|
||||||
if (icon.isNull()) {
|
if (icon.isNull()) {
|
||||||
icon = QImage(
|
icon = QImage(
|
||||||
|
@ -703,12 +704,17 @@ void LinksController::rowPaintIcon(
|
||||||
p.setPen(Qt::NoPen);
|
p.setPen(Qt::NoPen);
|
||||||
p.setBrush(*bg);
|
p.setBrush(*bg);
|
||||||
auto hq = PainterHighQualityEnabler(p);
|
auto hq = PainterHighQualityEnabler(p);
|
||||||
p.drawEllipse(0, 0, inner, inner);
|
auto rect = QRect(0, 0, inner, inner);
|
||||||
st::inviteLinkIcon.paintInCenter(p, { 0, 0, inner, inner });
|
if (color == Color::Expiring || color == Color::ExpireSoon) {
|
||||||
|
rect = rect.marginsRemoved({ stroke, stroke, stroke, stroke });
|
||||||
|
}
|
||||||
|
p.drawEllipse(rect);
|
||||||
|
(color == Color::Revoked
|
||||||
|
? st::inviteLinkRevokedIcon
|
||||||
|
: st::inviteLinkIcon).paintInCenter(p, { 0, 0, inner, inner });
|
||||||
}
|
}
|
||||||
p.drawImage(x + skip, y + skip, icon);
|
p.drawImage(x + skip, y + skip, icon);
|
||||||
if (progress >= 0. && progress < 1.) {
|
if (progress >= 0. && progress < 1.) {
|
||||||
const auto stroke = st::inviteLinkIconStroke;
|
|
||||||
auto hq = PainterHighQualityEnabler(p);
|
auto hq = PainterHighQualityEnabler(p);
|
||||||
auto pen = QPen((*bg)->c);
|
auto pen = QPen((*bg)->c);
|
||||||
pen.setWidth(stroke);
|
pen.setWidth(stroke);
|
||||||
|
@ -716,7 +722,7 @@ void LinksController::rowPaintIcon(
|
||||||
p.setPen(pen);
|
p.setPen(pen);
|
||||||
p.setBrush(Qt::NoBrush);
|
p.setBrush(Qt::NoBrush);
|
||||||
|
|
||||||
const auto margins = 1.5 * stroke;
|
const auto margins = .5 * stroke;
|
||||||
p.drawArc(QRectF(x + skip, y + skip, inner, inner).marginsAdded({
|
p.drawArc(QRectF(x + skip, y + skip, inner, inner).marginsAdded({
|
||||||
margins,
|
margins,
|
||||||
margins,
|
margins,
|
||||||
|
|
|
@ -868,7 +868,10 @@ inviteLinkShare: RoundButton(inviteLinkCopy) {
|
||||||
icon: icon {{ "info/edit/links_share", activeButtonFg }};
|
icon: icon {{ "info/edit/links_share", activeButtonFg }};
|
||||||
iconOver: icon {{ "info/edit/links_share", activeButtonFgOver }};
|
iconOver: icon {{ "info/edit/links_share", activeButtonFgOver }};
|
||||||
}
|
}
|
||||||
inviteLinkReactivate: inviteLinkShare;
|
inviteLinkReactivate: RoundButton(inviteLinkCopy) {
|
||||||
|
icon: icon {{ "info/edit/links_reactivate", activeButtonFg }};
|
||||||
|
iconOver: icon {{ "info/edit/links_reactivate", activeButtonFgOver }};
|
||||||
|
}
|
||||||
inviteLinkUserpics: GroupCallUserpics {
|
inviteLinkUserpics: GroupCallUserpics {
|
||||||
size: 28px;
|
size: 28px;
|
||||||
shift: 6px;
|
shift: 6px;
|
||||||
|
@ -879,7 +882,7 @@ inviteLinkUserpicsSkip: 8px;
|
||||||
inviteLinkJoinedFont: font(14px);
|
inviteLinkJoinedFont: font(14px);
|
||||||
inviteLinkJoinedRowPadding: margins(0px, 18px, 0px, 8px);
|
inviteLinkJoinedRowPadding: margins(0px, 18px, 0px, 8px);
|
||||||
|
|
||||||
inviteLinkCreateSkip: 8px;
|
inviteLinkCreateSkip: 10px;
|
||||||
inviteLinkCreate: SettingsButton(defaultSettingsButton) {
|
inviteLinkCreate: SettingsButton(defaultSettingsButton) {
|
||||||
textFg: lightButtonFg;
|
textFg: lightButtonFg;
|
||||||
textFgOver: lightButtonFgOver;
|
textFgOver: lightButtonFgOver;
|
||||||
|
@ -889,7 +892,7 @@ inviteLinkCreate: SettingsButton(defaultSettingsButton) {
|
||||||
font: semiboldFont;
|
font: semiboldFont;
|
||||||
|
|
||||||
height: 20px;
|
height: 20px;
|
||||||
padding: margins(58px, 7px, 12px, 5px);
|
padding: margins(60px, 7px, 12px, 5px);
|
||||||
|
|
||||||
toggle: infoProfileToggle;
|
toggle: infoProfileToggle;
|
||||||
toggleOver: infoProfileToggleOver;
|
toggleOver: infoProfileToggleOver;
|
||||||
|
@ -898,28 +901,35 @@ inviteLinkCreate: SettingsButton(defaultSettingsButton) {
|
||||||
ripple: defaultRippleAnimation;
|
ripple: defaultRippleAnimation;
|
||||||
}
|
}
|
||||||
inviteLinkCreateIcon: icon {{ "info/edit/roundbtn_plus", windowFgActive }};
|
inviteLinkCreateIcon: icon {{ "info/edit/roundbtn_plus", windowFgActive }};
|
||||||
inviteLinkCreateIconSize: 20px;
|
inviteLinkCreateIconSize: 18px;
|
||||||
inviteLinkListItem: PeerListItem(defaultPeerListItem) {
|
inviteLinkListItem: PeerListItem(defaultPeerListItem) {
|
||||||
button: OutlineButton(defaultPeerListButton) {
|
button: OutlineButton(defaultPeerListButton) {
|
||||||
font: normalFont;
|
font: normalFont;
|
||||||
padding: margins(11px, 5px, 11px, 5px);
|
padding: margins(11px, 5px, 11px, 5px);
|
||||||
}
|
}
|
||||||
height: 52px;
|
height: 52px;
|
||||||
photoPosition: point(8px, 6px);
|
photoPosition: point(9px, 4px);
|
||||||
namePosition: point(58px, 6px);
|
namePosition: point(60px, 6px);
|
||||||
statusPosition: point(58px, 25px);
|
statusPosition: point(60px, 26px);
|
||||||
photoSize: 40px;
|
photoSize: 44px;
|
||||||
}
|
}
|
||||||
inviteLinkList: PeerList(defaultPeerList) {
|
inviteLinkList: PeerList(defaultPeerList) {
|
||||||
item: inviteLinkListItem;
|
item: inviteLinkListItem;
|
||||||
padding: margins(0px, 4px, 0px, 4px);
|
padding: margins(0px, 4px, 0px, 0px);
|
||||||
}
|
}
|
||||||
inviteLinkAdminsList: PeerList(peerListBox) {
|
inviteLinkAdminsList: PeerList(inviteLinkList) {
|
||||||
padding: margins(0px, 4px, 0px, membersMarginBottom);
|
item: PeerListItem(inviteLinkListItem) {
|
||||||
|
photoPosition: point(16px, 9px);
|
||||||
|
namePosition: point(62px, 6px);
|
||||||
|
statusPosition: point(62px, 26px);
|
||||||
|
photoSize: 34px;
|
||||||
|
}
|
||||||
|
padding: margins(0px, 5px, 0px, 6px);
|
||||||
}
|
}
|
||||||
inviteLinkIconSkip: 7px;
|
inviteLinkIconSkip: 7px;
|
||||||
inviteLinkIconStroke: 2px;
|
inviteLinkIconStroke: 2px;
|
||||||
inviteLinkIcon: icon {{ "info/edit/links_link", mediaviewFileExtFg }};
|
inviteLinkIcon: icon {{ "info/edit/links_link", mediaviewFileExtFg }};
|
||||||
|
inviteLinkRevokedIcon: icon {{ "info/edit/links_revoked", mediaviewFileExtFg }};
|
||||||
inviteLinkThreeDotsSkip: 12px;
|
inviteLinkThreeDotsSkip: 12px;
|
||||||
inviteLinkRevokedTitlePadding: margins(22px, 16px, 10px, 9px);
|
inviteLinkRevokedTitlePadding: margins(22px, 16px, 10px, 4px);
|
||||||
inviteLinkLimitMargin: margins(22px, 8px, 22px, 8px);
|
inviteLinkLimitMargin: margins(22px, 8px, 22px, 8px);
|
||||||
|
|