/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "media/clip/media_clip_reader.h" #include "ui/effects/animations.h" #include "data/data_file_origin.h" #include "ui/rp_widget.h" namespace Data { class PhotoMedia; class DocumentMedia; } // namespace Data namespace Lottie { class SinglePlayer; } // namespace Lottie namespace Window { class SessionController; class MediaPreviewWidget final : public Ui::RpWidget { public: MediaPreviewWidget( QWidget *parent, not_null controller); void showPreview( Data::FileOrigin origin, not_null document); void showPreview( Data::FileOrigin origin, not_null photo); void hidePreview(); ~MediaPreviewWidget(); protected: void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *e) override; private: void validateGifAnimation(); void startGifAnimation(const Media::Clip::ReaderPointer &gif); QSize currentDimensions() const; QPixmap currentImage() const; void createLottieIfReady(not_null document); void setupLottie(); void startShow(); void fillEmojiString(); void resetGifAndCache(); [[nodiscard]] QPoint innerPosition(QSize size) const; [[nodiscard]] QPoint outerPosition(QSize size) const; [[nodiscard]] QRect updateArea() const; not_null _controller; Ui::Animations::Simple _a_shown; bool _hiding = false; Data::FileOrigin _origin; PhotoData *_photo = nullptr; DocumentData *_document = nullptr; std::shared_ptr _photoMedia; std::shared_ptr _documentMedia; Media::Clip::ReaderPointer _gif, _gifThumbnail; bool _gifWithAlpha = false; crl::time _gifLastPosition = 0; std::unique_ptr _lottie; std::unique_ptr _effect; int _emojiSize; std::vector> _emojiList; void clipCallback(Media::Clip::Notification notification); enum CacheStatus { CacheNotLoaded, CacheThumbLoaded, CacheLoaded, }; mutable CacheStatus _cacheStatus = CacheNotLoaded; mutable QPixmap _cache; mutable QSize _cachedSize; }; } // namespace Window