mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
parent
1024f38944
commit
099482574e
27 changed files with 192 additions and 79 deletions
|
@ -244,8 +244,9 @@ TextWithEntities Media::consumedMessageText() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> Media::createView(
|
std::unique_ptr<HistoryView::Media> Media::createView(
|
||||||
not_null<HistoryView::Element*> message) {
|
not_null<HistoryView::Element*> message,
|
||||||
return createView(message, message->data());
|
HistoryView::Element *replacing) {
|
||||||
|
return createView(message, message->data(), replacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
MediaPhoto::MediaPhoto(
|
MediaPhoto::MediaPhoto(
|
||||||
|
@ -386,7 +387,8 @@ bool MediaPhoto::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaPhoto::createView(
|
std::unique_ptr<HistoryView::Media> MediaPhoto::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
if (_chat) {
|
if (_chat) {
|
||||||
return std::make_unique<HistoryView::Photo>(
|
return std::make_unique<HistoryView::Photo>(
|
||||||
message,
|
message,
|
||||||
|
@ -663,11 +665,15 @@ bool MediaFile::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaFile::createView(
|
std::unique_ptr<HistoryView::Media> MediaFile::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
if (_document->sticker()) {
|
if (_document->sticker()) {
|
||||||
return std::make_unique<HistoryView::UnwrappedMedia>(
|
return std::make_unique<HistoryView::UnwrappedMedia>(
|
||||||
message,
|
message,
|
||||||
std::make_unique<HistoryView::Sticker>(message, _document));
|
std::make_unique<HistoryView::Sticker>(
|
||||||
|
message,
|
||||||
|
_document,
|
||||||
|
replacing));
|
||||||
} else if (_document->isAnimation() || _document->isVideoFile()) {
|
} else if (_document->isAnimation() || _document->isVideoFile()) {
|
||||||
return std::make_unique<HistoryView::Gif>(
|
return std::make_unique<HistoryView::Gif>(
|
||||||
message,
|
message,
|
||||||
|
@ -760,7 +766,8 @@ bool MediaContact::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaContact::createView(
|
std::unique_ptr<HistoryView::Media> MediaContact::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
return std::make_unique<HistoryView::Contact>(
|
return std::make_unique<HistoryView::Contact>(
|
||||||
message,
|
message,
|
||||||
_contact.userId,
|
_contact.userId,
|
||||||
|
@ -840,7 +847,8 @@ bool MediaLocation::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaLocation::createView(
|
std::unique_ptr<HistoryView::Media> MediaLocation::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
return std::make_unique<HistoryView::Location>(
|
return std::make_unique<HistoryView::Location>(
|
||||||
message,
|
message,
|
||||||
_location,
|
_location,
|
||||||
|
@ -900,7 +908,8 @@ bool MediaCall::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaCall::createView(
|
std::unique_ptr<HistoryView::Media> MediaCall::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
return std::make_unique<HistoryView::Call>(message, &_call);
|
return std::make_unique<HistoryView::Call>(message, &_call);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -995,7 +1004,8 @@ bool MediaWebPage::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaWebPage::createView(
|
std::unique_ptr<HistoryView::Media> MediaWebPage::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
return std::make_unique<HistoryView::WebPage>(message, _page);
|
return std::make_unique<HistoryView::WebPage>(message, _page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1086,7 +1096,8 @@ bool MediaGame::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaGame::createView(
|
std::unique_ptr<HistoryView::Media> MediaGame::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
return std::make_unique<HistoryView::Game>(
|
return std::make_unique<HistoryView::Game>(
|
||||||
message,
|
message,
|
||||||
_game,
|
_game,
|
||||||
|
@ -1151,7 +1162,8 @@ bool MediaInvoice::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaInvoice::createView(
|
std::unique_ptr<HistoryView::Media> MediaInvoice::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
return std::make_unique<HistoryView::Invoice>(message, &_invoice);
|
return std::make_unique<HistoryView::Invoice>(message, &_invoice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1217,7 +1229,8 @@ bool MediaPoll::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaPoll::createView(
|
std::unique_ptr<HistoryView::Media> MediaPoll::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
return std::make_unique<HistoryView::Poll>(message, _poll);
|
return std::make_unique<HistoryView::Poll>(message, _poll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1274,7 +1287,8 @@ bool MediaDice::updateSentMedia(const MTPMessageMedia &media) {
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Media> MediaDice::createView(
|
std::unique_ptr<HistoryView::Media> MediaDice::createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) {
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing) {
|
||||||
return std::make_unique<HistoryView::UnwrappedMedia>(
|
return std::make_unique<HistoryView::UnwrappedMedia>(
|
||||||
message,
|
message,
|
||||||
std::make_unique<HistoryView::Dice>(message, this));
|
std::make_unique<HistoryView::Dice>(message, this));
|
||||||
|
|
|
@ -111,9 +111,11 @@ public:
|
||||||
virtual bool updateSentMedia(const MTPMessageMedia &media) = 0;
|
virtual bool updateSentMedia(const MTPMessageMedia &media) = 0;
|
||||||
virtual std::unique_ptr<HistoryView::Media> createView(
|
virtual std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) = 0;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) = 0;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message);
|
not_null<HistoryView::Element*> message,
|
||||||
|
HistoryView::Element *replacing = nullptr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const not_null<HistoryItem*> _parent;
|
const not_null<HistoryItem*> _parent;
|
||||||
|
@ -152,7 +154,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
not_null<PhotoData*> _photo;
|
not_null<PhotoData*> _photo;
|
||||||
|
@ -189,7 +192,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
not_null<DocumentData*> _document;
|
not_null<DocumentData*> _document;
|
||||||
|
@ -218,7 +222,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SharedContact _contact;
|
SharedContact _contact;
|
||||||
|
@ -248,7 +253,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LocationPoint _point;
|
LocationPoint _point;
|
||||||
|
@ -276,7 +282,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
static QString Text(
|
static QString Text(
|
||||||
not_null<HistoryItem*> item,
|
not_null<HistoryItem*> item,
|
||||||
|
@ -312,7 +319,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
not_null<WebPageData*> _page;
|
not_null<WebPageData*> _page;
|
||||||
|
@ -343,7 +351,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
not_null<GameData*> _game;
|
not_null<GameData*> _game;
|
||||||
|
@ -374,7 +383,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Invoice _invoice;
|
Invoice _invoice;
|
||||||
|
@ -401,7 +411,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
not_null<PollData*> _poll;
|
not_null<PollData*> _poll;
|
||||||
|
@ -425,7 +436,8 @@ public:
|
||||||
bool updateSentMedia(const MTPMessageMedia &media) override;
|
bool updateSentMedia(const MTPMessageMedia &media) override;
|
||||||
std::unique_ptr<HistoryView::Media> createView(
|
std::unique_ptr<HistoryView::Media> createView(
|
||||||
not_null<HistoryView::Element*> message,
|
not_null<HistoryView::Element*> message,
|
||||||
not_null<HistoryItem*> realParent) override;
|
not_null<HistoryItem*> realParent,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString _emoji;
|
QString _emoji;
|
||||||
|
|
|
@ -537,13 +537,15 @@ HistoryView::Context InnerWidget::elementContext() {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Element> InnerWidget::elementCreate(
|
std::unique_ptr<HistoryView::Element> InnerWidget::elementCreate(
|
||||||
not_null<HistoryMessage*> message) {
|
not_null<HistoryMessage*> message,
|
||||||
return std::make_unique<HistoryView::Message>(this, message);
|
Element *replacing) {
|
||||||
|
return std::make_unique<HistoryView::Message>(this, message, replacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Element> InnerWidget::elementCreate(
|
std::unique_ptr<HistoryView::Element> InnerWidget::elementCreate(
|
||||||
not_null<HistoryService*> message) {
|
not_null<HistoryService*> message,
|
||||||
return std::make_unique<HistoryView::Service>(this, message);
|
Element *replacing) {
|
||||||
|
return std::make_unique<HistoryView::Service>(this, message, replacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InnerWidget::elementUnderCursor(
|
bool InnerWidget::elementUnderCursor(
|
||||||
|
|
|
@ -89,9 +89,11 @@ public:
|
||||||
// HistoryView::ElementDelegate interface.
|
// HistoryView::ElementDelegate interface.
|
||||||
HistoryView::Context elementContext() override;
|
HistoryView::Context elementContext() override;
|
||||||
std::unique_ptr<HistoryView::Element> elementCreate(
|
std::unique_ptr<HistoryView::Element> elementCreate(
|
||||||
not_null<HistoryMessage*> message) override;
|
not_null<HistoryMessage*> message,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
std::unique_ptr<HistoryView::Element> elementCreate(
|
std::unique_ptr<HistoryView::Element> elementCreate(
|
||||||
not_null<HistoryService*> message) override;
|
not_null<HistoryService*> message,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
bool elementUnderCursor(
|
bool elementUnderCursor(
|
||||||
not_null<const HistoryView::Element*> view) override;
|
not_null<const HistoryView::Element*> view) override;
|
||||||
void elementAnimationAutoplayAsync(
|
void elementAnimationAutoplayAsync(
|
||||||
|
|
|
@ -3364,7 +3364,9 @@ void HistoryBlock::refreshView(not_null<Element*> view) {
|
||||||
Expects(view->block() == this);
|
Expects(view->block() == this);
|
||||||
|
|
||||||
const auto item = view->data();
|
const auto item = view->data();
|
||||||
auto refreshed = item->createView(HistoryInner::ElementDelegate());
|
auto refreshed = item->createView(
|
||||||
|
HistoryInner::ElementDelegate(),
|
||||||
|
view);
|
||||||
|
|
||||||
auto blockIndex = indexInHistory();
|
auto blockIndex = indexInHistory();
|
||||||
auto itemIndex = view->indexInBlock();
|
auto itemIndex = view->indexInBlock();
|
||||||
|
|
|
@ -2367,7 +2367,7 @@ HistoryInner::~HistoryInner() {
|
||||||
for (const auto &item : _animatedStickersPlayed) {
|
for (const auto &item : _animatedStickersPlayed) {
|
||||||
if (const auto view = item->mainView()) {
|
if (const auto view = item->mainView()) {
|
||||||
if (const auto media = view->media()) {
|
if (const auto media = view->media()) {
|
||||||
media->clearStickerLoopPlayed();
|
media->stickerClearLoopPlayed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3314,12 +3314,20 @@ not_null<HistoryView::ElementDelegate*> HistoryInner::ElementDelegate() {
|
||||||
return HistoryView::Context::History;
|
return HistoryView::Context::History;
|
||||||
}
|
}
|
||||||
std::unique_ptr<HistoryView::Element> elementCreate(
|
std::unique_ptr<HistoryView::Element> elementCreate(
|
||||||
not_null<HistoryMessage*> message) override {
|
not_null<HistoryMessage*> message,
|
||||||
return std::make_unique<HistoryView::Message>(this, message);
|
Element *replacing = nullptr) override {
|
||||||
|
return std::make_unique<HistoryView::Message>(
|
||||||
|
this,
|
||||||
|
message,
|
||||||
|
replacing);
|
||||||
}
|
}
|
||||||
std::unique_ptr<HistoryView::Element> elementCreate(
|
std::unique_ptr<HistoryView::Element> elementCreate(
|
||||||
not_null<HistoryService*> message) override {
|
not_null<HistoryService*> message,
|
||||||
return std::make_unique<HistoryView::Service>(this, message);
|
Element *replacing = nullptr) override {
|
||||||
|
return std::make_unique<HistoryView::Service>(
|
||||||
|
this,
|
||||||
|
message,
|
||||||
|
replacing);
|
||||||
}
|
}
|
||||||
bool elementUnderCursor(
|
bool elementUnderCursor(
|
||||||
not_null<const HistoryView::Element*> view) override {
|
not_null<const HistoryView::Element*> view) override {
|
||||||
|
|
|
@ -326,7 +326,8 @@ public:
|
||||||
[[nodiscard]] PeerData *displayFrom() const;
|
[[nodiscard]] PeerData *displayFrom() const;
|
||||||
|
|
||||||
[[nodiscard]] virtual std::unique_ptr<HistoryView::Element> createView(
|
[[nodiscard]] virtual std::unique_ptr<HistoryView::Element> createView(
|
||||||
not_null<HistoryView::ElementDelegate*> delegate) = 0;
|
not_null<HistoryView::ElementDelegate*> delegate,
|
||||||
|
HistoryView::Element *replacing = nullptr) = 0;
|
||||||
|
|
||||||
void updateDate(TimeId newDate);
|
void updateDate(TimeId newDate);
|
||||||
[[nodiscard]] bool canUpdateDate() const;
|
[[nodiscard]] bool canUpdateDate() const;
|
||||||
|
|
|
@ -1387,8 +1387,9 @@ QString HistoryMessage::notificationHeader() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Element> HistoryMessage::createView(
|
std::unique_ptr<HistoryView::Element> HistoryMessage::createView(
|
||||||
not_null<HistoryView::ElementDelegate*> delegate) {
|
not_null<HistoryView::ElementDelegate*> delegate,
|
||||||
return delegate->elementCreate(this);
|
HistoryView::Element *replacing) {
|
||||||
|
return delegate->elementCreate(this, replacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
HistoryMessage::~HistoryMessage() {
|
HistoryMessage::~HistoryMessage() {
|
||||||
|
|
|
@ -168,7 +168,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] std::unique_ptr<HistoryView::Element> createView(
|
[[nodiscard]] std::unique_ptr<HistoryView::Element> createView(
|
||||||
not_null<HistoryView::ElementDelegate*> delegate) override;
|
not_null<HistoryView::ElementDelegate*> delegate,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
~HistoryMessage();
|
~HistoryMessage();
|
||||||
|
|
||||||
|
|
|
@ -562,8 +562,9 @@ QString HistoryService::inReplyText() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Element> HistoryService::createView(
|
std::unique_ptr<HistoryView::Element> HistoryService::createView(
|
||||||
not_null<HistoryView::ElementDelegate*> delegate) {
|
not_null<HistoryView::ElementDelegate*> delegate,
|
||||||
return delegate->elementCreate(this);
|
HistoryView::Element *replacing) {
|
||||||
|
return delegate->elementCreate(this, replacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString HistoryService::fromLinkText() const {
|
QString HistoryService::fromLinkText() const {
|
||||||
|
|
|
@ -105,7 +105,8 @@ public:
|
||||||
QString inReplyText() const override;
|
QString inReplyText() const override;
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Element> createView(
|
std::unique_ptr<HistoryView::Element> createView(
|
||||||
not_null<HistoryView::ElementDelegate*> delegate) override;
|
not_null<HistoryView::ElementDelegate*> delegate,
|
||||||
|
HistoryView::Element *replacing = nullptr) override;
|
||||||
|
|
||||||
~HistoryService();
|
~HistoryService();
|
||||||
|
|
||||||
|
|
|
@ -56,13 +56,15 @@ bool IsAttachedToPreviousInSavedMessages(
|
||||||
|
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Element> SimpleElementDelegate::elementCreate(
|
std::unique_ptr<HistoryView::Element> SimpleElementDelegate::elementCreate(
|
||||||
not_null<HistoryMessage*> message) {
|
not_null<HistoryMessage*> message,
|
||||||
return std::make_unique<HistoryView::Message>(this, message);
|
Element *replacing) {
|
||||||
|
return std::make_unique<HistoryView::Message>(this, message, replacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<HistoryView::Element> SimpleElementDelegate::elementCreate(
|
std::unique_ptr<HistoryView::Element> SimpleElementDelegate::elementCreate(
|
||||||
not_null<HistoryService*> message) {
|
not_null<HistoryService*> message,
|
||||||
return std::make_unique<HistoryView::Service>(this, message);
|
Element *replacing) {
|
||||||
|
return std::make_unique<HistoryView::Service>(this, message, replacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SimpleElementDelegate::elementUnderCursor(
|
bool SimpleElementDelegate::elementUnderCursor(
|
||||||
|
@ -203,14 +205,15 @@ void DateBadge::paint(Painter &p, int y, int w) const {
|
||||||
|
|
||||||
Element::Element(
|
Element::Element(
|
||||||
not_null<ElementDelegate*> delegate,
|
not_null<ElementDelegate*> delegate,
|
||||||
not_null<HistoryItem*> data)
|
not_null<HistoryItem*> data,
|
||||||
|
Element *replacing)
|
||||||
: _delegate(delegate)
|
: _delegate(delegate)
|
||||||
, _data(data)
|
, _data(data)
|
||||||
, _isScheduledUntilOnline(IsItemScheduledUntilOnline(data))
|
, _isScheduledUntilOnline(IsItemScheduledUntilOnline(data))
|
||||||
, _dateTime(_isScheduledUntilOnline ? QDateTime() : ItemDateTime(data))
|
, _dateTime(_isScheduledUntilOnline ? QDateTime() : ItemDateTime(data))
|
||||||
, _context(delegate->elementContext()) {
|
, _context(delegate->elementContext()) {
|
||||||
history()->owner().registerItemView(this);
|
history()->owner().registerItemView(this);
|
||||||
refreshMedia();
|
refreshMedia(replacing);
|
||||||
if (_context == Context::History) {
|
if (_context == Context::History) {
|
||||||
history()->setHasPendingResizedItems();
|
history()->setHasPendingResizedItems();
|
||||||
}
|
}
|
||||||
|
@ -338,7 +341,7 @@ bool Element::isHidden() const {
|
||||||
return isHiddenByGroup();
|
return isHiddenByGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Element::refreshMedia() {
|
void Element::refreshMedia(Element *replacing) {
|
||||||
_flags &= ~Flag::HiddenByGroup;
|
_flags &= ~Flag::HiddenByGroup;
|
||||||
|
|
||||||
const auto item = data();
|
const auto item = data();
|
||||||
|
@ -361,7 +364,7 @@ void Element::refreshMedia() {
|
||||||
}
|
}
|
||||||
const auto session = &history()->session();
|
const auto session = &history()->session();
|
||||||
if (const auto media = _data->media()) {
|
if (const auto media = _data->media()) {
|
||||||
_media = media->createView(this);
|
_media = media->createView(this, replacing);
|
||||||
} else if (_data->isIsolatedEmoji()
|
} else if (_data->isIsolatedEmoji()
|
||||||
&& session->settings().largeEmoji()) {
|
&& session->settings().largeEmoji()) {
|
||||||
const auto emoji = _data->isolatedEmoji();
|
const auto emoji = _data->isolatedEmoji();
|
||||||
|
@ -372,6 +375,7 @@ void Element::refreshMedia() {
|
||||||
std::make_unique<Sticker>(
|
std::make_unique<Sticker>(
|
||||||
this,
|
this,
|
||||||
sticker.document,
|
sticker.document,
|
||||||
|
replacing,
|
||||||
sticker.replacements));
|
sticker.replacements));
|
||||||
} else {
|
} else {
|
||||||
_media = std::make_unique<UnwrappedMedia>(
|
_media = std::make_unique<UnwrappedMedia>(
|
||||||
|
|
|
@ -37,9 +37,11 @@ class ElementDelegate {
|
||||||
public:
|
public:
|
||||||
virtual Context elementContext() = 0;
|
virtual Context elementContext() = 0;
|
||||||
virtual std::unique_ptr<Element> elementCreate(
|
virtual std::unique_ptr<Element> elementCreate(
|
||||||
not_null<HistoryMessage*> message) = 0;
|
not_null<HistoryMessage*> message,
|
||||||
|
Element *replacing = nullptr) = 0;
|
||||||
virtual std::unique_ptr<Element> elementCreate(
|
virtual std::unique_ptr<Element> elementCreate(
|
||||||
not_null<HistoryService*> message) = 0;
|
not_null<HistoryService*> message,
|
||||||
|
Element *replacing = nullptr) = 0;
|
||||||
virtual bool elementUnderCursor(not_null<const Element*> view) = 0;
|
virtual bool elementUnderCursor(not_null<const Element*> view) = 0;
|
||||||
virtual void elementAnimationAutoplayAsync(
|
virtual void elementAnimationAutoplayAsync(
|
||||||
not_null<const Element*> element) = 0;
|
not_null<const Element*> element) = 0;
|
||||||
|
@ -63,9 +65,11 @@ public:
|
||||||
class SimpleElementDelegate : public ElementDelegate {
|
class SimpleElementDelegate : public ElementDelegate {
|
||||||
public:
|
public:
|
||||||
std::unique_ptr<Element> elementCreate(
|
std::unique_ptr<Element> elementCreate(
|
||||||
not_null<HistoryMessage*> message) override;
|
not_null<HistoryMessage*> message,
|
||||||
|
Element *replacing = nullptr) override;
|
||||||
std::unique_ptr<Element> elementCreate(
|
std::unique_ptr<Element> elementCreate(
|
||||||
not_null<HistoryService*> message) override;
|
not_null<HistoryService*> message,
|
||||||
|
Element *replacing = nullptr) override;
|
||||||
bool elementUnderCursor(not_null<const Element*> view) override;
|
bool elementUnderCursor(not_null<const Element*> view) override;
|
||||||
void elementAnimationAutoplayAsync(
|
void elementAnimationAutoplayAsync(
|
||||||
not_null<const Element*> element) override;
|
not_null<const Element*> element) override;
|
||||||
|
@ -134,7 +138,8 @@ class Element
|
||||||
public:
|
public:
|
||||||
Element(
|
Element(
|
||||||
not_null<ElementDelegate*> delegate,
|
not_null<ElementDelegate*> delegate,
|
||||||
not_null<HistoryItem*> data);
|
not_null<HistoryItem*> data,
|
||||||
|
Element *replacing);
|
||||||
|
|
||||||
enum class Flag : uchar {
|
enum class Flag : uchar {
|
||||||
NeedsResize = 0x01,
|
NeedsResize = 0x01,
|
||||||
|
@ -304,7 +309,7 @@ private:
|
||||||
virtual QSize performCountOptimalSize() = 0;
|
virtual QSize performCountOptimalSize() = 0;
|
||||||
virtual QSize performCountCurrentSize(int newWidth) = 0;
|
virtual QSize performCountCurrentSize(int newWidth) = 0;
|
||||||
|
|
||||||
void refreshMedia();
|
void refreshMedia(Element *replacing);
|
||||||
|
|
||||||
const not_null<ElementDelegate*> _delegate;
|
const not_null<ElementDelegate*> _delegate;
|
||||||
const not_null<HistoryItem*> _data;
|
const not_null<HistoryItem*> _data;
|
||||||
|
|
|
@ -1107,13 +1107,15 @@ Context ListWidget::elementContext() {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Element> ListWidget::elementCreate(
|
std::unique_ptr<Element> ListWidget::elementCreate(
|
||||||
not_null<HistoryMessage*> message) {
|
not_null<HistoryMessage*> message,
|
||||||
return std::make_unique<Message>(this, message);
|
Element *replacing) {
|
||||||
|
return std::make_unique<Message>(this, message, replacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Element> ListWidget::elementCreate(
|
std::unique_ptr<Element> ListWidget::elementCreate(
|
||||||
not_null<HistoryService*> message) {
|
not_null<HistoryService*> message,
|
||||||
return std::make_unique<Service>(this, message);
|
Element *replacing) {
|
||||||
|
return std::make_unique<Service>(this, message, replacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ListWidget::elementUnderCursor(
|
bool ListWidget::elementUnderCursor(
|
||||||
|
|
|
@ -184,9 +184,11 @@ public:
|
||||||
// ElementDelegate interface.
|
// ElementDelegate interface.
|
||||||
Context elementContext() override;
|
Context elementContext() override;
|
||||||
std::unique_ptr<Element> elementCreate(
|
std::unique_ptr<Element> elementCreate(
|
||||||
not_null<HistoryMessage*> message) override;
|
not_null<HistoryMessage*> message,
|
||||||
|
Element *replacing = nullptr) override;
|
||||||
std::unique_ptr<Element> elementCreate(
|
std::unique_ptr<Element> elementCreate(
|
||||||
not_null<HistoryService*> message) override;
|
not_null<HistoryService*> message,
|
||||||
|
Element *replacing = nullptr) override;
|
||||||
bool elementUnderCursor(not_null<const Element*> view) override;
|
bool elementUnderCursor(not_null<const Element*> view) override;
|
||||||
void elementAnimationAutoplayAsync(
|
void elementAnimationAutoplayAsync(
|
||||||
not_null<const Element*> view) override;
|
not_null<const Element*> view) override;
|
||||||
|
|
|
@ -201,8 +201,9 @@ LogEntryOriginal::~LogEntryOriginal() = default;
|
||||||
|
|
||||||
Message::Message(
|
Message::Message(
|
||||||
not_null<ElementDelegate*> delegate,
|
not_null<ElementDelegate*> delegate,
|
||||||
not_null<HistoryMessage*> data)
|
not_null<HistoryMessage*> data,
|
||||||
: Element(delegate, data) {
|
Element *replacing)
|
||||||
|
: Element(delegate, data, replacing) {
|
||||||
initLogEntryOriginal();
|
initLogEntryOriginal();
|
||||||
initPsa();
|
initPsa();
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,8 @@ class Message : public Element, public base::has_weak_ptr {
|
||||||
public:
|
public:
|
||||||
Message(
|
Message(
|
||||||
not_null<ElementDelegate*> delegate,
|
not_null<ElementDelegate*> delegate,
|
||||||
not_null<HistoryMessage*> data);
|
not_null<HistoryMessage*> data,
|
||||||
|
Element *replacing);
|
||||||
|
|
||||||
int marginTop() const override;
|
int marginTop() const override;
|
||||||
int marginBottom() const override;
|
int marginBottom() const override;
|
||||||
|
|
|
@ -309,8 +309,9 @@ void serviceColorsUpdated() {
|
||||||
|
|
||||||
Service::Service(
|
Service::Service(
|
||||||
not_null<ElementDelegate*> delegate,
|
not_null<ElementDelegate*> delegate,
|
||||||
not_null<HistoryService*> data)
|
not_null<HistoryService*> data,
|
||||||
: Element(delegate, data) {
|
Element *replacing)
|
||||||
|
: Element(delegate, data, replacing) {
|
||||||
}
|
}
|
||||||
|
|
||||||
not_null<HistoryService*> Service::message() const {
|
not_null<HistoryService*> Service::message() const {
|
||||||
|
|
|
@ -17,7 +17,8 @@ class Service : public Element {
|
||||||
public:
|
public:
|
||||||
Service(
|
Service(
|
||||||
not_null<ElementDelegate*> delegate,
|
not_null<ElementDelegate*> delegate,
|
||||||
not_null<HistoryService*> data);
|
not_null<HistoryService*> data,
|
||||||
|
Element *replacing);
|
||||||
|
|
||||||
int marginTop() const override;
|
int marginTop() const override;
|
||||||
int marginBottom() const override;
|
int marginBottom() const override;
|
||||||
|
|
|
@ -26,8 +26,6 @@ public:
|
||||||
|
|
||||||
ClickHandlerPtr link() override;
|
ClickHandlerPtr link() override;
|
||||||
|
|
||||||
void clearStickerLoopPlayed() override {
|
|
||||||
}
|
|
||||||
bool hasHeavyPart() const override {
|
bool hasHeavyPart() const override {
|
||||||
return (_start ? _start->hasHeavyPart() : false)
|
return (_start ? _start->hasHeavyPart() : false)
|
||||||
|| (_end ? _end->hasHeavyPart() : false);
|
|| (_end ? _end->hasHeavyPart() : false);
|
||||||
|
|
|
@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "history/history_item.h"
|
#include "history/history_item.h"
|
||||||
#include "history/view/history_view_element.h"
|
#include "history/view/history_view_element.h"
|
||||||
#include "history/view/history_view_cursor_state.h"
|
#include "history/view/history_view_cursor_state.h"
|
||||||
|
#include "lottie/lottie_single_player.h"
|
||||||
#include "storage/storage_shared_media.h"
|
#include "storage/storage_shared_media.h"
|
||||||
#include "data/data_document.h"
|
#include "data/data_document.h"
|
||||||
#include "ui/text_options.h"
|
#include "ui/text_options.h"
|
||||||
|
@ -165,6 +166,10 @@ PointState Media::pointState(QPoint point) const {
|
||||||
: PointState::Outside;
|
: PointState::Outside;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<Lottie::SinglePlayer> Media::stickerTakeLottie() {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
TextState Media::getStateGrouped(
|
TextState Media::getStateGrouped(
|
||||||
const QRect &geometry,
|
const QRect &geometry,
|
||||||
RectParts sides,
|
RectParts sides,
|
||||||
|
|
|
@ -24,6 +24,10 @@ enum class SharedMediaType : signed char;
|
||||||
using SharedMediaTypesMask = base::enum_mask<SharedMediaType>;
|
using SharedMediaTypesMask = base::enum_mask<SharedMediaType>;
|
||||||
} // namespace Storage
|
} // namespace Storage
|
||||||
|
|
||||||
|
namespace Lottie {
|
||||||
|
class SinglePlayer;
|
||||||
|
} // namespace Lottie
|
||||||
|
|
||||||
namespace HistoryView {
|
namespace HistoryView {
|
||||||
|
|
||||||
enum class PointState : char;
|
enum class PointState : char;
|
||||||
|
@ -139,8 +143,9 @@ public:
|
||||||
}
|
}
|
||||||
virtual void stopAnimation() {
|
virtual void stopAnimation() {
|
||||||
}
|
}
|
||||||
virtual void clearStickerLoopPlayed() {
|
virtual void stickerClearLoopPlayed() {
|
||||||
}
|
}
|
||||||
|
virtual std::unique_ptr<Lottie::SinglePlayer> stickerTakeLottie();
|
||||||
virtual void checkAnimation() {
|
virtual void checkAnimation() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "history/view/history_view_cursor_state.h"
|
#include "history/view/history_view_cursor_state.h"
|
||||||
#include "history/history_item.h"
|
#include "history/history_item.h"
|
||||||
#include "history/history_item_components.h"
|
#include "history/history_item_components.h"
|
||||||
|
#include "lottie/lottie_single_player.h"
|
||||||
#include "layout.h"
|
#include "layout.h"
|
||||||
#include "facades.h"
|
#include "facades.h"
|
||||||
#include "app.h"
|
#include "app.h"
|
||||||
|
@ -24,6 +25,11 @@ constexpr auto kMaxForwardedBarLines = 4;
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
auto UnwrappedMedia::Content::stickerTakeLottie()
|
||||||
|
-> std::unique_ptr<Lottie::SinglePlayer> {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
UnwrappedMedia::UnwrappedMedia(
|
UnwrappedMedia::UnwrappedMedia(
|
||||||
not_null<Element*> parent,
|
not_null<Element*> parent,
|
||||||
std::unique_ptr<Content> content)
|
std::unique_ptr<Content> content)
|
||||||
|
@ -376,6 +382,10 @@ TextState UnwrappedMedia::textState(QPoint point, StateRequest request) const {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<Lottie::SinglePlayer> UnwrappedMedia::stickerTakeLottie() {
|
||||||
|
return _content->stickerTakeLottie();
|
||||||
|
}
|
||||||
|
|
||||||
int UnwrappedMedia::calculateFullRight(const QRect &inner) const {
|
int UnwrappedMedia::calculateFullRight(const QRect &inner) const {
|
||||||
const auto rightAligned = _parent->hasOutLayout() && !Adaptive::ChatWide();
|
const auto rightAligned = _parent->hasOutLayout() && !Adaptive::ChatWide();
|
||||||
const auto infoWidth = _parent->infoWidth()
|
const auto infoWidth = _parent->infoWidth()
|
||||||
|
|
|
@ -32,8 +32,9 @@ public:
|
||||||
[[nodiscard]] virtual DocumentData *document() {
|
[[nodiscard]] virtual DocumentData *document() {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
virtual void clearStickerLoopPlayed() {
|
virtual void stickerClearLoopPlayed() {
|
||||||
}
|
}
|
||||||
|
virtual std::unique_ptr<Lottie::SinglePlayer> stickerTakeLottie();
|
||||||
virtual bool hasHeavyPart() const {
|
virtual bool hasHeavyPart() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -81,9 +82,10 @@ public:
|
||||||
bool hidesForwardedInfo() const override {
|
bool hidesForwardedInfo() const override {
|
||||||
return _content->hidesForwardedInfo();
|
return _content->hidesForwardedInfo();
|
||||||
}
|
}
|
||||||
void clearStickerLoopPlayed() override {
|
void stickerClearLoopPlayed() override {
|
||||||
_content->clearStickerLoopPlayed();
|
_content->stickerClearLoopPlayed();
|
||||||
}
|
}
|
||||||
|
std::unique_ptr<Lottie::SinglePlayer> stickerTakeLottie() override;
|
||||||
|
|
||||||
bool hasHeavyPart() const override {
|
bool hasHeavyPart() const override {
|
||||||
return _content->hasHeavyPart();
|
return _content->hasHeavyPart();
|
||||||
|
|
|
@ -57,11 +57,22 @@ namespace {
|
||||||
Sticker::Sticker(
|
Sticker::Sticker(
|
||||||
not_null<Element*> parent,
|
not_null<Element*> parent,
|
||||||
not_null<DocumentData*> data,
|
not_null<DocumentData*> data,
|
||||||
|
Element *replacing,
|
||||||
const Lottie::ColorReplacements *replacements)
|
const Lottie::ColorReplacements *replacements)
|
||||||
: _parent(parent)
|
: _parent(parent)
|
||||||
, _data(data)
|
, _data(data)
|
||||||
, _replacements(replacements) {
|
, _replacements(replacements) {
|
||||||
_data->loadThumbnail(parent->data()->fullId());
|
if ((_dataMedia = _data->activeMediaView())) {
|
||||||
|
dataMediaCreated();
|
||||||
|
} else {
|
||||||
|
_data->loadThumbnail(parent->data()->fullId());
|
||||||
|
}
|
||||||
|
if (const auto media = replacing ? replacing->media() : nullptr) {
|
||||||
|
_lottie = media->stickerTakeLottie();
|
||||||
|
if (_lottie) {
|
||||||
|
lottieCreated();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Sticker::~Sticker() {
|
Sticker::~Sticker() {
|
||||||
|
@ -263,6 +274,12 @@ void Sticker::ensureDataMediaCreated() const {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_dataMedia = _data->createMediaView();
|
_dataMedia = _data->createMediaView();
|
||||||
|
dataMediaCreated();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sticker::dataMediaCreated() const {
|
||||||
|
Expects(_dataMedia != nullptr);
|
||||||
|
|
||||||
_dataMedia->goodThumbnailWanted();
|
_dataMedia->goodThumbnailWanted();
|
||||||
_dataMedia->thumbnailWanted(_parent->data()->fullId());
|
_dataMedia->thumbnailWanted(_parent->data()->fullId());
|
||||||
_parent->history()->owner().registerHeavyViewPart(_parent);
|
_parent->history()->owner().registerHeavyViewPart(_parent);
|
||||||
|
@ -282,6 +299,12 @@ void Sticker::setupLottie() {
|
||||||
Stickers::LottieSize::MessageHistory,
|
Stickers::LottieSize::MessageHistory,
|
||||||
_size * cIntRetinaFactor(),
|
_size * cIntRetinaFactor(),
|
||||||
Lottie::Quality::High);
|
Lottie::Quality::High);
|
||||||
|
lottieCreated();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sticker::lottieCreated() {
|
||||||
|
Expects(_lottie != nullptr);
|
||||||
|
|
||||||
_parent->history()->owner().registerHeavyViewPart(_parent);
|
_parent->history()->owner().registerHeavyViewPart(_parent);
|
||||||
|
|
||||||
_lottie->updates(
|
_lottie->updates(
|
||||||
|
@ -315,4 +338,8 @@ void Sticker::unloadLottie() {
|
||||||
_parent->checkHeavyPart();
|
_parent->checkHeavyPart();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr< Lottie::SinglePlayer> Sticker::stickerTakeLottie() {
|
||||||
|
return std::move(_lottie);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace HistoryView
|
} // namespace HistoryView
|
||||||
|
|
|
@ -33,6 +33,7 @@ public:
|
||||||
Sticker(
|
Sticker(
|
||||||
not_null<Element*> parent,
|
not_null<Element*> parent,
|
||||||
not_null<DocumentData*> data,
|
not_null<DocumentData*> data,
|
||||||
|
Element *replacing = nullptr,
|
||||||
const Lottie::ColorReplacements *replacements = nullptr);
|
const Lottie::ColorReplacements *replacements = nullptr);
|
||||||
~Sticker();
|
~Sticker();
|
||||||
|
|
||||||
|
@ -46,9 +47,10 @@ public:
|
||||||
DocumentData *document() override {
|
DocumentData *document() override {
|
||||||
return _data;
|
return _data;
|
||||||
}
|
}
|
||||||
void clearStickerLoopPlayed() override {
|
void stickerClearLoopPlayed() override {
|
||||||
_lottieOncePlayed = false;
|
_lottieOncePlayed = false;
|
||||||
}
|
}
|
||||||
|
std::unique_ptr<Lottie::SinglePlayer> stickerTakeLottie() override;
|
||||||
|
|
||||||
bool hasHeavyPart() const override;
|
bool hasHeavyPart() const override;
|
||||||
void unloadHeavyPart() override;
|
void unloadHeavyPart() override;
|
||||||
|
@ -74,8 +76,10 @@ private:
|
||||||
[[nodiscard]] QPixmap paintedPixmap(bool selected) const;
|
[[nodiscard]] QPixmap paintedPixmap(bool selected) const;
|
||||||
|
|
||||||
void ensureDataMediaCreated() const;
|
void ensureDataMediaCreated() const;
|
||||||
|
void dataMediaCreated() const;
|
||||||
|
|
||||||
void setupLottie();
|
void setupLottie();
|
||||||
|
void lottieCreated();
|
||||||
void unloadLottie();
|
void unloadLottie();
|
||||||
|
|
||||||
const not_null<Element*> _parent;
|
const not_null<Element*> _parent;
|
||||||
|
|
|
@ -550,7 +550,7 @@ void Sticker::prepareThumbnail() const {
|
||||||
}
|
}
|
||||||
_dataMedia->checkStickerSmall();
|
_dataMedia->checkStickerSmall();
|
||||||
if (const auto sticker = _dataMedia->getStickerSmall()) {
|
if (const auto sticker = _dataMedia->getStickerSmall()) {
|
||||||
if (!_lottie && !_thumbLoaded && _dataMedia->loaded()) {
|
if (!_lottie && !_thumbLoaded) {
|
||||||
const auto thumbSize = getThumbSize();
|
const auto thumbSize = getThumbSize();
|
||||||
_thumb = sticker->pix(
|
_thumb = sticker->pix(
|
||||||
thumbSize.width(),
|
thumbSize.width(),
|
||||||
|
|
Loading…
Add table
Reference in a new issue