summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2003-04-20 02:30:43 (UTC)
committer llornkcor <llornkcor>2003-04-20 02:30:43 (UTC)
commit845c8a880a2ff701f21c2845674e97a2493499f4 (patch) (unidiff)
treec91b65869022c2628f509cb27685e45dfb199679
parentb62c40465c917e4952651b6f359e5ec76b340d3f (diff)
downloadopie-845c8a880a2ff701f21c2845674e97a2493499f4.zip
opie-845c8a880a2ff701f21c2845674e97a2493499f4.tar.gz
opie-845c8a880a2ff701f21c2845674e97a2493499f4.tar.bz2
add video skin support *finally*, fixed widget for landscape/sizing
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/multimedia/opieplayer/playlistwidget.cpp33
-rw-r--r--core/multimedia/opieplayer/videowidget.cpp449
-rw-r--r--core/multimedia/opieplayer/videowidget.h21
3 files changed, 389 insertions, 114 deletions
diff --git a/core/multimedia/opieplayer/playlistwidget.cpp b/core/multimedia/opieplayer/playlistwidget.cpp
index 8b295b0..bffda38 100644
--- a/core/multimedia/opieplayer/playlistwidget.cpp
+++ b/core/multimedia/opieplayer/playlistwidget.cpp
@@ -167,6 +167,7 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl )
167// this , SLOT( addSelected()) ); 167// this , SLOT( addSelected()) );
168 tbDeletePlaylist = new QPushButton( Resource::loadIconSet("trash"),"",bar,"close"); 168 tbDeletePlaylist = new QPushButton( Resource::loadIconSet("trash"),"",bar,"close");
169 tbDeletePlaylist->setFlat(TRUE); 169 tbDeletePlaylist->setFlat(TRUE);
170
170 tbDeletePlaylist->setFixedSize(20,20); 171 tbDeletePlaylist->setFixedSize(20,20);
171 172
172 d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ), "opieplayer/add_to_playlist", 173 d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ), "opieplayer/add_to_playlist",
@@ -230,7 +231,12 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl )
230 231
231 QVBox *vbox3 = new QVBox( pTab ); vbox3->setBackgroundMode( PaletteButton ); 232 QVBox *vbox3 = new QVBox( pTab ); vbox3->setBackgroundMode( PaletteButton );
232 d->playListFrame = vbox3; 233 d->playListFrame = vbox3;
233 d->playListFrame ->setMinimumSize(235,260); 234
235 QGridLayout *layoutF = new QGridLayout( pTab );
236 layoutF->setSpacing( 2);
237 layoutF->setMargin( 2);
238 layoutF->addMultiCellWidget( d->playListFrame , 0, 0, 0, 1 );
239// d->playListFrame ->setMinimumSize(235,260);
234 240
235 QHBox *hbox2 = new QHBox( vbox3 ); hbox2->setBackgroundMode( PaletteButton ); 241 QHBox *hbox2 = new QHBox( vbox3 ); hbox2->setBackgroundMode( PaletteButton );
236 242
@@ -250,7 +256,12 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl )
250 QWidget *aTab; 256 QWidget *aTab;
251 aTab = new QWidget( tabWidget, "aTab" ); 257 aTab = new QWidget( tabWidget, "aTab" );
252 audioView = new QListView( aTab, "Audioview" ); 258 audioView = new QListView( aTab, "Audioview" );
253 audioView->setMinimumSize(233,260); 259
260 QGridLayout *layoutA = new QGridLayout( aTab );
261 layoutA->setSpacing( 2);
262 layoutA->setMargin( 2);
263 layoutA->addMultiCellWidget( audioView, 0, 0, 0, 1 );
264
254 audioView->addColumn( tr("Title"),140); 265 audioView->addColumn( tr("Title"),140);
255 audioView->addColumn(tr("Size"), -1); 266 audioView->addColumn(tr("Size"), -1);
256 audioView->addColumn(tr("Media"),-1); 267 audioView->addColumn(tr("Media"),-1);
@@ -275,7 +286,11 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl )
275 QWidget *vTab; 286 QWidget *vTab;
276 vTab = new QWidget( tabWidget, "vTab" ); 287 vTab = new QWidget( tabWidget, "vTab" );
277 videoView = new QListView( vTab, "Videoview" ); 288 videoView = new QListView( vTab, "Videoview" );
278 videoView->setMinimumSize(233,260); 289
290 QGridLayout *layoutV = new QGridLayout( vTab );
291 layoutV->setSpacing( 2);
292 layoutV->setMargin( 2);
293 layoutV->addMultiCellWidget( videoView, 0, 0, 0, 1 );
279 294
280 videoView->addColumn(tr("Title"),140); 295 videoView->addColumn(tr("Title"),140);
281 videoView->addColumn(tr("Size"),-1); 296 videoView->addColumn(tr("Size"),-1);
@@ -294,7 +309,13 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl )
294 QWidget *LTab; 309 QWidget *LTab;
295 LTab = new QWidget( tabWidget, "LTab" ); 310 LTab = new QWidget( tabWidget, "LTab" );
296 playLists = new FileSelector( "playlist/plain", LTab, "fileselector" , FALSE, FALSE); //buggy 311 playLists = new FileSelector( "playlist/plain", LTab, "fileselector" , FALSE, FALSE); //buggy
297 playLists->setMinimumSize(233,260); 312
313 QGridLayout *layoutL = new QGridLayout( LTab );
314 layoutL->setSpacing( 2);
315 layoutL->setMargin( 2);
316 layoutL->addMultiCellWidget( playLists, 0, 0, 0, 1 );
317// playLists->setMinimumSize(233,260);
318
298 tabWidget->insertTab(LTab,tr("Lists")); 319 tabWidget->insertTab(LTab,tr("Lists"));
299 320
300 connect(tbDeletePlaylist,(SIGNAL(released())),SLOT( deletePlaylist())); 321 connect(tbDeletePlaylist,(SIGNAL(released())),SLOT( deletePlaylist()));
@@ -321,17 +342,13 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl )
321 this,SLOT( playIt( QListViewItem *)) ); 342 this,SLOT( playIt( QListViewItem *)) );
322 connect( videoView, SIGNAL( doubleClicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) ); 343 connect( videoView, SIGNAL( doubleClicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) );
323 344
324
325//playlists 345//playlists
326 connect( playLists, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( loadList( const DocLnk & ) ) ); 346 connect( playLists, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( loadList( const DocLnk & ) ) );
327 347
328
329 connect( tabWidget, SIGNAL (currentChanged(QWidget*)),this,SLOT(tabChanged(QWidget*))); 348 connect( tabWidget, SIGNAL (currentChanged(QWidget*)),this,SLOT(tabChanged(QWidget*)));
330 349
331 connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), d->tbPlay, SLOT( setOn( bool ) ) ); 350 connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), d->tbPlay, SLOT( setOn( bool ) ) );
332 351
333
334
335 connect( mediaPlayerState, SIGNAL( loopingToggled( bool ) ), d->tbLoop, SLOT( setOn( bool ) ) ); 352 connect( mediaPlayerState, SIGNAL( loopingToggled( bool ) ), d->tbLoop, SLOT( setOn( bool ) ) );
336 connect( mediaPlayerState, SIGNAL( shuffledToggled( bool ) ), d->tbShuffle, SLOT( setOn( bool ) ) ); 353 connect( mediaPlayerState, SIGNAL( shuffledToggled( bool ) ), d->tbShuffle, SLOT( setOn( bool ) ) );
337 connect( mediaPlayerState, SIGNAL( playlistToggled( bool ) ), this, SLOT( setPlaylist( bool ) ) ); 354 connect( mediaPlayerState, SIGNAL( playlistToggled( bool ) ), this, SLOT( setPlaylist( bool ) ) );
diff --git a/core/multimedia/opieplayer/videowidget.cpp b/core/multimedia/opieplayer/videowidget.cpp
index 97997f9..1b38206 100644
--- a/core/multimedia/opieplayer/videowidget.cpp
+++ b/core/multimedia/opieplayer/videowidget.cpp
@@ -20,7 +20,9 @@
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 24
25#include <qdir.h>
24#include <qwidget.h> 26#include <qwidget.h>
25#include <qpainter.h> 27#include <qpainter.h>
26#include <qpixmap.h> 28#include <qpixmap.h>
@@ -45,43 +47,87 @@ static const int yo = 0; // movable y offset
45 47
46 48
47struct MediaButton { 49struct MediaButton {
48 int xPos, yPos; 50// int xPos, yPos;
49 bool isToggle, isHeld, isDown; 51 bool isToggle, isHeld, isDown;
50 int controlType; 52// int controlType;
51}; 53};
52 54
53 55
54// 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)
55MediaButton videoButtons[] = { 57MediaButton videoButtons[] = {
56 { 5+0*32+xo, 200+yo, FALSE, FALSE, FALSE, 4 }, // previous 58 { FALSE, FALSE, FALSE }, // stop
57 { 5+1*32+xo, 200+yo, FALSE, FALSE, FALSE, 1 }, // stop 59 { TRUE, FALSE, FALSE }, // play
58 { 5+2*32+xo, 200+yo, TRUE, FALSE, FALSE, 0 }, // play 60 { FALSE, FALSE, FALSE }, // previous
59 { 5+3*32+xo, 200+yo, TRUE, FALSE, FALSE, 2 }, // pause 61 { FALSE, FALSE, FALSE }, // next
60 { 5+4*32+xo, 200+yo, FALSE, FALSE, FALSE, 3 }, // next 62 { FALSE, FALSE, FALSE }, // volUp
61 { 5+5*32+xo, 200+yo, FALSE, FALSE, FALSE, 8 }, // playlist 63 { FALSE, FALSE, FALSE }, // volDown
62 { 5+6*32+xo, 200+yo, TRUE, FALSE, FALSE, 9 } // fullscreen 64 { TRUE, FALSE, FALSE } // fullscreen
63}; 65};
64 66
67//static const int numButtons = (sizeof(videoButtons)/sizeof(MediaButton));
65 68
66static const int numButtons = (sizeof(videoButtons)/sizeof(MediaButton)); 69const char *skinV_mask_file_names[7] = {
70 "stop","play","back","fwd","up","down","full"
71};
67 72
73static const int numVButtons = (sizeof(videoButtons)/sizeof(MediaButton));
68 74
69VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) : 75VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) :
70 QWidget( parent, name, f ), scaledWidth( 0 ), scaledHeight( 0 ) { 76 QWidget( parent, name, f ), scaledWidth( 0 ), scaledHeight( 0 )
77{
71 setCaption( tr("OpiePlayer") ); 78 setCaption( tr("OpiePlayer") );
72 Config cfg("OpiePlayer"); 79 Config cfg("OpiePlayer");
73 cfg.setGroup("VideoWidget"); 80
74 81 cfg.setGroup("Options");
75 QString backgroundPix, Button0aPix, Button0bPix, controlsPix; 82 skin = cfg.readEntry("Skin","default");
76 backgroundPix=cfg.readEntry( "backgroundPix", "opieplayer/metalFinish"); 83
77 Button0aPix=cfg.readEntry( "Button0aPix", "opieplayer/mediaButton0a"); 84 QString skinPath;
78 Button0bPix=cfg.readEntry( "Button0bPix","opieplayer/mediaButton0b"); 85 skinPath = "opieplayer2/skins/" + skin;
79 controlsPix=cfg.readEntry( "controlsPix","opieplayer/mediaControls0" ); 86 if(!QDir(QString(getenv("OPIEDIR")) +"/pics/"+skinPath).exists())
80 87 skinPath = "opieplayer2/skins/default";
81 setBackgroundPixmap( Resource::loadPixmap( backgroundPix) ); 88
82 pixmaps[0] = new QPixmap( Resource::loadPixmap( Button0aPix ) ); 89 qDebug("skin path " + skinPath);
83 pixmaps[1] = new QPixmap( Resource::loadPixmap( Button0bPix ) ); 90
84 pixmaps[2] = new QPixmap( Resource::loadPixmap( controlsPix) ); 91// QString skinPath = "opieplayer2/skins/" + skin;
92
93 pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").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) ) );
96
97 imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 );
98 imgButtonMask->fill( 0 );
99
100 for ( int i = 0; i < 7; i++ )
101 {
102 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath +
103 "/skinV_mask_" + skinV_mask_file_names[i] + ".png" );
104 qDebug("loading "+filename);
105 masks[i] = new QBitmap( filename );
106
107 if ( !masks[i]->isNull() )
108 {
109 QImage imgMask = masks[i]->convertToImage();
110 uchar **dest = imgButtonMask->jumpTable();
111 for ( int y = 0; y < imgUp->height(); y++ )
112 {
113 uchar *line = dest[y];
114 for ( int x = 0; x < imgUp->width(); x++ )
115 {
116 if ( !qRed( imgMask.pixel( x, y ) ) )
117 line[x] = i + 1;
118 }
119 }
120 }
121 }
122 qDebug("finished loading first pics");
123 for ( int i = 0; i < 7; i++ )
124 {
125 buttonPixUp[i] = NULL;
126 buttonPixDown[i] = NULL;
127 }
128
129 setBackgroundPixmap( *pixBg );
130
85 currentFrame = new QImage( 220 + 2, 160, (QPixmap::defaultDepth() == 16) ? 16 : 32 ); 131 currentFrame = new QImage( 220 + 2, 160, (QPixmap::defaultDepth() == 16) ? 16 : 32 );
86 132
87 slider = new QSlider( Qt::Horizontal, this ); 133 slider = new QSlider( Qt::Horizontal, this );
@@ -89,7 +135,7 @@ VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) :
89 slider->setMaxValue( 1 ); 135 slider->setMaxValue( 1 );
90 slider->setBackgroundPixmap( Resource::loadPixmap( backgroundPix ) ); 136 slider->setBackgroundPixmap( Resource::loadPixmap( backgroundPix ) );
91 slider->setFocusPolicy( QWidget::NoFocus ); 137 slider->setFocusPolicy( QWidget::NoFocus );
92 slider->setGeometry( QRect( 7, 250, 220, 20 ) ); 138// slider->setGeometry( QRect( 7, 250, 220, 20 ) );
93 139
94 connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 140 connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
95 connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 141 connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
@@ -111,14 +157,81 @@ VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) :
111 157
112 158
113VideoWidget::~VideoWidget() { 159VideoWidget::~VideoWidget() {
114 for ( int i = 0; i < 3; i++ ) 160
115 delete pixmaps[i]; 161 for ( int i = 0; i < 7; i++ )
116 delete currentFrame; 162 {
163 delete buttonPixUp[i];
164 delete buttonPixDown[i];
165 }
166
167 delete pixBg;
168 delete imgUp;
169 delete imgDn;
170 delete imgButtonMask;
171 for ( int i = 0; i < 7; i++ )
172 {
173 delete masks[i];
174 }
175
176// for ( int i = 0; i < 3; i++ )
177// delete pixmaps[i];
178// delete currentFrame;
117} 179}
118 180
119 181
120static bool videoSliderBeingMoved = FALSE; 182static bool videoSliderBeingMoved = FALSE;
121 183
184QPixmap *combineVImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
185 QPixmap pix( img.width(), img.height() );
186 QPainter p( &pix );
187 p.drawTiledPixmap( pix.rect(), bg, offset );
188 p.drawImage( 0, 0, img );
189 return new QPixmap( pix );
190}
191
192QPixmap *maskVPixToMask( QPixmap pix, QBitmap mask ) {
193 QPixmap *pixmap = new QPixmap( pix );
194 pixmap->setMask( mask );
195 return pixmap;
196}
197
198void VideoWidget::resizeEvent( QResizeEvent * ) {
199 int h = height();
200 int w = width();
201 //int Vh = 160;
202 //int Vw = 220;
203
204 slider->setFixedWidth( w - 20 );
205 slider->setGeometry( QRect( 15, h - 22, w - 90, 20 ) );
206 slider->setBackgroundOrigin( QWidget::ParentOrigin );
207 slider->setFocusPolicy( QWidget::NoFocus );
208 slider->setBackgroundPixmap( *pixBg );
209
210 xoff = 0;// ( imgUp->width() ) / 2;
211 if(w>h)
212 yoff = 0;
213 else
214 yoff = 185;//(( Vh - imgUp->height() ) / 2) - 10;
215 QPoint p( xoff, yoff );
216
217 QPixmap *pixUp = combineVImageWithBackground( *imgUp, *pixBg, p );
218 QPixmap *pixDn = combineVImageWithBackground( *imgDn, *pixBg, p );
219
220 for ( int i = 0; i < 7; i++ )
221 {
222 if ( !masks[i]->isNull() )
223 {
224 delete buttonPixUp[i];
225 delete buttonPixDown[i];
226 buttonPixUp[i] = maskVPixToMask( *pixUp, *masks[i] );
227 buttonPixDown[i] = maskVPixToMask( *pixDn, *masks[i] );
228 }
229 }
230
231 delete pixUp;
232 delete pixDn;
233}
234
122 235
123void VideoWidget::sliderPressed() { 236void VideoWidget::sliderPressed() {
124 videoSliderBeingMoved = TRUE; 237 videoSliderBeingMoved = TRUE;
@@ -145,9 +258,12 @@ void VideoWidget::setLength( long max ) {
145 258
146 259
147void VideoWidget::setView( char view ) { 260void VideoWidget::setView( char view ) {
148 if ( view == 'v' ) { 261 if ( view == 'v' )
262 {
149 makeVisible(); 263 makeVisible();
150 } else { 264 }
265 else
266 {
151 // Effectively blank the view next time we show it so it looks nicer 267 // Effectively blank the view next time we show it so it looks nicer
152 scaledWidth = 0; 268 scaledWidth = 0;
153 scaledHeight = 0; 269 scaledHeight = 0;
@@ -162,7 +278,8 @@ void VideoWidget::updateSlider( long i, long max ) {
162 return; 278 return;
163 int width = slider->width(); 279 int width = slider->width();
164 int val = int((double)i * width / max); 280 int val = int((double)i * width / max);
165 if ( !mediaPlayerState->fullscreen() && !videoSliderBeingMoved ) { 281 if ( !mediaPlayerState->fullscreen() && !videoSliderBeingMoved )
282 {
166 if ( slider->value() != val ) 283 if ( slider->value() != val )
167 slider->setValue( val ); 284 slider->setValue( val );
168 if ( slider->maxValue() != width ) 285 if ( slider->maxValue() != width )
@@ -185,58 +302,158 @@ void VideoWidget::toggleButton( int i ) {
185 302
186 303
187void VideoWidget::paintButton( QPainter *p, int i ) { 304void VideoWidget::paintButton( QPainter *p, int i ) {
188 int x = videoButtons[i].xPos; 305 if ( videoButtons[i].isDown )
189 int y = videoButtons[i].yPos; 306 {
190 int offset = 10 + videoButtons[i].isDown; 307 p->drawPixmap( xoff, yoff, *buttonPixDown[i] );
191 p->drawPixmap( x, y, *pixmaps[videoButtons[i].isDown] ); 308 }
192 p->drawPixmap( x + 1 + offset, y + offset, *pixmaps[2], 9 * videoButtons[i].controlType, 0, 9, 9 ); 309 else
310 {
311 p->drawPixmap( xoff, yoff, *buttonPixUp[i] );
312 }
313// int x = videoButtons[i].xPos;
314// int y = videoButtons[i].yPos;
315// int offset = 10 + videoButtons[i].isDown;
316// p->drawPixmap( x, y, *pixmaps[videoButtons[i].isDown] );
317// p->drawPixmap( x + 1 + offset, y + offset, *pixmaps[2], 9 * videoButtons[i].controlType, 0, 9, 9 );
193} 318}
194 319
195 320
196void VideoWidget::mouseMoveEvent( QMouseEvent *event ) { 321void VideoWidget::mouseMoveEvent( QMouseEvent *event ) {
197 for ( int i = 0; i < numButtons; i++ ) { 322
198 int x = videoButtons[i].xPos; 323 for ( int i = 0; i < numVButtons; i++ )
199 int y = videoButtons[i].yPos; 324 {
200 if ( event->state() == QMouseEvent::LeftButton ) { 325 if ( event->state() == QMouseEvent::LeftButton )
201 // The test to see if the mouse click is inside the circular button or not 326 {
202 // (compared with the radius squared to avoid a square-root of our distance) 327 // The test to see if the mouse click is inside the button or not
203 int radius = 16; 328 int x = event->pos().x() - xoff;
204 QPoint center = QPoint( x + radius, y + radius ); 329 int y = event->pos().y() - yoff;
205 QPoint dXY = center - event->pos(); 330
206 int dist = dXY.x() * dXY.x() + dXY.y() * dXY.y(); 331 bool isOnButton = ( x > 0 && y > 0 && x < imgButtonMask->width()
207 bool isOnButton = dist <= (radius * radius); 332 && y < imgButtonMask->height()
208 if ( isOnButton != videoButtons[i].isHeld ) { 333 && imgButtonMask->pixelIndex( x, y ) == i + 1 );
209 videoButtons[i].isHeld = isOnButton; 334
335 if ( isOnButton && !videoButtons[i].isHeld )
336 {
337 videoButtons[i].isHeld = TRUE;
210 toggleButton(i); 338 toggleButton(i);
339
340// switch (i) {
341// case VideoVolUp:
342// emit moreClicked();
343// return;
344// case VideoVolDown:
345// emit lessClicked();
346// return;
347// }
211 } 348 }
212 } else { 349 else if ( !isOnButton && videoButtons[i].isHeld )
213 if ( videoButtons[i].isHeld ) { 350 {
351 videoButtons[i].isHeld = FALSE;
352 toggleButton(i);
353 }
354 }
355 else
356 {
357
358 if ( videoButtons[i].isHeld )
359 {
214 videoButtons[i].isHeld = FALSE; 360 videoButtons[i].isHeld = FALSE;
215 if ( !videoButtons[i].isToggle ) 361 if ( !videoButtons[i].isToggle )
362 {
216 setToggleButton( i, FALSE ); 363 setToggleButton( i, FALSE );
217 } 364 }
218 } 365 qDebug("key %d", i);
219 switch (i) { 366 switch(i)
367 {
368// case VideoPlay:
369// {
370// if( mediaPlayerState->isPaused )
371// {
372// setToggleButton( i, FALSE );
373// mediaPlayerState->setPaused( FALSE );
374// return;
375// }
376// else if( !mediaPlayerState->isPaused )
377// {
378// setToggleButton( i, TRUE );
379// mediaPlayerState->setPaused( TRUE );
380// return;
381// }
382// else
383// {
384// return;
385// }
386// }
387
220 case VideoPlay: mediaPlayerState->setPlaying(videoButtons[i].isDown); return; 388 case VideoPlay: mediaPlayerState->setPlaying(videoButtons[i].isDown); return;
221 case VideoStop: mediaPlayerState->setPlaying(FALSE); return; 389 case VideoStop: mediaPlayerState->setPlaying(FALSE); return;
222 case VideoPause: mediaPlayerState->setPaused(videoButtons[i].isDown); return; 390// case VideoPause: mediaPlayerState->setPaused(videoButtons[i].isDown); return;
223 case VideoNext: mediaPlayerState->setNext(); return; 391 case VideoNext: mediaPlayerState->setNext(); return;
224 case VideoPrevious: mediaPlayerState->setPrev(); return; 392 case VideoPrevious: mediaPlayerState->setPrev(); return;
225 case VideoPlayList: mediaPlayerState->setList(); return; 393// case VideoPlayList: mediaPlayerState->setList(); return;
226 case VideoFullscreen: mediaPlayerState->setFullscreen( TRUE ); makeVisible(); return; 394 case VideoFullscreen: mediaPlayerState->setFullscreen( TRUE ); makeVisible(); return;
227 }
228 395
396// case VideoStop: mediaPlayerState->setPlaying( FALSE ); return;
397// case VideoNext: if(playList->whichList() ==0) mediaPlayerState->setNext(); return;
398// case VideoPrevious: if(playList->whichList() ==0) mediaPlayerState->setPrev(); return;
399// case VideoVolUp: emit moreReleased(); return;
400// case VideoVolDown: emit lessReleased(); return;
401// case VideoFullscreen: mediaPlayerState->setFullscreen( TRUE ); makeVisible(); return;
402 }
403 }
229 } 404 }
230} 405}
231 406
232 407
408
409
410
411
412// for ( int i = 0; i < numButtons; i++ ) {
413// int x = videoButtons[i].xPos;
414// int y = videoButtons[i].yPos;
415// if ( event->state() == QMouseEvent::LeftButton ) {
416// // The test to see if the mouse click is inside the circular button or not
417// // (compared with the radius squared to avoid a square-root of our distance)
418// int radius = 16;
419// QPoint center = QPoint( x + radius, y + radius );
420// QPoint dXY = center - event->pos();
421// int dist = dXY.x() * dXY.x() + dXY.y() * dXY.y();
422// bool isOnButton = dist <= (radius * radius);
423// if ( isOnButton != videoButtons[i].isHeld ) {
424// videoButtons[i].isHeld = isOnButton;
425// toggleButton(i);
426// }
427// } else {
428// if ( videoButtons[i].isHeld ) {
429// videoButtons[i].isHeld = FALSE;
430// if ( !videoButtons[i].isToggle )
431// setToggleButton( i, FALSE );
432// }
433// }
434
435// switch (i) {
436// case VideoPlay: mediaPlayerState->setPlaying(videoButtons[i].isDown); return;
437// case VideoStop: mediaPlayerState->setPlaying(FALSE); return;
438// case VideoPause: mediaPlayerState->setPaused(videoButtons[i].isDown); return;
439// case VideoNext: mediaPlayerState->setNext(); return;
440// case VideoPrevious: mediaPlayerState->setPrev(); return;
441// case VideoPlayList: mediaPlayerState->setList(); return;
442// case VideoFullscreen: mediaPlayerState->setFullscreen( TRUE ); makeVisible(); return;
443// }
444
445// }
446}
447
448
233void VideoWidget::mousePressEvent( QMouseEvent *event ) { 449void VideoWidget::mousePressEvent( QMouseEvent *event ) {
234 mouseMoveEvent( event ); 450 mouseMoveEvent( event );
235} 451}
236 452
237 453
238void VideoWidget::mouseReleaseEvent( QMouseEvent *event ) { 454void VideoWidget::mouseReleaseEvent( QMouseEvent *event ) {
239 if ( mediaPlayerState->fullscreen() ) { 455 if ( mediaPlayerState->fullscreen() )
456 {
240 mediaPlayerState->setFullscreen( FALSE ); 457 mediaPlayerState->setFullscreen( FALSE );
241 makeVisible(); 458 makeVisible();
242 459
@@ -246,13 +463,16 @@ void VideoWidget::mouseReleaseEvent( QMouseEvent *event ) {
246 463
247 464
248void VideoWidget::makeVisible() { 465void VideoWidget::makeVisible() {
249 if ( mediaPlayerState->fullscreen() ) { 466 if ( mediaPlayerState->fullscreen() )
467 {
250 setBackgroundMode( QWidget::NoBackground ); 468 setBackgroundMode( QWidget::NoBackground );
251 showFullScreen(); 469 showFullScreen();
252 resize( qApp->desktop()->size() ); 470 resize( qApp->desktop()->size() );
253 slider->hide(); 471 slider->hide();
254 } else { 472 }
255 setBackgroundPixmap( Resource::loadPixmap( "opieplayer/metalFinish" ) ); 473 else
474 {
475 setBackgroundPixmap( *pixBg );
256 showNormal(); 476 showNormal();
257 showMaximized(); 477 showMaximized();
258 slider->show(); 478 slider->show();
@@ -260,32 +480,30 @@ void VideoWidget::makeVisible() {
260} 480}
261 481
262 482
263void VideoWidget::paintEvent( QPaintEvent * ) { 483void VideoWidget::paintEvent( QPaintEvent * pe) {
264 QPainter p( this ); 484 QPainter p( this );
265 485
266 if ( mediaPlayerState->fullscreen() ) { 486 if ( mediaPlayerState->fullscreen() ) {
267 // Clear the background 487 // Clear the background
268 p.setBrush( QBrush( Qt::black ) ); 488 p.setBrush( QBrush( Qt::black ) );
269 p.drawRect( rect() ); 489 p.drawRect( rect() );
270
271 // Draw the current frame
272 //p.drawImage( ); // If using directpainter we won't have a copy except whats on the screen
273 } else { 490 } else {
274 // draw border 491 if ( !pe->erased() ) {
275 qDrawShadePanel( &p, 4, 15, 230, 170, colorGroup(), TRUE, 5, NULL ); 492 // Combine with background and double buffer
276 493 QPixmap pix( pe->rect().size() );
277 // Clear the movie screen first 494 QPainter p( &pix );
278 p.setBrush( QBrush( Qt::black ) ); 495 p.translate( -pe->rect().topLeft().x(), -pe->rect().topLeft().y() );
279 p.drawRect( 9, 20, 220, 160 ); 496 p.drawTiledPixmap( pe->rect(), *pixBg, pe->rect().topLeft() );
280 497 for ( int i = 0; i < numVButtons; i++ ) {
281 // draw current frame (centrally positioned from scaling to maintain aspect ratio)
282 p.drawImage( 9 + (220 - scaledWidth) / 2, 20 + (160 - scaledHeight) / 2, *currentFrame, 0, 0, scaledWidth, scaledHeight );
283
284 // draw the buttons
285 for ( int i = 0; i < numButtons; i++ )
286 paintButton( &p, i ); 498 paintButton( &p, i );
287 499 }
288 // draw the slider 500 QPainter p2( this );
501 p2.drawPixmap( pe->rect().topLeft(), pix );
502 } else {
503 QPainter p( this );
504 for ( int i = 0; i < numVButtons; i++ )
505 paintButton( &p, i );
506 }
289 slider->repaint( TRUE ); 507 slider->repaint( TRUE );
290 } 508 }
291} 509}
@@ -298,7 +516,7 @@ void VideoWidget::closeEvent( QCloseEvent* ) {
298 516
299bool VideoWidget::playVideo() { 517bool VideoWidget::playVideo() {
300 bool result = FALSE; 518 bool result = FALSE;
301 519// qDebug("<<<<<<<<<<<<<<<< play video");
302 int stream = 0; 520 int stream = 0;
303 521
304 int sw = mediaPlayerState->curDecoder()->videoWidth( stream ); 522 int sw = mediaPlayerState->curDecoder()->videoWidth( stream );
@@ -309,23 +527,28 @@ bool VideoWidget::playVideo() {
309 527
310 ColorFormat format = (dd == 16) ? RGB565 : BGRA8888; 528 ColorFormat format = (dd == 16) ? RGB565 : BGRA8888;
311 529
312 if ( mediaPlayerState->fullscreen() ) { 530 if ( mediaPlayerState->fullscreen() )
531 {
313#ifdef USE_DIRECT_PAINTER 532#ifdef USE_DIRECT_PAINTER
314 QDirectPainter p(this); 533 QDirectPainter p(this);
315 534
316 if ( ( qt_screen->transformOrientation() == 3 ) && 535 if ( ( qt_screen->transformOrientation() == 3 ) &&
317 ( ( dd == 16 ) || ( dd == 32 ) ) && ( p.numRects() == 1 ) ) { 536 ( ( dd == 16 ) || ( dd == 32 ) ) && ( p.numRects() == 1 ) )
537 {
318 538
319 w = 320; 539 w = 320;
320 h = 240; 540 h = 240;
321 541
322 if ( mediaPlayerState->scaled() ) { 542 if ( mediaPlayerState->scaled() )
543 {
323 // maintain aspect ratio 544 // maintain aspect ratio
324 if ( w * sh > sw * h ) 545 if ( w * sh > sw * h )
325 w = sw * h / sh; 546 w = sw * h / sh;
326 else 547 else
327 h = sh * w / sw; 548 h = sh * w / sw;
328 } else { 549 }
550 else
551 {
329 w = sw; 552 w = sw;
330 h = sh; 553 h = sh;
331 } 554 }
@@ -340,7 +563,9 @@ bool VideoWidget::playVideo() {
340 uchar* fp = p.frameBuffer() + p.lineStep() * oy; 563 uchar* fp = p.frameBuffer() + p.lineStep() * oy;
341 fp += dd * ox / 8; 564 fp += dd * ox / 8;
342 uchar **jt = new uchar*[h]; 565 uchar **jt = new uchar*[h];
343 for ( int i = h; i; i-- ) { 566
567 for ( int i = h; i; i-- )
568 {
344 jt[h - i] = fp; 569 jt[h - i] = fp;
345 fp += p.lineStep(); 570 fp += p.lineStep();
346 } 571 }
@@ -348,20 +573,25 @@ bool VideoWidget::playVideo() {
348 result = mediaPlayerState->curDecoder()->videoReadScaledFrame( jt, sx, sy, sw, sh, w, h, format, 0) == 0; 573 result = mediaPlayerState->curDecoder()->videoReadScaledFrame( jt, sx, sy, sw, sh, w, h, format, 0) == 0;
349 574
350 delete [] jt; 575 delete [] jt;
351 } else { 576 }
577 else
578 {
352#endif 579#endif
353 QPainter p(this); 580 QPainter p(this);
354 581
355 w = 320; 582 w = 320;
356 h = 240; 583 h = 240;
357 584
358 if ( mediaPlayerState->scaled() ) { 585 if ( mediaPlayerState->scaled() )
586 {
359 // maintain aspect ratio 587 // maintain aspect ratio
360 if ( w * sh > sw * h ) 588 if ( w * sh > sw * h )
361 w = sw * h / sh; 589 w = sw * h / sh;
362 else 590 else
363 h = sh * w / sw; 591 h = sh * w / sw;
364 } else { 592 }
593 else
594 {
365 w = sw; 595 w = sw;
366 h = sh; 596 h = sh;
367 } 597 }
@@ -370,7 +600,9 @@ bool VideoWidget::playVideo() {
370 QImage tempFrame( w, h, bytes << 3 ); 600 QImage tempFrame( w, h, bytes << 3 );
371 result = mediaPlayerState->curDecoder()->videoReadScaledFrame( tempFrame.jumpTable(), 601 result = mediaPlayerState->curDecoder()->videoReadScaledFrame( tempFrame.jumpTable(),
372 0, 0, sw, sh, w, h, format, 0) == 0; 602 0, 0, sw, sh, w, h, format, 0) == 0;
373 if ( result && mediaPlayerState->fullscreen() ) { 603
604 if ( result && mediaPlayerState->fullscreen() )
605 {
374 606
375 int rw = h, rh = w; 607 int rw = h, rh = w;
376 QImage rotatedFrame( rw, rh, bytes << 3 ); 608 QImage rotatedFrame( rw, rh, bytes << 3 );
@@ -378,16 +610,22 @@ bool VideoWidget::playVideo() {
378 ushort* in = (ushort*)tempFrame.bits(); 610 ushort* in = (ushort*)tempFrame.bits();
379 ushort* out = (ushort*)rotatedFrame.bits(); 611 ushort* out = (ushort*)rotatedFrame.bits();
380 int spl = rotatedFrame.bytesPerLine() / bytes; 612 int spl = rotatedFrame.bytesPerLine() / bytes;
381 for (int x=0; x<h; x++) { 613
382 if ( bytes == 2 ) { 614 for (int x=0; x<h; x++)
615 {
616 if ( bytes == 2 )
617 {
383 ushort* lout = out++ + (w - 1)*spl; 618 ushort* lout = out++ + (w - 1)*spl;
384 for (int y=0; y<w; y++) { 619 for (int y=0; y<w; y++) {
385 *lout=*in++; 620 *lout=*in++;
386 lout-=spl; 621 lout-=spl;
387 } 622 }
388 } else { 623 }
624 else
625 {
389 ulong* lout = ((ulong *)out)++ + (w - 1)*spl; 626 ulong* lout = ((ulong *)out)++ + (w - 1)*spl;
390 for (int y=0; y<w; y++) { 627 for (int y=0; y<w; y++)
628 {
391 *lout=*((ulong*)in)++; 629 *lout=*((ulong*)in)++;
392 lout-=spl; 630 lout-=spl;
393 } 631 }
@@ -399,7 +637,9 @@ bool VideoWidget::playVideo() {
399#ifdef USE_DIRECT_PAINTER 637#ifdef USE_DIRECT_PAINTER
400 } 638 }
401#endif 639#endif
402 } else { 640 }
641 else
642 {
403 643
404 w = 220; 644 w = 220;
405 h = 160; 645 h = 160;
@@ -413,18 +653,20 @@ bool VideoWidget::playVideo() {
413 result = mediaPlayerState->curDecoder()->videoReadScaledFrame( currentFrame->jumpTable(), 0, 0, sw, sh, w, h, format, 0) == 0; 653 result = mediaPlayerState->curDecoder()->videoReadScaledFrame( currentFrame->jumpTable(), 0, 0, sw, sh, w, h, format, 0) == 0;
414 654
415 QPainter p( this ); 655 QPainter p( this );
416 656 int deskW = qApp->desktop()->width();
417 // Image changed size, therefore need to blank the possibly unpainted regions first 657 // Image changed size, therefore need to blank the possibly unpainted regions first
418 if ( scaledWidth != w || scaledHeight != h ) { 658 if ( scaledWidth != w || scaledHeight != h )
659 {
419 p.setBrush( QBrush( Qt::black ) ); 660 p.setBrush( QBrush( Qt::black ) );
420 p.drawRect( 9, 20, 220, 160 ); 661 p.drawRect( ( deskW -scaledWidth)/2, 20, scaledWidth, 160 );
421 } 662 }
422 663
423 scaledWidth = w; 664 scaledWidth = w;
424 scaledHeight = h; 665 scaledHeight = h;
425 666
426 if ( result ) { 667 if ( result )
427 p.drawImage( 9 + (220 - scaledWidth) / 2, 20 + (160 - scaledHeight) / 2, *currentFrame, 0, 0, scaledWidth, scaledHeight ); 668 {
669 p.drawImage( (deskW - scaledWidth) / 2, 20 + (160 - scaledHeight) / 2, *currentFrame, 0, 0, scaledWidth, scaledHeight );
428 } 670 }
429 671
430 } 672 }
@@ -436,7 +678,8 @@ bool VideoWidget::playVideo() {
436 678
437void VideoWidget::keyReleaseEvent( QKeyEvent *e) 679void VideoWidget::keyReleaseEvent( QKeyEvent *e)
438{ 680{
439 switch ( e->key() ) { 681 switch ( e->key() )
682 {
440////////////////////////////// Zaurus keys 683////////////////////////////// Zaurus keys
441 case Key_Home: 684 case Key_Home:
442 break; 685 break;
@@ -451,10 +694,14 @@ void VideoWidget::keyReleaseEvent( QKeyEvent *e)
451 break; 694 break;
452 case Key_F13: //mail 695 case Key_F13: //mail
453 break; 696 break;
454 case Key_Space: { 697 case Key_Space:
455 if(mediaPlayerState->playing()) { 698 {
699 if(mediaPlayerState->playing())
700 {
456 mediaPlayerState->setPlaying(FALSE); 701 mediaPlayerState->setPlaying(FALSE);
457 } else { 702 }
703 else
704 {
458 mediaPlayerState->setPlaying(TRUE); 705 mediaPlayerState->setPlaying(TRUE);
459 } 706 }
460 } 707 }
diff --git a/core/multimedia/opieplayer/videowidget.h b/core/multimedia/opieplayer/videowidget.h
index fe56ca1..fd86cd2 100644
--- a/core/multimedia/opieplayer/videowidget.h
+++ b/core/multimedia/opieplayer/videowidget.h
@@ -37,7 +37,6 @@ enum VideoButtons {
37 VideoFullscreen 37 VideoFullscreen
38}; 38};
39 39
40
41class VideoWidget : public QWidget { 40class VideoWidget : public QWidget {
42 Q_OBJECT 41 Q_OBJECT
43public: 42public:
@@ -62,6 +61,7 @@ signals:
62 void sliderMoved( long ); 61 void sliderMoved( long );
63 62
64protected: 63protected:
64 void resizeEvent( QResizeEvent * );
65 void paintEvent( QPaintEvent *pe ); 65 void paintEvent( QPaintEvent *pe );
66 void mouseMoveEvent( QMouseEvent *event ); 66 void mouseMoveEvent( QMouseEvent *event );
67 void mousePressEvent( QMouseEvent *event ); 67 void mousePressEvent( QMouseEvent *event );
@@ -70,15 +70,26 @@ protected:
70 void keyReleaseEvent( QKeyEvent *e); 70 void keyReleaseEvent( QKeyEvent *e);
71 71
72private: 72private:
73 void paintButton( QPainter *p, int i ); 73 QPixmap *pixBg;
74 void toggleButton( int ); 74 QImage *imgUp;
75 void setToggleButton( int, bool ); 75 QImage *imgDn;
76 76 QImage *imgButtonMask;
77 QBitmap *masks[7];
78 QString backgroundPix;
79 QPixmap *buttonPixUp[7];
80 QPixmap *buttonPixDown[7];
81 QString skin;
77 QSlider *slider; 82 QSlider *slider;
78 QPixmap *pixmaps[3]; 83 QPixmap *pixmaps[3];
79 QImage *currentFrame; 84 QImage *currentFrame;
85 int xoff, yoff;
80 int scaledWidth; 86 int scaledWidth;
81 int scaledHeight; 87 int scaledHeight;
88
89 void paintButton( QPainter *p, int i );
90 void toggleButton( int );
91 void setToggleButton( int, bool );
92
82}; 93};
83 94
84 95