82 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
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"
 | 
						|
 | 
						|
class Painter;
 | 
						|
 | 
						|
namespace Data {
 | 
						|
class PhotoMedia;
 | 
						|
} // namespace Data
 | 
						|
 | 
						|
namespace Ui {
 | 
						|
struct PeerUserpicView;
 | 
						|
} // namespace Ui
 | 
						|
 | 
						|
namespace Dialogs {
 | 
						|
class Entry;
 | 
						|
} // namespace Dialogs
 | 
						|
 | 
						|
namespace Dialogs::Ui {
 | 
						|
 | 
						|
using namespace ::Ui;
 | 
						|
 | 
						|
struct PaintContext;
 | 
						|
 | 
						|
class VideoUserpic final {
 | 
						|
public:
 | 
						|
	VideoUserpic(not_null<PeerData*> peer, Fn<void()> repaint);
 | 
						|
	~VideoUserpic();
 | 
						|
 | 
						|
	[[nodiscard]] int frameIndex() const;
 | 
						|
 | 
						|
	void paintLeft(
 | 
						|
		Painter &p,
 | 
						|
		PeerUserpicView &view,
 | 
						|
		int x,
 | 
						|
		int y,
 | 
						|
		int w,
 | 
						|
		int size,
 | 
						|
		bool paused);
 | 
						|
 | 
						|
private:
 | 
						|
	void clipCallback(Media::Clip::Notification notification);
 | 
						|
	[[nodiscard]] Media::Clip::FrameRequest request(int size) const;
 | 
						|
	bool startReady(int size = 0);
 | 
						|
 | 
						|
	const not_null<PeerData*> _peer;
 | 
						|
	const Fn<void()> _repaint;
 | 
						|
 | 
						|
	Media::Clip::ReaderPointer _video;
 | 
						|
	int _lastSize = 0;
 | 
						|
	std::shared_ptr<Data::PhotoMedia> _videoPhotoMedia;
 | 
						|
	PhotoId _videoPhotoId = 0;
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
void PaintUserpic(
 | 
						|
	Painter &p,
 | 
						|
	not_null<Entry*> entry,
 | 
						|
	PeerData *peer,
 | 
						|
	VideoUserpic *videoUserpic,
 | 
						|
	PeerUserpicView &view,
 | 
						|
	const Ui::PaintContext &context);
 | 
						|
 | 
						|
void PaintUserpic(
 | 
						|
	Painter &p,
 | 
						|
	not_null<PeerData*> peer,
 | 
						|
	VideoUserpic *videoUserpic,
 | 
						|
	PeerUserpicView &view,
 | 
						|
	int x,
 | 
						|
	int y,
 | 
						|
	int outerWidth,
 | 
						|
	int size,
 | 
						|
	bool paused);
 | 
						|
 | 
						|
} // namespace Dialogs::Ui
 |