/* 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 "history/media/history_media_file.h" class HistoryPhoto : public HistoryFileMedia { public: HistoryPhoto( not_null parent, not_null realParent, not_null photo); HistoryPhoto( not_null parent, not_null chat, not_null photo, int width); void draw(Painter &p, const QRect &clip, TextSelection selection, crl::time ms) const override; TextState textState(QPoint point, StateRequest request) const override; [[nodiscard]] TextSelection adjustSelection( TextSelection selection, TextSelectType type) const override { return _caption.adjustSelection(selection, type); } uint16 fullSelectionLength() const override { return _caption.length(); } bool hasTextForCopy() const override { return !_caption.isEmpty(); } TextWithEntities selectedText(TextSelection selection) const override; PhotoData *getPhoto() const override { return _data; } QSize sizeForGrouping() const override; void drawGrouped( Painter &p, const QRect &clip, TextSelection selection, crl::time ms, const QRect &geometry, RectParts corners, not_null cacheKey, not_null cache) const override; TextState getStateGrouped( const QRect &geometry, QPoint point, StateRequest request) const override; TextWithEntities getCaption() const override { return _caption.originalTextWithEntities(); } bool needsBubble() const override; bool customInfoLayout() const override { return _caption.isEmpty(); } bool skipBubbleTail() const override { return isBubbleBottom() && _caption.isEmpty(); } bool isReadyForOpen() const override; void parentTextUpdated() override; protected: float64 dataProgress() const override; bool dataFinished() const override; bool dataLoaded() const override; private: void create(FullMsgId contextId, PeerData *chat = nullptr); QSize countOptimalSize() override; QSize countCurrentSize(int newWidth) override; bool needInfoDisplay() const; void validateGroupedCache( const QRect &geometry, RectParts corners, not_null cacheKey, not_null cache) const; not_null _data; int _serviceWidth = 0; int _pixw = 1; int _pixh = 1; Text _caption; };