81 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			1.9 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
 | 
						|
*/
 | 
						|
#include "ui/userpic_view.h"
 | 
						|
 | 
						|
#include "ui/empty_userpic.h"
 | 
						|
#include "ui/image/image_prepare.h"
 | 
						|
 | 
						|
namespace Ui {
 | 
						|
 | 
						|
float64 ForumUserpicRadiusMultiplier() {
 | 
						|
	return 0.3;
 | 
						|
}
 | 
						|
 | 
						|
bool PeerUserpicLoading(const PeerUserpicView &view) {
 | 
						|
	return view.cloud && view.cloud->isNull();
 | 
						|
}
 | 
						|
 | 
						|
void ValidateUserpicCache(
 | 
						|
		PeerUserpicView &view,
 | 
						|
		const QImage *cloud,
 | 
						|
		const EmptyUserpic *empty,
 | 
						|
		int size,
 | 
						|
		bool forum) {
 | 
						|
	Expects(cloud != nullptr || empty != nullptr);
 | 
						|
 | 
						|
	const auto full = QSize(size, size);
 | 
						|
	const auto version = style::PaletteVersion();
 | 
						|
	const auto forumValue = forum ? 1 : 0;
 | 
						|
	const auto regenerate = (view.cached.size() != QSize(size, size))
 | 
						|
		|| (view.forum != forumValue)
 | 
						|
		|| (cloud && !view.empty.null())
 | 
						|
		|| (empty && empty != view.empty.get())
 | 
						|
		|| (empty && view.paletteVersion != version);
 | 
						|
	if (!regenerate) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
	view.empty = empty;
 | 
						|
	view.forum = forumValue;
 | 
						|
	view.paletteVersion = version;
 | 
						|
 | 
						|
	if (cloud) {
 | 
						|
		view.cached = cloud->scaled(
 | 
						|
			full,
 | 
						|
			Qt::IgnoreAspectRatio,
 | 
						|
			Qt::SmoothTransformation);
 | 
						|
		if (forum) {
 | 
						|
			view.cached = Images::Round(
 | 
						|
				std::move(view.cached),
 | 
						|
				Images::CornersMask(size
 | 
						|
					* Ui::ForumUserpicRadiusMultiplier()
 | 
						|
					/ style::DevicePixelRatio()));
 | 
						|
		} else {
 | 
						|
			view.cached = Images::Circle(std::move(view.cached));
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		if (view.cached.size() != full) {
 | 
						|
			view.cached = QImage(full, QImage::Format_ARGB32_Premultiplied);
 | 
						|
		}
 | 
						|
		view.cached.fill(Qt::transparent);
 | 
						|
 | 
						|
		auto p = QPainter(&view.cached);
 | 
						|
		if (forum) {
 | 
						|
			empty->paintRounded(
 | 
						|
				p,
 | 
						|
				0,
 | 
						|
				0,
 | 
						|
				size,
 | 
						|
				size,
 | 
						|
				size * Ui::ForumUserpicRadiusMultiplier());
 | 
						|
		} else {
 | 
						|
			empty->paintCircle(p, 0, 0, size, size);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
} // namespace Ui
 |