From c91c9c4804830c8928e0718f90e1b77bba0e8bce Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Mon, 20 Aug 2012 09:36:53 -0400 Subject: [PATCH] UI tweaks to slider, and get rid of pixmap --- data/images/sliderbutton_knob.png | Bin 3122 -> 0 bytes resources.qrc | 1 - src/widgets/SlideSwitchButton.cpp | 59 ++++++++++++++++++++++-------- src/widgets/SlideSwitchButton.h | 2 + 4 files changed, 46 insertions(+), 16 deletions(-) delete mode 100644 data/images/sliderbutton_knob.png diff --git a/data/images/sliderbutton_knob.png b/data/images/sliderbutton_knob.png deleted file mode 100644 index 86eeead83e6e831854a8e3be19035a64c384f42d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3122 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/images/add-contact.png data/images/account-none.png data/images/green-dot.png - data/images/sliderbutton_knob.png diff --git a/src/widgets/SlideSwitchButton.cpp b/src/widgets/SlideSwitchButton.cpp index 959e875ff..a9b380c2b 100644 --- a/src/widgets/SlideSwitchButton.cpp +++ b/src/widgets/SlideSwitchButton.cpp @@ -26,6 +26,13 @@ #include #include +namespace { + // Width to height ratio (70x20) + const qreal ASPECT_RATIO = 3.5; + // Knob is originally 32x20 + const qreal KNOB_ASPECT_RATIO = 1.6; +} + SlideSwitchButton::SlideSwitchButton( QWidget* parent ) : QPushButton( parent ) , m_checkedText( tr( "On" ) ) @@ -52,8 +59,6 @@ SlideSwitchButton::init() setMouseTracking( true ); #endif - m_knob.load( RESPATH "images/sliderbutton_knob.png" ); - m_backCheckedColorTop = QColor( 8, 54, 134 ); m_backCheckedColorBottom = QColor( 118, 172, 240 ); m_backUncheckedColorTop = QColor( 128, 128, 128 ); @@ -74,6 +79,8 @@ SlideSwitchButton::init() connect( this, SIGNAL( toggled( bool ) ), this, SLOT( onCheckedStateChanged() ) ); + + createKnob(); } QSize @@ -101,28 +108,28 @@ SlideSwitchButton::paintEvent( QPaintEvent* event ) QStyleOptionButton option; initStyleOption( &option ); - QPen border; - border.setWidth( 1 ); -#ifndef Q_OS_MAC - if ( option.state & QStyle::State_MouseOver ) - border.setColor( palette.color( QPalette::Highlight ) ); - else -#endif - border.setColor( QColor( "#606060" ) ); - painter.setPen( border ); - //TODO: should the whole thing be highlighted or just the knob? - QLinearGradient gradient( 0, 0, 0, 1 ); gradient.setCoordinateMode( QGradient::ObjectBoundingMode ); gradient.setColorAt( 0, m_baseColorTop ); gradient.setColorAt( 1, m_baseColorBottom ); painter.setBrush( gradient ); - painter.drawRoundedRect( QRect( 0, 0, width() - 0, height() - 0 ).adjusted( 3, 0, -3, 0 ), 2, 2 ); + QPainterPath borderPath; + const QRect borderRect = QRect( 0, 0, width(), height() ); + borderPath.addRoundedRect( borderRect, 3, 3 ); + painter.fillPath( borderPath, gradient ); painter.drawPixmap( m_knobX * ( width() - m_knob.width() ), 0, m_knob ); - qDebug() << "Drawn with knob at:" << m_knobX; +#ifndef Q_OS_MAC + if ( option.state & QStyle::State_MouseOver ) + { + painter.setBrush( QBrush() ); + painter.setPen( palette.color( QPalette::Highlight ) ); + //TODO: should the whole thing be highlighted or just the knob? + painter.drawRoundedRect( borderRect, 3, 3 ); + } +#endif if ( m_knobX != 1.0 && m_knobX != 0.0 ) return; @@ -185,3 +192,25 @@ SlideSwitchButton::backChecked() const { return m_backChecked; } + + +void +SlideSwitchButton::createKnob() +{ + const qreal knobWidth = sizeHint().height() * KNOB_ASPECT_RATIO; + m_knob = QPixmap( QSize( knobWidth, sizeHint().height() ) ); + m_knob.fill( Qt::transparent ); + + QPainter p( &m_knob ); + p.setRenderHint( QPainter::Antialiasing ); + + QLinearGradient gradient( 0, 0, 0, 1 ); + gradient.setCoordinateMode( QGradient::ObjectBoundingMode ); + gradient.setColorAt( 0, Qt::white ); + gradient.setColorAt( 1, QColor( 223, 223, 223 ) ); + + p.setBrush( gradient ); + p.setPen( QColor( 152, 152, 152 ) ); + + p.drawRoundedRect( m_knob.rect(), 3, 3 ); +} diff --git a/src/widgets/SlideSwitchButton.h b/src/widgets/SlideSwitchButton.h index 7c881d963..2b475736e 100644 --- a/src/widgets/SlideSwitchButton.h +++ b/src/widgets/SlideSwitchButton.h @@ -65,6 +65,8 @@ private slots: void onCheckedStateChanged(); private: + void createKnob(); + QPixmap m_knob; QString m_checkedText;