diff --git a/Telegram/SourceFiles/data/data_media_types.cpp b/Telegram/SourceFiles/data/data_media_types.cpp index cd64b249d8..a3158a2d12 100644 --- a/Telegram/SourceFiles/data/data_media_types.cpp +++ b/Telegram/SourceFiles/data/data_media_types.cpp @@ -164,7 +164,29 @@ using ItemPreview = HistoryView::ItemPreview; size, size ).convertToFormat(QImage::Format_ARGB32_Premultiplied); - Images::prepareRound(square, radius); + if (radius == ImageRoundRadius::Small) { + struct Cache { + base::flat_map> all; + std::array *lastUsed = nullptr; + int lastUsedRadius = 0; + }; + static auto cache = Cache(); + const auto pxRadius = st::dialogsMiniPreviewRadius; + if (!cache.lastUsed || cache.lastUsedRadius != pxRadius) { + cache.lastUsedRadius = pxRadius; + const auto i = cache.all.find(pxRadius); + if (i != end(cache.all)) { + cache.lastUsed = &i->second; + } else { + cache.lastUsed = &cache.all.emplace( + pxRadius, + Images::CornersMask(pxRadius)).first->second; + } + } + Images::prepareRound(square, *cache.lastUsed); + } else { + Images::prepareRound(square, radius); + } square.setDevicePixelRatio(factor); return square; } diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style index e34595f8d6..4b7cf1b1c5 100644 --- a/Telegram/SourceFiles/dialogs/dialogs.style +++ b/Telegram/SourceFiles/dialogs/dialogs.style @@ -298,6 +298,7 @@ dialogsScamRadius: 2px; dialogsMiniPreviewTop: 1px; dialogsMiniPreview: 16px; +dialogsMiniPreviewRadius: 2px; dialogsMiniPreviewSkip: 2px; dialogsMiniPreviewRight: 3px; dialogsMiniPlay: icon{{ "dialogs/dialogs_mini_play", videoPlayIconFg }};