From d9815e7019dd6003ed4a93a1d248420fba014843 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 22 Jun 2023 08:49:49 +1000 Subject: [PATCH] Fix oversized pixelated tooltip previews for text items in style model --- src/core/symbology/qgsstylemodel.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/core/symbology/qgsstylemodel.cpp b/src/core/symbology/qgsstylemodel.cpp index 76ca352563b..9d2786d2c3c 100644 --- a/src/core/symbology/qgsstylemodel.cpp +++ b/src/core/symbology/qgsstylemodel.cpp @@ -173,11 +173,12 @@ QVariant QgsStyleModel::data( const QModelIndex &index, int role ) const int width = static_cast< int >( Qgis::UI_SCALE_FACTOR * QFontMetrics( data( index, Qt::FontRole ).value< QFont >() ).horizontalAdvance( 'X' ) * 23 ); int height = static_cast< int >( width / 1.61803398875 ); // golden ratio const QgsTextFormat format = mStyle->textFormat( name ); - QPixmap pm = QgsTextFormat::textFormatPreviewPixmap( format, QSize( width, height ), QString(), height / 20 ); + const double maxDevicePixelRatio = *std::max_element( mDevicePixelRatios.constBegin(), mDevicePixelRatios.constEnd() ); + QPixmap pm = QgsTextFormat::textFormatPreviewPixmap( format, QSize( width, height ), QString(), height / 20, maxDevicePixelRatio ); QByteArray data; QBuffer buffer( &data ); pm.save( &buffer, "PNG", 100 ); - tooltip += QStringLiteral( "

" ).arg( QString( data.toBase64() ) ); + tooltip += QStringLiteral( "

" ).arg( QString( data.toBase64() ) ).arg( width ); break; } @@ -185,12 +186,13 @@ QVariant QgsStyleModel::data( const QModelIndex &index, int role ) const { int width = static_cast< int >( Qgis::UI_SCALE_FACTOR * QFontMetrics( data( index, Qt::FontRole ).value< QFont >() ).horizontalAdvance( 'X' ) * 23 ); int height = static_cast< int >( width / 1.61803398875 ); // golden ratio + const double maxDevicePixelRatio = *std::max_element( mDevicePixelRatios.constBegin(), mDevicePixelRatios.constEnd() ); const QgsPalLayerSettings settings = mStyle->labelSettings( name ); - QPixmap pm = QgsPalLayerSettings::labelSettingsPreviewPixmap( settings, QSize( width, height ), QString(), height / 20 ); + QPixmap pm = QgsPalLayerSettings::labelSettingsPreviewPixmap( settings, QSize( width, height ), QString(), height / 20, maxDevicePixelRatio ); QByteArray data; QBuffer buffer( &data ); pm.save( &buffer, "PNG", 100 ); - tooltip += QStringLiteral( "

" ).arg( QString( data.toBase64() ) ); + tooltip += QStringLiteral( "

" ).arg( QString( data.toBase64() ) ).arg( width ); break; }