Diffstat (limited to 'noncore/multimedia/opieplayer2/skin.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/multimedia/opieplayer2/skin.cpp | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/noncore/multimedia/opieplayer2/skin.cpp b/noncore/multimedia/opieplayer2/skin.cpp index 7d05d80..ef70957 100644 --- a/noncore/multimedia/opieplayer2/skin.cpp +++ b/noncore/multimedia/opieplayer2/skin.cpp @@ -9,13 +9,12 @@ Skin::Skin( const QString &name, const QString &fileNameInfix ) m_skinPath = "opieplayer2/skins/" + name; } -void Skin::preload( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount ) +void Skin::preload( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount, const QSize &buttonAreaSize ) { backgroundImage(); buttonUpImage(); buttonDownImage(); - for ( uint i = 0; i < buttonCount; ++i ) - ( void )buttonMaskImage( skinButtonInfo[ i ].fileName ); + ( void )buttonMask( skinButtonInfo, buttonCount, buttonAreaSize ); } QImage Skin::backgroundImage() const @@ -39,6 +38,37 @@ QImage Skin::buttonDownImage() const return m_buttonDownImage; } +QImage Skin::buttonMask( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount, const QSize &buttonAreaSize ) const +{ + if ( buttonAreaSize != m_buttonMask.size() ) + m_buttonMask = QImage(); + + if ( !m_buttonMask.isNull() ) + return m_buttonMask; + + m_buttonMask = QImage( buttonAreaSize, 8, 255 ); + m_buttonMask.fill( 0 ); + + for ( uint i = 0; i < buttonCount; ++i ) + addButtonToMask( skinButtonInfo[ i ].command + 1, buttonMaskImage( skinButtonInfo[ i ].fileName ) ); + + return m_buttonMask; +} + +void Skin::addButtonToMask( int tag, const QImage &maskImage ) const +{ + if ( maskImage.isNull() ) + return; + + uchar **dest = m_buttonMask.jumpTable(); + for ( int y = 0; y < m_buttonMask.height(); y++ ) { + uchar *line = dest[y]; + for ( int x = 0; x < m_buttonMask.width(); x++ ) + if ( !qRed( maskImage.pixel( x, y ) ) ) + line[x] = tag; + } +} + QImage Skin::buttonMaskImage( const QString &fileName ) const { ButtonMaskImageMap::Iterator it = m_buttonMasks.find( fileName ); |