diff --git a/Telegram/SourceFiles/api/api_who_reacted.cpp b/Telegram/SourceFiles/api/api_who_reacted.cpp index f610f833d..6c9df39b2 100644 --- a/Telegram/SourceFiles/api/api_who_reacted.cpp +++ b/Telegram/SourceFiles/api/api_who_reacted.cpp @@ -214,7 +214,10 @@ struct State { [[nodiscard]] QImage GenerateUserpic(Userpic &userpic, int size) { size *= style::DevicePixelRatio(); - auto result = userpic.peer->generateUserpicImage(userpic.view, size); + auto result = PeerData::GenerateUserpicImage( + userpic.peer, + userpic.view, + size); result.setDevicePixelRatio(style::DevicePixelRatio()); return result; } diff --git a/Telegram/SourceFiles/boxes/peers/prepare_short_info_box.cpp b/Telegram/SourceFiles/boxes/peers/prepare_short_info_box.cpp index 6c19d4055..363a2e9dc 100644 --- a/Telegram/SourceFiles/boxes/peers/prepare_short_info_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/prepare_short_info_box.cpp @@ -79,7 +79,8 @@ void ProcessUserpic( if (!state->userpicView.cloud) { GenerateImage( state, - peer->generateUserpicImage( + PeerData::GenerateUserpicImage( + peer, state->userpicView, st::shortInfoWidth * style::DevicePixelRatio(), 0), diff --git a/Telegram/SourceFiles/calls/group/calls_group_viewport_opengl.cpp b/Telegram/SourceFiles/calls/group/calls_group_viewport_opengl.cpp index 6f6b07620..9af2a36f4 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_viewport_opengl.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_viewport_opengl.cpp @@ -460,7 +460,8 @@ void Viewport::RendererGL::validateUserpicFrame( return; } const auto size = tile->trackOrUserpicSize(); - tileData.userpicFrame = tile->row()->peer()->generateUserpicImage( + tileData.userpicFrame = PeerData::GenerateUserpicImage( + tile->row()->peer(), tile->row()->ensureUserpicView(), size.width(), 0); diff --git a/Telegram/SourceFiles/calls/group/calls_group_viewport_raster.cpp b/Telegram/SourceFiles/calls/group/calls_group_viewport_raster.cpp index ab335c55c..e8aa42ad8 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_viewport_raster.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_viewport_raster.cpp @@ -77,7 +77,8 @@ void Viewport::RendererSW::validateUserpicFrame( } const auto size = tile->trackOrUserpicSize(); data.userpicFrame = Images::BlurLargeImage( - tile->row()->peer()->generateUserpicImage( + PeerData::GenerateUserpicImage( + tile->row()->peer(), tile->row()->ensureUserpicView(), size.width(), 0), diff --git a/Telegram/SourceFiles/data/data_peer.cpp b/Telegram/SourceFiles/data/data_peer.cpp index 097cfdfa8..bf3a7c84c 100644 --- a/Telegram/SourceFiles/data/data_peer.cpp +++ b/Telegram/SourceFiles/data/data_peer.cpp @@ -437,11 +437,12 @@ InMemoryKey PeerData::userpicUniqueKey(Ui::PeerUserpicView &view) const { : inMemoryKey(_userpic.location()); } -QImage PeerData::generateUserpicImage( +QImage PeerData::GenerateUserpicImage( + not_null peer, Ui::PeerUserpicView &view, int size, - std::optional radius) const { - if (const auto userpic = userpicCloudImage(view)) { + std::optional radius) { + if (const auto userpic = peer->userpicCloudImage(view)) { auto image = userpic->scaled( { size, size }, Qt::IgnoreAspectRatio, @@ -455,7 +456,7 @@ QImage PeerData::generateUserpicImage( return image; } else if (radius) { return round(*radius); - } else if (isForum()) { + } else if (peer->isForum()) { return round(size * Ui::ForumUserpicRadiusMultiplier()); } else { return Images::Circle(std::move(image)); @@ -468,11 +469,12 @@ QImage PeerData::generateUserpicImage( Painter p(&result); if (radius == 0) { - ensureEmptyUserpic()->paintSquare(p, 0, 0, size, size); + peer->ensureEmptyUserpic()->paintSquare(p, 0, 0, size, size); } else if (radius) { - ensureEmptyUserpic()->paintRounded(p, 0, 0, size, size, *radius); - } else if (isForum()) { - ensureEmptyUserpic()->paintRounded( + const auto r = *radius; + peer->ensureEmptyUserpic()->paintRounded(p, 0, 0, size, size, r); + } else if (peer->isForum()) { + peer->ensureEmptyUserpic()->paintRounded( p, 0, 0, @@ -480,7 +482,7 @@ QImage PeerData::generateUserpicImage( size, size * Ui::ForumUserpicRadiusMultiplier()); } else { - ensureEmptyUserpic()->paintCircle(p, 0, 0, size, size); + peer->ensureEmptyUserpic()->paintCircle(p, 0, 0, size, size); } p.end(); diff --git a/Telegram/SourceFiles/data/data_peer.h b/Telegram/SourceFiles/data/data_peer.h index f88d801ce..d252b0c01 100644 --- a/Telegram/SourceFiles/data/data_peer.h +++ b/Telegram/SourceFiles/data/data_peer.h @@ -333,10 +333,11 @@ public: [[nodiscard]] Ui::PeerUserpicView createUserpicView(); [[nodiscard]] bool useEmptyUserpic(Ui::PeerUserpicView &view) const; [[nodiscard]] InMemoryKey userpicUniqueKey(Ui::PeerUserpicView &view) const; - [[nodiscard]] QImage generateUserpicImage( + [[nodiscard]] static QImage GenerateUserpicImage( + not_null peer, Ui::PeerUserpicView &view, int size, - std::optional radius = {}) const; + std::optional radius = {}); [[nodiscard]] ImageLocation userpicLocation() const; static constexpr auto kUnknownPhotoId = PhotoId(0xFFFFFFFFFFFFFFFFULL); diff --git a/Telegram/SourceFiles/data/data_peer_values.cpp b/Telegram/SourceFiles/data/data_peer_values.cpp index 92c1f1d95..c5e26bb0f 100644 --- a/Telegram/SourceFiles/data/data_peer_values.cpp +++ b/Telegram/SourceFiles/data/data_peer_values.cpp @@ -542,10 +542,12 @@ rpl::producer PeerUserpicImageValue( } state->key = key; state->empty = false; - consumer.put_next(peer->generateUserpicImage( - state->view, - size, - radius)); + consumer.put_next( + PeerData::GenerateUserpicImage( + peer, + state->view, + size, + radius)); }; peer->session().changes().peerFlagsValue( peer, diff --git a/Telegram/SourceFiles/dialogs/dialogs_row.cpp b/Telegram/SourceFiles/dialogs/dialogs_row.cpp index 650b4cf93..5a0730f86 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_row.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_row.cpp @@ -118,7 +118,7 @@ constexpr auto kBlurRadius = 24; const auto &partSize = partRect.width(); const auto partSkip = fullSize - partSize; auto result = Images::Circle(BlurredDarkenedPart( - peer->generateUserpicImage(view, fullSize * ratio, 0), + PeerData::GenerateUserpicImage(peer, view, fullSize * ratio, 0), QRect( QPoint(partSkip, partSkip) * ratio, QSize(partSize, partSize) * ratio))); diff --git a/Telegram/SourceFiles/history/view/history_view_group_call_bar.cpp b/Telegram/SourceFiles/history/view/history_view_group_call_bar.cpp index 0b978acb3..1406b7e5b 100644 --- a/Telegram/SourceFiles/history/view/history_view_group_call_bar.cpp +++ b/Telegram/SourceFiles/history/view/history_view_group_call_bar.cpp @@ -142,7 +142,8 @@ rpl::producer GroupCallBarContentByCall( state->someUserpicsNotLoaded = false; for (auto &userpic : state->userpics) { userpic.peer->loadUserpic(); - auto image = userpic.peer->generateUserpicImage( + auto image = PeerData::GenerateUserpicImage( + userpic.peer, userpic.view, userpicSize * style::DevicePixelRatio()); userpic.uniqueKey = userpic.peer->userpicUniqueKey(userpic.view); diff --git a/Telegram/SourceFiles/history/view/history_view_requests_bar.cpp b/Telegram/SourceFiles/history/view/history_view_requests_bar.cpp index 6c3fc478a..e10a50b8a 100644 --- a/Telegram/SourceFiles/history/view/history_view_requests_bar.cpp +++ b/Telegram/SourceFiles/history/view/history_view_requests_bar.cpp @@ -86,7 +86,8 @@ rpl::producer RequestsBarContentByPeer( state->someUserpicsNotLoaded = false; for (auto &userpic : state->userpics) { userpic.peer->loadUserpic(); - auto image = userpic.peer->generateUserpicImage( + auto image = PeerData::GenerateUserpicImage( + userpic.peer, userpic.view, userpicSize * style::DevicePixelRatio()); userpic.uniqueKey = userpic.peer->userpicUniqueKey(userpic.view); diff --git a/Telegram/SourceFiles/media/stories/media_stories_recent_views.cpp b/Telegram/SourceFiles/media/stories/media_stories_recent_views.cpp index e6b53d277..664563725 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_recent_views.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_recent_views.cpp @@ -54,7 +54,8 @@ constexpr auto kLoadViewsPages = 2; static const auto size = st::storiesWhoViewed.userpics.size; static const auto GenerateUserpic = [](Userpic &userpic) { - auto result = userpic.peer->generateUserpicImage( + auto result = PeerData::GenerateUserpicImage( + userpic.peer, userpic.view, size * style::DevicePixelRatio()); result.setDevicePixelRatio(style::DevicePixelRatio()); @@ -522,7 +523,8 @@ void RecentViews::addMenuRow(Data::StoryView entry, const QDateTime &now) { const auto show = _controller->uiShow(); const auto prepare = [&](Ui::PeerUserpicView &view) { const auto size = st::storiesWhoViewed.photoSize; - auto userpic = peer->generateUserpicImage( + auto userpic = PeerData::GenerateUserpicImage( + peer, view, size * style::DevicePixelRatio()); userpic.setDevicePixelRatio(style::DevicePixelRatio()); @@ -636,7 +638,8 @@ void RecentViews::subscribeToMenuUserpicsLoading( const auto update = (entry.key != key); if (update) { const auto size = st::storiesWhoViewed.photoSize; - auto userpic = peer->generateUserpicImage( + auto userpic = PeerData::GenerateUserpicImage( + peer, view, size * style::DevicePixelRatio()); userpic.setDevicePixelRatio(style::DevicePixelRatio()); diff --git a/Telegram/SourceFiles/media/stories/media_stories_sibling.cpp b/Telegram/SourceFiles/media/stories/media_stories_sibling.cpp index 742639851..6e4947ece 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_sibling.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_sibling.cpp @@ -336,7 +336,10 @@ QImage Sibling::userpicImage(const SiblingLayout &layout) { const auto key = _peer->userpicUniqueKey(_userpicView); if (_userpicImage.width() != size || _userpicKey != key) { _userpicKey = key; - _userpicImage = _peer->generateUserpicImage(_userpicView, size); + _userpicImage = PeerData::GenerateUserpicImage( + _peer, + _userpicView, + size); _userpicImage.setDevicePixelRatio(ratio); } return _userpicImage; diff --git a/Telegram/SourceFiles/settings/settings_websites.cpp b/Telegram/SourceFiles/settings/settings_websites.cpp index bff91b155..55bf911da 100644 --- a/Telegram/SourceFiles/settings/settings_websites.cpp +++ b/Telegram/SourceFiles/settings/settings_websites.cpp @@ -235,7 +235,8 @@ PaintRoundImageCallback Row::generatePaintUserpicCallback(bool forceRound) { p.drawImage(QRect(x, y, size, size), userpic.cached); } else { if (_emptyUserpic.isNull()) { - _emptyUserpic = peer->generateUserpicImage( + _emptyUserpic = PeerData::GenerateUserpicImage( + peer, _userpic, size * ratio, size * ratio * Ui::ForumUserpicRadiusMultiplier()); diff --git a/Telegram/SourceFiles/ui/controls/userpic_button.cpp b/Telegram/SourceFiles/ui/controls/userpic_button.cpp index 2ee400c1e..ea0bfa937 100644 --- a/Telegram/SourceFiles/ui/controls/userpic_button.cpp +++ b/Telegram/SourceFiles/ui/controls/userpic_button.cpp @@ -1026,10 +1026,12 @@ void UserpicButton::prepareUserpicPixmap() { true); p.drawImage(QRect(0, 0, size, size), _userpicView.cached); } else { - const auto empty = _peer->generateUserpicImage( + const auto empty = PeerData::GenerateUserpicImage( + _peer, _userpicView, size * ratio, - size * ratio * Ui::ForumUserpicRadiusMultiplier()); + (size * ratio) + * Ui::ForumUserpicRadiusMultiplier()); p.drawImage(QRect(0, 0, size, size), empty); } } else { diff --git a/Telegram/SourceFiles/ui/dynamic_thumbnails.cpp b/Telegram/SourceFiles/ui/dynamic_thumbnails.cpp index bd2ed0b14..868e95cb5 100644 --- a/Telegram/SourceFiles/ui/dynamic_thumbnails.cpp +++ b/Telegram/SourceFiles/ui/dynamic_thumbnails.cpp @@ -245,7 +245,11 @@ QImage PeerUserpic::image(int size) { } else { const auto full = size * style::DevicePixelRatio(); const auto r = full / 2.; - const auto empty = _peer->generateUserpicImage(view, full, r); + const auto empty = PeerData::GenerateUserpicImage( + _peer, + view, + full, + r); p.drawImage(QRect(0, 0, size, size), empty); } } diff --git a/Telegram/SourceFiles/window/notifications_utilities.cpp b/Telegram/SourceFiles/window/notifications_utilities.cpp index 418848c05..e2ef49fed 100644 --- a/Telegram/SourceFiles/window/notifications_utilities.cpp +++ b/Telegram/SourceFiles/window/notifications_utilities.cpp @@ -28,7 +28,7 @@ QImage GenerateUserpic(not_null peer, Ui::PeerUserpicView &view) { ? Ui::EmptyUserpic::GenerateSavedMessages(st::notifyMacPhotoSize) : peer->isRepliesChat() ? Ui::EmptyUserpic::GenerateRepliesMessages(st::notifyMacPhotoSize) - : peer->generateUserpicImage(view, st::notifyMacPhotoSize); + : PeerData::GenerateUserpicImage(peer, view, st::notifyMacPhotoSize); } CachedUserpics::CachedUserpics()