mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Use round thumbnail in forum stories.
This commit is contained in:
parent
38e082422a
commit
137155afd8
4 changed files with 30 additions and 17 deletions
|
@ -528,6 +528,13 @@ void Widget::chosenRow(const ChosenRow &row) {
|
||||||
topic,
|
topic,
|
||||||
row.message.fullId.msg,
|
row.message.fullId.msg,
|
||||||
Window::SectionShow::Way::ClearStack);
|
Window::SectionShow::Way::ClearStack);
|
||||||
|
} else if (history
|
||||||
|
&& row.userpicClick
|
||||||
|
&& (row.message.fullId.msg == ShowAtUnreadMsgId)
|
||||||
|
&& history->peer->hasActiveStories()
|
||||||
|
&& !history->peer->isSelf()) {
|
||||||
|
controller()->openPeerStories(history->peer->id);
|
||||||
|
return;
|
||||||
} else if (history
|
} else if (history
|
||||||
&& history->isForum()
|
&& history->isForum()
|
||||||
&& !row.message.fullId
|
&& !row.message.fullId
|
||||||
|
@ -558,14 +565,6 @@ void Widget::chosenRow(const ChosenRow &row) {
|
||||||
return;
|
return;
|
||||||
} else if (history) {
|
} else if (history) {
|
||||||
const auto peer = history->peer;
|
const auto peer = history->peer;
|
||||||
if (row.message.fullId.msg == ShowAtUnreadMsgId) {
|
|
||||||
if (row.userpicClick
|
|
||||||
&& peer->hasActiveStories()
|
|
||||||
&& !peer->isSelf()) {
|
|
||||||
controller()->openPeerStories(peer->id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const auto showAtMsgId = controller()->uniqueChatsInSearchResults()
|
const auto showAtMsgId = controller()->uniqueChatsInSearchResults()
|
||||||
? ShowAtUnreadMsgId
|
? ShowAtUnreadMsgId
|
||||||
: row.message.fullId.msg;
|
: row.message.fullId.msg;
|
||||||
|
|
|
@ -66,7 +66,7 @@ Content State::next() {
|
||||||
if (const auto i = _userpics.find(peer); i != end(_userpics)) {
|
if (const auto i = _userpics.find(peer); i != end(_userpics)) {
|
||||||
userpic = i->second;
|
userpic = i->second;
|
||||||
} else {
|
} else {
|
||||||
userpic = Ui::MakeUserpicThumbnail(peer);
|
userpic = Ui::MakeUserpicThumbnail(peer, true);
|
||||||
_userpics.emplace(peer, userpic);
|
_userpics.emplace(peer, userpic);
|
||||||
}
|
}
|
||||||
result.elements.push_back({
|
result.elements.push_back({
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace {
|
||||||
|
|
||||||
class PeerUserpic final : public DynamicImage {
|
class PeerUserpic final : public DynamicImage {
|
||||||
public:
|
public:
|
||||||
explicit PeerUserpic(not_null<PeerData*> peer);
|
PeerUserpic(not_null<PeerData*> peer, bool forceRound);
|
||||||
|
|
||||||
QImage image(int size) override;
|
QImage image(int size) override;
|
||||||
void subscribeToUpdates(Fn<void()> callback) override;
|
void subscribeToUpdates(Fn<void()> callback) override;
|
||||||
|
@ -33,7 +33,7 @@ public:
|
||||||
private:
|
private:
|
||||||
struct Subscribed {
|
struct Subscribed {
|
||||||
explicit Subscribed(Fn<void()> callback)
|
explicit Subscribed(Fn<void()> callback)
|
||||||
: callback(std::move(callback)) {
|
: callback(std::move(callback)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Ui::PeerUserpicView view;
|
Ui::PeerUserpicView view;
|
||||||
|
@ -49,6 +49,7 @@ private:
|
||||||
const not_null<PeerData*> _peer;
|
const not_null<PeerData*> _peer;
|
||||||
QImage _frame;
|
QImage _frame;
|
||||||
std::unique_ptr<Subscribed> _subscribed;
|
std::unique_ptr<Subscribed> _subscribed;
|
||||||
|
bool _forceRound = false;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -116,8 +117,9 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
PeerUserpic::PeerUserpic(not_null<PeerData*> peer)
|
PeerUserpic::PeerUserpic(not_null<PeerData*> peer, bool forceRound)
|
||||||
: _peer(peer) {
|
: _peer(peer)
|
||||||
|
, _forceRound(forceRound) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage PeerUserpic::image(int size) {
|
QImage PeerUserpic::image(int size) {
|
||||||
|
@ -135,7 +137,17 @@ QImage PeerUserpic::image(int size) {
|
||||||
_frame.fill(Qt::transparent);
|
_frame.fill(Qt::transparent);
|
||||||
|
|
||||||
auto p = Painter(&_frame);
|
auto p = Painter(&_frame);
|
||||||
_peer->paintUserpic(p, _subscribed->view, 0, 0, size);
|
auto &view = _subscribed->view;
|
||||||
|
if (!_forceRound) {
|
||||||
|
_peer->paintUserpic(p, view, 0, 0, size);
|
||||||
|
} else if (const auto cloud = _peer->userpicCloudImage(view)) {
|
||||||
|
Ui::ValidateUserpicCache(view, cloud, nullptr, size, false);
|
||||||
|
p.drawImage(QRect(0, 0, size, size), view.cached);
|
||||||
|
} else {
|
||||||
|
const auto r = size / 2.;
|
||||||
|
const auto empty = _peer->generateUserpicImage(view, size, r);
|
||||||
|
p.drawImage(QRect(0, 0, size, size), empty);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return _frame;
|
return _frame;
|
||||||
}
|
}
|
||||||
|
@ -302,8 +314,9 @@ void EmptyThumbnail::subscribeToUpdates(Fn<void()> callback) {
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
std::shared_ptr<DynamicImage> MakeUserpicThumbnail(
|
std::shared_ptr<DynamicImage> MakeUserpicThumbnail(
|
||||||
not_null<PeerData*> peer) {
|
not_null<PeerData*> peer,
|
||||||
return std::make_shared<PeerUserpic>(peer);
|
bool forceRound) {
|
||||||
|
return std::make_shared<PeerUserpic>(peer, forceRound);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<DynamicImage> MakeStoryThumbnail(
|
std::shared_ptr<DynamicImage> MakeStoryThumbnail(
|
||||||
|
|
|
@ -18,7 +18,8 @@ namespace Ui {
|
||||||
class DynamicImage;
|
class DynamicImage;
|
||||||
|
|
||||||
[[nodiscard]] std::shared_ptr<DynamicImage> MakeUserpicThumbnail(
|
[[nodiscard]] std::shared_ptr<DynamicImage> MakeUserpicThumbnail(
|
||||||
not_null<PeerData*> peer);
|
not_null<PeerData*> peer,
|
||||||
|
bool forceRound = false);
|
||||||
[[nodiscard]] std::shared_ptr<DynamicImage> MakeStoryThumbnail(
|
[[nodiscard]] std::shared_ptr<DynamicImage> MakeStoryThumbnail(
|
||||||
not_null<Data::Story*> story);
|
not_null<Data::Story*> story);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue