summaryrefslogtreecommitdiff
authorsimon <simon>2002-12-11 12:04:54 (UTC)
committer simon <simon>2002-12-11 12:04:54 (UTC)
commit882ddb046c81bdee5eeca59fde7ec458ae522dc7 (patch) (unidiff)
treeb51292ac603f7ec41501c707a868dd462937224f
parentd7b877a5532e6377f034514c89c0b45b96265471 (diff)
downloadopie-882ddb046c81bdee5eeca59fde7ec458ae522dc7.zip
opie-882ddb046c81bdee5eeca59fde7ec458ae522dc7.tar.gz
opie-882ddb046c81bdee5eeca59fde7ec458ae522dc7.tar.bz2
- starting to factor out the actual skin image loading into a separate
class
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/mediawidget.cpp5
-rw-r--r--noncore/multimedia/opieplayer2/opieplayer2.pro6
-rw-r--r--noncore/multimedia/opieplayer2/skin.cpp18
-rw-r--r--noncore/multimedia/opieplayer2/skin.h22
4 files changed, 48 insertions, 3 deletions
diff --git a/noncore/multimedia/opieplayer2/mediawidget.cpp b/noncore/multimedia/opieplayer2/mediawidget.cpp
index 70ef8d9..617e0fe 100644
--- a/noncore/multimedia/opieplayer2/mediawidget.cpp
+++ b/noncore/multimedia/opieplayer2/mediawidget.cpp
@@ -1,200 +1,203 @@
1/* 1/*
2 Copyright (C) 2002 Simon Hausmann <hausmann@kde.org> 2 Copyright (C) 2002 Simon Hausmann <hausmann@kde.org>
3 (C) 2002 Max Reiss <harlekin@handhelds.org> 3 (C) 2002 Max Reiss <harlekin@handhelds.org>
4 (C) 2002 L. Potter <ljp@llornkcor.com> 4 (C) 2002 L. Potter <ljp@llornkcor.com>
5 (C) 2002 Holger Freyther <zecke@handhelds.org> 5 (C) 2002 Holger Freyther <zecke@handhelds.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. 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 23
24#include "mediawidget.h" 24#include "mediawidget.h"
25#include "playlistwidget.h" 25#include "playlistwidget.h"
26#include "skin.h"
26 27
27#include <qpe/config.h> 28#include <qpe/config.h>
28#include <qpe/qpeapplication.h> 29#include <qpe/qpeapplication.h>
29 30
30MediaWidget::MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent, const char *name ) 31MediaWidget::MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent, const char *name )
31 : QWidget( parent, name ), mediaPlayerState( _mediaPlayerState ), playList( _playList ) 32 : QWidget( parent, name ), mediaPlayerState( _mediaPlayerState ), playList( _playList )
32{ 33{
33 connect( &mediaPlayerState, SIGNAL( displayTypeChanged( MediaPlayerState::DisplayType ) ), 34 connect( &mediaPlayerState, SIGNAL( displayTypeChanged( MediaPlayerState::DisplayType ) ),
34 this, SLOT( setDisplayType( MediaPlayerState::DisplayType ) ) ); 35 this, SLOT( setDisplayType( MediaPlayerState::DisplayType ) ) );
35 connect( &mediaPlayerState, SIGNAL( lengthChanged( long ) ), 36 connect( &mediaPlayerState, SIGNAL( lengthChanged( long ) ),
36 this, SLOT( setLength( long ) ) ); 37 this, SLOT( setLength( long ) ) );
37 connect( &mediaPlayerState, SIGNAL( playingToggled( bool ) ), 38 connect( &mediaPlayerState, SIGNAL( playingToggled( bool ) ),
38 this, SLOT( setPlaying( bool ) ) ); 39 this, SLOT( setPlaying( bool ) ) );
39} 40}
40 41
41MediaWidget::~MediaWidget() 42MediaWidget::~MediaWidget()
42{ 43{
43} 44}
44 45
45void MediaWidget::setupButtons( const SkinButtonInfo *skinInfo, uint buttonCount, 46void MediaWidget::setupButtons( const SkinButtonInfo *skinInfo, uint buttonCount,
46 const QString &imagePrefix, const QSize &buttonAreaSize ) 47 const QString &imagePrefix, const QSize &buttonAreaSize )
47{ 48{
48 buttonMask = QImage( buttonAreaSize, 8, 255 ); 49 buttonMask = QImage( buttonAreaSize, 8, 255 );
49 buttonMask.fill( 0 ); 50 buttonMask.fill( 0 );
50 51
51 buttons.clear(); 52 buttons.clear();
52 buttons.reserve( buttonCount ); 53 buttons.reserve( buttonCount );
53 54
54 for ( uint i = 0; i < buttonCount; ++i ) { 55 for ( uint i = 0; i < buttonCount; ++i ) {
55 Button button = setupButton( skinInfo[ i ], imagePrefix ); 56 Button button = setupButton( skinInfo[ i ], imagePrefix );
56 buttons.push_back( button ); 57 buttons.push_back( button );
57 } 58 }
58} 59}
59 60
60MediaWidget::Button MediaWidget::setupButton( const SkinButtonInfo &buttonInfo, const QString &imagePrefix ) 61MediaWidget::Button MediaWidget::setupButton( const SkinButtonInfo &buttonInfo, const QString &imagePrefix )
61{ 62{
62 Button button; 63 Button button;
63 button.command = buttonInfo.command; 64 button.command = buttonInfo.command;
64 button.type = buttonInfo.type; 65 button.type = buttonInfo.type;
65 66
66 QString fileName = imagePrefix + buttonInfo.fileName + ".png"; 67 QString fileName = imagePrefix + buttonInfo.fileName + ".png";
67 68
68 button.mask = setupButtonMask( button.command, fileName ); 69 button.mask = setupButtonMask( button.command, fileName );
69 70
70 return button; 71 return button;
71} 72}
72 73
73QBitmap MediaWidget::setupButtonMask( const Command &command, const QString &fileName ) 74QBitmap MediaWidget::setupButtonMask( const Command &command, const QString &fileName )
74{ 75{
75 QImage imgMask( Resource::findPixmap( fileName ) ); 76 QImage imgMask( Resource::findPixmap( fileName ) );
76 if ( imgMask.isNull() ) 77 if ( imgMask.isNull() )
77 return QBitmap(); 78 return QBitmap();
78 79
79 uchar **dest = buttonMask.jumpTable(); 80 uchar **dest = buttonMask.jumpTable();
80 for ( int y = 0; y < buttonMask.height(); y++ ) { 81 for ( int y = 0; y < buttonMask.height(); y++ ) {
81 uchar *line = dest[y]; 82 uchar *line = dest[y];
82 for ( int x = 0; x < buttonMask.width(); x++ ) 83 for ( int x = 0; x < buttonMask.width(); x++ )
83 if ( !qRed( imgMask.pixel( x, y ) ) ) 84 if ( !qRed( imgMask.pixel( x, y ) ) )
84 line[x] = command + 1; 85 line[x] = command + 1;
85 } 86 }
86 87
87 // ### grmbl qt2. use constructor when switching to qt3. 88 // ### grmbl qt2. use constructor when switching to qt3.
88 QBitmap bm; bm = imgMask; 89 QBitmap bm; bm = imgMask;
89 return bm; 90 return bm;
90} 91}
91 92
92void MediaWidget::loadDefaultSkin( const SkinButtonInfo *skinInfo, uint buttonCount, const QString &fileNameInfix ) 93void MediaWidget::loadDefaultSkin( const SkinButtonInfo *skinInfo, uint buttonCount, const QString &fileNameInfix )
93{ 94{
94 Config cfg( "OpiePlayer" ); 95 Config cfg( "OpiePlayer" );
95 cfg.setGroup( "Options" ); 96 cfg.setGroup( "Options" );
96 QString skin = cfg.readEntry( "Skin","default" ); 97 QString skin = cfg.readEntry( "Skin","default" );
97 98
98 loadSkin( skinInfo, buttonCount, skin, fileNameInfix ); 99 loadSkin( skinInfo, buttonCount, skin, fileNameInfix );
99} 100}
100 101
101void MediaWidget::loadSkin( const SkinButtonInfo *skinInfo, uint buttonCount, const QString &name, const QString &fileNameInfix ) 102void MediaWidget::loadSkin( const SkinButtonInfo *skinInfo, uint buttonCount, const QString &name, const QString &fileNameInfix )
102{ 103{
104 Skin skin( name, fileNameInfix );
105
103 QString skinPath = "opieplayer2/skins/" + name; 106 QString skinPath = "opieplayer2/skins/" + name;
104 backgroundPixmap = QPixmap( Resource::loadPixmap( QString( "%1/background" ).arg( skinPath ) ) ); 107 backgroundPixmap = skin.backgroundImage();
105 buttonUpImage = QImage( Resource::loadImage( QString( "%1/skin%2_up" ).arg( skinPath ).arg( fileNameInfix ) ) ); 108 buttonUpImage = QImage( Resource::loadImage( QString( "%1/skin%2_up" ).arg( skinPath ).arg( fileNameInfix ) ) );
106 buttonDownImage = QImage( Resource::loadImage( QString( "%1/skin%2_down" ).arg( skinPath ).arg( fileNameInfix ) ) ); 109 buttonDownImage = QImage( Resource::loadImage( QString( "%1/skin%2_down" ).arg( skinPath ).arg( fileNameInfix ) ) );
107 110
108 setupButtons( skinInfo, buttonCount, 111 setupButtons( skinInfo, buttonCount,
109 skinPath + QString::fromLatin1( "/skin%1_mask_" ).arg( fileNameInfix ), buttonUpImage.size() ); 112 skinPath + QString::fromLatin1( "/skin%1_mask_" ).arg( fileNameInfix ), buttonUpImage.size() );
110} 113}
111 114
112void MediaWidget::closeEvent( QCloseEvent * ) 115void MediaWidget::closeEvent( QCloseEvent * )
113{ 116{
114 mediaPlayerState.setList(); 117 mediaPlayerState.setList();
115} 118}
116 119
117void MediaWidget::paintEvent( QPaintEvent *pe ) 120void MediaWidget::paintEvent( QPaintEvent *pe )
118{ 121{
119 QPainter p( this ); 122 QPainter p( this );
120 123
121 if ( mediaPlayerState.isFullscreen() ) { 124 if ( mediaPlayerState.isFullscreen() ) {
122 // Clear the background 125 // Clear the background
123 p.setBrush( QBrush( Qt::black ) ); 126 p.setBrush( QBrush( Qt::black ) );
124 return; 127 return;
125 } 128 }
126 129
127 if ( !pe->erased() ) { 130 if ( !pe->erased() ) {
128 // Combine with background and double buffer 131 // Combine with background and double buffer
129 QPixmap pix( pe->rect().size() ); 132 QPixmap pix( pe->rect().size() );
130 QPainter p( &pix ); 133 QPainter p( &pix );
131 p.translate( -pe->rect().topLeft().x(), -pe->rect().topLeft().y() ); 134 p.translate( -pe->rect().topLeft().x(), -pe->rect().topLeft().y() );
132 p.drawTiledPixmap( pe->rect(), backgroundPixmap, pe->rect().topLeft() ); 135 p.drawTiledPixmap( pe->rect(), backgroundPixmap, pe->rect().topLeft() );
133 paintAllButtons( p ); 136 paintAllButtons( p );
134 QPainter p2( this ); 137 QPainter p2( this );
135 p2.drawPixmap( pe->rect().topLeft(), pix ); 138 p2.drawPixmap( pe->rect().topLeft(), pix );
136 } else { 139 } else {
137 QPainter p( this ); 140 QPainter p( this );
138 paintAllButtons( p ); 141 paintAllButtons( p );
139 } 142 }
140} 143}
141 144
142MediaWidget::Button *MediaWidget::buttonAt( const QPoint &position ) 145MediaWidget::Button *MediaWidget::buttonAt( const QPoint &position )
143{ 146{
144 if ( position.x() <= 0 || position.y() <= 0 || 147 if ( position.x() <= 0 || position.y() <= 0 ||
145 position.x() >= buttonMask.width() || 148 position.x() >= buttonMask.width() ||
146 position.y() >= buttonMask.height() ) 149 position.y() >= buttonMask.height() )
147 return 0; 150 return 0;
148 151
149 int pixelIdx = buttonMask.pixelIndex( position.x(), position.y() ); 152 int pixelIdx = buttonMask.pixelIndex( position.x(), position.y() );
150 for ( ButtonVector::iterator it = buttons.begin(); it != buttons.end(); ++it ) 153 for ( ButtonVector::iterator it = buttons.begin(); it != buttons.end(); ++it )
151 if ( it->command + 1 == pixelIdx ) 154 if ( it->command + 1 == pixelIdx )
152 return &( *it ); 155 return &( *it );
153 156
154 return 0; 157 return 0;
155} 158}
156 159
157void MediaWidget::mousePressEvent( QMouseEvent *event ) 160void MediaWidget::mousePressEvent( QMouseEvent *event )
158{ 161{
159 Button *button = buttonAt( event->pos() - upperLeftOfButtonMask ); 162 Button *button = buttonAt( event->pos() - upperLeftOfButtonMask );
160 163
161 if ( !button ) { 164 if ( !button ) {
162 QWidget::mousePressEvent( event ); 165 QWidget::mousePressEvent( event );
163 return; 166 return;
164 } 167 }
165 168
166 switch ( button->command ) { 169 switch ( button->command ) {
167 case VolumeUp: emit moreClicked(); return; 170 case VolumeUp: emit moreClicked(); return;
168 case VolumeDown: emit lessClicked(); return; 171 case VolumeDown: emit lessClicked(); return;
169 case Back: emit backClicked(); return; 172 case Back: emit backClicked(); return;
170 case Forward: emit forwardClicked(); return; 173 case Forward: emit forwardClicked(); return;
171 default: break; 174 default: break;
172 } 175 }
173} 176}
174 177
175void MediaWidget::mouseReleaseEvent( QMouseEvent *event ) 178void MediaWidget::mouseReleaseEvent( QMouseEvent *event )
176{ 179{
177 Button *button = buttonAt( event->pos() - upperLeftOfButtonMask ); 180 Button *button = buttonAt( event->pos() - upperLeftOfButtonMask );
178 181
179 if ( !button ) { 182 if ( !button ) {
180 QWidget::mouseReleaseEvent( event ); 183 QWidget::mouseReleaseEvent( event );
181 return; 184 return;
182 } 185 }
183 186
184 if ( button->type == ToggleButton ) 187 if ( button->type == ToggleButton )
185 toggleButton( *button ); 188 toggleButton( *button );
186 189
187 handleCommand( button->command, button->isDown ); 190 handleCommand( button->command, button->isDown );
188} 191}
189 192
190void MediaWidget::makeVisible() 193void MediaWidget::makeVisible()
191{ 194{
192} 195}
193 196
194void MediaWidget::handleCommand( Command command, bool buttonDown ) 197void MediaWidget::handleCommand( Command command, bool buttonDown )
195{ 198{
196 switch ( command ) { 199 switch ( command ) {
197 case Play: mediaPlayerState.togglePaused(); return; 200 case Play: mediaPlayerState.togglePaused(); return;
198 case Stop: mediaPlayerState.setPlaying(FALSE); return; 201 case Stop: mediaPlayerState.setPlaying(FALSE); return;
199 case Next: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setNext(); return; 202 case Next: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setNext(); return;
200 case Previous: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setPrev(); return; 203 case Previous: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setPrev(); return;
diff --git a/noncore/multimedia/opieplayer2/opieplayer2.pro b/noncore/multimedia/opieplayer2/opieplayer2.pro
index 8d549b6..e1bb879 100644
--- a/noncore/multimedia/opieplayer2/opieplayer2.pro
+++ b/noncore/multimedia/opieplayer2/opieplayer2.pro
@@ -1,25 +1,27 @@
1TEMPLATE = app 1TEMPLATE = app
2#CONFIG = qt warn_on release 2#CONFIG = qt warn_on release
3CONFIG = qt warn_on debug 3CONFIG = qt warn_on debug
4DESTDIR = $(OPIEDIR)/bin 4DESTDIR = $(OPIEDIR)/bin
5HEADERS = playlistselection.h mediaplayerstate.h xinecontrol.h \ 5HEADERS = playlistselection.h mediaplayerstate.h xinecontrol.h \
6 videowidget.h audiowidget.h playlistwidget.h om3u.h mediaplayer.h inputDialog.h \ 6 videowidget.h audiowidget.h playlistwidget.h om3u.h mediaplayer.h inputDialog.h \
7 frame.h lib.h xinevideowidget.h volumecontrol.h playlistwidgetgui.h\ 7 frame.h lib.h xinevideowidget.h volumecontrol.h playlistwidgetgui.h\
8 alphablend.h yuv2rgb.h threadutil.h mediawidget.h playlistview.h playlistfileview.h 8 alphablend.h yuv2rgb.h threadutil.h mediawidget.h playlistview.h playlistfileview.h \
9 skin.h
9SOURCES = main.cpp \ 10SOURCES = main.cpp \
10 playlistselection.cpp mediaplayerstate.cpp xinecontrol.cpp \ 11 playlistselection.cpp mediaplayerstate.cpp xinecontrol.cpp \
11 videowidget.cpp audiowidget.cpp playlistwidget.cpp om3u.cpp mediaplayer.cpp inputDialog.cpp \ 12 videowidget.cpp audiowidget.cpp playlistwidget.cpp om3u.cpp mediaplayer.cpp inputDialog.cpp \
12 frame.cpp lib.cpp nullvideo.c xinevideowidget.cpp volumecontrol.cpp \ 13 frame.cpp lib.cpp nullvideo.c xinevideowidget.cpp volumecontrol.cpp \
13 playlistwidgetgui.cpp\ 14 playlistwidgetgui.cpp\
14 alphablend.c yuv2rgb.c yuv2rgb_arm.c yuv2rgb_arm4l.S \ 15 alphablend.c yuv2rgb.c yuv2rgb_arm.c yuv2rgb_arm4l.S \
15 threadutil.cpp mediawidget.cpp playlistview.cpp playlistfileview.cpp 16 threadutil.cpp mediawidget.cpp playlistview.cpp playlistfileview.cpp \
17 skin.cpp
16TARGET = opieplayer2 18TARGET = opieplayer2
17INCLUDEPATH += $(OPIEDIR)/include 19INCLUDEPATH += $(OPIEDIR)/include
18DEPENDPATH += $(OPIEDIR)/include 20DEPENDPATH += $(OPIEDIR)/include
19LIBS += -lqpe -lpthread -lopie -lxine 21LIBS += -lqpe -lpthread -lopie -lxine
20MOC_DIR = qpeobj 22MOC_DIR = qpeobj
21OBJECTS_DIR = qpeobj 23OBJECTS_DIR = qpeobj
22 24
23#INCLUDEPATH += $(OPIEDIR)/include 25#INCLUDEPATH += $(OPIEDIR)/include
24#DEPENDPATH += $(OPIEDIR)/include 26#DEPENDPATH += $(OPIEDIR)/include
25 27
diff --git a/noncore/multimedia/opieplayer2/skin.cpp b/noncore/multimedia/opieplayer2/skin.cpp
new file mode 100644
index 0000000..097b29a
--- a/dev/null
+++ b/noncore/multimedia/opieplayer2/skin.cpp
@@ -0,0 +1,18 @@
1
2#include "skin.h"
3
4#include <qpe/resource.h>
5
6Skin::Skin( const QString &name, const QString &fileNameInfix )
7 : m_name( name ), m_fileNameInfix( fileNameInfix )
8{
9 m_skinPath = "opieplayer2/skins/" + name;
10}
11
12QImage Skin::backgroundImage() const
13{
14 return QImage( Resource::findPixmap( QString( "%1/background" ).arg( m_skinPath ) ) );
15}
16
17/* vim: et sw=4 ts=4
18 */
diff --git a/noncore/multimedia/opieplayer2/skin.h b/noncore/multimedia/opieplayer2/skin.h
new file mode 100644
index 0000000..3c09e43
--- a/dev/null
+++ b/noncore/multimedia/opieplayer2/skin.h
@@ -0,0 +1,22 @@
1#ifndef SKIN_H
2#define SKIN_H
3
4#include <qstring.h>
5#include <qimage.h>
6
7class Skin
8{
9public:
10 Skin( const QString &name, const QString &fileNameInfix );
11
12 QImage backgroundImage() const;
13
14private:
15 QString m_name;
16 QString m_fileNameInfix;
17 QString m_skinPath;
18};
19
20#endif // SKIN_H
21/* vim: et sw=4 ts=4
22 */