mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 14:17:12 +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,
|
||||
row.message.fullId.msg,
|
||||
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
|
||||
&& history->isForum()
|
||||
&& !row.message.fullId
|
||||
|
@ -558,14 +565,6 @@ void Widget::chosenRow(const ChosenRow &row) {
|
|||
return;
|
||||
} else if (history) {
|
||||
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()
|
||||
? ShowAtUnreadMsgId
|
||||
: row.message.fullId.msg;
|
||||
|
|
|
@ -66,7 +66,7 @@ Content State::next() {
|
|||
if (const auto i = _userpics.find(peer); i != end(_userpics)) {
|
||||
userpic = i->second;
|
||||
} else {
|
||||
userpic = Ui::MakeUserpicThumbnail(peer);
|
||||
userpic = Ui::MakeUserpicThumbnail(peer, true);
|
||||
_userpics.emplace(peer, userpic);
|
||||
}
|
||||
result.elements.push_back({
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace {
|
|||
|
||||
class PeerUserpic final : public DynamicImage {
|
||||
public:
|
||||
explicit PeerUserpic(not_null<PeerData*> peer);
|
||||
PeerUserpic(not_null<PeerData*> peer, bool forceRound);
|
||||
|
||||
QImage image(int size) override;
|
||||
void subscribeToUpdates(Fn<void()> callback) override;
|
||||
|
@ -33,7 +33,7 @@ public:
|
|||
private:
|
||||
struct Subscribed {
|
||||
explicit Subscribed(Fn<void()> callback)
|
||||
: callback(std::move(callback)) {
|
||||
: callback(std::move(callback)) {
|
||||
}
|
||||
|
||||
Ui::PeerUserpicView view;
|
||||
|
@ -49,6 +49,7 @@ private:
|
|||
const not_null<PeerData*> _peer;
|
||||
QImage _frame;
|
||||
std::unique_ptr<Subscribed> _subscribed;
|
||||
bool _forceRound = false;
|
||||
|
||||
};
|
||||
|
||||
|
@ -116,8 +117,9 @@ private:
|
|||
|
||||
};
|
||||
|
||||
PeerUserpic::PeerUserpic(not_null<PeerData*> peer)
|
||||
: _peer(peer) {
|
||||
PeerUserpic::PeerUserpic(not_null<PeerData*> peer, bool forceRound)
|
||||
: _peer(peer)
|
||||
, _forceRound(forceRound) {
|
||||
}
|
||||
|
||||
QImage PeerUserpic::image(int size) {
|
||||
|
@ -135,7 +137,17 @@ QImage PeerUserpic::image(int size) {
|
|||
_frame.fill(Qt::transparent);
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -302,8 +314,9 @@ void EmptyThumbnail::subscribeToUpdates(Fn<void()> callback) {
|
|||
} // namespace
|
||||
|
||||
std::shared_ptr<DynamicImage> MakeUserpicThumbnail(
|
||||
not_null<PeerData*> peer) {
|
||||
return std::make_shared<PeerUserpic>(peer);
|
||||
not_null<PeerData*> peer,
|
||||
bool forceRound) {
|
||||
return std::make_shared<PeerUserpic>(peer, forceRound);
|
||||
}
|
||||
|
||||
std::shared_ptr<DynamicImage> MakeStoryThumbnail(
|
||||
|
|
|
@ -18,7 +18,8 @@ namespace Ui {
|
|||
class DynamicImage;
|
||||
|
||||
[[nodiscard]] std::shared_ptr<DynamicImage> MakeUserpicThumbnail(
|
||||
not_null<PeerData*> peer);
|
||||
not_null<PeerData*> peer,
|
||||
bool forceRound = false);
|
||||
[[nodiscard]] std::shared_ptr<DynamicImage> MakeStoryThumbnail(
|
||||
not_null<Data::Story*> story);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue