From 2e1981c5a6b509cd87a0dfdfe7c64971d447f472 Mon Sep 17 00:00:00 2001
From: John Preston <johnprestonmail@gmail.com>
Date: Thu, 14 Oct 2021 17:45:13 +0400
Subject: [PATCH] Improve confirm join box design.

---
 Telegram/SourceFiles/api/api_chat_invite.cpp | 39 +++++++++++++++++++-
 Telegram/SourceFiles/api/api_chat_invite.h   |  2 +
 Telegram/SourceFiles/boxes/boxes.style       | 36 +++++++++++-------
 3 files changed, 63 insertions(+), 14 deletions(-)

diff --git a/Telegram/SourceFiles/api/api_chat_invite.cpp b/Telegram/SourceFiles/api/api_chat_invite.cpp
index f96b387d3..90a5a5175 100644
--- a/Telegram/SourceFiles/api/api_chat_invite.cpp
+++ b/Telegram/SourceFiles/api/api_chat_invite.cpp
@@ -104,6 +104,8 @@ ConfirmInviteBox::ConfirmInviteBox(
 , _submit(std::move(submit))
 , _title(this, st::confirmInviteTitle)
 , _status(this, st::confirmInviteStatus)
+, _about(this, st::confirmInviteAbout)
+, _aboutRequests(this, st::confirmInviteStatus)
 , _participants(GetParticipants(_session, data))
 , _isChannel(data.is_channel() && !data.is_megagroup())
 , _requestApprove(data.is_request_needed()) {
@@ -127,6 +129,18 @@ ConfirmInviteBox::ConfirmInviteBox(
 	}();
 	_title->setText(title);
 	_status->setText(status);
+	if (const auto v = qs(data.vabout().value_or_empty()); !v.isEmpty()) {
+		_about->setText(v);
+	} else {
+		_about.destroy();
+	}
+	if (_requestApprove) {
+		_aboutRequests->setText(_isChannel
+			? tr::lng_group_request_about_channel(tr::now)
+			: tr::lng_group_request_about(tr::now));
+	} else {
+		_aboutRequests.destroy();
+	}
 
 	const auto photo = _session->data().processPhoto(data.vphoto());
 	if (!photo->isNull()) {
@@ -182,7 +196,7 @@ void ConfirmInviteBox::prepare() {
 
 	auto newHeight = st::confirmInviteStatusTop + _status->height() + st::boxPadding.bottom();
 	if (!_participants.empty()) {
-		int skip = (st::boxWideWidth - 4 * st::confirmInviteUserPhotoSize) / 5;
+		int skip = (st::confirmInviteUsersWidth - 4 * st::confirmInviteUserPhotoSize) / 5;
 		int padding = skip / 2;
 		_userWidth = (st::confirmInviteUserPhotoSize + 2 * padding);
 		int sumWidth = _participants.size() * _userWidth;
@@ -199,6 +213,16 @@ void ConfirmInviteBox::prepare() {
 
 		newHeight += st::confirmInviteUserHeight;
 	}
+	if (_about) {
+		const auto padding = st::confirmInviteAboutPadding;
+		_about->resizeToWidth(st::boxWideWidth - padding.left() - padding.right());
+		newHeight += padding.top() + _about->height() + padding.bottom();
+	}
+	if (_aboutRequests) {
+		const auto padding = st::confirmInviteAboutRequestsPadding;
+		_aboutRequests->resizeToWidth(st::boxWideWidth - padding.left() - padding.right());
+		newHeight += padding.top() + _aboutRequests->height() + padding.bottom();
+	}
 	setDimensions(st::boxWideWidth, newHeight);
 }
 
@@ -206,6 +230,19 @@ void ConfirmInviteBox::resizeEvent(QResizeEvent *e) {
 	BoxContent::resizeEvent(e);
 	_title->move((width() - _title->width()) / 2, st::confirmInviteTitleTop);
 	_status->move((width() - _status->width()) / 2, st::confirmInviteStatusTop);
+	auto bottom = _status->y()
+		+ _status->height()
+		+ st::boxPadding.bottom()
+		+ (_participants.empty() ? 0 : st::confirmInviteUserHeight);
+	if (_about) {
+		const auto padding = st::confirmInviteAboutPadding;
+		_about->move((width() - _about->width()) / 2, bottom + padding.top());
+		bottom += padding.top() + _about->height() + padding.bottom();
+	}
+	if (_aboutRequests) {
+		const auto padding = st::confirmInviteAboutRequestsPadding;
+		_aboutRequests->move((width() - _aboutRequests->width()) / 2, bottom + padding.top());
+	}
 }
 
 void ConfirmInviteBox::paintEvent(QPaintEvent *e) {
diff --git a/Telegram/SourceFiles/api/api_chat_invite.h b/Telegram/SourceFiles/api/api_chat_invite.h
index 46a4ad8c5..fc64471e4 100644
--- a/Telegram/SourceFiles/api/api_chat_invite.h
+++ b/Telegram/SourceFiles/api/api_chat_invite.h
@@ -68,6 +68,8 @@ private:
 	Fn<void()> _submit;
 	object_ptr<Ui::FlatLabel> _title;
 	object_ptr<Ui::FlatLabel> _status;
+	object_ptr<Ui::FlatLabel> _about;
+	object_ptr<Ui::FlatLabel> _aboutRequests;
 	std::shared_ptr<Data::PhotoMedia> _photo;
 	std::unique_ptr<Ui::EmptyUserpic> _photoEmpty;
 	std::vector<Participant> _participants;
diff --git a/Telegram/SourceFiles/boxes/boxes.style b/Telegram/SourceFiles/boxes/boxes.style
index 59ea28262..f6a199d65 100644
--- a/Telegram/SourceFiles/boxes/boxes.style
+++ b/Telegram/SourceFiles/boxes/boxes.style
@@ -82,29 +82,39 @@ confirmInviteTitle: FlatLabel(defaultFlatLabel) {
 	maxHeight: 24px;
 	textFg: windowBoldFg;
 	style: TextStyle(defaultTextStyle) {
-		font: font(16px semibold);
-		linkFont: font(16px semibold);
-		linkFontOver: font(16px semibold underline);
+		font: font(18px semibold);
+		linkFont: font(18px semibold);
+		linkFontOver: font(18px semibold underline);
 	}
 }
-confirmInviteStatus: FlatLabel(boxLabel) {
+confirmInviteAbout: FlatLabel(boxLabel) {
 	align: align(center);
 	minWidth: 320px;
-	textFg: windowSubTextFg;
+	maxHeight: 60px;
+	style: TextStyle(boxLabelStyle) {
+		lineHeight: 19px;
+	}
 }
-confirmInviteTitleTop: 106px;
-confirmInvitePhotoSize: 76px;
-confirmInvitePhotoTop: 20px;
-confirmInviteStatusTop: 136px;
-confirmInviteUserHeight: 84px;
-confirmInviteUserPhotoSize: 56px;
-confirmInviteUserPhotoTop: 166px;
+confirmInviteStatus: FlatLabel(confirmInviteAbout) {
+	textFg: windowSubTextFg;
+	style: boxLabelStyle;
+}
+confirmInviteAboutPadding: margins(36px, 4px, 36px, 10px);
+confirmInviteAboutRequestsPadding: margins(36px, 9px, 36px, 15px);
+confirmInviteTitleTop: 141px;
+confirmInvitePhotoSize: 96px;
+confirmInvitePhotoTop: 33px;
+confirmInviteStatusTop: 164px;
+confirmInviteUserHeight: 100px;
+confirmInviteUserPhotoSize: 50px;
+confirmInviteUserPhotoTop: 210px;
+confirmInviteUsersWidth: 320px;
 confirmInviteUserName: FlatLabel(defaultFlatLabel) {
 	align: align(center);
 	minWidth: 66px;
 	maxHeight: 20px;
 }
-confirmInviteUserNameTop: 227px;
+confirmInviteUserNameTop: 264px;
 
 confirmPhoneAboutLabel: FlatLabel(defaultFlatLabel) {
 	minWidth: 272px;