summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2004-01-18 05:58:46 (UTC)
committer llornkcor <llornkcor>2004-01-18 05:58:46 (UTC)
commita2a3aabf21655cc9c7df8e2ed0d420d2b208fd3d (patch) (unidiff)
tree6cb2840a838d24cd1500e5c86c54393234999f08
parenta5a10ccc4b39e9ec21b1774713745b31f47a5133 (diff)
downloadopie-a2a3aabf21655cc9c7df8e2ed0d420d2b208fd3d.zip
opie-a2a3aabf21655cc9c7df8e2ed0d420d2b208fd3d.tar.gz
opie-a2a3aabf21655cc9c7df8e2ed0d420d2b208fd3d.tar.bz2
scale background image if needed
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/audiowidget.cpp13
-rw-r--r--core/multimedia/opieplayer/videowidget.cpp26
2 files changed, 28 insertions, 11 deletions
diff --git a/core/multimedia/opieplayer/audiowidget.cpp b/core/multimedia/opieplayer/audiowidget.cpp
index b187cb4..44fbe48 100644
--- a/core/multimedia/opieplayer/audiowidget.cpp
+++ b/core/multimedia/opieplayer/audiowidget.cpp
@@ -1,266 +1,277 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qpe/qpeapplication.h> 20#include <qpe/qpeapplication.h>
21#include <qpe/resource.h> 21#include <qpe/resource.h>
22#include <qpe/config.h> 22#include <qpe/config.h>
23 23
24#include <qwidget.h> 24#include <qwidget.h>
25#include <qpixmap.h> 25#include <qpixmap.h>
26#include <qbutton.h> 26#include <qbutton.h>
27#include <qpainter.h> 27#include <qpainter.h>
28#include <qframe.h> 28#include <qframe.h>
29#include <qlayout.h> 29#include <qlayout.h>
30#include <qdir.h> 30#include <qdir.h>
31#include "audiowidget.h" 31#include "audiowidget.h"
32#include "mediaplayerstate.h" 32#include "mediaplayerstate.h"
33 33
34#include <stdlib.h> 34#include <stdlib.h>
35#include <stdio.h> 35#include <stdio.h>
36 36
37extern MediaPlayerState *mediaPlayerState; 37extern MediaPlayerState *mediaPlayerState;
38 38
39 39
40static const int xo = -2; // movable x offset 40static const int xo = -2; // movable x offset
41static const int yo = 22; // movable y offset 41static const int yo = 22; // movable y offset
42 42
43struct MediaButton { 43struct MediaButton {
44 bool isToggle, isHeld, isDown; 44 bool isToggle, isHeld, isDown;
45}; 45};
46 46
47//Layout information for the audioButtons (and if it is a toggle button or not) 47//Layout information for the audioButtons (and if it is a toggle button or not)
48MediaButton audioButtons[] = { 48MediaButton audioButtons[] = {
49 { TRUE, FALSE, FALSE }, // play 49 { TRUE, FALSE, FALSE }, // play
50 { FALSE, FALSE, FALSE }, // stop 50 { FALSE, FALSE, FALSE }, // stop
51 { FALSE, FALSE, FALSE }, // next 51 { FALSE, FALSE, FALSE }, // next
52 { FALSE, FALSE, FALSE }, // previous 52 { FALSE, FALSE, FALSE }, // previous
53 { FALSE, FALSE, FALSE }, // volume up 53 { FALSE, FALSE, FALSE }, // volume up
54 { FALSE, FALSE, FALSE }, // volume down 54 { FALSE, FALSE, FALSE }, // volume down
55 { TRUE, FALSE, FALSE }, // repeat/loop 55 { TRUE, FALSE, FALSE }, // repeat/loop
56 { FALSE, FALSE, FALSE }, // playlist 56 { FALSE, FALSE, FALSE }, // playlist
57 { FALSE, FALSE, FALSE }, // forward 57 { FALSE, FALSE, FALSE }, // forward
58 { FALSE, FALSE, FALSE } // back 58 { FALSE, FALSE, FALSE } // back
59}; 59};
60 60
61const char *skin_mask_file_names[10] = { 61const char *skin_mask_file_names[10] = {
62 "play", "stop", "next", "prev", "up", 62 "play", "stop", "next", "prev", "up",
63 "down", "loop", "playlist", "forward", "back" 63 "down", "loop", "playlist", "forward", "back"
64}; 64};
65 65
66static void changeTextColor( QWidget *w ) { 66static void changeTextColor( QWidget *w ) {
67 QPalette p = w->palette(); 67 QPalette p = w->palette();
68 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) ); 68 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) );
69 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) ); 69 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) );
70 w->setPalette( p ); 70 w->setPalette( p );
71} 71}
72 72
73static const int numButtons = (sizeof(audioButtons)/sizeof(MediaButton)); 73static const int numButtons = (sizeof(audioButtons)/sizeof(MediaButton));
74 74
75AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) : 75AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) :
76 QWidget( parent, name, f ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ) 76 QWidget( parent, name, f ), songInfo( this ), slider( Qt::Horizontal, this ), time( this )
77{ 77{
78 setCaption( tr("OpiePlayer") ); 78 setCaption( tr("OpiePlayer") );
79 // qDebug("<<<<<audioWidget"); 79 // qDebug("<<<<<audioWidget");
80 80
81 Config cfg("OpiePlayer"); 81 Config cfg("OpiePlayer");
82 cfg.setGroup("Options"); 82 cfg.setGroup("Options");
83 skin = cfg.readEntry("Skin","default"); 83 skin = cfg.readEntry("Skin","default");
84 //skin = "scaleTest"; 84 //skin = "scaleTest";
85// color of background, frame, degree of transparency 85// color of background, frame, degree of transparency
86 86
87// QString skinPath = "opieplayer/skins/" + skin; 87// QString skinPath = "opieplayer/skins/" + skin;
88 QString skinPath; 88 QString skinPath;
89 skinPath = "opieplayer2/skins/" + skin; 89 skinPath = "opieplayer2/skins/" + skin;
90 if(!QDir(QString(getenv("OPIEDIR")) +"/pics/"+skinPath).exists()) 90 if(!QDir(QString(getenv("OPIEDIR")) +"/pics/"+skinPath).exists())
91 skinPath = "opieplayer2/skins/default"; 91 skinPath = "opieplayer2/skins/default";
92 92
93 // qDebug("skin path " + skinPath); 93 // qDebug("skin path " + skinPath);
94 94
95 pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); 95 pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) );
96 imgUp = new QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) ); 96 imgUp = new QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) );
97 imgDn = new QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) ); 97 imgDn = new QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) );
98 98
99 imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 ); 99 imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 );
100 imgButtonMask->fill( 0 ); 100 imgButtonMask->fill( 0 );
101 101
102 for ( int i = 0; i < 10; i++ ) { 102 for ( int i = 0; i < 10; i++ ) {
103 QString filename = QString(getenv("OPIEDIR")) + "/pics/" + skinPath + "/skin_mask_" + skin_mask_file_names[i] + ".png"; 103 QString filename = QString(getenv("OPIEDIR")) + "/pics/" + skinPath + "/skin_mask_" + skin_mask_file_names[i] + ".png";
104 masks[i] = new QBitmap( filename ); 104 masks[i] = new QBitmap( filename );
105 105
106 if ( !masks[i]->isNull() ) { 106 if ( !masks[i]->isNull() ) {
107 QImage imgMask = masks[i]->convertToImage(); 107 QImage imgMask = masks[i]->convertToImage();
108 uchar **dest = imgButtonMask->jumpTable(); 108 uchar **dest = imgButtonMask->jumpTable();
109 for ( int y = 0; y < imgUp->height(); y++ ) { 109 for ( int y = 0; y < imgUp->height(); y++ ) {
110 uchar *line = dest[y]; 110 uchar *line = dest[y];
111 for ( int x = 0; x < imgUp->width(); x++ ) 111 for ( int x = 0; x < imgUp->width(); x++ )
112 if ( !qRed( imgMask.pixel( x, y ) ) ) 112 if ( !qRed( imgMask.pixel( x, y ) ) )
113 line[x] = i + 1; 113 line[x] = i + 1;
114 } 114 }
115 } 115 }
116 116
117 } 117 }
118 118
119 for ( int i = 0; i < 11; i++ ) { 119 for ( int i = 0; i < 11; i++ ) {
120 buttonPixUp[i] = NULL; 120 buttonPixUp[i] = NULL;
121 buttonPixDown[i] = NULL; 121 buttonPixDown[i] = NULL;
122 } 122 }
123 123
124 setBackgroundPixmap( *pixBg ); 124 QWidget *d = QApplication::desktop();
125 int width = d->width();
126 int height = d->height();
127
128 if( (width != pixBg->width() ) || (height != pixBg->height() ) ) {
129 // qDebug("<<<<<<<< scale image >>>>>>>>>>>>");
130 QImage img;
131 img = pixBg->convertToImage();
132 pixBg->convertFromImage( img.smoothScale( width, height));
133 }
134 setBackgroundPixmap( *pixBg);
125 135
126 songInfo.setFocusPolicy( QWidget::NoFocus ); 136 songInfo.setFocusPolicy( QWidget::NoFocus );
127 137
128// changeTextColor( &songInfo ); 138// changeTextColor( &songInfo );
129// songInfo.setBackgroundColor( QColor( 167, 212, 167 )); 139// songInfo.setBackgroundColor( QColor( 167, 212, 167 ));
130// songInfo.setFrameStyle( QFrame::NoFrame); 140// songInfo.setFrameStyle( QFrame::NoFrame);
131// songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken ); 141// songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
132 //NoFrame 142 //NoFrame
133// songInfo.setForegroundColor(Qt::white); 143// songInfo.setForegroundColor(Qt::white);
134 144
135 slider.setFixedHeight( 20 ); 145 slider.setFixedHeight( 20 );
136 slider.setMinValue( 0 ); 146 slider.setMinValue( 0 );
137 slider.setMaxValue( 1 ); 147 slider.setMaxValue( 1 );
138 slider.setFocusPolicy( QWidget::NoFocus ); 148 slider.setFocusPolicy( QWidget::NoFocus );
149
139 slider.setBackgroundPixmap( *pixBg ); 150 slider.setBackgroundPixmap( *pixBg );
140 151
141 time.setFocusPolicy( QWidget::NoFocus ); 152 time.setFocusPolicy( QWidget::NoFocus );
142 time.setAlignment( Qt::AlignCenter ); 153 time.setAlignment( Qt::AlignCenter );
143 time.setFrame(FALSE); 154 time.setFrame(FALSE);
144 changeTextColor( &time ); 155 changeTextColor( &time );
145 156
146 resizeEvent( NULL ); 157 resizeEvent( NULL );
147 158
148 connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 159 connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
149 connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 160 connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
150 161
151 connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) ); 162 connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) );
152 connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) ); 163 connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) );
153 connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) ); 164 connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) );
154// connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) ); 165// connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) );
155 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) ); 166 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) );
156 167
157 // Intialise state 168 // Intialise state
158 setLength( mediaPlayerState->length() ); 169 setLength( mediaPlayerState->length() );
159 setPosition( mediaPlayerState->position() ); 170 setPosition( mediaPlayerState->position() );
160 setLooping( mediaPlayerState->fullscreen() ); 171 setLooping( mediaPlayerState->fullscreen() );
161// setPaused( mediaPlayerState->paused() ); 172// setPaused( mediaPlayerState->paused() );
162 setPlaying( mediaPlayerState->playing() ); 173 setPlaying( mediaPlayerState->playing() );
163this->setFocus(); 174this->setFocus();
164} 175}
165 176
166 177
167AudioWidget::~AudioWidget() { 178AudioWidget::~AudioWidget() {
168 // setPlaying( false); 179 // setPlaying( false);
169 180
170 for ( int i = 0; i < 10; i++ ) { 181 for ( int i = 0; i < 10; i++ ) {
171 if(buttonPixUp[i]) delete buttonPixUp[i]; 182 if(buttonPixUp[i]) delete buttonPixUp[i];
172 if(buttonPixDown[i]) delete buttonPixDown[i]; 183 if(buttonPixDown[i]) delete buttonPixDown[i];
173 } 184 }
174 if(pixBg) delete pixBg; 185 if(pixBg) delete pixBg;
175 if(imgUp) delete imgUp; 186 if(imgUp) delete imgUp;
176 if(imgDn) delete imgDn; 187 if(imgDn) delete imgDn;
177 if(imgButtonMask) delete imgButtonMask; 188 if(imgButtonMask) delete imgButtonMask;
178 for ( int i = 0; i < 10; i++ ) { 189 for ( int i = 0; i < 10; i++ ) {
179 if(masks[i]) delete masks[i]; 190 if(masks[i]) delete masks[i];
180 } 191 }
181} 192}
182 193
183 194
184QPixmap *combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { 195QPixmap *combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
185 QPixmap pix( img.width(), img.height() ); 196 QPixmap pix( img.width(), img.height() );
186 QPainter p( &pix ); 197 QPainter p( &pix );
187 p.drawTiledPixmap( pix.rect(), bg, offset ); 198 p.drawTiledPixmap( pix.rect(), bg, offset );
188 p.drawImage( 0, 0, img ); 199 p.drawImage( 0, 0, img );
189 return new QPixmap( pix ); 200 return new QPixmap( pix );
190} 201}
191 202
192 203
193QPixmap *maskPixToMask( QPixmap pix, QBitmap mask ) 204QPixmap *maskPixToMask( QPixmap pix, QBitmap mask )
194{ 205{
195 QPixmap *pixmap = new QPixmap( pix ); 206 QPixmap *pixmap = new QPixmap( pix );
196 pixmap->setMask( mask ); 207 pixmap->setMask( mask );
197 return pixmap; 208 return pixmap;
198} 209}
199 210
200 211
201 212
202void AudioWidget::resizeEvent( QResizeEvent * ) { 213void AudioWidget::resizeEvent( QResizeEvent * ) {
203 int h = height(); 214 int h = height();
204 int w = width(); 215 int w = width();
205 216
206 songInfo.setGeometry( QRect( 2, 10, w - 4, 20 ) ); 217 songInfo.setGeometry( QRect( 2, 10, w - 4, 20 ) );
207 slider.setFixedWidth( w - 110 ); 218 slider.setFixedWidth( w - 110 );
208 slider.setGeometry( QRect( 15, h - 30, w - 90, 20 ) ); 219 slider.setGeometry( QRect( 15, h - 30, w - 90, 20 ) );
209 slider.setBackgroundOrigin( QWidget::ParentOrigin ); 220 slider.setBackgroundOrigin( QWidget::ParentOrigin );
210 time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) ); 221 time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) );
211 222
212 xoff = ( w - imgUp->width() ) / 2; 223 xoff = ( w - imgUp->width() ) / 2;
213 yoff = (( h - imgUp->height() ) / 2) - 10; 224 yoff = (( h - imgUp->height() ) / 2) - 10;
214 QPoint p( xoff, yoff ); 225 QPoint p( xoff, yoff );
215 226
216 QPixmap *pixUp = combineImageWithBackground( *imgUp, *pixBg, p ); 227 QPixmap *pixUp = combineImageWithBackground( *imgUp, *pixBg, p );
217 QPixmap *pixDn = combineImageWithBackground( *imgDn, *pixBg, p ); 228 QPixmap *pixDn = combineImageWithBackground( *imgDn, *pixBg, p );
218 229
219 for ( int i = 0; i < 10; i++ ) { 230 for ( int i = 0; i < 10; i++ ) {
220 if ( !masks[i]->isNull() ) { 231 if ( !masks[i]->isNull() ) {
221 delete buttonPixUp[i]; 232 delete buttonPixUp[i];
222 delete buttonPixDown[i]; 233 delete buttonPixDown[i];
223 buttonPixUp[i] = maskPixToMask( *pixUp, *masks[i] ); 234 buttonPixUp[i] = maskPixToMask( *pixUp, *masks[i] );
224 buttonPixDown[i] = maskPixToMask( *pixDn, *masks[i] ); 235 buttonPixDown[i] = maskPixToMask( *pixDn, *masks[i] );
225 } 236 }
226 } 237 }
227 238
228 delete pixUp; 239 delete pixUp;
229 delete pixDn; 240 delete pixDn;
230} 241}
231 242
232 243
233static bool audioSliderBeingMoved = FALSE; 244static bool audioSliderBeingMoved = FALSE;
234 245
235void AudioWidget::sliderPressed() { 246void AudioWidget::sliderPressed() {
236 audioSliderBeingMoved = TRUE; 247 audioSliderBeingMoved = TRUE;
237} 248}
238 249
239 250
240void AudioWidget::sliderReleased() { 251void AudioWidget::sliderReleased() {
241 audioSliderBeingMoved = FALSE; 252 audioSliderBeingMoved = FALSE;
242 if ( slider.width() == 0 ) 253 if ( slider.width() == 0 )
243 return; 254 return;
244 long val = long((double)slider.value() * mediaPlayerState->length() / slider.width()); 255 long val = long((double)slider.value() * mediaPlayerState->length() / slider.width());
245 mediaPlayerState->setPosition( val ); 256 mediaPlayerState->setPosition( val );
246} 257}
247 258
248 259
249void AudioWidget::setPosition( long i ) { 260void AudioWidget::setPosition( long i ) {
250// qDebug("set position %d",i); 261// qDebug("set position %d",i);
251 long length = mediaPlayerState->length(); 262 long length = mediaPlayerState->length();
252 updateSlider( i, length ); 263 updateSlider( i, length );
253} 264}
254 265
255 266
256void AudioWidget::setLength( long max ) { 267void AudioWidget::setLength( long max ) {
257 updateSlider( mediaPlayerState->position(), max ); 268 updateSlider( mediaPlayerState->position(), max );
258} 269}
259 270
260 271
261void AudioWidget::setView( char view ) { 272void AudioWidget::setView( char view ) {
262 273
263 if (mediaPlayerState->isStreaming) { 274 if (mediaPlayerState->isStreaming) {
264 if( !slider.isHidden()) slider.hide(); 275 if( !slider.isHidden()) slider.hide();
265 disconnect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 276 disconnect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
266 disconnect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 277 disconnect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
diff --git a/core/multimedia/opieplayer/videowidget.cpp b/core/multimedia/opieplayer/videowidget.cpp
index 02c8568..d9a9478 100644
--- a/core/multimedia/opieplayer/videowidget.cpp
+++ b/core/multimedia/opieplayer/videowidget.cpp
@@ -1,256 +1,262 @@
1/********************************************************************** 1/**********************************************************************
2 ** Copyright (C) 2000 Trolltech AS. All rights reserved. 2 ** Copyright (C) 2000 Trolltech AS. All rights reserved.
3 ** 3 **
4 ** This file is part of Qtopia Environment. 4 ** This file is part of Qtopia Environment.
5 ** 5 **
6 ** This file may be distributed and/or modified under the terms of the 6 ** This file may be distributed and/or modified under the terms of the
7 ** GNU General Public License version 2 as published by the Free Software 7 ** GNU General Public License version 2 as published by the Free Software
8 ** Foundation and appearing in the file LICENSE.GPL included in the 8 ** Foundation and appearing in the file LICENSE.GPL included in the
9 ** packaging of this file. 9 ** packaging of this file.
10 ** 10 **
11 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13 ** 13 **
14 ** See http://www.trolltech.com/gpl/ for GPL licensing information. 14 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
15 ** 15 **
16 ** Contact info@trolltech.com if any conditions of this licensing are 16 ** Contact info@trolltech.com if any conditions of this licensing are
17 ** not clear to you. 17 ** not clear to you.
18 ** 18 **
19 **********************************************************************/ 19 **********************************************************************/
20#include <qpe/resource.h> 20#include <qpe/resource.h>
21#include <qpe/mediaplayerplugininterface.h> 21#include <qpe/mediaplayerplugininterface.h>
22#include <qpe/config.h> 22#include <qpe/config.h>
23#include <qpe/qpeapplication.h> 23#include <qpe/qpeapplication.h>
24 24
25#include <qdir.h> 25#include <qdir.h>
26#include <qwidget.h> 26#include <qwidget.h>
27#include <qpainter.h> 27#include <qpainter.h>
28#include <qpixmap.h> 28#include <qpixmap.h>
29#include <qslider.h> 29#include <qslider.h>
30#include <qdrawutil.h> 30#include <qdrawutil.h>
31#include "videowidget.h" 31#include "videowidget.h"
32#include "mediaplayerstate.h" 32#include "mediaplayerstate.h"
33 33
34 34
35#ifdef Q_WS_QWS 35#ifdef Q_WS_QWS
36# define USE_DIRECT_PAINTER 36# define USE_DIRECT_PAINTER
37# include <qdirectpainter_qws.h> 37# include <qdirectpainter_qws.h>
38# include <qgfxraster_qws.h> 38# include <qgfxraster_qws.h>
39#endif 39#endif
40 40
41 41
42extern MediaPlayerState *mediaPlayerState; 42extern MediaPlayerState *mediaPlayerState;
43 43
44 44
45static const int xo = 2; // movable x offset 45static const int xo = 2; // movable x offset
46static const int yo = 0; // movable y offset 46static const int yo = 0; // movable y offset
47 47
48 48
49struct MediaButton { 49struct MediaButton {
50// int xPos, yPos; 50// int xPos, yPos;
51 bool isToggle, isHeld, isDown; 51 bool isToggle, isHeld, isDown;
52// int controlType; 52// int controlType;
53}; 53};
54 54
55 55
56// Layout information for the videoButtons (and if it is a toggle button or not) 56// Layout information for the videoButtons (and if it is a toggle button or not)
57MediaButton videoButtons[] = { 57MediaButton videoButtons[] = {
58 { FALSE, FALSE, FALSE }, // stop 58 { FALSE, FALSE, FALSE }, // stop
59 { FALSE, FALSE, FALSE }, // play 59 { FALSE, FALSE, FALSE }, // play
60 { FALSE, FALSE, FALSE }, // previous 60 { FALSE, FALSE, FALSE }, // previous
61 { FALSE, FALSE, FALSE }, // next 61 { FALSE, FALSE, FALSE }, // next
62 { FALSE, FALSE, FALSE }, // volUp 62 { FALSE, FALSE, FALSE }, // volUp
63 { FALSE, FALSE, FALSE }, // volDown 63 { FALSE, FALSE, FALSE }, // volDown
64 { TRUE, FALSE, FALSE } // fullscreen 64 { TRUE, FALSE, FALSE } // fullscreen
65}; 65};
66 66
67//static const int numButtons = (sizeof(videoButtons)/sizeof(MediaButton)); 67//static const int numButtons = (sizeof(videoButtons)/sizeof(MediaButton));
68 68
69const char *skinV_mask_file_names[7] = { 69const char *skinV_mask_file_names[7] = {
70 "stop","play","back","fwd","up","down","full" 70 "stop","play","back","fwd","up","down","full"
71}; 71};
72 72
73static const int numVButtons = (sizeof(videoButtons)/sizeof(MediaButton)); 73static const int numVButtons = (sizeof(videoButtons)/sizeof(MediaButton));
74 74
75VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) : 75VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) :
76 QWidget( parent, name, f ), scaledWidth( 0 ), scaledHeight( 0 ) 76 QWidget( parent, name, f ), scaledWidth( 0 ), scaledHeight( 0 )
77{ 77{
78 setCaption( tr("OpiePlayer") ); 78 setCaption( tr("OpiePlayer") );
79 Config cfg("OpiePlayer"); 79 Config cfg("OpiePlayer");
80 80
81 cfg.setGroup("Options"); 81 cfg.setGroup("Options");
82 skin = cfg.readEntry("Skin","default"); 82 skin = cfg.readEntry("Skin","default");
83 83
84 QString skinPath; 84 QString skinPath;
85 skinPath = "opieplayer2/skins/" + skin; 85 skinPath = "opieplayer2/skins/" + skin;
86 if(!QDir(QString(getenv("OPIEDIR")) +"/pics/"+skinPath).exists()) 86 if(!QDir(QString(getenv("OPIEDIR")) +"/pics/"+skinPath).exists())
87 skinPath = "opieplayer2/skins/default"; 87 skinPath = "opieplayer2/skins/default";
88 88
89 // qDebug("skin path " + skinPath); 89 // qDebug("skin path " + skinPath);
90 90
91// QString skinPath = "opieplayer2/skins/" + skin; 91// QString skinPath = "opieplayer2/skins/" + skin;
92 92
93 pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); 93 pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) );
94 imgUp = new QImage( Resource::loadImage( QString("%1/skinV_up").arg(skinPath) ) ); 94 imgUp = new QImage( Resource::loadImage( QString("%1/skinV_up").arg(skinPath) ) );
95 imgDn = new QImage( Resource::loadImage( QString("%1/skinV_down").arg(skinPath) ) ); 95 imgDn = new QImage( Resource::loadImage( QString("%1/skinV_down").arg(skinPath) ) );
96 96
97 imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 ); 97 imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 );
98 imgButtonMask->fill( 0 ); 98 imgButtonMask->fill( 0 );
99 99
100 for ( int i = 0; i < 7; i++ ) 100 for ( int i = 0; i < 7; i++ ) {
101 {
102 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + 101 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath +
103 "/skinV_mask_" + skinV_mask_file_names[i] + ".png" ); 102 "/skinV_mask_" + skinV_mask_file_names[i] + ".png" );
104 // qDebug("loading "+filename); 103 // qDebug("loading "+filename);
105 masks[i] = new QBitmap( filename ); 104 masks[i] = new QBitmap( filename );
106 105
107 if ( !masks[i]->isNull() ) 106 if ( !masks[i]->isNull() ) {
108 {
109 QImage imgMask = masks[i]->convertToImage(); 107 QImage imgMask = masks[i]->convertToImage();
110 uchar **dest = imgButtonMask->jumpTable(); 108 uchar **dest = imgButtonMask->jumpTable();
111 for ( int y = 0; y < imgUp->height(); y++ ) 109 for ( int y = 0; y < imgUp->height(); y++ ) {
112 {
113 uchar *line = dest[y]; 110 uchar *line = dest[y];
114 for ( int x = 0; x < imgUp->width(); x++ ) 111 for ( int x = 0; x < imgUp->width(); x++ ) {
115 {
116 if ( !qRed( imgMask.pixel( x, y ) ) ) 112 if ( !qRed( imgMask.pixel( x, y ) ) )
117 line[x] = i + 1; 113 line[x] = i + 1;
118 } 114 }
119 } 115 }
120 } 116 }
121 } 117 }
122 // qDebug("finished loading first pics"); 118 // qDebug("finished loading first pics");
123 for ( int i = 0; i < 7; i++ ) 119 for ( int i = 0; i < 7; i++ ) {
124 {
125 buttonPixUp[i] = NULL; 120 buttonPixUp[i] = NULL;
126 buttonPixDown[i] = NULL; 121 buttonPixDown[i] = NULL;
127 } 122 }
128 123
124
125 QWidget *d = QApplication::desktop();
126 int width = d->width();
127 int height = d->height();
128
129 if( (width != pixBg->width() ) || (height != pixBg->height() ) ) {
130 // qDebug("<<<<<<<< scale image >>>>>>>>>>>>");
131 QImage img;
132 img = pixBg->convertToImage();
133 pixBg->convertFromImage( img.smoothScale( width, height));
134 }
129 setBackgroundPixmap( *pixBg ); 135 setBackgroundPixmap( *pixBg );
130 136
131 currentFrame = new QImage( 220 + 2, 160, (QPixmap::defaultDepth() == 16) ? 16 : 32 ); 137 currentFrame = new QImage( 220 + 2, 160, (QPixmap::defaultDepth() == 16) ? 16 : 32 );
132 138
133 slider = new QSlider( Qt::Horizontal, this ); 139 slider = new QSlider( Qt::Horizontal, this );
134 slider->setMinValue( 0 ); 140 slider->setMinValue( 0 );
135 slider->setMaxValue( 1 ); 141 slider->setMaxValue( 1 );
136 slider->setBackgroundPixmap( Resource::loadPixmap( backgroundPix ) ); 142 slider->setBackgroundPixmap( Resource::loadPixmap( backgroundPix ) );
137 slider->setFocusPolicy( QWidget::NoFocus ); 143 slider->setFocusPolicy( QWidget::NoFocus );
138// slider->setGeometry( QRect( 7, 250, 220, 20 ) ); 144// slider->setGeometry( QRect( 7, 250, 220, 20 ) );
139 145
140 connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 146 connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
141 connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 147 connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
142 148
143 connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) ); 149 connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) );
144 connect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 150 connect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
145 connect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 151 connect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
146 connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) ); 152 connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) );
147// connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) ); 153// connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) );
148 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) ); 154 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) );
149 155
150 // Intialise state 156 // Intialise state
151 setLength( mediaPlayerState->length() ); 157 setLength( mediaPlayerState->length() );
152 setPosition( mediaPlayerState->position() ); 158 setPosition( mediaPlayerState->position() );
153 setFullscreen( mediaPlayerState->fullscreen() ); 159 setFullscreen( mediaPlayerState->fullscreen() );
154// setPaused( mediaPlayerState->paused() ); 160// setPaused( mediaPlayerState->paused() );
155 setPlaying( mediaPlayerState->playing() ); 161 setPlaying( mediaPlayerState->playing() );
156} 162}
157 163
158 164
159VideoWidget::~VideoWidget() { 165VideoWidget::~VideoWidget() {
160 166
161 for ( int i = 0; i < 7; i++ ) 167 for ( int i = 0; i < 7; i++ )
162 { 168 {
163 delete buttonPixUp[i]; 169 delete buttonPixUp[i];
164 delete buttonPixDown[i]; 170 delete buttonPixDown[i];
165 } 171 }
166 172
167 delete pixBg; 173 delete pixBg;
168 delete imgUp; 174 delete imgUp;
169 delete imgDn; 175 delete imgDn;
170 delete imgButtonMask; 176 delete imgButtonMask;
171 for ( int i = 0; i < 7; i++ ) 177 for ( int i = 0; i < 7; i++ )
172 { 178 {
173 delete masks[i]; 179 delete masks[i];
174 } 180 }
175 181
176// for ( int i = 0; i < 3; i++ ) 182// for ( int i = 0; i < 3; i++ )
177// delete pixmaps[i]; 183// delete pixmaps[i];
178// delete currentFrame; 184// delete currentFrame;
179} 185}
180 186
181 187
182static bool videoSliderBeingMoved = FALSE; 188static bool videoSliderBeingMoved = FALSE;
183 189
184QPixmap *combineVImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { 190QPixmap *combineVImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
185 QPixmap pix( img.width(), img.height() ); 191 QPixmap pix( img.width(), img.height() );
186 QPainter p( &pix ); 192 QPainter p( &pix );
187 p.drawTiledPixmap( pix.rect(), bg, offset ); 193 p.drawTiledPixmap( pix.rect(), bg, offset );
188 p.drawImage( 0, 0, img ); 194 p.drawImage( 0, 0, img );
189 return new QPixmap( pix ); 195 return new QPixmap( pix );
190} 196}
191 197
192QPixmap *maskVPixToMask( QPixmap pix, QBitmap mask ) { 198QPixmap *maskVPixToMask( QPixmap pix, QBitmap mask ) {
193 QPixmap *pixmap = new QPixmap( pix ); 199 QPixmap *pixmap = new QPixmap( pix );
194 pixmap->setMask( mask ); 200 pixmap->setMask( mask );
195 return pixmap; 201 return pixmap;
196} 202}
197 203
198void VideoWidget::resizeEvent( QResizeEvent * ) { 204void VideoWidget::resizeEvent( QResizeEvent * ) {
199 int h = height(); 205 int h = height();
200 int w = width(); 206 int w = width();
201 //int Vh = 160; 207 //int Vh = 160;
202 //int Vw = 220; 208 //int Vw = 220;
203 209
204 slider->setFixedWidth( w - 20 ); 210 slider->setFixedWidth( w - 20 );
205 slider->setGeometry( QRect( 15, h - 22, w - 90, 20 ) ); 211 slider->setGeometry( QRect( 15, h - 22, w - 90, 20 ) );
206 slider->setBackgroundOrigin( QWidget::ParentOrigin ); 212 slider->setBackgroundOrigin( QWidget::ParentOrigin );
207 slider->setFocusPolicy( QWidget::NoFocus ); 213 slider->setFocusPolicy( QWidget::NoFocus );
208 slider->setBackgroundPixmap( *pixBg ); 214 slider->setBackgroundPixmap( *pixBg );
209 215
210 xoff = 0;// ( imgUp->width() ) / 2; 216 xoff = 0;// ( imgUp->width() ) / 2;
211 if(w>h) 217 if(w>h)
212 yoff = 0; 218 yoff = 0;
213 else 219 else
214 yoff = 185;//(( Vh - imgUp->height() ) / 2) - 10; 220 yoff = 185;//(( Vh - imgUp->height() ) / 2) - 10;
215 QPoint p( xoff, yoff ); 221 QPoint p( xoff, yoff );
216 222
217 QPixmap *pixUp = combineVImageWithBackground( *imgUp, *pixBg, p ); 223 QPixmap *pixUp = combineVImageWithBackground( *imgUp, *pixBg, p );
218 QPixmap *pixDn = combineVImageWithBackground( *imgDn, *pixBg, p ); 224 QPixmap *pixDn = combineVImageWithBackground( *imgDn, *pixBg, p );
219 225
220 for ( int i = 0; i < 7; i++ ) 226 for ( int i = 0; i < 7; i++ )
221 { 227 {
222 if ( !masks[i]->isNull() ) 228 if ( !masks[i]->isNull() )
223 { 229 {
224 delete buttonPixUp[i]; 230 delete buttonPixUp[i];
225 delete buttonPixDown[i]; 231 delete buttonPixDown[i];
226 buttonPixUp[i] = maskVPixToMask( *pixUp, *masks[i] ); 232 buttonPixUp[i] = maskVPixToMask( *pixUp, *masks[i] );
227 buttonPixDown[i] = maskVPixToMask( *pixDn, *masks[i] ); 233 buttonPixDown[i] = maskVPixToMask( *pixDn, *masks[i] );
228 } 234 }
229 } 235 }
230 236
231 delete pixUp; 237 delete pixUp;
232 delete pixDn; 238 delete pixDn;
233} 239}
234 240
235 241
236void VideoWidget::sliderPressed() { 242void VideoWidget::sliderPressed() {
237 videoSliderBeingMoved = TRUE; 243 videoSliderBeingMoved = TRUE;
238} 244}
239 245
240 246
241void VideoWidget::sliderReleased() { 247void VideoWidget::sliderReleased() {
242 videoSliderBeingMoved = FALSE; 248 videoSliderBeingMoved = FALSE;
243 if ( slider->width() == 0 ) 249 if ( slider->width() == 0 )
244 return; 250 return;
245 long val = long((double)slider->value() * mediaPlayerState->length() / slider->width()); 251 long val = long((double)slider->value() * mediaPlayerState->length() / slider->width());
246 mediaPlayerState->setPosition( val ); 252 mediaPlayerState->setPosition( val );
247} 253}
248 254
249 255
250void VideoWidget::setPosition( long i ) { 256void VideoWidget::setPosition( long i ) {
251 updateSlider( i, mediaPlayerState->length() ); 257 updateSlider( i, mediaPlayerState->length() );
252} 258}
253 259
254 260
255void VideoWidget::setLength( long max ) { 261void VideoWidget::setLength( long max ) {
256 updateSlider( mediaPlayerState->position(), max ); 262 updateSlider( mediaPlayerState->position(), max );