From 76e4859ef085500d961fe8af7cc6e082813e06d1 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Thu, 30 Jul 2015 21:08:35 +0200 Subject: [PATCH] Get rid of hardcoded pixel sizes in the plugin browser and side bar The PluginDescWidget doesn't use calls to pointSize anymore. Also the name of the plugin is only painted bold when hovered over with the mouse. The animation speed was increased a bit as well. Hope it is not too fast for displays with smaller resolutions. The problem with the current implementation is that it increases the height by incremental steps of 1 pixel (triggered by a QTimer) which gives a slower speed on high DPI displays. In the future this implementation might be improved, e.g. by using the animation classes provided by Qt. The SideBarWidget also does not use calls to pointSize anymore. Instead the standard font is increased by 2 (typographical) points and then rendered at the right place using information from QFontMetrics. In the long run the header of the SideBarWidget should be organized using a layout, e.g. a layout with one QLabel to render the icon and one QLabel to render the header text. This would ensure that the black background would always be large enough and that the fonts do not protude into the actual content. --- src/gui/PluginBrowser.cpp | 13 ++++++++----- src/gui/widgets/SideBarWidget.cpp | 11 ++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/gui/PluginBrowser.cpp b/src/gui/PluginBrowser.cpp index 6e7174168..6e7b9a619 100644 --- a/src/gui/PluginBrowser.cpp +++ b/src/gui/PluginBrowser.cpp @@ -68,7 +68,6 @@ PluginBrowser::PluginBrowser( QWidget * _parent ) : "Beat+Bassline Editor or into an " "existing instrument track." ), m_view ); - hint->setFont( pointSize<8>( hint->font() ) ); hint->setWordWrap( true ); QScrollArea* scrollarea = new QScrollArea( m_view ); @@ -153,8 +152,12 @@ void PluginDescWidget::paintEvent( QPaintEvent * ) p.drawRect( 0, 0, rect().right(), rect().bottom() ); p.drawPixmap( 4, 4, logo ); - QFont f = pointSize<8>( p.font() ); - f.setBold( true ); + QFont f = p.font(); + if ( m_mouseOver ) + { + f.setBold( true ); + } + p.setFont( f ); p.drawText( 10 + logo_size.width(), 15, m_pluginDescriptor.displayName ); @@ -162,7 +165,7 @@ void PluginDescWidget::paintEvent( QPaintEvent * ) if( height() > 24 || m_mouseOver ) { f.setBold( false ); - p.setFont( pointSize<8>( f ) ); + p.setFont( f ); QRect br; p.drawText( 10 + logo_size.width(), 20, width() - 58 - 5, 999, Qt::TextWordWrap, @@ -231,7 +234,7 @@ void PluginDescWidget::updateHeight() if( !m_updateTimer.isActive() ) { - m_updateTimer.start( 15 ); + m_updateTimer.start( 10 ); } } diff --git a/src/gui/widgets/SideBarWidget.cpp b/src/gui/widgets/SideBarWidget.cpp index 2da0c9a45..c1559f909 100644 --- a/src/gui/widgets/SideBarWidget.cpp +++ b/src/gui/widgets/SideBarWidget.cpp @@ -55,21 +55,22 @@ SideBarWidget::~SideBarWidget() void SideBarWidget::paintEvent( QPaintEvent * ) { - const int TITLE_FONT_HEIGHT = 13; - QPainter p( this ); p.fillRect( 0, 0, width(), 27, palette().highlight().color() ); QFont f = p.font(); f.setBold( true ); - p.setFont( pointSize( f ) ); + f.setUnderline( true ); + f.setPointSize( f.pointSize() + 2 ); + p.setFont( f ); p.setPen( palette().highlightedText().color() ); const int tx = m_icon.width()+4; - const int ty = 2+TITLE_FONT_HEIGHT; + + QFontMetrics metrics( f ); + const int ty = metrics.ascent(); p.drawText( tx, ty, m_title ); - p.drawLine( tx, ty+4, width()-4, ty+4 ); p.drawPixmap( 2, 2, m_icon.transformed( QTransform().rotate( -90 ) ) ); }