Replaced PeerData::generateUserpicImage with static function.

This commit is contained in:
23rd 2024-09-01 23:38:56 +03:00
parent 5ac80d2655
commit 2b502b22b9
16 changed files with 57 additions and 31 deletions

View file

@ -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;
}

View file

@ -79,7 +79,8 @@ void ProcessUserpic(
if (!state->userpicView.cloud) {
GenerateImage(
state,
peer->generateUserpicImage(
PeerData::GenerateUserpicImage(
peer,
state->userpicView,
st::shortInfoWidth * style::DevicePixelRatio(),
0),

View file

@ -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);

View file

@ -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),

View file

@ -437,11 +437,12 @@ InMemoryKey PeerData::userpicUniqueKey(Ui::PeerUserpicView &view) const {
: inMemoryKey(_userpic.location());
}
QImage PeerData::generateUserpicImage(
QImage PeerData::GenerateUserpicImage(
not_null<PeerData*> peer,
Ui::PeerUserpicView &view,
int size,
std::optional<int> radius) const {
if (const auto userpic = userpicCloudImage(view)) {
std::optional<int> 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();

View file

@ -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<PeerData*> peer,
Ui::PeerUserpicView &view,
int size,
std::optional<int> radius = {}) const;
std::optional<int> radius = {});
[[nodiscard]] ImageLocation userpicLocation() const;
static constexpr auto kUnknownPhotoId = PhotoId(0xFFFFFFFFFFFFFFFFULL);

View file

@ -542,10 +542,12 @@ rpl::producer<QImage> 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,

View file

@ -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)));

View file

@ -142,7 +142,8 @@ rpl::producer<Ui::GroupCallBarContent> 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);

View file

@ -86,7 +86,8 @@ rpl::producer<Ui::RequestsBarContent> 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);

View file

@ -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());

View file

@ -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;

View file

@ -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());

View file

@ -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 {

View file

@ -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);
}
}

View file

@ -28,7 +28,7 @@ QImage GenerateUserpic(not_null<PeerData*> 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()