From 19d0bf142cdaa4b38190168dd7a3d7490b2d1875 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 21 Jun 2023 09:34:59 +0400 Subject: [PATCH] Improve empty / archived stories section. --- .../icons/info/info_media_story_empty.png | Bin 0 -> 1534 bytes .../icons/info/info_media_story_empty@2x.png | Bin 0 -> 3435 bytes .../icons/info/info_media_story_empty@3x.png | Bin 0 -> 5763 bytes Telegram/Resources/langs/lang.strings | 1 + .../dialogs/ui/dialogs_stories_content.cpp | 3 +- .../dialogs/ui/dialogs_stories_list.cpp | 8 +- .../dialogs/ui/dialogs_stories_list.h | 1 + Telegram/SourceFiles/info/info.style | 9 +++ .../stories/info_stories_inner_widget.cpp | 74 ++++++++++++------ .../info/stories/info_stories_inner_widget.h | 10 ++- 10 files changed, 73 insertions(+), 33 deletions(-) create mode 100644 Telegram/Resources/icons/info/info_media_story_empty.png create mode 100644 Telegram/Resources/icons/info/info_media_story_empty@2x.png create mode 100644 Telegram/Resources/icons/info/info_media_story_empty@3x.png diff --git a/Telegram/Resources/icons/info/info_media_story_empty.png b/Telegram/Resources/icons/info/info_media_story_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..6196956ba4c9da3760487afaa77a0445271a8be0 GIT binary patch literal 1534 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91V4wp41ONa40RR91KmY&$0BG`XN&o-_Xh}ptRCodHTUjV=Ul_lpi;S74 z44E>Ou_T2TQi>PT3lhnb>BR#{@+jU!Azn-=nF_^|p$rivb5drR=i&Z;|JJ>`?m5o3 z&z{e1?+5l->s#OVTfe=A{eA1(KYl2e!hphn!hphn!ho(aU?2zJPEJm4Zf;&)UhnVk z4-XG=fFv;n0|SGEgoLK1rlqB&ySuwzf3BOG8&gwLiNQ%|USD57H8r)fv-9%u@((Bf z|Nr>-xW2wVJUr~~?pB94K0bbOa?;Sy;N#R5r;a#Ul z3SC`Y7Zw)4&g<)IVPT;VR$E$H9v>g`^74dGF04*RN5_MM1F&;`evaivAY=Xg{V;(Y zFefKRAQOV9#g;TPGXv;bTU$a*D+;uYjm`4%G7RDUfGX61o3^$#fWErA^7Hc(8ZJ0$ zZf+K63JU_hw6qlLz+*^CN)p6?PAheHcYl6<20>+IWjfsvp}@n306SAtQ$iWgX}uvK zA=pqrP*hZuR2_+oj0^|}kjnZuc1K4?!A@Ua-#2oCRl^H;dwWA{z`?;mFe7Xg2L}g( z9pLlz^<}GrYdbSDGkCLrQCV5ZRTuB=tE#GiYcgAAYP3fEt=h!iz&yWp?mf``G-zLAj;+*iCz*4Eb2G+`)4qd^u`#l^)K z*t4^<%+ciM=c5U^LPJ9}HDoBJsW~s@`rNfdM@K`+#KZ)1Rd^?$gt5R=_bN9G#Z+4H z`;!NPh|jgLvB4bK+S(c=yuQ9p-K*R%6jNy>yPt@JVzPvXhcib8kDtjJ#86D#E*3BK zLdi-HO9esLK_o-)x8bp|F`NiEJ3IefEYUAKWU|(B2{!YKo#07HN#R8;4{H!FIQUYc zr>93$;kAPoom>e*$Qc))SXfx_0*Ip$44;f?eD(B|r4h|0P@9#f7Jt27k@d_k( z?C$RN_V#9FWq~ptdn=797On<>;>-_@76R+L@%)Zmp)1jdu^(v|a(I~Q_;cSj7 zl+le=L3@Rmzp0zZsy8p3BS2 z6;i%tproV(3xSfn@HIQ6w7tC@9Ep?uVrOSpR8%C#qf{D(L`$H;jNaMV!NWj8It?B< zR*8^;hsOYi7VO~N2TA*KWPu)&&`F$_R#@rag(N2@(<6~@t1JN7A@K_hY`lYC_Pyhe` literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/info/info_media_story_empty@2x.png b/Telegram/Resources/icons/info/info_media_story_empty@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c3e6997cd164e77196d4c0d1be72b22a29494871 GIT binary patch literal 3435 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 xpdsZ5E2cI1SDyagsOS3s literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/info/info_media_story_empty@3x.png b/Telegram/Resources/icons/info/info_media_story_empty@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b6422809dcbdc0a470834b91e6923a3f08542494 GIT binary patch literal 5763 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 KpisSelf(), }); } @@ -419,7 +420,7 @@ rpl::producer LastForPeer(not_null peer) { return; } auto resolving = false; - auto result = Content(); + auto result = Content{ .full = true }; for (const auto id : ids) { const auto storyId = FullStoryId{ peerId, id }; const auto maybe = stories->lookup(storyId); diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp index b630d9b64..811fbc033 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp @@ -763,9 +763,11 @@ void List::contextMenuEvent(QContextMenuEvent *e) { const auto id = item.element.id; const auto hidden = item.element.hidden; - _menu->addAction(tr::lng_context_view_profile(tr::now), [=] { - _showProfileRequests.fire_copy(id); - }); + if (item.element.profile) { + _menu->addAction(tr::lng_context_view_profile(tr::now), [=] { + _showProfileRequests.fire_copy(id); + }); + } if (!_content.full || hidden) { _menu->addAction(hidden ? tr::lng_stories_show_in_chats(tr::now) diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.h b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.h index f81f90c05..a7826d892 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.h +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.h @@ -36,6 +36,7 @@ struct Element { std::shared_ptr thumbnail; bool unread = false; bool hidden = false; + bool profile = false; bool skipSmall = false; friend inline bool operator==( diff --git a/Telegram/SourceFiles/info/info.style b/Telegram/SourceFiles/info/info.style index f2a9482cb..1b9d1fa4a 100644 --- a/Telegram/SourceFiles/info/info.style +++ b/Telegram/SourceFiles/info/info.style @@ -576,6 +576,7 @@ infoEmptyAudio: icon {{ "info/info_media_audio_empty", infoEmptyFg }}; infoEmptyFile: icon {{ "info/info_media_file_empty", infoEmptyFg }}; infoEmptyVoice: icon {{ "info/info_media_voice_empty", infoEmptyFg }}; infoEmptyLink: icon {{ "info/info_media_link_empty", infoEmptyFg }}; +infoEmptyStories: icon {{ "info/info_media_story_empty", infoEmptyFg }}; infoEmptyIconTop: 120px; infoEmptyLabelTop: 40px; infoEmptyLabelSkip: 20px; @@ -584,6 +585,14 @@ infoEmptyLabel: FlatLabel(defaultFlatLabel) { textFg: windowSubTextFg; } +infoStoriesAboutArchive: FlatLabel(defaultFlatLabel) { + minWidth: 245px; + align: align(top); + textFg: windowSubTextFg; + style: defaultTextStyle; +} +infoStoriesAboutArchivePadding: margins(22px, 8px, 22px, 16px); + editPeerBottomButtonsLayoutMargins: margins(0px, 7px, 0px, 0px); editPeerTopButtonsLayoutSkip: 13px; diff --git a/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp b/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp index 068da1c33..4f7af1f68 100644 --- a/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp +++ b/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp @@ -59,7 +59,7 @@ void EmptyWidget::setFullHeight(rpl::producer fullHeightValue) { ) | rpl::start_with_next([this](int fullHeight) { // Make icon center be on 1/3 height. auto iconCenter = fullHeight / 3; - auto iconHeight = st::infoEmptyFile.height(); + auto iconHeight = st::infoEmptyStories.height(); auto iconTop = iconCenter - iconHeight / 2; _height = iconTop + st::infoEmptyIconTop; resizeToWidth(width()); @@ -81,9 +81,9 @@ int EmptyWidget::resizeGetHeight(int newWidth) { void EmptyWidget::paintEvent(QPaintEvent *e) { auto p = QPainter(this); - const auto iconLeft = (width() - st::infoEmptyFile.width()) / 2; + const auto iconLeft = (width() - st::infoEmptyStories.width()) / 2; const auto iconTop = height() - st::infoEmptyIconTop; - st::infoEmptyFile.paint(p, iconLeft, iconTop, width()); + st::infoEmptyStories.paint(p, iconLeft, iconTop, width()); } InnerWidget::InnerWidget( @@ -99,28 +99,31 @@ InnerWidget::InnerWidget( _list = setupList(); } -void InnerWidget::setupArchive() { +void InnerWidget::setupTop() { const auto key = _controller->key(); const auto peer = key.storiesPeer(); if (peer && peer->isSelf() && key.storiesTab() == Stories::Tab::Saved && _isStackBottom) { - createArchiveButton(); + createButtons(); + } else if (key.storiesTab() == Stories::Tab::Archive) { + createAboutArchive(); } else { - _buttons.destroy(); + _top.destroy(); refreshHeight(); } } -void InnerWidget::createArchiveButton() { - _buttons.create(this); - _buttons->show(); +void InnerWidget::createButtons() { + _top.create(this); + _top->show(); + _topHeight = _top->heightValue(); const auto stories = &_controller->session().data().stories(); const auto self = _controller->session().user(); const auto archive = ::Settings::AddButton( - _buttons, + _top, tr::lng_stories_archive_button(), st::infoSharedMediaButton); archive->addClickHandler([=] { @@ -144,11 +147,11 @@ void InnerWidget::createArchiveButton() { st::infoIconMediaStoriesArchive, st::infoSharedMediaButtonIconPosition)->show(); - const auto recentWrap = _buttons->add( + const auto recentWrap = _top->add( object_ptr>( - _buttons, + _top, ::Settings::CreateButton( - _buttons, + _top, tr::lng_stories_recent_button(), st::infoSharedMediaButton))); @@ -204,16 +207,36 @@ void InnerWidget::createArchiveButton() { return !content.elements.empty(); })); - _buttons->add(object_ptr( - _buttons, + _top->add(object_ptr( + _top, st::infoProfileSkip)); - _buttons->add(object_ptr(_buttons)); + _top->add(object_ptr(_top)); - _buttons->resizeToWidth(width()); - _buttons->heightValue( + _top->resizeToWidth(width()); + _top->heightValue( ) | rpl::start_with_next([=] { refreshHeight(); - }, _buttons->lifetime()); + }, _top->lifetime()); +} + +void InnerWidget::createAboutArchive() { + _top.create(this); + _top->show(); + _topHeight = _top->heightValue(); + + _top->add(object_ptr( + _top, + object_ptr( + _top, + tr::lng_stories_archive_about(), + st::infoStoriesAboutArchive), + st::infoStoriesAboutArchivePadding)); + + _top->resizeToWidth(width()); + _top->heightValue( + ) | rpl::start_with_next([=] { + refreshHeight(); + }, _top->lifetime()); } void InnerWidget::visibleTopBottomUpdated( @@ -277,8 +300,8 @@ int InnerWidget::resizeGetHeight(int newWidth) { _inResize = true; auto guard = gsl::finally([this] { _inResize = false; }); - if (_buttons) { - _buttons->resizeToWidth(newWidth); + if (_top) { + _top->resizeToWidth(newWidth); } _list->resizeToWidth(newWidth); _empty->resizeToWidth(newWidth); @@ -294,9 +317,9 @@ void InnerWidget::refreshHeight() { int InnerWidget::recountHeight() { auto top = 0; - if (_buttons) { - _buttons->moveToLeft(0, top); - top += _buttons->heightNoMargins() - st::lineWidth; + if (_top) { + _top->moveToLeft(0, top); + top += _top->heightNoMargins() - st::lineWidth; } auto listHeight = 0; if (_list) { @@ -321,7 +344,8 @@ void InnerWidget::setScrollHeightValue(rpl::producer value) { _listTops.events_starting_with( _list->topValue() ) | rpl::flatten_latest(), - _1 - _2)); + _topHeight.value(), + _1 - _2 + _3)); } rpl::producer InnerWidget::scrollToRequests() const { diff --git a/Telegram/SourceFiles/info/stories/info_stories_inner_widget.h b/Telegram/SourceFiles/info/stories/info_stories_inner_widget.h index 92814b72e..3e6819af9 100644 --- a/Telegram/SourceFiles/info/stories/info_stories_inner_widget.h +++ b/Telegram/SourceFiles/info/stories/info_stories_inner_widget.h @@ -40,7 +40,7 @@ public: bool showInternal(not_null memento); void setIsStackBottom(bool isStackBottom) { _isStackBottom = isStackBottom; - setupArchive(); + setupTop(); } void saveState(not_null memento); @@ -64,14 +64,15 @@ private: int recountHeight(); void refreshHeight(); - void setupArchive(); - void createArchiveButton(); + void setupTop(); + void createButtons(); + void createAboutArchive(); object_ptr setupList(); const not_null _controller; - object_ptr _buttons = { nullptr }; + object_ptr _top = { nullptr }; object_ptr _list = { nullptr }; object_ptr _empty; @@ -81,6 +82,7 @@ private: rpl::event_stream _scrollToRequests; rpl::event_stream> _selectedLists; rpl::event_stream> _listTops; + rpl::variable _topHeight; };