Diffstat (limited to 'noncore/multimedia/opieplayer2/mediawidget.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/multimedia/opieplayer2/mediawidget.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/noncore/multimedia/opieplayer2/mediawidget.cpp b/noncore/multimedia/opieplayer2/mediawidget.cpp index 4c4cead..db16b44 100644 --- a/noncore/multimedia/opieplayer2/mediawidget.cpp +++ b/noncore/multimedia/opieplayer2/mediawidget.cpp @@ -18,48 +18,91 @@ along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "mediawidget.h" #include "playlistwidget.h" MediaWidget::MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent, const char *name ) : QWidget( parent, name ), mediaPlayerState( _mediaPlayerState ), playList( _playList ) { connect( &mediaPlayerState, SIGNAL( displayTypeChanged( MediaPlayerState::DisplayType ) ), this, SLOT( setDisplayType( MediaPlayerState::DisplayType ) ) ); connect( &mediaPlayerState, SIGNAL( lengthChanged( long ) ), this, SLOT( setLength( long ) ) ); connect( &mediaPlayerState, SIGNAL( playingToggled( bool ) ), this, SLOT( setPlaying( bool ) ) ); } MediaWidget::~MediaWidget() { } +void MediaWidget::setupButtons( const SkinButtonInfo *skinInfo, uint buttonCount, + const QString &imagePrefix, const QSize &buttonAreaSize ) +{ + buttonMask = QImage( buttonAreaSize, 8, 255 ); + buttonMask.fill( 0 ); + + for ( uint i = 0; i < buttonCount; ++i ) { + Button button = setupButton( skinInfo[ i ], imagePrefix ); + buttons.push_back( button ); + } +} + +MediaWidget::Button MediaWidget::setupButton( const SkinButtonInfo &buttonInfo, const QString &imagePrefix ) +{ + Button button; + button.command = buttonInfo.command; + button.type = buttonInfo.type; + + QString fileName = imagePrefix + buttonInfo.fileName + ".png"; + + button.mask = setupButtonMask( button.command, fileName ); + + return button; +} + +QBitmap MediaWidget::setupButtonMask( const Command &command, const QString &fileName ) +{ + QBitmap mask( fileName ); + if ( mask.isNull() ) + return mask; + + QImage imgMask = mask.convertToImage(); + uchar **dest = buttonMask.jumpTable(); + for ( int y = 0; y < buttonMask.height(); y++ ) { + uchar *line = dest[y]; + for ( int x = 0; x < buttonMask.width(); x++ ) + if ( !qRed( imgMask.pixel( x, y ) ) ) + line[x] = command + 1; + } + + return mask; +} + void MediaWidget::closeEvent( QCloseEvent * ) { mediaPlayerState.setList(); } void MediaWidget::paintEvent( QPaintEvent *pe ) { QPainter p( this ); if ( mediaPlayerState.isFullscreen() ) { // Clear the background p.setBrush( QBrush( Qt::black ) ); return; } if ( !pe->erased() ) { // Combine with background and double buffer QPixmap pix( pe->rect().size() ); QPainter p( &pix ); p.translate( -pe->rect().topLeft().x(), -pe->rect().topLeft().y() ); p.drawTiledPixmap( pe->rect(), backgroundPixmap, pe->rect().topLeft() ); paintAllButtons( p ); QPainter p2( this ); p2.drawPixmap( pe->rect().topLeft(), pix ); |