summaryrefslogtreecommitdiff
authorsimon <simon>2002-12-11 17:50:15 (UTC)
committer simon <simon>2002-12-11 17:50:15 (UTC)
commit7c897dfbee81f0fabce4b1a8de4ebab70f3783ee (patch) (unidiff)
treeec8571ae41c07f78ec697b57f42ebb2d3af947b2
parent483e550c75f935706fde4e0ca29c4486aeca09a0 (diff)
downloadopie-7c897dfbee81f0fabce4b1a8de4ebab70f3783ee.zip
opie-7c897dfbee81f0fabce4b1a8de4ebab70f3783ee.tar.gz
opie-7c897dfbee81f0fabce4b1a8de4ebab70f3783ee.tar.bz2
- restructing a bit the skin data storage, in preparation for cache
improvements
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/skin.cpp57
-rw-r--r--noncore/multimedia/opieplayer2/skin.h11
2 files changed, 41 insertions, 27 deletions
diff --git a/noncore/multimedia/opieplayer2/skin.cpp b/noncore/multimedia/opieplayer2/skin.cpp
index cef3259..9ad5f3f 100644
--- a/noncore/multimedia/opieplayer2/skin.cpp
+++ b/noncore/multimedia/opieplayer2/skin.cpp
@@ -14,115 +14,132 @@
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details. 15 General Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program; see the file COPYING. If not, write to 18 along with this program; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include "skin.h" 23#include "skin.h"
24 24
25#include <qpe/resource.h> 25#include <qpe/resource.h>
26#include <qpe/config.h> 26#include <qpe/config.h>
27 27
28#include <assert.h> 28#include <assert.h>
29 29
30struct SkinData
31{
32 typedef QMap<QString, QImage> ButtonMaskImageMap;
33
34 QImage backgroundImage;
35 QImage buttonUpImage;
36 QImage buttonDownImage;
37 QImage buttonMask;
38 ButtonMaskImageMap buttonMasks;
39};
40
30Skin::Skin( const QString &name, const QString &fileNameInfix ) 41Skin::Skin( const QString &name, const QString &fileNameInfix )
31 : m_fileNameInfix( fileNameInfix ) 42 : m_fileNameInfix( fileNameInfix )
32{ 43{
33 init( name ); 44 init( name );
34} 45}
35 46
36Skin::Skin( const QString &fileNameInfix ) 47Skin::Skin( const QString &fileNameInfix )
37 : m_fileNameInfix( fileNameInfix ) 48 : m_fileNameInfix( fileNameInfix )
38{ 49{
39 init( defaultSkinName() ); 50 init( defaultSkinName() );
40} 51}
41 52
53Skin::~Skin()
54{
55 delete d;
56}
57
42void Skin::init( const QString &name ) 58void Skin::init( const QString &name )
43{ 59{
44 m_skinPath = "opieplayer2/skins/" + name; 60 m_skinPath = "opieplayer2/skins/" + name;
61 d = new SkinData;
45} 62}
46 63
47void Skin::preload( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount ) 64void Skin::preload( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount )
48{ 65{
49 backgroundImage(); 66 backgroundImage();
50 buttonUpImage(); 67 buttonUpImage();
51 buttonDownImage(); 68 buttonDownImage();
52 ( void )buttonMask( skinButtonInfo, buttonCount ); 69 ( void )buttonMask( skinButtonInfo, buttonCount );
53} 70}
54 71
55QImage Skin::backgroundImage() const 72QImage Skin::backgroundImage() const
56{ 73{
57 if ( m_backgroundImage.isNull() ) 74 if ( d->backgroundImage.isNull() )
58 m_backgroundImage = SkinCache::self().loadImage( QString( "%1/background" ).arg( m_skinPath ) ); 75 d->backgroundImage = SkinCache::self().loadImage( QString( "%1/background" ).arg( m_skinPath ) );
59 return m_backgroundImage; 76 return d->backgroundImage;
60} 77}
61 78
62QImage Skin::buttonUpImage() const 79QImage Skin::buttonUpImage() const
63{ 80{
64 if ( m_buttonUpImage.isNull() ) 81 if ( d->buttonUpImage.isNull() )
65 m_buttonUpImage = SkinCache::self().loadImage( QString( "%1/skin%2_up" ).arg( m_skinPath ).arg( m_fileNameInfix ) ); 82 d->buttonUpImage = SkinCache::self().loadImage( QString( "%1/skin%2_up" ).arg( m_skinPath ).arg( m_fileNameInfix ) );
66 return m_buttonUpImage; 83 return d->buttonUpImage;
67} 84}
68 85
69QImage Skin::buttonDownImage() const 86QImage Skin::buttonDownImage() const
70{ 87{
71 if ( m_buttonDownImage.isNull() ) 88 if ( d->buttonDownImage.isNull() )
72 m_buttonDownImage = SkinCache::self().loadImage( QString( "%1/skin%2_down" ).arg( m_skinPath ).arg( m_fileNameInfix ) ); 89 d->buttonDownImage = SkinCache::self().loadImage( QString( "%1/skin%2_down" ).arg( m_skinPath ).arg( m_fileNameInfix ) );
73 return m_buttonDownImage; 90 return d->buttonDownImage;
74} 91}
75 92
76QImage Skin::buttonMask( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount ) const 93QImage Skin::buttonMask( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount ) const
77{ 94{
78 if ( !m_buttonMask.isNull() ) 95 if ( !d->buttonMask.isNull() )
79 return m_buttonMask; 96 return d->buttonMask;
80 97
81 QSize buttonAreaSize = buttonUpImage().size(); 98 QSize buttonAreaSize = buttonUpImage().size();
82 99
83 m_buttonMask = QImage( buttonAreaSize, 8, 255 ); 100 d->buttonMask = QImage( buttonAreaSize, 8, 255 );
84 m_buttonMask.fill( 0 ); 101 d->buttonMask.fill( 0 );
85 102
86 for ( uint i = 0; i < buttonCount; ++i ) 103 for ( uint i = 0; i < buttonCount; ++i )
87 addButtonToMask( skinButtonInfo[ i ].command + 1, buttonMaskImage( skinButtonInfo[ i ].fileName ) ); 104 addButtonToMask( skinButtonInfo[ i ].command + 1, buttonMaskImage( skinButtonInfo[ i ].fileName ) );
88 105
89 return m_buttonMask; 106 return d->buttonMask;
90} 107}
91 108
92void Skin::addButtonToMask( int tag, const QImage &maskImage ) const 109void Skin::addButtonToMask( int tag, const QImage &maskImage ) const
93{ 110{
94 if ( maskImage.isNull() ) 111 if ( maskImage.isNull() )
95 return; 112 return;
96 113
97 uchar **dest = m_buttonMask.jumpTable(); 114 uchar **dest = d->buttonMask.jumpTable();
98 for ( int y = 0; y < m_buttonMask.height(); y++ ) { 115 for ( int y = 0; y < d->buttonMask.height(); y++ ) {
99 uchar *line = dest[y]; 116 uchar *line = dest[y];
100 for ( int x = 0; x < m_buttonMask.width(); x++ ) 117 for ( int x = 0; x < d->buttonMask.width(); x++ )
101 if ( !qRed( maskImage.pixel( x, y ) ) ) 118 if ( !qRed( maskImage.pixel( x, y ) ) )
102 line[x] = tag; 119 line[x] = tag;
103 } 120 }
104} 121}
105 122
106QImage Skin::buttonMaskImage( const QString &fileName ) const 123QImage Skin::buttonMaskImage( const QString &fileName ) const
107{ 124{
108 ButtonMaskImageMap::Iterator it = m_buttonMasks.find( fileName ); 125 SkinData::ButtonMaskImageMap::Iterator it = d->buttonMasks.find( fileName );
109 if ( it == m_buttonMasks.end() ) { 126 if ( it == d->buttonMasks.end() ) {
110 QString prefix = m_skinPath + QString::fromLatin1( "/skin%1_mask_" ).arg( m_fileNameInfix ); 127 QString prefix = m_skinPath + QString::fromLatin1( "/skin%1_mask_" ).arg( m_fileNameInfix );
111 QString path = prefix + fileName + ".png"; 128 QString path = prefix + fileName + ".png";
112 it = m_buttonMasks.insert( fileName, SkinCache::self().loadImage( path ) ); 129 it = d->buttonMasks.insert( fileName, SkinCache::self().loadImage( path ) );
113 } 130 }
114 return *it; 131 return *it;
115} 132}
116 133
117QString Skin::defaultSkinName() 134QString Skin::defaultSkinName()
118{ 135{
119 Config cfg( "OpiePlayer" ); 136 Config cfg( "OpiePlayer" );
120 cfg.setGroup( "Options" ); 137 cfg.setGroup( "Options" );
121 return cfg.readEntry( "Skin", "default" ); 138 return cfg.readEntry( "Skin", "default" );
122} 139}
123 140
124SkinCache::SkinCache() 141SkinCache::SkinCache()
125{ 142{
126 m_cache.setAutoDelete( true ); 143 m_cache.setAutoDelete( true );
127} 144}
128 145
diff --git a/noncore/multimedia/opieplayer2/skin.h b/noncore/multimedia/opieplayer2/skin.h
index 9f7326e..5ab6574 100644
--- a/noncore/multimedia/opieplayer2/skin.h
+++ b/noncore/multimedia/opieplayer2/skin.h
@@ -19,65 +19,62 @@
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#ifndef SKIN_H 23#ifndef SKIN_H
24#define SKIN_H 24#define SKIN_H
25 25
26#include <qstring.h> 26#include <qstring.h>
27#include <qimage.h> 27#include <qimage.h>
28#include <qmap.h> 28#include <qmap.h>
29#include <qdict.h> 29#include <qdict.h>
30 30
31#include "mediawidget.h" 31#include "mediawidget.h"
32#include "threadutil.h" 32#include "threadutil.h"
33#include "singleton.h" 33#include "singleton.h"
34 34
35struct SkinData;
36
35class Skin 37class Skin
36{ 38{
37public: 39public:
38 Skin( const QString &name, const QString &fileNameInfix ); 40 Skin( const QString &name, const QString &fileNameInfix );
39 Skin( const QString &fileNameInfix ); 41 Skin( const QString &fileNameInfix );
42 ~Skin();
40 43
41 void preload( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount ); 44 void preload( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount );
42 45
43 QImage backgroundImage() const; 46 QImage backgroundImage() const;
44 QImage buttonUpImage() const; 47 QImage buttonUpImage() const;
45 QImage buttonDownImage() const; 48 QImage buttonDownImage() const;
46 49
47 QImage buttonMask( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount ) const; 50 QImage buttonMask( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount ) const;
48 51
49 QImage buttonMaskImage( const QString &fileName ) const; 52 QImage buttonMaskImage( const QString &fileName ) const;
50 53
51 static QString defaultSkinName(); 54 static QString defaultSkinName();
52 55
53private: 56private:
54 void init( const QString &name ); 57 void init( const QString &name );
55 58
56 void addButtonToMask( int tag, const QImage &maskImage ) const; 59 void addButtonToMask( int tag, const QImage &maskImage ) const;
57 60
58 QString m_fileNameInfix; 61 QString m_fileNameInfix;
59 QString m_skinPath; 62 QString m_skinPath;
60 63
61 typedef QMap<QString, QImage> ButtonMaskImageMap; 64 SkinData *d;
62
63 mutable QImage m_backgroundImage;
64 mutable QImage m_buttonUpImage;
65 mutable QImage m_buttonDownImage;
66 mutable QImage m_buttonMask;
67 mutable ButtonMaskImageMap m_buttonMasks;
68 65
69 Skin( const Skin & ); 66 Skin( const Skin & );
70 Skin &operator=( const Skin & ); 67 Skin &operator=( const Skin & );
71}; 68};
72 69
73class SkinCache : public Singleton<SkinCache> 70class SkinCache : public Singleton<SkinCache>
74{ 71{
75public: 72public:
76 SkinCache(); 73 SkinCache();
77 74
78 QImage loadImage( const QString &name ); 75 QImage loadImage( const QString &name );
79 76
80private: 77private:
81 typedef QDict<QImage> ImageCache; 78 typedef QDict<QImage> ImageCache;
82 79
83 ImageCache m_cache; 80 ImageCache m_cache;