diff --git a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp index 434ef3dd06..81c12f7487 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp @@ -79,7 +79,11 @@ Gif::Gif( , _data(document) , _caption(st::minPhotoSize - st::msgPadding.left() - st::msgPadding.right()) , _downloadSize(Ui::FormatSizeText(_data->size)) { - setDocumentLinks(_data, realParent); + if (const auto info = _data->sticker(); info && info->set) { + _stickerLink = Sticker::ShowSetHandler(_data); + } else { + setDocumentLinks(_data, realParent); + } setStatusSize(Ui::FileStatusSizeReady); @@ -269,7 +273,9 @@ void Gif::draw(Painter &p, const PaintContext &context) const { ensureDataMediaCreated(); const auto item = _parent->data(); const auto loaded = dataLoaded(); - const auto displayLoading = item->isSending() || _data->displayLoading(); + const auto sticker = _data->sticker(); + const auto displayLoading = !sticker + && (item->isSending() || _data->displayLoading()); const auto st = context.st; const auto sti = context.imageStyle(); const auto stm = context.messageStyle(); @@ -322,7 +328,9 @@ void Gif::draw(Painter &p, const PaintContext &context) const { } updateStatusText(); const auto radial = isRadialAnimation() - || (streamedForWaiting && streamedForWaiting->waitingShown()); + || (!sticker + && streamedForWaiting + && streamedForWaiting->waitingShown()); if (bubble) { if (!_caption.isEmpty()) { @@ -479,7 +487,8 @@ void Gif::draw(Painter &p, const PaintContext &context) const { } if (radial - || (!streamingMode + || (!sticker + && !streamingMode && ((!loaded && !_data->loading()) || !autoplay))) { const auto radialOpacity = (item->isSending() || _data->uploading()) ? 1. @@ -557,9 +566,7 @@ void Gif::draw(Painter &p, const PaintContext &context) const { if (!unwrapped) { drawCornerStatus(p, context, QPoint()); - } - - if (unwrapped) { + } else { if (isRound) { const auto mediaUnread = item->hasUnreadMediaFlag(); auto statusW = st::normalFont->width(_statusText) + 2 * st::msgDateImgPadding.x(); @@ -850,7 +857,9 @@ TextState Gif::textState(QPoint point, StateRequest request) const { } if (QRect(usex + paintx, painty, usew, painth).contains(point)) { ensureDataMediaCreated(); - result.link = _data->uploading() + result.link = _data->sticker() + ? _stickerLink + : _data->uploading() ? _cancell : _realParent->isSending() ? nullptr diff --git a/Telegram/SourceFiles/history/view/media/history_view_gif.h b/Telegram/SourceFiles/history/view/media/history_view_gif.h index 519b857153..95f15308b0 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_gif.h +++ b/Telegram/SourceFiles/history/view/media/history_view_gif.h @@ -184,6 +184,7 @@ private: std::unique_ptr _streamed; mutable std::shared_ptr _dataMedia; mutable std::unique_ptr _videoThumbnailFrame; + ClickHandlerPtr _stickerLink; QString _downloadSize; diff --git a/Telegram/SourceFiles/history/view/media/history_view_sticker.cpp b/Telegram/SourceFiles/history/view/media/history_view_sticker.cpp index d35bba6570..130acf6de8 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_sticker.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_sticker.cpp @@ -275,6 +275,15 @@ QPixmap Sticker::paintedPixmap(const PaintContext &context) const { return QPixmap(); } +ClickHandlerPtr Sticker::ShowSetHandler(not_null document) { + return std::make_shared([=](ClickContext context) { + const auto my = context.other.value(); + if (const auto window = my.sessionWindow.get()) { + StickerSetBox::Show(window, document); + } + }); +} + void Sticker::refreshLink() { if (_link) { return; @@ -288,12 +297,7 @@ void Sticker::refreshLink() { } }); } else if (sticker && sticker->set) { - _link = std::make_shared([document = _data](ClickContext context) { - const auto my = context.other.value(); - if (const auto window = my.sessionWindow.get()) { - StickerSetBox::Show(window, document); - } - }); + _link = ShowSetHandler(_data); } else if (sticker && (_data->dimensions.width() > kStickerSideSize || _data->dimensions.height() > kStickerSideSize) diff --git a/Telegram/SourceFiles/history/view/media/history_view_sticker.h b/Telegram/SourceFiles/history/view/media/history_view_sticker.h index 0e28d26248..89720cbb53 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_sticker.h +++ b/Telegram/SourceFiles/history/view/media/history_view_sticker.h @@ -80,6 +80,8 @@ public: [[nodiscard]] static QSize Size(); [[nodiscard]] static QSize EmojiSize(); + [[nodiscard]] static ClickHandlerPtr ShowSetHandler( + not_null document); private: [[nodiscard]] bool isEmojiSticker() const;