[vlc-devel] [PATCH 2/2] qt: improve rendering of central cone for HiDpi

Pierre Lamot pierre at videolabs.io
Wed Nov 15 10:57:35 CET 2017


My bad, devicePixelRatioF is Qt5.6 and not Qt 5.5

On mercredi 15 novembre 2017 10:34:29 CET Pierre Lamot wrote:
> ---
>  modules/gui/qt/components/interface_widgets.cpp | 32
> +++++++++++-------------- 1 file changed, 14 insertions(+), 18 deletions(-)
> 
> diff --git a/modules/gui/qt/components/interface_widgets.cpp
> b/modules/gui/qt/components/interface_widgets.cpp index
> 7c34d13614..e4d32ab72c 100644
> --- a/modules/gui/qt/components/interface_widgets.cpp
> +++ b/modules/gui/qt/components/interface_widgets.cpp
> @@ -434,8 +434,9 @@ void BackgroundWidget::paintEvent( QPaintEvent *e )
>      int i_maxwidth, i_maxheight;
>      QPixmap pixmap = QPixmap( pixmapUrl );
>      QPainter painter(this);
> -    QBitmap pMask;
> -    float f_alpha = 1.0;
> +
> +    qreal dpr = devicePixelRatioF();
> +    pixmap.setDevicePixelRatio( dpr );
> 
>      i_maxwidth  = __MIN( maximumWidth(), width() ) - MARGIN * 2;
>      i_maxheight = __MIN( maximumHeight(), height() ) - MARGIN * 2;
> @@ -447,32 +448,27 @@ void BackgroundWidget::paintEvent( QPaintEvent *e )
>          /* Scale down the pixmap if the widget is too small */
>          if( pixmap.width() > i_maxwidth || pixmap.height() > i_maxheight )
>          {
> -            pixmap = pixmap.scaled( i_maxwidth, i_maxheight,
> +            pixmap = pixmap.scaled( i_maxwidth * dpr, i_maxheight * dpr ,
>                              Qt::KeepAspectRatio, Qt::SmoothTransformation
> ); }
>          else
>          if ( b_expandPixmap &&
>               pixmap.width() < width() && pixmap.height() < height() )
>          {
> -            /* Scale up the pixmap to fill widget's size */
> -            f_alpha = ( (float) pixmap.height() / (float) height() );
>              pixmap = pixmap.scaled(
> -                    width() - MARGIN * 2,
> -                    height() - MARGIN * 2,
> -                    Qt::KeepAspectRatio,
> -                    ( f_alpha < .2 )? /* Don't waste cpu when not visible
> */ -                        Qt::SmoothTransformation:
> -                        Qt::FastTransformation
> -                    );
> -            /* Non agressive alpha compositing when sizing up */
> -            pMask = QBitmap( pixmap.width(), pixmap.height() );
> -            pMask.fill( QColor::fromRgbF( 1.0, 1.0, 1.0, f_alpha ) );
> -            pixmap.setMask( pMask );
> +                    (width() - MARGIN * 2) * dpr,
> +                    (height() - MARGIN * 2) * dpr ,
> +                    Qt::KeepAspectRatio, Qt::SmoothTransformation);
> +        }
> +        else if (dpr != 1.0)
> +        {
> +            pixmap = pixmap.scaled( pixmap.width() * dpr, pixmap.height() *
> dpr, +                                    Qt::KeepAspectRatio,
> Qt::SmoothTransformation ); }
> 
>          painter.drawPixmap(
> -                MARGIN + ( i_maxwidth - pixmap.width() ) /2,
> -                MARGIN + ( i_maxheight - pixmap.height() ) /2,
> +                MARGIN + ( i_maxwidth * dpr - pixmap.width() ) / (2 * dpr),
> +                MARGIN + ( i_maxheight * dpr - pixmap.height() ) / (2 *
> dpr), pixmap);
>      }
>      QWidget::paintEvent( e );

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 455 bytes
Desc: This is a digitally signed message part.
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20171115/afb9ec42/attachment.sig>


More information about the vlc-devel mailing list