[Jahshaka-cvs] jah/jahwidgets/src/qt3/widgets slider.cpp, 1.9, 1.10 slider.h, 1.13, 1.14
Status: Beta
Brought to you by:
jahshaka
From: tim <tim...@us...> - 2006-09-27 15:56:27
|
Update of /cvsroot/jahshaka/jah/jahwidgets/src/qt3/widgets In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv23607/src/qt3/widgets Modified Files: slider.cpp slider.h Log Message: - optimize slider Index: slider.cpp =================================================================== RCS file: /cvsroot/jahshaka/jah/jahwidgets/src/qt3/widgets/slider.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- slider.cpp 24 Sep 2006 17:37:17 -0000 1.9 +++ slider.cpp 27 Sep 2006 15:56:20 -0000 1.10 @@ -33,6 +33,8 @@ connect( this, SIGNAL( sliderMoved( int ) ), this, SIGNAL( value_changed() ) ); connect( this, SIGNAL( valueChanged( int ) ), this, SIGNAL( value_changed() ) ); connect( this, SIGNAL( valueChanged( int ) ), this, SLOT( onValueChanged( int ) ) ); + + setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding ); } // unhide this methods cunningly masked by a private method on @@ -49,10 +51,34 @@ return result; } + virtual QSize sizeHint() const + { + if ( !thumb.isNull() || !tray.isNull() ) + { + QSize s( thumb.size() ); + s = s.expandedTo( tray.size() ); + + if ( orientation() == Qt::Vertical ) + { + s = QSize( s.height(), s.width() ); + } + + return s; + } + + return QSlider::sizeHint(); + } + + virtual QSize minimumSizeHint() const + { + return sizeHint(); + } + QPixmap thumb; QPixmap tray; QPixmap trayBuffer; QPixmap paintBuffer; + QPixmap backgroundBuffer; bool invertSense; bool pressed; @@ -72,10 +98,13 @@ if ( bufferDirty ) { paintBuffer.resize( size() ); + backgroundBuffer.resize( size() ); + backgroundBuffer.fill( parentWidget(), pos() ); } // always fill to ensure we get rid of any background from the last draw - paintBuffer.fill( parentWidget(), pos() ); + copyBlt( &paintBuffer, 0, 0, + &backgroundBuffer, 0, 0, backgroundBuffer.width(), backgroundBuffer.height() ); QPainter p( &paintBuffer ); @@ -122,7 +151,7 @@ bufferDirty = false; } - p.drawPixmap( 0, 0, trayBuffer ); + p.drawPixmap( 0, (height()-trayBuffer.height())/2, trayBuffer ); } @@ -133,6 +162,9 @@ colorGroup(), QStyle::Style_Default, flags ); + + + QRect dirtyRect = e->rect(); if ( !thumb.isNull() ) { @@ -142,16 +174,24 @@ QWMatrix m; m.rotate( 90 ); p_ = p_.xForm( m ); + + dirtyRect.moveBy( 0, p_.height() ); + dirtyRect.setHeight( dirtyRect.height() + 2*p_.height() ); + p.drawPixmap( QMAX( 0, (width() - p_.width())/2 ), positionFromValue( value(), height() - p_.height() ), p_ ); } else { - p.drawPixmap( positionFromValue( value(), width() - p_.width() ), QMAX( 0, (height() - p_.height())/2 ), p_ ); + dirtyRect.moveBy( -p_.width(), 0 ); + dirtyRect.setWidth( dirtyRect.width() + 2*p_.width() ); + + QPoint pos( positionFromValue( value(), width() - p_.width() ), QMAX( 0, (height() - p_.height())/2 ) ); + p.drawPixmap( pos, p_ ); } } - - bitBlt( this, 0, 0, - &paintBuffer, 0, 0, paintBuffer.width(), paintBuffer.height(), + + bitBlt( this, dirtyRect.x(), dirtyRect.y(), + &paintBuffer, dirtyRect.x(), dirtyRect.y(), dirtyRect.width(), dirtyRect.height(), Qt::CopyROP ); } @@ -379,4 +419,14 @@ m_impl->update(); } +QSize Slider::sizeHint() const +{ + return m_impl->sizeHint(); +} + +QSize Slider::minimumSizeHint() const +{ + return m_impl->minimumSizeHint(); +} + } } Index: slider.h =================================================================== RCS file: /cvsroot/jahshaka/jah/jahwidgets/src/qt3/widgets/slider.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- slider.h 24 Sep 2006 17:37:17 -0000 1.13 +++ slider.h 27 Sep 2006 15:56:20 -0000 1.14 @@ -53,6 +53,9 @@ bool invertSense() const; + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + public slots: void setValue( int ); void setMinValue( int ); |