mica material: prefer speed over quality

This commit is contained in:
Yuhang Zhao 2023-07-30 15:14:16 +08:00
parent 5b0d06307a
commit 20ab4f7d4b
1 changed files with 26 additions and 14 deletions

View File

@ -415,8 +415,10 @@ static inline void expblur(QImage &img, qreal radius, const bool improvedQuality
if (p) {
p->save();
p->setRenderHints(QPainter::Antialiasing |
QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
// We need a blurry image anyway, we don't need high quality image processing.
p->setRenderHint(QPainter::Antialiasing, false);
p->setRenderHint(QPainter::TextAntialiasing, false);
p->setRenderHint(QPainter::SmoothPixmapTransform, false);
p->scale(scale, scale);
#if (QT_VERSION >= QT_VERSION_CHECK(6, 2, 0))
const QSize imageSize = blurImage.deviceIndependentSize().toSize();
@ -564,19 +566,23 @@ protected:
}
QSize newSize = image.size();
newSize.scale(imageSize, mode);
image = image.scaled(newSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
image = image.scaled(newSize);
}
static constexpr const QPoint desktopOriginPoint = {0, 0};
const QRect desktopRect = {desktopOriginPoint, imageSize};
if (aspectStyle == WallpaperAspectStyle::Tile) {
QPainter bufferPainter(&buffer);
bufferPainter.setRenderHints(QPainter::Antialiasing |
QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
// Same as above, we prefer speed than quality here.
bufferPainter.setRenderHint(QPainter::Antialiasing, false);
bufferPainter.setRenderHint(QPainter::TextAntialiasing, false);
bufferPainter.setRenderHint(QPainter::SmoothPixmapTransform, false);
bufferPainter.fillRect(desktopRect, QBrush(image));
} else {
QPainter bufferPainter(&buffer);
bufferPainter.setRenderHints(QPainter::Antialiasing |
QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
// Same here.
bufferPainter.setRenderHint(QPainter::Antialiasing, false);
bufferPainter.setRenderHint(QPainter::TextAntialiasing, false);
bufferPainter.setRenderHint(QPainter::SmoothPixmapTransform, false);
const QRect rect = alignedRect(Qt::LeftToRight, Qt::AlignCenter, image.size(), desktopRect);
bufferPainter.drawImage(rect.topLeft(), image);
}
@ -585,12 +591,14 @@ protected:
g_imageData()->blurredWallpaper = QPixmap(imageSize);
g_imageData()->blurredWallpaper.fill(kDefaultTransparentColor);
QPainter painter(&g_imageData()->blurredWallpaper);
painter.setRenderHints(QPainter::Antialiasing |
QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
// Same here.
painter.setRenderHint(QPainter::Antialiasing, false);
painter.setRenderHint(QPainter::TextAntialiasing, false);
painter.setRenderHint(QPainter::SmoothPixmapTransform, false);
#ifdef FRAMELESSHELPER_CORE_NO_PRIVATE
painter.drawImage(desktopOriginPoint, buffer);
#else // !FRAMELESSHELPER_CORE_NO_PRIVATE
qt_blurImage(&painter, buffer, kDefaultBlurRadius, true, false);
qt_blurImage(&painter, buffer, kDefaultBlurRadius, false, false);
#endif // FRAMELESSHELPER_CORE_NO_PRIVATE
}
Q_EMIT imageUpdated(transform);
@ -673,8 +681,10 @@ void MicaMaterialPrivate::updateMaterialBrush()
fillColor.setAlphaF(0.9f);
micaTexture.fill(fillColor);
QPainter painter(&micaTexture);
painter.setRenderHints(QPainter::Antialiasing |
QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
// Same as above. We need speed, not quality.
painter.setRenderHint(QPainter::Antialiasing, false);
painter.setRenderHint(QPainter::TextAntialiasing, false);
painter.setRenderHint(QPainter::SmoothPixmapTransform, false);
painter.setOpacity(tintOpacity);
const QRect rect = {QPoint(0, 0), micaTexture.size()};
painter.fillRect(rect, tintColor);
@ -699,8 +709,10 @@ void MicaMaterialPrivate::paint(QPainter *painter, const QRect &rect, const bool
static constexpr const QPoint originPoint = {0, 0};
const QRect mappedRect = mapToWallpaper(rect);
painter->save();
painter->setRenderHints(QPainter::Antialiasing |
QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
// Same as above. Speed is more important here.
painter->setRenderHint(QPainter::Antialiasing, false);
painter->setRenderHint(QPainter::TextAntialiasing, false);
painter->setRenderHint(QPainter::SmoothPixmapTransform, false);
if (active) {
const QMutexLocker locker(&g_imageData()->mutex);
painter->drawPixmap(originPoint, g_imageData()->blurredWallpaper, mappedRect);