From 313ae0f86cbd18da258b22bd8ce734cc9230b740 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 18 Aug 2025 17:23:54 +0400 Subject: [PATCH] Remove CenterWrap layout. --- Telegram/SourceFiles/api/api_chat_invite.cpp | 18 ++-- Telegram/SourceFiles/boxes/about_box.cpp | 12 +-- .../SourceFiles/boxes/edit_privacy_box.cpp | 2 +- .../SourceFiles/boxes/gift_credits_box.cpp | 5 +- .../SourceFiles/boxes/gift_premium_box.cpp | 9 +- .../boxes/peers/add_participants_box.cpp | 2 +- .../boxes/peers/edit_peer_color_box.cpp | 2 +- .../boxes/peers/edit_peer_invite_link.cpp | 16 ++-- .../SourceFiles/boxes/premium_limits_box.cpp | 8 +- .../SourceFiles/boxes/premium_preview_box.cpp | 2 +- .../SourceFiles/boxes/send_credits_box.cpp | 13 +-- Telegram/SourceFiles/boxes/star_gift_box.cpp | 30 +++--- Telegram/SourceFiles/boxes/username_box.cpp | 4 +- .../calls/calls_box_controller.cpp | 7 +- .../calls/group/calls_group_common.cpp | 22 ++--- .../group/calls_group_invite_controller.cpp | 11 +-- .../dialogs/dialogs_inner_widget.cpp | 3 +- .../dialogs/ui/posts_search_intro.cpp | 1 - .../controls/history_view_draft_options.cpp | 2 +- .../controls/history_view_suggest_options.cpp | 1 - .../bot/starref/info_bot_starref_common.cpp | 26 ++--- .../boosts/create_giveaway_box.cpp | 11 +-- .../boosts/giveaway/select_countries_box.cpp | 9 +- .../earn/info_channel_earn_list.cpp | 94 +++++++++---------- .../peer_gifts/info_peer_gifts_widget.cpp | 57 ++++++----- .../info/peer_gifts/info_peer_gifts_widget.h | 3 +- .../info/profile/info_profile_actions.cpp | 3 +- .../info_statistics_inner_widget.cpp | 39 ++++---- .../stories/info_stories_inner_widget.cpp | 33 +++---- .../info/stories/info_stories_widget.cpp | 20 ++-- .../info/stories/info_stories_widget.h | 3 +- .../info/userpic/info_userpic_bubble_wrap.cpp | 7 +- .../userpic/info_userpic_colors_editor.cpp | 9 +- .../info_userpic_emoji_builder_preview.cpp | 1 + .../info_userpic_emoji_builder_widget.cpp | 35 ++++--- .../inline_bots/bot_attach_web_view.cpp | 3 - .../SourceFiles/intro/intro_code_input.cpp | 1 + Telegram/SourceFiles/intro/intro_email.cpp | 3 +- .../media/stories/media_stories_stealth.cpp | 7 +- Telegram/SourceFiles/menu/menu_sponsored.cpp | 31 +++--- .../passport/passport_panel_password.cpp | 22 ++--- .../payments/ui/payments_form_summary.cpp | 1 - .../payments/ui/payments_reaction_box.cpp | 8 +- .../settings/business/settings_chat_intro.cpp | 2 +- .../settings_cloud_password_common.cpp | 58 +++++------- .../settings_cloud_password_common.h | 6 +- .../settings_cloud_password_email.cpp | 5 +- .../settings_cloud_password_email_confirm.cpp | 12 +-- .../settings_cloud_password_hint.cpp | 5 +- .../settings_cloud_password_input.cpp | 20 ++-- .../settings_cloud_password_login_email.cpp | 3 +- ...ngs_cloud_password_login_email_confirm.cpp | 8 +- .../settings_cloud_password_validate_icon.cpp | 1 + .../settings/settings_blocked_peers.cpp | 12 +-- .../SourceFiles/settings/settings_credits.cpp | 77 ++++++++------- .../settings/settings_credits_graphics.cpp | 92 ++++++++---------- .../settings/settings_local_passcode.cpp | 59 ++++++------ .../settings/settings_power_saving.cpp | 2 +- .../settings/settings_websites.cpp | 11 +-- .../ui/boxes/show_or_premium_box.cpp | 13 +-- .../ui/controls/userpic_button.cpp | 1 + .../SourceFiles/ui/widgets/peer_bubble.cpp | 6 +- Telegram/lib_ui | 2 +- 63 files changed, 456 insertions(+), 535 deletions(-) diff --git a/Telegram/SourceFiles/api/api_chat_invite.cpp b/Telegram/SourceFiles/api/api_chat_invite.cpp index afc365c139..415c1a8296 100644 --- a/Telegram/SourceFiles/api/api_chat_invite.cpp +++ b/Telegram/SourceFiles/api/api_chat_invite.cpp @@ -142,13 +142,12 @@ void ConfirmSubscriptionBox( const auto content = box->verticalLayout(); Ui::AddSkip(content, st::confirmInvitePhotoTop); - const auto userpicWrap = content->add( - object_ptr>( - content, - object_ptr(content))); - const auto userpic = userpicWrap->entity(); + const auto userpic = content->add( + object_ptr(content), + style::al_top); const auto photoSize = st::confirmInvitePhotoSize; userpic->resize(Size(photoSize)); + userpic->setNaturalWidth(photoSize); const auto creditsIconSize = photoSize / 3; const auto creditsIconCallback = Ui::PaintOutlinedColoredCreditsIconCallback( @@ -188,8 +187,8 @@ void ConfirmSubscriptionBox( } auto p = QPainter(userpic); p.drawImage(0, 0, state->frame); - }, userpicWrap->lifetime()); - userpicWrap->setAttribute(Qt::WA_TransparentForMouseEvents); + }, userpic->lifetime()); + userpic->setAttribute(Qt::WA_TransparentForMouseEvents); if (photo) { state->photoMedia = photo->createMediaView(); state->photoMedia->wanted(Data::PhotoSize::Small, Data::FileOrigin()); @@ -197,7 +196,7 @@ void ConfirmSubscriptionBox( session->downloaderTaskFinished( ) | rpl::start_with_next([=] { userpic->update(); - }, userpicWrap->entity()->lifetime()); + }, userpic->lifetime()); } } else { state->photoEmpty = std::make_unique( @@ -219,7 +218,6 @@ void ConfirmSubscriptionBox( box, tr::lng_channel_invite_subscription_title(), st::inviteLinkSubscribeBoxTitle), - st::boxRowPadding, style::al_top); box->addRow( object_ptr( @@ -234,7 +232,6 @@ void ConfirmSubscriptionBox( Ui::Text::Bold), Ui::Text::WithEntities), st::inviteLinkSubscribeBoxAbout), - st::boxRowPadding, style::al_top); Ui::AddSkip(content); box->addRow( @@ -250,7 +247,6 @@ void ConfirmSubscriptionBox( }), Ui::Text::RichLangValue), st::inviteLinkSubscribeBoxTerms), - st::boxRowPadding, style::al_top); { diff --git a/Telegram/SourceFiles/boxes/about_box.cpp b/Telegram/SourceFiles/boxes/about_box.cpp index 4f8b666671..f270788877 100644 --- a/Telegram/SourceFiles/boxes/about_box.cpp +++ b/Telegram/SourceFiles/boxes/about_box.cpp @@ -183,10 +183,8 @@ void ArchiveHintBox( const auto rect = Rect(icon.size() * 2); auto owned = object_ptr(content); owned->resize(rect.size()); - const auto widget = box->addRow( - object_ptr>( - content, - std::move(owned)))->entity(); + owned->setNaturalWidth(rect.width()); + const auto widget = box->addRow(std::move(owned), style::al_top); widget->paintRequest( ) | rpl::start_with_next([=] { auto p = Painter(widget); @@ -199,12 +197,12 @@ void ArchiveHintBox( } Ui::AddSkip(content); Ui::AddSkip(content); - box->addRow(object_ptr>( - content, + box->addRow( object_ptr( content, tr::lng_archive_hint_title(), - st::boxTitle))); + st::boxTitle), + style::al_top); Ui::AddSkip(content); Ui::AddSkip(content); { diff --git a/Telegram/SourceFiles/boxes/edit_privacy_box.cpp b/Telegram/SourceFiles/boxes/edit_privacy_box.cpp index 2d6f1e2448..be19114412 100644 --- a/Telegram/SourceFiles/boxes/edit_privacy_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_privacy_box.cpp @@ -1293,7 +1293,7 @@ void EditDirectMessagesPriceBox( object_ptr>( box, object_ptr(box)), - {}); + style::margins()); wrap->toggle(savedValue.has_value(), anim::type::instant); wrap->toggleOn(toggle->toggledChanges()); diff --git a/Telegram/SourceFiles/boxes/gift_credits_box.cpp b/Telegram/SourceFiles/boxes/gift_credits_box.cpp index e3c915c770..2fc72502f2 100644 --- a/Telegram/SourceFiles/boxes/gift_credits_box.cpp +++ b/Telegram/SourceFiles/boxes/gift_credits_box.cpp @@ -52,9 +52,8 @@ void GiftCreditsBox( Ui::AddSkip(content); const auto &stUser = st::premiumGiftsUserpicButton; const auto userpicWrap = content->add( - object_ptr>( - content, - object_ptr(content, peer, stUser))); + object_ptr(content, peer, stUser), + style::al_top); userpicWrap->setAttribute(Qt::WA_TransparentForMouseEvents); Ui::AddSkip(content); Ui::AddSkip(content); diff --git a/Telegram/SourceFiles/boxes/gift_premium_box.cpp b/Telegram/SourceFiles/boxes/gift_premium_box.cpp index daf79b39d3..c17481e628 100644 --- a/Telegram/SourceFiles/boxes/gift_premium_box.cpp +++ b/Telegram/SourceFiles/boxes/gift_premium_box.cpp @@ -990,12 +990,11 @@ void GiveawayInfoBox( label->setTextColorOverride(st::windowActiveTextFg->c); } const auto result = box->addRow( - object_ptr>>( + object_ptr>( box.get(), - object_ptr>( - box.get(), - std::move(label)), - QMargins(0, skip, 0, skip))); + std::move(label), + QMargins(0, skip, 0, skip)), + style::al_justify); result->paintRequest() | rpl::start_with_next([=] { auto p = QPainter(result); p.setPen(Qt::NoPen); diff --git a/Telegram/SourceFiles/boxes/peers/add_participants_box.cpp b/Telegram/SourceFiles/boxes/peers/add_participants_box.cpp index ed99b06ed5..a5f2ec3c30 100644 --- a/Telegram/SourceFiles/boxes/peers/add_participants_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/add_participants_box.cpp @@ -513,7 +513,7 @@ void InviteForbiddenController::setComplexCover() { container->add( MakeShowOrLabel(container, tr::lng_invite_upgrade_or()), st::inviteForbiddenOrLabelPadding, - style::al_top); + style::al_justify); } container->add( object_ptr( diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp index 8542e862de..a13b197a6d 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_color_box.cpp @@ -1200,7 +1200,7 @@ void EditPeerColorBox( peer, state->index.value(), state->emojiId.value() - ), {}); + ), style::margins()); auto indices = peer->session().api().peerColors().suggestedValue(); const auto margin = st::settingsColorRadioMargin; diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp index abd6113ad0..5c26012cd6 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp @@ -969,9 +969,9 @@ void Controller::rowClicked(not_null row) { const auto photoSize = st::boostReplaceUserpic.photoSize; const auto session = &row->peer()->session(); - content->add(object_ptr>( - content, - Settings::SubscriptionUserpic(content, channel, photoSize))); + content->add( + Settings::SubscriptionUserpic(content, channel, photoSize), + style::al_top); Ui::AddSkip(content); Ui::AddSkip(content); @@ -981,7 +981,6 @@ void Controller::rowClicked(not_null row) { box, tr::lng_credits_box_subscription_title(), st::creditsBoxAboutTitle), - st::boxRowPadding, style::al_top); Ui::AddSkip(content); @@ -990,7 +989,6 @@ void Controller::rowClicked(not_null row) { object_ptr( box, st::creditsTopupPrice), - st::boxRowPadding, style::al_top); subtitle1->setMarkedText( tr::lng_credits_subscription_subtitle( @@ -1002,11 +1000,10 @@ void Controller::rowClicked(not_null row) { Ui::Text::WithEntities), _emojiHelper.context()); const auto subtitle2 = box->addRow( - object_ptr>( + object_ptr( box, - object_ptr( - box, - st::creditsTopupPrice)))->entity(); + st::creditsTopupPrice), + style::al_top); session->credits().rateValue( channel ) | rpl::start_with_next([=, currency = u"USD"_q](float64 rate) { @@ -1038,7 +1035,6 @@ void Controller::rowClicked(not_null row) { tr::lng_credits_box_out_about_link(tr::now)), Ui::Text::WithEntities), st::creditsBoxAboutDivider), - st::boxRowPadding, style::al_top); const auto button = box->addButton(tr::lng_box_ok(), [=] { diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.cpp b/Telegram/SourceFiles/boxes/premium_limits_box.cpp index da4120f0f7..f88a525d9f 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_limits_box.cpp @@ -585,14 +585,14 @@ void ChannelsLimitBox( const auto content = box->addRow( object_ptr(box, controller), - {}); + style::margins()); delegate->setContent(content); controller->setDelegate(delegate); const auto count = 100; const auto placeholder = box->addRow( object_ptr(box, count, st::defaultPeerList), - {}); + style::margins()); using namespace rpl::mappers; controller->countValue( @@ -676,14 +676,14 @@ void PublicLinksLimitBox( const auto content = box->addRow( object_ptr(box, controller), - {}); + style::margins()); delegate->setContent(content); controller->setDelegate(delegate); const auto count = defaultLimit; const auto placeholder = box->addRow( object_ptr(box, count, st::defaultPeerList), - {}); + style::margins()); using namespace rpl::mappers; controller->countValue( diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.cpp b/Telegram/SourceFiles/boxes/premium_preview_box.cpp index e1fef3b9da..53fa77aee0 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_preview_box.cpp @@ -902,7 +902,7 @@ void PreviewBox( const auto outer = box->addRow( ChatBackPreview(box, size.height(), back), - {}); + style::margins()); struct Hiding { not_null widget; diff --git a/Telegram/SourceFiles/boxes/send_credits_box.cpp b/Telegram/SourceFiles/boxes/send_credits_box.cpp index 9b8fe27847..816d0aecc7 100644 --- a/Telegram/SourceFiles/boxes/send_credits_box.cpp +++ b/Telegram/SourceFiles/boxes/send_credits_box.cpp @@ -348,9 +348,9 @@ void SendCreditsBox( }, ministarsContainer->lifetime()); } - const auto thumb = box->addRow(object_ptr>( - content, - SendCreditsThumbnail(content, session, form.get(), photoSize))); + const auto thumb = box->addRow( + SendCreditsThumbnail(content, session, form.get(), photoSize), + style::al_top); thumb->setAttribute(Qt::WA_TransparentForMouseEvents); if (form->invoice.subscriptionPeriod) { const auto badge = SendCreditsBadge(content, form->invoice.amount); @@ -371,16 +371,14 @@ void SendCreditsBox( ? rpl::single(form->title) : tr::lng_credits_box_out_title(), st::settingsPremiumUserTitle), - st::boxRowPadding, style::al_top); if (form->invoice.subscriptionPeriod && form->botId && form->photo) { Ui::AddSkip(content); Ui::AddSkip(content); const auto bot = session->data().user(form->botId); box->addRow( - object_ptr>( - box, - Ui::CreatePeerBubble(box, bot))); + Ui::CreatePeerBubble(box, bot), + style::al_top); Ui::AddSkip(content); } Ui::AddSkip(content); @@ -389,7 +387,6 @@ void SendCreditsBox( box, SendCreditsConfirmText(session, form.get()), st::creditsBoxAbout), - st::boxRowPadding, style::al_top); Ui::AddSkip(content); Ui::AddSkip(content); diff --git a/Telegram/SourceFiles/boxes/star_gift_box.cpp b/Telegram/SourceFiles/boxes/star_gift_box.cpp index ca2ce8bbcf..94559edf4f 100644 --- a/Telegram/SourceFiles/boxes/star_gift_box.cpp +++ b/Telegram/SourceFiles/boxes/star_gift_box.cpp @@ -3151,10 +3151,9 @@ void GiftBox( && uniqueDisallowed; content->add( - object_ptr>( - content, - object_ptr(content, peer, stUser)) - )->entity()->setClickedCallback([=] { window->showPeerInfo(peer); }); + object_ptr(content, peer, stUser), + style::al_top + )->setClickedCallback([=] { window->showPeerInfo(peer); }); AddSkip(content); AddSkip(content); @@ -4919,19 +4918,18 @@ void UpgradeBox( object_ptr(container), st::boxRowPadding + QMargins(0, skip, 0, skip)); const auto checkbox = container->add( - object_ptr>( + object_ptr( container, - object_ptr( - container, - (args.canAddComment - ? tr::lng_gift_upgrade_add_comment(tr::now) - : args.canAddSender - ? tr::lng_gift_upgrade_add_sender(tr::now) - : args.canAddMyComment - ? tr::lng_gift_upgrade_add_my_comment(tr::now) - : tr::lng_gift_upgrade_add_my(tr::now)), - args.addDetailsDefault)), - st::defaultCheckbox.margin)->entity(); + (args.canAddComment + ? tr::lng_gift_upgrade_add_comment(tr::now) + : args.canAddSender + ? tr::lng_gift_upgrade_add_sender(tr::now) + : args.canAddMyComment + ? tr::lng_gift_upgrade_add_my_comment(tr::now) + : tr::lng_gift_upgrade_add_my(tr::now)), + args.addDetailsDefault), + st::defaultCheckbox.margin, + style::al_top); checkbox->checkedChanges() | rpl::start_with_next([=](bool checked) { state->preserveDetails = checked; }, checkbox->lifetime()); diff --git a/Telegram/SourceFiles/boxes/username_box.cpp b/Telegram/SourceFiles/boxes/username_box.cpp index 7df856d8db..24635f9074 100644 --- a/Telegram/SourceFiles/boxes/username_box.cpp +++ b/Telegram/SourceFiles/boxes/username_box.cpp @@ -324,7 +324,7 @@ void UsernamesBox( const auto editor = box->addRow( object_ptr(box, peer), - {}); + style::margins()); editor->setEnabled(!isBot); box->setFocusCallback([=] { editor->setInnerFocus(); }); @@ -366,7 +366,7 @@ void UsernamesBox( !isBot ? [=] { box->scrollToY(0); editor->setInnerFocus(); } : Fn(nullptr)), - {}); + style::margins()); const auto finish = [=] { list->save( diff --git a/Telegram/SourceFiles/calls/calls_box_controller.cpp b/Telegram/SourceFiles/calls/calls_box_controller.cpp index a68484c217..794291dc28 100644 --- a/Telegram/SourceFiles/calls/calls_box_controller.cpp +++ b/Telegram/SourceFiles/calls/calls_box_controller.cpp @@ -825,7 +825,7 @@ void ShowCallsBox(not_null<::Window::SessionController*> window) { object_ptr>( box, object_ptr(box)), - {}); + style::margins()); groupCalls->hide(anim::type::instant); groupCalls->toggleOn(state->groupCallsController.shownValue()); @@ -833,8 +833,7 @@ void ShowCallsBox(not_null<::Window::SessionController*> window) { groupCalls->entity(), tr::lng_call_box_groupcalls_subtitle()); state->groupCallsDelegate.setContent(groupCalls->entity()->add( - object_ptr(box, &state->groupCallsController), - {})); + object_ptr(box, &state->groupCallsController))); state->groupCallsController.setDelegate(&state->groupCallsDelegate); Ui::AddSkip(groupCalls->entity()); Ui::AddDivider(groupCalls->entity()); @@ -853,7 +852,7 @@ void ShowCallsBox(not_null<::Window::SessionController*> window) { const auto content = box->addRow( object_ptr(box, &state->callsController), - {}); + style::margins()); state->callsDelegate.setContent(content); state->callsController.setDelegate(&state->callsDelegate); diff --git a/Telegram/SourceFiles/calls/group/calls_group_common.cpp b/Telegram/SourceFiles/calls/group/calls_group_common.cpp index 008ca1107d..eabcca6a35 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_common.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_common.cpp @@ -116,13 +116,12 @@ void ConferenceCallJoinConfirm( st::boxRowPadding + st::confcallLinkHeaderIconPadding); box->addRow( - object_ptr>( + object_ptr( box, - object_ptr( - box, - tr::lng_confcall_join_title(), - st::boxTitle)), - st::boxRowPadding + st::confcallLinkTitlePadding); + tr::lng_confcall_join_title(), + st::boxTitle), + st::boxRowPadding + st::confcallLinkTitlePadding, + style::al_top); const auto wrapName = [&](not_null peer) { return rpl::single(Ui::Text::Bold(peer->shortName())); }; @@ -323,13 +322,12 @@ void ShowConferenceCallLinkBox( Info::BotStarRef::CreateLinkHeaderIcon(box, &call->session()), st::boxRowPadding + st::confcallLinkHeaderIconPadding); box->addRow( - object_ptr>( + object_ptr( box, - object_ptr( - box, - tr::lng_confcall_link_title(), - st.box ? st.box->title : st::boxTitle)), - st::boxRowPadding + st::confcallLinkTitlePadding); + tr::lng_confcall_link_title(), + st.box ? st.box->title : st::boxTitle), + st::boxRowPadding + st::confcallLinkTitlePadding, + style::al_top); box->addRow( object_ptr( box, diff --git a/Telegram/SourceFiles/calls/group/calls_group_invite_controller.cpp b/Telegram/SourceFiles/calls/group/calls_group_invite_controller.cpp index a79bfa65f3..46fa70f933 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_invite_controller.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_invite_controller.cpp @@ -1042,13 +1042,12 @@ not_null CreateReActivateHeader(not_null parent) { st::boxRowPadding + st::confcallLinkHeaderIconPadding); result->add( - object_ptr>( + object_ptr( result, - object_ptr( - result, - tr::lng_confcall_inactive_title(), - st::boxTitle)), - st::boxRowPadding + st::confcallLinkTitlePadding); + tr::lng_confcall_inactive_title(), + st::boxTitle), + st::boxRowPadding + st::confcallLinkTitlePadding, + style::al_top); result->add( object_ptr( result, diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index 7f7c7f8dcb..cfbb770582 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp @@ -4151,14 +4151,13 @@ void InnerWidget::refreshEmpty() { .name = u"no_chats"_q, .sizeOverride = Size(st::changePhoneIconSize), }); - _emptyList->add(std::move(icon.widget), {}, style::al_top); + _emptyList->add(std::move(icon.widget), style::al_top); Ui::AddSkip(_emptyList); _emptyList->add( object_ptr( _emptyList, tr::lng_no_conversations(), st::dialogEmptyButtonLabel), - {}, style::al_top); if (_state == WidgetState::Default) { icon.animate(anim::repeat::once); diff --git a/Telegram/SourceFiles/dialogs/ui/posts_search_intro.cpp b/Telegram/SourceFiles/dialogs/ui/posts_search_intro.cpp index 8c9c59714d..3ad1f3662e 100644 --- a/Telegram/SourceFiles/dialogs/ui/posts_search_intro.cpp +++ b/Telegram/SourceFiles/dialogs/ui/posts_search_intro.cpp @@ -186,7 +186,6 @@ void PostsSearchIntro::setup() { _content.get(), rpl::single(QString()), st::postsSearchIntroButton), - {}, style::al_top); _button->setTextTransform(Ui::RoundButton::TextTransform::NoTransform); _footer = _content->add( diff --git a/Telegram/SourceFiles/history/view/controls/history_view_draft_options.cpp b/Telegram/SourceFiles/history/view/controls/history_view_draft_options.cpp index 253073f8dc..a1f3d9ae3e 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_draft_options.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_draft_options.cpp @@ -1075,7 +1075,7 @@ void DraftOptionsBox( state->wrap = box->addRow( object_ptr(box, args.history), - {}); + style::margins()); state->wrap->draggingScrollDelta( ) | rpl::start_with_next([=](int delta) { box->scrollByDraggingDelta(delta); diff --git a/Telegram/SourceFiles/history/view/controls/history_view_suggest_options.cpp b/Telegram/SourceFiles/history/view/controls/history_view_suggest_options.cpp index fc4118399b..48125dc169 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_suggest_options.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_suggest_options.cpp @@ -394,7 +394,6 @@ void ChooseSuggestPriceBox( box, std::move(title), st::settingsPremiumUserTitle), - st::boxRowPadding, style::al_top); } diff --git a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_common.cpp b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_common.cpp index 45a539104d..18a9de42aa 100644 --- a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_common.cpp +++ b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_common.cpp @@ -446,13 +446,12 @@ object_ptr StarRefLinkBox( CreateLinkIcon(box, &bot->session(), row.state.users), st::boxRowPadding + st::starrefJoinUserpicsPadding); box->addRow( - object_ptr>( + object_ptr( box, - object_ptr( - box, - tr::lng_star_ref_link_title(), - st::boxTitle)), - st::boxRowPadding + st::starrefJoinTitlePadding); + tr::lng_star_ref_link_title(), + st::boxTitle), + st::boxRowPadding + st::starrefJoinTitlePadding, + style::al_top); box->addRow( object_ptr( box, @@ -470,7 +469,6 @@ object_ptr StarRefLinkBox( FormatForProgramDuration(program.durationMonths), Ui::Text::WithEntities), st::starrefCenteredText), - st::boxRowPadding, style::al_top); Ui::AddSkip(box->verticalLayout(), st::defaultVerticalListSkip * 3); @@ -480,7 +478,6 @@ object_ptr StarRefLinkBox( box, tr::lng_star_ref_link_recipient(), st::starrefCenteredText), - st::boxRowPadding, style::al_top); Ui::AddSkip(box->verticalLayout()); box->addRow(object_ptr::fromRaw( @@ -579,13 +576,12 @@ object_ptr JoinStarRefBox( }, box->lifetime()); box->addRow( - object_ptr>( + object_ptr( box, - object_ptr( - box, - tr::lng_star_ref_title(), - st::boxTitle)), - st::boxRowPadding + st::starrefJoinTitlePadding); + tr::lng_star_ref_title(), + st::boxTitle), + st::boxRowPadding + st::starrefJoinTitlePadding, + style::al_top); box->addRow( object_ptr( box, @@ -599,7 +595,6 @@ object_ptr JoinStarRefBox( FormatForProgramDuration(program.durationMonths), Ui::Text::WithEntities), st::starrefCenteredText), - st::boxRowPadding, style::al_top); Ui::AddSkip(box->verticalLayout(), st::defaultVerticalListSkip * 3); @@ -641,7 +636,6 @@ object_ptr JoinStarRefBox( box, tr::lng_star_ref_link_recipient(), st::starrefCenteredText), - st::boxRowPadding, style::al_top); Ui::AddSkip(box->verticalLayout()); const auto recipientWrap = box->addRow( diff --git a/Telegram/SourceFiles/info/channel_statistics/boosts/create_giveaway_box.cpp b/Telegram/SourceFiles/info/channel_statistics/boosts/create_giveaway_box.cpp index 0c219aa2f1..6be47fdd92 100644 --- a/Telegram/SourceFiles/info/channel_statistics/boosts/create_giveaway_box.cpp +++ b/Telegram/SourceFiles/info/channel_statistics/boosts/create_giveaway_box.cpp @@ -215,7 +215,7 @@ void AddPremiumTopBarWithDefaultTitleBar( + st::defaultVerticalListSkip, st::boxDividerBg, RectPart::Bottom), - {}); + style::margins()); bar->setPaused(true); bar->setRoundEdges(false); bar->setMaximumHeight(st::giveawayGiftCodeTopHeight); @@ -348,12 +348,11 @@ void CreateGiveawayBox( Ui::AddSkip(container); Ui::AddSkip(container); container->add( - object_ptr>( + object_ptr( box, - object_ptr( - box, - tr::lng_contacts_loading(), - st::giveawayLoadingLabel))); + tr::lng_contacts_loading(), + st::giveawayLoadingLabel), + style::al_top); Ui::AddSkip(container); Ui::AddSkip(container); } diff --git a/Telegram/SourceFiles/info/channel_statistics/boosts/giveaway/select_countries_box.cpp b/Telegram/SourceFiles/info/channel_statistics/boosts/giveaway/select_countries_box.cpp index 1faa9289d7..d9cb86645c 100644 --- a/Telegram/SourceFiles/info/channel_statistics/boosts/giveaway/select_countries_box.cpp +++ b/Telegram/SourceFiles/info/channel_statistics/boosts/giveaway/select_countries_box.cpp @@ -177,12 +177,11 @@ void SelectCountriesBox( Ui::AddSkip(container); Ui::AddSkip(container); container->add( - object_ptr>( + object_ptr( container, - object_ptr( - container, - tr::lng_search_messages_none(), - st::membersAbout))); + tr::lng_search_messages_none(), + st::membersAbout), + style::al_top); Ui::AddSkip(container); Ui::AddSkip(container); } diff --git a/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp b/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp index 20445954ce..b53804c5e8 100644 --- a/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp +++ b/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp @@ -140,14 +140,12 @@ void AddHeader( } void AddRecipient(not_null box, const TextWithEntities &t) { - const auto wrap = box->addRow( - object_ptr>( + const auto container = box->addRow( + object_ptr( box, - object_ptr( - box, - rpl::single(QString()), - st::channelEarnHistoryRecipientButton))); - const auto container = wrap->entity(); + rpl::single(QString()), + st::channelEarnHistoryRecipientButton), + style::al_top); const auto label = Ui::CreateChild( container, rpl::single(t), @@ -449,10 +447,10 @@ void InnerWidget::fill() { const auto rect = Rect(icon.size() * 1.4); auto owned = object_ptr(content); owned->resize(rect.size()); + owned->setNaturalWidth(rect.width()); const auto widget = box->addRow( - object_ptr>( - content, - std::move(owned)))->entity(); + std::move(owned), + style::al_top); widget->paintRequest( ) | rpl::start_with_next([=] { auto p = Painter(widget); @@ -465,14 +463,13 @@ void InnerWidget::fill() { } Ui::AddSkip(content); Ui::AddSkip(content); - box->addRow(object_ptr>( + box->addRow(object_ptr( content, - object_ptr( - content, - bot - ? tr::lng_channel_earn_bot_learn_title() - : tr::lng_channel_earn_learn_title(), - st::boxTitle))); + bot + ? tr::lng_channel_earn_bot_learn_title() + : tr::lng_channel_earn_learn_title(), + st::boxTitle), + style::al_top); Ui::AddSkip(content); Ui::AddSkip(content); Ui::AddSkip(content); @@ -540,17 +537,17 @@ void InnerWidget::fill() { Ui::AddSkip(content); { const auto l = box->addRow( - object_ptr>( + object_ptr( content, - object_ptr( - content, - tr::lng_channel_earn_learn_coin_title( - lt_emoji, - rpl::single( - Ui::Text::Link(bigCurrencyIcon, 1)), - Ui::Text::RichLangValue - ), - st::boxTitle)))->entity(); + tr::lng_channel_earn_learn_coin_title( + lt_emoji, + rpl::single( + Ui::Text::Link(bigCurrencyIcon, 1)), + Ui::Text::RichLangValue), + st::boxTitle, + st::defaultPopupMenu, + emojiHelper.context()), + style::al_top); const auto diamonds = l->lifetime().make_state(0); l->setLink(1, std::make_shared([=] { const auto count = (*diamonds); @@ -837,9 +834,8 @@ void InnerWidget::fill() { Ui::AddSkip(container); const auto labels = container->add( - object_ptr>( - container, - object_ptr(container)))->entity(); + object_ptr(container), + style::al_top); const auto majorLabel = Ui::CreateChild( labels, @@ -864,6 +860,8 @@ void InnerWidget::fill() { labels->resize( majorSize.width() + minorSize.width(), majorSize.height()); + labels->setNaturalWidth( + majorSize.width() + minorSize.width()); majorLabel->moveToLeft(0, 0); minorLabel->moveToRight( 0, @@ -873,12 +871,11 @@ void InnerWidget::fill() { Ui::AddSkip(container); container->add( - object_ptr>( + object_ptr( container, - object_ptr( - container, - ToUsd(value, multiplier, 0), - st::channelEarnOverviewSubMinorLabel))); + ToUsd(value, multiplier, 0), + st::channelEarnOverviewSubMinorLabel), + style::al_top); Ui::AddSkip(container); @@ -888,7 +885,8 @@ void InnerWidget::fill() { container, rpl::never(), stButton), - st::boxRowPadding); + st::boxRowPadding, + style::al_justify); const auto label = Ui::CreateChild( button, @@ -1156,9 +1154,8 @@ void InnerWidget::fill() { Ui::AddSkip(box->verticalLayout()); Ui::AddSkip(box->verticalLayout()); const auto labels = box->addRow( - object_ptr>( - box, - object_ptr(box)))->entity(); + object_ptr(box), + style::al_top); const auto majorLabel = Ui::CreateChild( labels, @@ -1187,6 +1184,8 @@ void InnerWidget::fill() { labels->resize( majorSize.width() + minorSize.width(), majorSize.height()); + labels->setNaturalWidth( + majorSize.width() + minorSize.width()); majorLabel->moveToLeft(0, 0); minorLabel->moveToRight( 0, @@ -1194,12 +1193,12 @@ void InnerWidget::fill() { }, box->lifetime()); Ui::AddSkip(box->verticalLayout()); - box->addRow(object_ptr>( - box, + box->addRow( object_ptr( box, dateText, - st::channelEarnHistorySubLabel))); + st::channelEarnHistorySubLabel), + style::al_top); Ui::AddSkip(box->verticalLayout()); Ui::AddSkip(box->verticalLayout()); AddChannelEarnTable( @@ -1208,14 +1207,14 @@ void InnerWidget::fill() { entry); Ui::AddSkip(box->verticalLayout()); Ui::AddSkip(box->verticalLayout()); - box->addRow(object_ptr>( - box, + box->addRow( object_ptr( box, isIn ? tr::lng_channel_earn_history_in_about() : tr::lng_channel_earn_history_out(), - st::channelEarnHistoryDescriptionLabel))); + st::channelEarnHistoryDescriptionLabel), + style::al_top); Ui::AddSkip(box->verticalLayout()); if (isIn) { Ui::AddSkip(box->verticalLayout()); @@ -1226,9 +1225,8 @@ void InnerWidget::fill() { } if (isIn) { box->addRow( - object_ptr>( - box, - Ui::CreatePeerBubble(box, peer))); + Ui::CreatePeerBubble(box, peer), + style::al_top); } const auto closeBox = [=] { box->closeBox(); }; { diff --git a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.cpp b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.cpp index f89ed3b313..7b4c85d6c5 100644 --- a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.cpp +++ b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.cpp @@ -979,30 +979,27 @@ void InnerWidget::refreshAbout() { } else if (collectionCanAdd) { auto about = std::make_unique(this); about->add( - object_ptr>( + object_ptr( about.get(), - object_ptr( - about.get(), - tr::lng_gift_collection_empty_title(), - st::collectionEmptyTitle)), - st::collectionEmptyTitleMargin); + tr::lng_gift_collection_empty_title(), + st::collectionEmptyTitle), + st::collectionEmptyTitleMargin, + style::al_top); about->add( - object_ptr>( + object_ptr( about.get(), - object_ptr( - about.get(), - tr::lng_gift_collection_empty_text(), - st::collectionEmptyText)), - st::collectionEmptyTextMargin); + tr::lng_gift_collection_empty_text(), + st::collectionEmptyText), + st::collectionEmptyTextMargin, + style::al_top); const auto button = about->add( - object_ptr>( + object_ptr( about.get(), - object_ptr( - about.get(), - rpl::single(QString()), - st::collectionEmptyButton)), - st::collectionEmptyAddMargin)->entity(); + rpl::single(QString()), + st::collectionEmptyButton), + st::collectionEmptyAddMargin, + style::al_top); button->setText(tr::lng_gift_collection_add_button( ) | rpl::map([](const QString &text) { return Ui::Text::IconEmoji(&st::collectionAddIcon).append(text); @@ -1081,7 +1078,7 @@ void InnerWidget::editCollectionGifts(int id) { state->descriptor.value(), id, (_all.filter == Filter()) ? _all : Entries()), - {}); + style::margins()); state->changes = content->changes(); content->descriptorChanges( @@ -1505,6 +1502,7 @@ Widget::Widget(QWidget *parent, not_null controller) controller->parentController(), controller->giftsPeer(), _descriptor.value())); + _emptyCollectionShown = _inner->collectionEmptyValue(); _inner->notifyEnabled( ) | rpl::take(1) | rpl::start_with_next([=](bool enabled) { _notifyEnabled = enabled; @@ -1518,7 +1516,10 @@ Widget::Widget(QWidget *parent, not_null controller) scrollTo({ 0, 0 }); }, _inner->lifetime()); - _descriptor.value() | rpl::start_with_next([=] { + rpl::combine( + _descriptor.value(), + _emptyCollectionShown.value() + ) | rpl::start_with_next([=] { refreshBottom(); }, _inner->lifetime()); } @@ -1527,22 +1528,22 @@ void Widget::refreshBottom() { const auto notify = _notifyEnabled.has_value(); const auto descriptor = _descriptor.current(); const auto shownId = descriptor.collectionId; - const auto withButton = shownId && peer()->canManageGifts(); + const auto withButton = shownId + && peer()->canManageGifts() + && !_emptyCollectionShown.current(); const auto wasBottom = _pinnedToBottom ? _pinnedToBottom->height() : 0; delete _pinnedToBottom.data(); if (!notify && !withButton) { setScrollBottomSkip(0); _hasPinnedToBottom = false; } else if (withButton) { - setupBottomButton(wasBottom, _inner->collectionEmptyValue()); + setupBottomButton(wasBottom); } else { setupNotifyCheckbox(wasBottom, *_notifyEnabled); } } -void Widget::setupBottomButton( - int wasBottomHeight, - rpl::producer hidden) { +void Widget::setupBottomButton(int wasBottomHeight) { _pinnedToBottom = Ui::CreateChild>( this, object_ptr(this)); @@ -1561,10 +1562,8 @@ void Widget::setupBottomButton( ) | rpl::map([](const QString &text) { return Ui::Text::IconEmoji(&st::collectionAddIcon).append(text); })); - std::move(hidden) | rpl::start_with_next([=](bool hidden) { - button->setVisible(!hidden); - _hasPinnedToBottom = !hidden; - }, button->lifetime()); + button->show(); + _hasPinnedToBottom = true; button->setClickedCallback([=] { if (const auto id = _descriptor.current().collectionId) { diff --git a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.h b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.h index bf33486e97..5aa3e90fd3 100644 --- a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.h +++ b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.h @@ -105,12 +105,13 @@ private: std::shared_ptr doCreateMemento() override; void setupNotifyCheckbox(int wasBottomHeight, bool enabled); - void setupBottomButton(int wasBottomHeight, rpl::producer hidden); + void setupBottomButton(int wasBottomHeight); void refreshBottom(); InnerWidget *_inner = nullptr; QPointer> _pinnedToBottom; rpl::variable _hasPinnedToBottom; + rpl::variable _emptyCollectionShown; rpl::variable _descriptor; std::optional _notifyEnabled; bool _shown = false; diff --git a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp index 69942551f0..c035c092ae 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp @@ -1985,7 +1985,8 @@ void DetailsFiller::setupMainApp() { _wrap, tr::lng_profile_open_app(), st::infoOpenApp), - st::infoOpenAppMargin); + st::infoOpenAppMargin, + style::al_justify); button->setTextTransform(Ui::RoundButton::TextTransform::NoTransform); const auto user = _peer->asUser(); diff --git a/Telegram/SourceFiles/info/statistics/info_statistics_inner_widget.cpp b/Telegram/SourceFiles/info/statistics/info_statistics_inner_widget.cpp index f02f2f07c6..2c44348561 100644 --- a/Telegram/SourceFiles/info/statistics/info_statistics_inner_widget.cpp +++ b/Telegram/SourceFiles/info/statistics/info_statistics_inner_widget.cpp @@ -590,30 +590,29 @@ void FillLoading( content->add(std::move(icon.widget)); content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - (type == LoadingType::Boosts) - ? tr::lng_stats_boosts_loading() - : (type == LoadingType::Earn) - ? tr::lng_stats_earn_loading() - : tr::lng_stats_loading(), - st::changePhoneTitle)), - st::changePhoneTitlePadding + st::boxRowPadding); + (type == LoadingType::Boosts) + ? tr::lng_stats_boosts_loading() + : (type == LoadingType::Earn) + ? tr::lng_stats_earn_loading() + : tr::lng_stats_loading(), + st::changePhoneTitle), + st::changePhoneTitlePadding + st::boxRowPadding, + style::al_top); content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - (type == LoadingType::Boosts) - ? tr::lng_stats_boosts_loading_subtext() - : (type == LoadingType::Earn) - ? tr::lng_stats_earn_loading_subtext() - : tr::lng_stats_loading_subtext(), - st::statisticsLoadingSubtext)), - st::changePhoneDescriptionPadding + st::boxRowPadding); + (type == LoadingType::Boosts) + ? tr::lng_stats_boosts_loading_subtext() + : (type == LoadingType::Earn) + ? tr::lng_stats_earn_loading_subtext() + : tr::lng_stats_loading_subtext(), + st::statisticsLoadingSubtext), + st::changePhoneDescriptionPadding + st::boxRowPadding, + style::al_top + )->setTryMakeSimilarLines(true); Ui::AddSkip(content, st::settingsBlockedListIconPadding.top()); } diff --git a/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp b/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp index 762f408e3f..75040c96cc 100644 --- a/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp +++ b/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp @@ -586,30 +586,27 @@ void InnerWidget::refreshEmpty() { if (albumCanAdd) { auto empty = object_ptr(this); empty->add( - object_ptr>( + object_ptr( empty.get(), - object_ptr( - empty.get(), - tr::lng_stories_album_empty_title(), - st::collectionEmptyTitle)), - st::collectionEmptyTitleMargin); + tr::lng_stories_album_empty_title(), + st::collectionEmptyTitle), + st::collectionEmptyTitleMargin, + style::al_top); empty->add( - object_ptr>( + object_ptr( empty.get(), - object_ptr( - empty.get(), - tr::lng_stories_album_empty_text(), - st::collectionEmptyText)), - st::collectionEmptyTextMargin); + tr::lng_stories_album_empty_text(), + st::collectionEmptyText), + st::collectionEmptyTextMargin, + style::al_top); const auto button = empty->add( - object_ptr>( + object_ptr( empty.get(), - object_ptr( - empty.get(), - rpl::single(QString()), - st::collectionEmptyButton)), - st::collectionEmptyAddMargin)->entity(); + rpl::single(QString()), + st::collectionEmptyButton), + st::collectionEmptyAddMargin, + style::al_top); button->setText(tr::lng_stories_album_add_button( ) | rpl::map([](const QString &text) { return Ui::Text::IconEmoji(&st::collectionAddIcon).append(text); diff --git a/Telegram/SourceFiles/info/stories/info_stories_widget.cpp b/Telegram/SourceFiles/info/stories/info_stories_widget.cpp index ad33ef4975..203d83cac1 100644 --- a/Telegram/SourceFiles/info/stories/info_stories_widget.cpp +++ b/Telegram/SourceFiles/info/stories/info_stories_widget.cpp @@ -65,6 +65,7 @@ Widget::Widget( controller, _albumId.value(), controller->key().storiesAddToAlbumId())); + _emptyAlbumShown = _inner->albumEmptyValue(); _inner->albumIdChanges() | rpl::start_with_next([=](int id) { controller->showSection( Make(controller->storiesPeer(), id), @@ -76,7 +77,10 @@ Widget::Widget( scrollTo(request); }, _inner->lifetime()); - _albumId.value() | rpl::start_with_next([=] { + rpl::combine( + _albumId.value(), + _emptyAlbumShown.value() + ) | rpl::start_with_next([=] { refreshBottom(); }, _inner->lifetime()); } @@ -133,20 +137,19 @@ void Widget::refreshBottom() { const auto albumId = _albumId.current(); const auto withButton = (albumId != Data::kStoriesAlbumIdSaved) && (albumId != Data::kStoriesAlbumIdArchive) - && controller()->storiesPeer()->canEditStories(); + && controller()->storiesPeer()->canEditStories() + && !_emptyAlbumShown.current(); const auto wasBottom = _pinnedToBottom ? _pinnedToBottom->height() : 0; delete _pinnedToBottom.data(); if (!withButton) { setScrollBottomSkip(0); _hasPinnedToBottom = false; } else { - setupBottomButton(wasBottom, _inner->albumEmptyValue()); + setupBottomButton(wasBottom); } } -void Widget::setupBottomButton( - int wasBottomHeight, - rpl::producer hidden) { +void Widget::setupBottomButton(int wasBottomHeight) { _pinnedToBottom = Ui::CreateChild>( this, object_ptr(this)); @@ -166,10 +169,7 @@ void Widget::setupBottomButton( return Ui::Text::IconEmoji(&st::collectionAddIcon).append(text); })); button->show(); - std::move(hidden) | rpl::start_with_next([=](bool hidden) { - button->setVisible(!hidden); - _hasPinnedToBottom = !hidden; - }, button->lifetime()); + _hasPinnedToBottom = true; button->setClickedCallback([=] { if (const auto id = _albumId.current()) { diff --git a/Telegram/SourceFiles/info/stories/info_stories_widget.h b/Telegram/SourceFiles/info/stories/info_stories_widget.h index 9fcbcd7978..e8cb608600 100644 --- a/Telegram/SourceFiles/info/stories/info_stories_widget.h +++ b/Telegram/SourceFiles/info/stories/info_stories_widget.h @@ -72,7 +72,7 @@ private: void saveState(not_null memento); void restoreState(not_null memento); - void setupBottomButton(int wasBottomHeight, rpl::producer hidden); + void setupBottomButton(int wasBottomHeight); void refreshBottom(); std::shared_ptr doCreateMemento() override; @@ -81,6 +81,7 @@ private: InnerWidget *_inner = nullptr; QPointer> _pinnedToBottom; rpl::variable _hasPinnedToBottom; + rpl::variable _emptyAlbumShown; bool _shown = false; }; diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_bubble_wrap.cpp b/Telegram/SourceFiles/info/userpic/info_userpic_bubble_wrap.cpp index ffb0204fce..afeb8584df 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_bubble_wrap.cpp +++ b/Telegram/SourceFiles/info/userpic/info_userpic_bubble_wrap.cpp @@ -52,10 +52,11 @@ QRect BubbleWrapInnerRect(const QRect &r) { not_null AddBubbleWrap( not_null container, const QSize &size) { - const auto bubble = container->add(object_ptr>( - container, - object_ptr(container)))->entity(); + const auto bubble = container->add( + object_ptr(container), + style::al_top); bubble->resize(size); + bubble->setNaturalWidth(size.width()); auto cached = QImage( size * style::DevicePixelRatio(), diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_colors_editor.cpp b/Telegram/SourceFiles/info/userpic/info_userpic_colors_editor.cpp index fbfa8fb7f3..d1076d99fe 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_colors_editor.cpp +++ b/Telegram/SourceFiles/info/userpic/info_userpic_colors_editor.cpp @@ -245,12 +245,11 @@ object_ptr CreateGradientEditor( std::vector colors; }; const auto preview = container->add( - object_ptr>( + object_ptr( container, - object_ptr( - container, - Size(st::defaultUserpicButton.photoSize), - false)))->entity(); + Size(st::defaultUserpicButton.photoSize), + false), + style::al_top); preview->setDuration(0); if (document) { preview->setDocument(document); diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.cpp b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.cpp index 5728091459..8ee29755da 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.cpp +++ b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.cpp @@ -166,6 +166,7 @@ EmojiUserpic::EmojiUserpic( , _painter(size.width()) , _duration(st::slideWrapDuration) { resize(size); + setNaturalWidth(size.width()); } void EmojiUserpic::setDocument(not_null document) { diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.cpp b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.cpp index 5f77c5512c..2bed5f5620 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.cpp +++ b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_widget.cpp @@ -178,7 +178,7 @@ void ShowGradientEditor( }, }); box->setWidth(content->width()); - box->addRow(std::move(content), {}); + box->addRow(std::move(content), style::margins()); })); } @@ -408,13 +408,12 @@ not_null CreateUserpicBuilder( const auto state = container->lifetime().make_state(); const auto preview = container->add( - object_ptr>( + object_ptr( container, - object_ptr( - container, - Size(st::settingsInfoPhotoSize), - data.isForum)), - st::userpicBuilderEmojiPreviewPadding)->entity(); + Size(st::settingsInfoPhotoSize), + data.isForum), + st::userpicBuilderEmojiPreviewPadding, + style::al_top); if (const auto id = data.documentId) { const auto document = controller->session().data().document(id); if (document && document->sticker()) { @@ -423,13 +422,12 @@ not_null CreateUserpicBuilder( } container->add( - object_ptr>( + object_ptr( container, - object_ptr( - container, - tr::lng_userpic_builder_color_subtitle(), - st::userpicBuilderEmojiSubtitle)), - st::userpicBuilderEmojiSubtitlePadding); + tr::lng_userpic_builder_color_subtitle(), + st::userpicBuilderEmojiSubtitle), + st::userpicBuilderEmojiSubtitlePadding, + style::al_top); const auto paletteBg = Ui::AddBubbleWrap( container, @@ -515,13 +513,12 @@ not_null CreateUserpicBuilder( }, palette->lifetime()); container->add( - object_ptr>( + object_ptr( container, - object_ptr( - container, - tr::lng_userpic_builder_emoji_subtitle(), - st::userpicBuilderEmojiSubtitle)), - st::userpicBuilderEmojiSubtitlePadding); + tr::lng_userpic_builder_emoji_subtitle(), + st::userpicBuilderEmojiSubtitle), + st::userpicBuilderEmojiSubtitlePadding, + style::al_top); const auto selectorBg = Ui::AddBubbleWrap( container, diff --git a/Telegram/SourceFiles/inline_bots/bot_attach_web_view.cpp b/Telegram/SourceFiles/inline_bots/bot_attach_web_view.cpp index 4f21817adc..18744b0982 100644 --- a/Telegram/SourceFiles/inline_bots/bot_attach_web_view.cpp +++ b/Telegram/SourceFiles/inline_bots/bot_attach_web_view.cpp @@ -519,7 +519,6 @@ void ConfirmEmojiStatusAccessBox( rpl::single(name), Ui::Text::RichLangValue), st::botEmojiStatusText), - st::boxRowPadding, style::al_top); box->addButton(tr::lng_bot_emoji_status_access_allow(), [=] { @@ -563,7 +562,6 @@ void ConfirmEmojiStatusBox( box, tr::lng_bot_emoji_status_title(), st::botEmojiStatusTitle), - st::boxRowPadding, style::al_top); AddSkip(box->verticalLayout()); @@ -575,7 +573,6 @@ void ConfirmEmojiStatusBox( rpl::single(Ui::Text::Bold(bot->name())), Ui::Text::RichLangValue), st::botEmojiStatusText), - st::boxRowPadding, style::al_top); AddSkip(box->verticalLayout(), 2 * st::defaultVerticalListSkip); diff --git a/Telegram/SourceFiles/intro/intro_code_input.cpp b/Telegram/SourceFiles/intro/intro_code_input.cpp index a3964d3cf7..476d7ecf91 100644 --- a/Telegram/SourceFiles/intro/intro_code_input.cpp +++ b/Telegram/SourceFiles/intro/intro_code_input.cpp @@ -177,6 +177,7 @@ void CodeInput::setDigitsCountMax(int digitsCount) { + st::introCodeDigitSkip * (digitsCount - 1) + padding.right(), st::introCodeDigitHeight); + setNaturalWidth(width()); for (auto i = 0; i < digitsCount; i++) { const auto widget = Ui::CreateChild(this); diff --git a/Telegram/SourceFiles/intro/intro_email.cpp b/Telegram/SourceFiles/intro/intro_email.cpp index dacc28cc3f..b80077bb17 100644 --- a/Telegram/SourceFiles/intro/intro_email.cpp +++ b/Telegram/SourceFiles/intro/intro_email.cpp @@ -69,11 +69,10 @@ EmailWidget::EmailWidget( }, lifetime()); } - const auto wrap = Settings::CloudPassword::AddWrappedField( + const auto newInput = Settings::CloudPassword::AddWrappedField( content, tr::lng_settings_cloud_login_email_placeholder(), QString()); - const auto newInput = wrap->entity(); Ui::AddSkip(content); const auto error = Settings::CloudPassword::AddError(content, nullptr); newInput->changes() | rpl::start_with_next([=] { diff --git a/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp b/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp index 6bde919a7d..0f6dc3569c 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp @@ -327,11 +327,8 @@ struct Feature { box->setWidth(st::boxWideWidth); box->setStyle(st::storiesStealthBox); box->addRow(MakeLogo(box)); - box->addRow(MakeTitle(box), st::boxRowPadding, style::al_top); - box->addRow( - MakeAbout(box, data->state.value()), - st::boxRowPadding, - style::al_top); + box->addRow(MakeTitle(box), style::al_top); + box->addRow(MakeAbout(box, data->state.value()), style::al_top); box->addRow(MakeFeature(box, FeaturePast())); box->addRow( MakeFeature(box, FeatureNext()), diff --git a/Telegram/SourceFiles/menu/menu_sponsored.cpp b/Telegram/SourceFiles/menu/menu_sponsored.cpp index 656d5053a5..f3637a5149 100644 --- a/Telegram/SourceFiles/menu/menu_sponsored.cpp +++ b/Telegram/SourceFiles/menu/menu_sponsored.cpp @@ -56,6 +56,7 @@ void AboutBox( constexpr auto kUrl = "https://promote.telegram.org"_cs; box->setWidth(st::boxWideWidth); + box->setNoContentMargin(true); const auto isChannel = (phrases == SponsoredPhrases::Channel); const auto isSearch = (phrases == SponsoredPhrases::Search); @@ -73,9 +74,8 @@ void AboutBox( const auto rect = Rect(icon.size() * 1.4); auto owned = object_ptr(content); owned->resize(rect.size()); - const auto widget = box->addRow(object_ptr>( - content, - std::move(owned)))->entity(); + owned->setNaturalWidth(rect.width()); + const auto widget = box->addRow(std::move(owned), style::al_top); widget->paintRequest( ) | rpl::start_with_next([=] { auto p = Painter(widget); @@ -88,17 +88,19 @@ void AboutBox( } Ui::AddSkip(content); Ui::AddSkip(content); - box->addRow(object_ptr>( - content, + box->addRow( object_ptr( content, tr::lng_sponsored_menu_revenued_about(), - st::boxTitle))); + st::boxTitle), + style::al_top); Ui::AddSkip(content); - box->addRow(object_ptr( - content, - tr::lng_sponsored_revenued_subtitle(), - st::channelEarnLearnDescription)); + box->addRow( + object_ptr( + content, + tr::lng_sponsored_revenued_subtitle(), + st::channelEarnLearnDescription), + style::al_top); Ui::AddSkip(content); Ui::AddSkip(content); { @@ -208,12 +210,11 @@ void AboutBox( Ui::AddSkip(content); { box->addRow( - object_ptr>( + object_ptr( content, - object_ptr( - content, - tr::lng_sponsored_revenued_footer_title(), - st::boxTitle))); + tr::lng_sponsored_revenued_footer_title(), + st::boxTitle), + style::al_top); } Ui::AddSkip(content); { diff --git a/Telegram/SourceFiles/passport/passport_panel_password.cpp b/Telegram/SourceFiles/passport/passport_panel_password.cpp index 322179fa63..15163dcbde 100644 --- a/Telegram/SourceFiles/passport/passport_panel_password.cpp +++ b/Telegram/SourceFiles/passport/passport_panel_password.cpp @@ -190,14 +190,13 @@ void PanelNoPassword::setupContent() { style::al_top); const auto iconWrap = _inner->add( - object_ptr>( + object_ptr( _inner, - object_ptr( - _inner, - st::passportPasswordIconHeight))); - iconWrap->entity()->resizeToWidth(st::passportPasswordIcon.width()); + st::passportPasswordIconHeight), + style::al_top); + iconWrap->setNaturalWidth(st::passportPasswordIcon.width()); Ui::CreateChild( - iconWrap->entity(), + iconWrap, st::passportPasswordIcon, QPoint(0, 0)); @@ -225,13 +224,12 @@ void PanelNoPassword::refreshBottom() { style::al_top)); if (pattern.isEmpty()) { const auto button = _inner->add( - object_ptr>( + object_ptr( _inner, - object_ptr( - _inner, - tr::lng_passport_password_create(), - st::defaultBoxButton))); - button->entity()->addClickHandler([=] { + tr::lng_passport_password_create(), + st::defaultBoxButton), + style::al_top); + button->addClickHandler([=] { _controller->setupPassword(); }); } else { diff --git a/Telegram/SourceFiles/payments/ui/payments_form_summary.cpp b/Telegram/SourceFiles/payments/ui/payments_form_summary.cpp index fd93541786..cd7d8a8e23 100644 --- a/Telegram/SourceFiles/payments/ui/payments_form_summary.cpp +++ b/Telegram/SourceFiles/payments/ui/payments_form_summary.cpp @@ -124,7 +124,6 @@ bool FormSummary::showCriticalError(const TextWithEntities &text) { _layout.get(), rpl::single(text), st::paymentsCriticalError), - {}, style::al_top); return true; } diff --git a/Telegram/SourceFiles/payments/ui/payments_reaction_box.cpp b/Telegram/SourceFiles/payments/ui/payments_reaction_box.cpp index eb1366685a..639cd1c70b 100644 --- a/Telegram/SourceFiles/payments/ui/payments_reaction_box.cpp +++ b/Telegram/SourceFiles/payments/ui/payments_reaction_box.cpp @@ -518,13 +518,13 @@ void PaidReactionsBox( state->shownPeer = state->savedShownPeer = barePeerId; }); - const auto named = box->addRow(object_ptr>( - box, + const auto named = box->addRow( object_ptr( box, tr::lng_paid_react_show_in_top(tr::now), - state->shownPeer.current() != 0))); - named->entity()->checkedValue( + state->shownPeer.current() != 0), + style::al_top); + named->checkedValue( ) | rpl::start_with_next([=](bool show) { state->shownPeer = show ? state->savedShownPeer : 0; }, named->lifetime()); diff --git a/Telegram/SourceFiles/settings/business/settings_chat_intro.cpp b/Telegram/SourceFiles/settings/business/settings_chat_intro.cpp index a15e492597..98cffdc6eb 100644 --- a/Telegram/SourceFiles/settings/business/settings_chat_intro.cpp +++ b/Telegram/SourceFiles/settings/business/settings_chat_intro.cpp @@ -560,7 +560,7 @@ void ChatIntro::setupContent( content, session, IntroWithRandomSticker(session, _intro.value())), - {}); + style::margins()); const auto title = AddPartInput( content, diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp index 8d77e3bb15..87e0a2a4d0 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp @@ -126,29 +126,25 @@ void SetupHeader( Ui::AddSkip(content); content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - std::move(subtitle), - st::changePhoneTitle)), - st::changePhoneTitlePadding); + std::move(subtitle), + st::changePhoneTitle), + st::changePhoneTitlePadding, + style::al_top); { const auto &st = st::settingLocalPasscodeDescription; - const auto wrap = content->add( - object_ptr>( + const auto description = content->add( + object_ptr( content, - object_ptr( - content, - v::text::take_marked(std::move(about)), - st, - st::defaultPopupMenu)), - st::changePhoneDescriptionPadding); - wrap->setAttribute(Qt::WA_TransparentForMouseEvents); - wrap->resize( - wrap->width(), - st::settingLocalPasscodeDescriptionHeight); + v::text::take_marked(std::move(about)), + st, + st::defaultPopupMenu), + st::changePhoneDescriptionPadding, + style::al_top); + description->setTryMakeSimilarLines(true); + description->setAttribute(Qt::WA_TransparentForMouseEvents); } } @@ -174,24 +170,24 @@ not_null AddPasswordField( return field; } -not_null*> AddWrappedField( +not_null AddWrappedField( not_null content, rpl::producer &&placeholder, const QString &text) { - return content->add(object_ptr>( - content, + return content->add( object_ptr( content, st::settingLocalPasscodeInputField, std::move(placeholder), - text))); + text), + style::al_top); } not_null AddLinkButton( - not_null*> wrap, + not_null input, rpl::producer &&text) { const auto button = Ui::CreateChild( - wrap->parentWidget(), + input->parentWidget(), QString()); std::move( text @@ -199,9 +195,8 @@ not_null AddLinkButton( button->setText(text); }, button->lifetime()); - wrap->geometryValue( + input->geometryValue( ) | rpl::start_with_next([=](QRect r) { - r.translate(wrap->entity()->pos().x(), 0); button->moveToLeft(r.x(), r.y() + r.height() + st::passcodeTextLine); }, button->lifetime()); return button; @@ -230,13 +225,12 @@ not_null AddDoneButton( not_null content, rpl::producer &&text) { const auto button = content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - std::move(text), - st::changePhoneButton)), - st::settingLocalPasscodeButtonPadding)->entity(); + std::move(text), + st::changePhoneButton), + st::settingLocalPasscodeButtonPadding, + style::al_top); button->setTextTransform(Ui::RoundButton::TextTransform::NoTransform); return button; } diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h index cd6a53b85d..b7480ce11c 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h @@ -11,8 +11,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/box_content_divider.h" namespace Ui { -template -class CenterWrap; class FlatLabel; class InputField; class LinkButton; @@ -61,7 +59,7 @@ void SetupHeader( rpl::producer &&placeholder, const QString &text); -[[nodiscard]] not_null*> AddWrappedField( +[[nodiscard]] not_null AddWrappedField( not_null content, rpl::producer &&placeholder, const QString &text); @@ -75,7 +73,7 @@ void SetupHeader( rpl::producer &&text); [[nodiscard]] not_null AddLinkButton( - not_null*> wrap, + not_null input, rpl::producer &&text); void AddSkipInsteadOfField(not_null content); diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp index f83eb14379..ab1a0fbf8a 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp @@ -84,11 +84,10 @@ void Email::setupContent() { Ui::AddSkip(content, st::settingLocalPasscodeDescriptionBottomSkip); - const auto wrap = AddWrappedField( + const auto newInput = AddWrappedField( content, tr::lng_cloud_password_email(), currentStepDataEmail); - const auto newInput = wrap->entity(); const auto error = AddError(content, nullptr); newInput->changes( ) | rpl::start_with_next([=] { @@ -169,7 +168,7 @@ void Email::setupContent() { }; const auto skip = AddLinkButton( - wrap, + newInput, tr::lng_cloud_password_skip_email()); skip->setClickedCallback([=] { confirm(QString()); diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email_confirm.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email_confirm.cpp index 2e482f7619..e9e5e799c1 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email_confirm.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email_confirm.cpp @@ -155,11 +155,9 @@ void EmailConfirm::setupContent() { content, st::settingLocalPasscodeInputField, tr::lng_change_phone_code_title()); - const auto newInput = objectInput.data(); - const auto wrap = content->add( - object_ptr>( - content, - std::move(objectInput))); + const auto newInput = content->add( + std::move(objectInput), + style::al_top); const auto error = AddError(content, nullptr); newInput->changes( @@ -184,7 +182,9 @@ void EmailConfirm::setupContent() { } }, resendInfo->lifetime()); - const auto resend = AddLinkButton(wrap, tr::lng_cloud_password_resend()); + const auto resend = AddLinkButton( + newInput, + tr::lng_cloud_password_resend()); resend->setClickedCallback([=] { if (_requestLifetime) { return; diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp index 7f59c7a936..b505ffa084 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp @@ -75,11 +75,10 @@ void Hint::setupContent() { Ui::AddSkip(content, st::settingLocalPasscodeDescriptionBottomSkip); - const auto wrap = AddWrappedField( + const auto newInput = AddWrappedField( content, tr::lng_cloud_password_hint(), currentStepDataHint); - const auto newInput = wrap->entity(); const auto error = AddError(content, nullptr); newInput->changes( ) | rpl::start_with_next([=] { @@ -122,7 +121,7 @@ void Hint::setupContent() { }; AddLinkButton( - wrap, + newInput, tr::lng_settings_cloud_password_skip_hint() )->setClickedCallback([=] { save(QString()); diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp index a7dd669b4f..2986c05c4e 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp @@ -170,11 +170,8 @@ void Input::setupValidateGood() { } if (auto owned = CreateValidateGoodIcon(&controller()->session())) { - owned->setParent(content); content->add( - object_ptr>( - content, - std::move(owned)), + std::move(owned), QMargins(0, st::lineWidth * 75, 0, 0)); } @@ -254,10 +251,10 @@ void Input::setupContent() { const auto newInput = AddPasswordField( content, - isCheck + (isCheck ? tr::lng_cloud_password_enter_old() - : tr::lng_cloud_password_enter_new(), - currentStepDataPassword); + : tr::lng_cloud_password_enter_new()), + currentStepDataPassword); const auto reenterInput = isCheck ? (Ui::PasswordInput*)(nullptr) : AddPasswordField( @@ -280,9 +277,12 @@ void Input::setupContent() { tr::lng_signin_hint(tr::now, lt_password_hint, hint), st::defaultFlatLabel); hintInfo->setVisible(!hint.isEmpty()); - error->geometryValue( - ) | rpl::start_with_next([=](const QRect &r) { - hintInfo->setGeometry(r); + rpl::combine( + error->geometryValue(), + newInput->geometryValue() + ) | rpl::start_with_next([=](QRect r, QRect input) { + hintInfo->setGeometry( + { input.x(), r.y(), input.width(), r.height() }); }, hintInfo->lifetime()); error->shownValue( ) | rpl::start_with_next([=](bool shown) { diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_login_email.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_login_email.cpp index ee2de55865..eccada08f8 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_login_email.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_login_email.cpp @@ -63,11 +63,10 @@ void LoginEmail::setupContent() { Ui::AddSkip(content, st::settingLocalPasscodeDescriptionBottomSkip); - const auto wrap = AddWrappedField( + const auto newInput = AddWrappedField( content, tr::lng_settings_cloud_login_email_placeholder(), QString()); - const auto newInput = wrap->entity(); const auto error = AddError(content, nullptr); newInput->changes() | rpl::start_with_next([=] { error->hide(); diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_login_email_confirm.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_login_email_confirm.cpp index 31c4c2aeb6..e3213f95a7 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_login_email_confirm.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_login_email_confirm.cpp @@ -106,11 +106,9 @@ void LoginEmailConfirm::setupContent() { Ui::AddSkip(content, st::settingLocalPasscodeDescriptionBottomSkip); - const auto wrap = content->add( - object_ptr>( - content, - object_ptr(content))); - const auto newInput = wrap->entity(); + const auto newInput = content->add( + object_ptr(content), + style::al_top); newInput->setDigitsCountMax(currentStepDataCodeLength); Ui::AddSkip(content); diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_validate_icon.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_validate_icon.cpp index 7ea244e8ff..d8441c5a8f 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_validate_icon.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_validate_icon.cpp @@ -67,6 +67,7 @@ object_ptr CreateValidateGoodIcon( }, widget->lifetime()); const auto padding = st::settingLocalPasscodeIconPadding; widget->resize((Rect(Size(size)) + padding).size()); + widget->setNaturalWidth(padding.left() + size + padding.right()); return owned; } diff --git a/Telegram/SourceFiles/settings/settings_blocked_peers.cpp b/Telegram/SourceFiles/settings/settings_blocked_peers.cpp index 820e55988d..3ba6000a54 100644 --- a/Telegram/SourceFiles/settings/settings_blocked_peers.cpp +++ b/Telegram/SourceFiles/settings/settings_blocked_peers.cpp @@ -40,15 +40,13 @@ Blocked::Blocked( { auto padding = st::changePhoneIconPadding; padding.setBottom(padding.top()); - _loading = base::make_unique_q>( + _loading = base::make_unique_q>( this, - object_ptr>( + object_ptr( this, - object_ptr( - this, - tr::lng_contacts_loading(), - st::changePhoneDescription), - std::move(padding))); + tr::lng_contacts_loading(), + st::changePhoneDescription), + std::move(padding)); Ui::ResizeFitChild( this, _loading.get(), diff --git a/Telegram/SourceFiles/settings/settings_credits.cpp b/Telegram/SourceFiles/settings/settings_credits.cpp index 6209a4bc94..a11b2dd6cf 100644 --- a/Telegram/SourceFiles/settings/settings_credits.cpp +++ b/Telegram/SourceFiles/settings/settings_credits.cpp @@ -424,13 +424,12 @@ void Credits::setupContent() { { const auto button = content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - nullptr, - st::creditsSettingsBigBalanceButton)), - st::boxRowPadding)->entity(); + nullptr, + st::creditsSettingsBigBalanceButton), + st::boxRowPadding, + style::al_top); button->setContext([&]() -> Ui::Text::MarkedContext { auto customEmojiFactory = [=](const auto &...) { const auto &icon = st::settingsIconAdd; @@ -507,39 +506,37 @@ void Credits::setupContent() { return { .customEmojiFactory = std::move(customEmojiFactory) }; }(); content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - tr::lng_credits_balance_me_count( - lt_emoji, - rpl::single(Ui::MakeCreditsIconEntity()), - lt_amount, - (isCurrency - ? _controller->session().credits().tonBalanceValue() - : _controller->session().credits().balanceValue() - ) | rpl::map( - Lang::FormatCreditsAmountDecimal - ) | rpl::map(Ui::Text::Bold), - Ui::Text::WithEntities), - textSt, - st::defaultPopupMenu, - std::move(context)))); + tr::lng_credits_balance_me_count( + lt_emoji, + rpl::single(Ui::MakeCreditsIconEntity()), + lt_amount, + (isCurrency + ? _controller->session().credits().tonBalanceValue() + : _controller->session().credits().balanceValue() + ) | rpl::map( + Lang::FormatCreditsAmountDecimal + ) | rpl::map(Ui::Text::Bold), + Ui::Text::WithEntities), + textSt, + st::defaultPopupMenu, + std::move(context)), + style::al_top); if (isCurrency) { const auto rate = _controller->session().credits().usdRate(); const auto wrap = content->add( object_ptr>( content, - object_ptr>( + object_ptr( content, - object_ptr( - content, - _controller->session().credits().tonBalanceValue( - ) | rpl::map([=](CreditsAmount value) { - using namespace Info::ChannelEarn; - return value ? ToUsd(value, rate, 3) : QString(); - }), - st::channelEarnOverviewSubMinorLabel)))); + _controller->session().credits().tonBalanceValue( + ) | rpl::map([=](CreditsAmount value) { + using namespace Info::ChannelEarn; + return value ? ToUsd(value, rate, 3) : QString(); + }), + st::channelEarnOverviewSubMinorLabel)), + style::al_top); wrap->toggleOn(_controller->session().credits().tonBalanceValue( ) | rpl::map(rpl::mappers::_1 > CreditsAmount(0))); wrap->finishAnimating(); @@ -615,9 +612,8 @@ void Credits::setupContent() { Ui::AddSkip(container); const auto labels = container->add( - object_ptr>( - container, - object_ptr(container)))->entity(); + object_ptr(container), + style::al_top); const auto majorLabel = Ui::CreateChild( labels, @@ -642,6 +638,8 @@ void Credits::setupContent() { labels->resize( majorSize.width() + minorSize.width(), majorSize.height()); + labels->setNaturalWidth( + majorSize.width() + minorSize.width()); majorLabel->moveToLeft(0, 0); minorLabel->moveToRight( 0, @@ -651,12 +649,11 @@ void Credits::setupContent() { Ui::AddSkip(container); container->add( - object_ptr>( + object_ptr( container, - object_ptr( - container, - ToUsd(value, multiplier, 0), - st::channelEarnOverviewSubMinorLabel))); + ToUsd(value, multiplier, 0), + st::channelEarnOverviewSubMinorLabel), + style::al_top); Ui::AddSkip(container); diff --git a/Telegram/SourceFiles/settings/settings_credits_graphics.cpp b/Telegram/SourceFiles/settings/settings_credits_graphics.cpp index a08d5594d1..5a4162b2db 100644 --- a/Telegram/SourceFiles/settings/settings_credits_graphics.cpp +++ b/Telegram/SourceFiles/settings/settings_credits_graphics.cpp @@ -791,14 +791,13 @@ void BoostCreditsBox( }, widget->lifetime()); } content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - tr::lng_gift_stars_title( - lt_count, - rpl::single(float64(b.credits))), - st::boxTitle))); + tr::lng_gift_stars_title( + lt_count, + rpl::single(float64(b.credits))), + st::boxTitle), + style::al_top); Ui::AddSkip(content); if (b.multiplier) { const auto &st = st::statisticsDetailsBottomCaptionStyle; @@ -862,7 +861,6 @@ void BoostCreditsBox( tr::lng_credits_box_out_about_link(tr::now)), Ui::Text::WithEntities), st::creditsBoxAboutDivider), - st::boxRowPadding, style::al_top); Ui::AddSkip(content); @@ -1263,10 +1261,10 @@ void GenericCreditsEntryBox( Ui::PreloadUniqueGiftResellPrices(session); } } else if (const auto callback = Ui::PaintPreviewCallback(session, e)) { - const auto thumb = content->add(object_ptr>( - content, - GenericEntryPhoto(content, callback, stUser.photoSize))); - AddViewMediaHandler(thumb->entity(), show, e); + const auto thumb = content->add( + GenericEntryPhoto(content, callback, stUser.photoSize), + style::al_top); + AddViewMediaHandler(thumb, show, e); } else if (s.photoId || (e.photoId && !e.subscriptionUntil.isNull())) { if (!(s.cancelled || s.expired || s.cancelledByBot)) { const auto widget = Ui::CreateChild(content); @@ -1279,21 +1277,21 @@ void GenericCreditsEntryBox( owner->photo(photoId), std::move(update)); }; - content->add(object_ptr>( - content, - GenericEntryPhoto(content, callback, stUser.photoSize))); + content->add( + GenericEntryPhoto(content, callback, stUser.photoSize), + style::al_top); } else if (peer && !e.gift && !e.premiumMonthsForStars && !e.postsSearch) { if (e.subscriptionUntil.isNull() && s.until.isNull()) { - content->add(object_ptr>( - content, - object_ptr(content, peer, stUser))); + content->add( + object_ptr(content, peer, stUser), + style::al_top); } else { - content->add(object_ptr>( - content, - SubscriptionUserpic(content, peer, stUser.photoSize))); + content->add( + SubscriptionUserpic(content, peer, stUser.photoSize), + style::al_top); } } else if (e.gift || isPrize || e.premiumMonthsForStars) { struct State final { @@ -1373,13 +1371,13 @@ void GenericCreditsEntryBox( }, icon->lifetime()); } else if (!e.postsSearch) { const auto widget = content->add( - object_ptr>( - content, - object_ptr(content)))->entity(); + object_ptr(content), + style::al_top); using Draw = Fn; const auto draw = widget->lifetime().make_state( Ui::GenerateCreditsPaintUserpicCallback(e)); widget->resize(Size(stUser.photoSize)); + widget->setNaturalWidth(stUser.photoSize); widget->paintRequest( ) | rpl::start_with_next([=] { auto p = Painter(widget); @@ -1434,7 +1432,6 @@ void GenericCreditsEntryBox( ? peer->name() : Ui::GenerateEntryName(e).text), st::creditsBoxAboutTitle), - st::boxRowPadding, style::al_top); Ui::AddSkip(content); @@ -1442,16 +1439,15 @@ void GenericCreditsEntryBox( if (e.bareGiftReleasedById && !e.uniqueGift) { const auto peer = owner->peer(PeerId(e.bareGiftReleasedById)); const auto released = content->add( - object_ptr>( - box, - object_ptr( - content, - tr::lng_credits_box_history_entry_gift_released( - lt_name, - rpl::single(Ui::Text::Link('@' + peer->username())), - Ui::Text::WithEntities), - st::creditsReleasedByLabel))); - released->entity()->setClickHandlerFilter([=](const auto &...) { + object_ptr( + content, + tr::lng_credits_box_history_entry_gift_released( + lt_name, + rpl::single(Ui::Text::Link('@' + peer->username())), + Ui::Text::WithEntities), + st::creditsReleasedByLabel), + style::al_top); + released->setClickHandlerFilter([=](const auto &...) { Ui::GiftReleasedByHandler(peer); return false; }); @@ -1613,7 +1609,6 @@ void GenericCreditsEntryBox( box, rpl::single(e.description), st::creditsBoxAbout), - st::boxRowPadding, style::al_top); } @@ -1669,7 +1664,6 @@ void GenericCreditsEntryBox( : tr::lng_action_gift_got_gift_text))( Ui::Text::WithEntities))), st::creditsBoxAbout), - st::boxRowPadding, style::al_top); about->setClickHandlerFilter([=](const auto &...) { Core::App().iv().openWithIvPreferred( @@ -1707,7 +1701,6 @@ void GenericCreditsEntryBox( std::move(link), Ui::Text::RichLangValue), st::creditsBoxAbout), - st::boxRowPadding, style::al_top); } else if (e.paidMessagesCommission && e.barePeerId) { Ui::AddSkip(content); @@ -1732,7 +1725,6 @@ void GenericCreditsEntryBox( std::move(link), Ui::Text::RichLangValue), st::creditsBoxAbout), - st::boxRowPadding, style::al_top); } @@ -1876,7 +1868,6 @@ void GenericCreditsEntryBox( tr::lng_credits_box_out_about_link(tr::now)), Ui::Text::WithEntities), st::creditsBoxAboutDivider), - st::boxRowPadding, style::al_top); } else if (starGiftCanManage) { const auto hiddenPhrase = giftToChannelCanManage @@ -1929,7 +1920,6 @@ void GenericCreditsEntryBox( box, std::move(text), st::creditsBoxAboutDivider), - st::boxRowPadding, style::al_top); label->setClickHandlerFilter([=](const auto &...) { toggleVisibility(!e.savedToProfile); @@ -1948,7 +1938,6 @@ void GenericCreditsEntryBox( ) | Ui::Text::ToLink(), Ui::Text::WithEntities), st::creditsBoxAboutDivider), - st::boxRowPadding, style::al_top); label->setClickHandlerFilter([=](const auto &...) { UrlClickHandler::Open( @@ -2001,7 +1990,7 @@ void GenericCreditsEntryBox( } else if (s.cancelled || s.cancelledByBot) { label->setTextColorOverride(st::menuIconAttentionColor->c); } - box->addRow(std::move(label), st::boxRowPadding, style::al_top); + box->addRow(std::move(label), style::al_top); } Ui::AddSkip(content); @@ -2404,6 +2393,7 @@ object_ptr GenericEntryPhoto( auto owned = object_ptr(parent); const auto widget = owned.data(); widget->resize(Size(photoSize)); + widget->setNaturalWidth(photoSize); const auto draw = callback( crl::guard(widget, [=] { widget->update(); })); @@ -2453,6 +2443,7 @@ object_ptr SubscriptionUserpic( auto widget = object_ptr(parent); const auto raw = widget.data(); widget->resize(photoSize, photoSize); + widget->setNaturalWidth(photoSize); const auto userpicMedia = Ui::MakeUserpicThumbnail(peer, false); userpicMedia->subscribeToUpdates([=] { raw->update(); }); const auto creditsIconSize = photoSize / 3; @@ -2642,9 +2633,8 @@ void AddWithdrawalWidget( Ui::AddSkip(container); const auto labels = container->add( - object_ptr>( - container, - object_ptr(container)))->entity(); + object_ptr(container), + style::al_top); const auto majorLabel = Ui::CreateChild( labels, @@ -2664,18 +2654,18 @@ void AddWithdrawalWidget( labels->resize( majorSize.width() + icon->width() + skip, majorSize.height()); + labels->setNaturalWidth(majorSize.width() + icon->width() + skip); majorLabel->moveToLeft(icon->width() + skip, 0); }, labels->lifetime()); Ui::ToggleChildrenVisibility(labels, true); Ui::AddSkip(container); container->add( - object_ptr>( + object_ptr( container, - object_ptr( - container, - std::move(usdValue), - st::channelEarnOverviewSubMinorLabel))); + std::move(usdValue), + st::channelEarnOverviewSubMinorLabel), + style::al_top); Ui::AddSkip(container); diff --git a/Telegram/SourceFiles/settings/settings_local_passcode.cpp b/Telegram/SourceFiles/settings/settings_local_passcode.cpp index 75943bcaef..3bab6d26e8 100644 --- a/Telegram/SourceFiles/settings/settings_local_passcode.cpp +++ b/Telegram/SourceFiles/settings/settings_local_passcode.cpp @@ -136,25 +136,24 @@ void LocalPasscodeEnter::setupContent() { Ui::AddSkip(content); content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - isCreate - ? tr::lng_passcode_create_title() - : isCheck - ? tr::lng_passcode_check_title() - : tr::lng_passcode_change_title(), - st::changePhoneTitle)), - st::changePhoneTitlePadding); + isCreate + ? tr::lng_passcode_create_title() + : isCheck + ? tr::lng_passcode_check_title() + : tr::lng_passcode_change_title(), + st::changePhoneTitle), + st::changePhoneTitlePadding, + style::al_top); const auto addDescription = [&](rpl::producer &&text) { const auto &st = st::settingLocalPasscodeDescription; content->add( - object_ptr>( - content, - object_ptr(content, std::move(text), st)), - st::changePhoneDescriptionPadding); + object_ptr(content, std::move(text), st), + st::changePhoneDescriptionPadding, + style::al_top + )->setTryMakeSimilarLines(true); }; addDescription(tr::lng_passcode_about1()); @@ -183,14 +182,13 @@ void LocalPasscodeEnter::setupContent() { const auto addError = [&](not_null input) { const auto error = content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - // Set any text to resize. - tr::lng_language_name(tr::now), - st::settingLocalPasscodeError)), - st::changePhoneDescriptionPadding)->entity(); + // Set any text to resize. + tr::lng_language_name(tr::now), + st::settingLocalPasscodeError), + st::changePhoneDescriptionPadding, + style::al_top); error->hide(); QObject::connect(input.get(), &Ui::MaskedInputField::changed, [=] { error->hide(); @@ -208,17 +206,16 @@ void LocalPasscodeEnter::setupContent() { const auto error = addError(isCheck ? newPasscode : reenterPasscode); const auto button = content->add( - object_ptr>( + object_ptr( content, - object_ptr( - content, - (isCreate - ? tr::lng_passcode_create_button() - : isCheck - ? tr::lng_passcode_check_button() - : tr::lng_passcode_change_button()), - st::changePhoneButton)), - st::settingLocalPasscodeButtonPadding)->entity(); + (isCreate + ? tr::lng_passcode_create_button() + : isCheck + ? tr::lng_passcode_check_button() + : tr::lng_passcode_change_button()), + st::changePhoneButton), + st::settingLocalPasscodeButtonPadding, + style::al_top); button->setTextTransform(Ui::RoundButton::TextTransform::NoTransform); button->setClickedCallback([=] { const auto newText = newPasscode->text(); diff --git a/Telegram/SourceFiles/settings/settings_power_saving.cpp b/Telegram/SourceFiles/settings/settings_power_saving.cpp index beaf466134..6c4e7768da 100644 --- a/Telegram/SourceFiles/settings/settings_power_saving.cpp +++ b/Telegram/SourceFiles/settings/settings_power_saving.cpp @@ -59,7 +59,7 @@ void PowerSavingBox(not_null box) { state->forceDisabledMessage.value()); const auto controlsRaw = checkboxes.data(); - box->addRow(std::move(checkboxes), {}); + box->addRow(std::move(checkboxes), style::margins()); auto automatic = (Ui::SettingsButton*)nullptr; if (batterySaving.has_value()) { diff --git a/Telegram/SourceFiles/settings/settings_websites.cpp b/Telegram/SourceFiles/settings/settings_websites.cpp index f74ae4c800..c910a5c4fb 100644 --- a/Telegram/SourceFiles/settings/settings_websites.cpp +++ b/Telegram/SourceFiles/settings/settings_websites.cpp @@ -112,13 +112,12 @@ void InfoBox( }); const auto userpic = box->addRow( - object_ptr>( + object_ptr( box, - object_ptr( - box, - data.bot, - st::websiteBigUserpic)), - st::sessionBigCoverPadding)->entity(); + data.bot, + st::websiteBigUserpic), + st::sessionBigCoverPadding, + style::al_top); userpic->overrideShape(Ui::PeerUserpicShape::Forum); userpic->setAttribute(Qt::WA_TransparentForMouseEvents); diff --git a/Telegram/SourceFiles/ui/boxes/show_or_premium_box.cpp b/Telegram/SourceFiles/ui/boxes/show_or_premium_box.cpp index 00cfa4b789..f99b9ff439 100644 --- a/Telegram/SourceFiles/ui/boxes/show_or_premium_box.cpp +++ b/Telegram/SourceFiles/ui/boxes/show_or_premium_box.cpp @@ -57,12 +57,10 @@ constexpr auto kShowOrLineOpacity = 0.3; object_ptr MakeShowOrLabel( not_null parent, rpl::producer text) { - auto result = object_ptr>( + auto result = object_ptr( parent, - object_ptr( - parent, - std::move(text), - st::showOrLabel)); + std::move(text), + st::showOrLabel); const auto raw = result.data(); raw->paintRequest( @@ -71,8 +69,7 @@ object_ptr MakeShowOrLabel( const auto full = st::showOrLineWidth; const auto left = (raw->width() - full) / 2; - const auto text = raw->entity()->naturalWidth() - + 2 * st::showOrLabelSkip; + const auto text = raw->naturalWidth() + 2 * st::showOrLabelSkip; const auto fill = (full - text) / 2; const auto stroke = st::lineWidth; const auto top = st::showOrLineTop; @@ -174,7 +171,7 @@ void ShowOrPremiumBox( box->addRow( MakeShowOrLabel(box, std::move(skin.orPremium)), st::showOrLabelPadding + buttonPadding, - style::al_top); + style::al_justify); box->addRow( object_ptr( box, diff --git a/Telegram/SourceFiles/ui/controls/userpic_button.cpp b/Telegram/SourceFiles/ui/controls/userpic_button.cpp index ed382472df..ffd74c3efe 100644 --- a/Telegram/SourceFiles/ui/controls/userpic_button.cpp +++ b/Telegram/SourceFiles/ui/controls/userpic_button.cpp @@ -221,6 +221,7 @@ UserpicButton::~UserpicButton() = default; void UserpicButton::prepare() { resize(_st.size); + setNaturalWidth(_st.size.width()); _notShownYet = _waiting; if (!_waiting) { prepareUserpicPixmap(); diff --git a/Telegram/SourceFiles/ui/widgets/peer_bubble.cpp b/Telegram/SourceFiles/ui/widgets/peer_bubble.cpp index 87ac897d3e..73a7b1bbb8 100644 --- a/Telegram/SourceFiles/ui/widgets/peer_bubble.cpp +++ b/Telegram/SourceFiles/ui/widgets/peer_bubble.cpp @@ -42,9 +42,9 @@ object_ptr CreatePeerBubble( ) | rpl::start_with_next([=]( const QSize &leftSize, const QSize &rightSize) { - peerBubble->resize( - leftSize.width() + rightSize.width() + rect::m::sum::h(padding), - leftSize.height()); + peerBubble->setNaturalWidth( + leftSize.width() + rightSize.width() + rect::m::sum::h(padding)); + peerBubble->resize(peerBubble->naturalWidth(), leftSize.height()); left->moveToLeft(0, 0); right->moveToRight(padding.right() + st::lineWidth, padding.top()); const auto maxRightSize = parent->width() diff --git a/Telegram/lib_ui b/Telegram/lib_ui index f7bca08f41..96481551eb 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit f7bca08f417dd119df4beb7eec5a7bc55d357abf +Subproject commit 96481551eb08ed408cee6548673b2d0d7c529df0