| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /*
- 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
|