2
0
mirror of https://github.com/kotatogram/kotatogram-desktop synced 2025-09-05 09:05:14 +00:00

Show similar channels under join message.

This commit is contained in:
John Preston
2023-11-21 13:31:38 +04:00
parent 91fba41e2c
commit 36a8c49213
30 changed files with 814 additions and 74 deletions

View File

@@ -37,6 +37,7 @@ namespace {
constexpr auto kTopLayer = 2;
constexpr auto kBottomLayer = 1;
constexpr auto kNoneLayer = 0;
constexpr auto kBlurRadius = 24;
[[nodiscard]] QImage CornerBadgeTTL(
not_null<PeerData*> peer,
@@ -46,38 +47,17 @@ constexpr auto kNoneLayer = 0;
if (!ttl) {
return QImage();
}
constexpr auto kBlurRadius = 24;
const auto ratio = style::DevicePixelRatio();
const auto fullSize = photoSize;
const auto blurredFull = Images::BlurLargeImage(
peer->generateUserpicImage(view, fullSize * ratio, 0),
kBlurRadius);
const auto partRect = CornerBadgeTTLRect(fullSize);
const auto &partSize = partRect.width();
auto result = [&] {
auto blurredPart = blurredFull.copy(
blurredFull.width() - partSize * ratio,
blurredFull.height() - partSize * ratio,
partSize * ratio,
partSize * ratio);
blurredPart.setDevicePixelRatio(ratio);
constexpr auto kMinAcceptableContrast = 4.5;
const auto averageColor = Ui::CountAverageColor(blurredPart);
const auto contrast = Ui::CountContrast(
averageColor,
st::premiumButtonFg->c);
if (contrast < kMinAcceptableContrast) {
constexpr auto kDarkerBy = 0.2;
auto painterPart = QPainter(&blurredPart);
painterPart.setOpacity(kDarkerBy);
painterPart.fillRect(
QRect(QPoint(), partRect.size()),
Qt::black);
}
return Images::Circle(std::move(blurredPart));
}();
const auto partSkip = fullSize - partSize;
auto result = Images::Circle(BlurredDarkenedPart(
peer->generateUserpicImage(view, fullSize * ratio, 0),
QRect(
QPoint(partSkip, partSkip) * ratio,
QSize(partSize, partSize) * ratio)));
result.setDevicePixelRatio(ratio);
auto q = QPainter(&result);
PainterHighQualityEnabler hq(q);
@@ -125,6 +105,28 @@ QRect CornerBadgeTTLRect(int photoSize) {
partSize);
}
QImage BlurredDarkenedPart(QImage image, QRect part) {
const auto ratio = style::DevicePixelRatio();
auto blurred = Images::BlurLargeImage(
std::move(image),
kBlurRadius).copy(part);
constexpr auto kMinAcceptableContrast = 4.5;
const auto averageColor = Ui::CountAverageColor(blurred);
const auto contrast = Ui::CountContrast(
averageColor,
st::premiumButtonFg->c);
if (contrast < kMinAcceptableContrast) {
constexpr auto kDarkerBy = 0.2;
auto painterPart = QPainter(&blurred);
painterPart.setOpacity(kDarkerBy);
painterPart.fillRect(QRect(QPoint(), part.size()), Qt::black);
}
blurred.setDevicePixelRatio(image.devicePixelRatio());
return blurred;
}
Row::CornerLayersManager::CornerLayersManager() = default;
bool Row::CornerLayersManager::isSameLayer(Layer layer) const {