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:
@@ -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 {
|
||||
|
Reference in New Issue
Block a user