summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/audiowidget.cpp25
-rw-r--r--noncore/multimedia/opieplayer2/mediawidget.cpp43
-rw-r--r--noncore/multimedia/opieplayer2/mediawidget.h5
-rw-r--r--noncore/multimedia/opieplayer2/videowidget.cpp25
4 files changed, 50 insertions, 48 deletions
diff --git a/noncore/multimedia/opieplayer2/audiowidget.cpp b/noncore/multimedia/opieplayer2/audiowidget.cpp
index 23d12ec..fd18dbb 100644
--- a/noncore/multimedia/opieplayer2/audiowidget.cpp
+++ b/noncore/multimedia/opieplayer2/audiowidget.cpp
@@ -38,152 +38,129 @@
38 38
39#include <qwidget.h> 39#include <qwidget.h>
40#include <qpixmap.h> 40#include <qpixmap.h>
41#include <qbutton.h> 41#include <qbutton.h>
42#include <qpainter.h> 42#include <qpainter.h>
43#include <qframe.h> 43#include <qframe.h>
44#include <qlayout.h> 44#include <qlayout.h>
45#include <qdir.h> 45#include <qdir.h>
46#include <stdlib.h> 46#include <stdlib.h>
47#include <stdio.h> 47#include <stdio.h>
48 48
49#include "audiowidget.h" 49#include "audiowidget.h"
50#include "mediaplayerstate.h" 50#include "mediaplayerstate.h"
51#include "playlistwidget.h" 51#include "playlistwidget.h"
52 52
53namespace 53namespace
54{ 54{
55 55
56const int xo = -2; // movable x offset 56const int xo = -2; // movable x offset
57const int yo = 22; // movable y offset 57const int yo = 22; // movable y offset
58 58
59const MediaWidget::SkinButtonInfo skinInfo[] = 59const MediaWidget::SkinButtonInfo skinInfo[] =
60{ 60{
61 { MediaWidget::Play, "play", MediaWidget::ToggleButton }, 61 { MediaWidget::Play, "play", MediaWidget::ToggleButton },
62 { MediaWidget::Stop, "stop", MediaWidget::NormalButton }, 62 { MediaWidget::Stop, "stop", MediaWidget::NormalButton },
63 { MediaWidget::Next, "next", MediaWidget::NormalButton }, 63 { MediaWidget::Next, "next", MediaWidget::NormalButton },
64 { MediaWidget::Previous, "prev", MediaWidget::NormalButton }, 64 { MediaWidget::Previous, "prev", MediaWidget::NormalButton },
65 { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton }, 65 { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton },
66 { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton }, 66 { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton },
67 { MediaWidget::Loop, "loop", MediaWidget::ToggleButton }, 67 { MediaWidget::Loop, "loop", MediaWidget::ToggleButton },
68 { MediaWidget::PlayList, "playlist", MediaWidget::NormalButton }, 68 { MediaWidget::PlayList, "playlist", MediaWidget::NormalButton },
69 { MediaWidget::Forward, "forward", MediaWidget::NormalButton }, 69 { MediaWidget::Forward, "forward", MediaWidget::NormalButton },
70 { MediaWidget::Back, "back", MediaWidget::NormalButton } 70 { MediaWidget::Back, "back", MediaWidget::NormalButton }
71}; 71};
72 72
73const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] ); 73const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] );
74 74
75void changeTextColor( QWidget * w) { 75void changeTextColor( QWidget * w) {
76 QPalette p = w->palette(); 76 QPalette p = w->palette();
77 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) ); 77 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) );
78 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) ); 78 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) );
79 w->setPalette( p ); 79 w->setPalette( p );
80} 80}
81 81
82} 82}
83 83
84AudioWidget::AudioWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name) : 84AudioWidget::AudioWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name) :
85 85
86 MediaWidget( playList, mediaPlayerState, parent, name ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ), 86 MediaWidget( playList, mediaPlayerState, parent, name ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ),
87 audioSliderBeingMoved( false ) 87 audioSliderBeingMoved( false )
88{ 88{
89 setCaption( tr("OpiePlayer") ); 89 setCaption( tr("OpiePlayer") );
90 90
91 Config cfg("OpiePlayer"); 91 Config cfg("OpiePlayer");
92 cfg.setGroup("Options"); 92 cfg.setGroup("Options");
93 skin = cfg.readEntry("Skin","default"); 93 skin = cfg.readEntry("Skin","default");
94 //skin = "scaleTest"; 94 //skin = "scaleTest";
95 // color of background, frame, degree of transparency 95 // color of background, frame, degree of transparency
96 96
97 QString skinPath = "opieplayer2/skins/" + skin; 97 QString skinPath = "opieplayer2/skins/" + skin;
98 backgroundPixmap = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); 98 backgroundPixmap = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) );
99 imgUp = QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) ); 99 imgUp = QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) );
100 imgDn = QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) ); 100 imgDn = QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) );
101 101
102 buttonMask = QImage( imgUp.width(), imgUp.height(), 8, 255 ); 102 setupButtons( skinInfo, buttonCount, QPEApplication::qpeDir() + "/pics/" + skinPath + "/skin_mask_", imgUp.size() );
103 buttonMask.fill( 0 );
104
105 for ( uint i = 0; i < buttonCount; i++ ) {
106 Button button;
107 button.command = skinInfo[ i ].command;
108 button.type = skinInfo[ i ].type;
109
110 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skin_mask_" + skinInfo[i].fileName + ".png" );
111 button.mask =QBitmap( filename );
112
113 if ( !button.mask.isNull() ) {
114 QImage imgMask = button.mask.convertToImage();
115 uchar **dest = buttonMask.jumpTable();
116 for ( int y = 0; y < imgUp.height(); y++ ) {
117 uchar *line = dest[y];
118 for ( int x = 0; x < imgUp.width(); x++ )
119 if ( !qRed( imgMask.pixel( x, y ) ) )
120 line[x] = button.command + 1;
121 }
122 }
123
124 buttons.push_back( button );
125 }
126 103
127 setBackgroundPixmap( backgroundPixmap ); 104 setBackgroundPixmap( backgroundPixmap );
128 105
129 songInfo.setFocusPolicy( QWidget::NoFocus ); 106 songInfo.setFocusPolicy( QWidget::NoFocus );
130// changeTextColor( &songInfo ); 107// changeTextColor( &songInfo );
131// songInfo.setBackgroundColor( QColor( 167, 212, 167 )); 108// songInfo.setBackgroundColor( QColor( 167, 212, 167 ));
132// songInfo.setFrameStyle( QFrame::NoFrame); 109// songInfo.setFrameStyle( QFrame::NoFrame);
133 songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken ); 110 songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
134// songInfo.setForegroundColor(Qt::white); 111// songInfo.setForegroundColor(Qt::white);
135 112
136 slider.setFixedHeight( 20 ); 113 slider.setFixedHeight( 20 );
137 slider.setMinValue( 0 ); 114 slider.setMinValue( 0 );
138 slider.setMaxValue( 1 ); 115 slider.setMaxValue( 1 );
139 slider.setFocusPolicy( QWidget::NoFocus ); 116 slider.setFocusPolicy( QWidget::NoFocus );
140 slider.setBackgroundPixmap( backgroundPixmap ); 117 slider.setBackgroundPixmap( backgroundPixmap );
141 118
142// Config cofg("qpe"); 119// Config cofg("qpe");
143// cofg.setGroup("Appearance"); 120// cofg.setGroup("Appearance");
144// QColor backgroundcolor = QColor( cofg.readEntry( "Background", "#E5E1D5" ) ); 121// QColor backgroundcolor = QColor( cofg.readEntry( "Background", "#E5E1D5" ) );
145 122
146 time.setFocusPolicy( QWidget::NoFocus ); 123 time.setFocusPolicy( QWidget::NoFocus );
147 time.setAlignment( Qt::AlignCenter ); 124 time.setAlignment( Qt::AlignCenter );
148 125
149// time.setFrame(FALSE); 126// time.setFrame(FALSE);
150// changeTextColor( &time ); 127// changeTextColor( &time );
151 128
152 resizeEvent( NULL ); 129 resizeEvent( NULL );
153 130
154 connect( &mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) ); 131 connect( &mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) );
155 connect( &mediaPlayerState, SIGNAL( isSeekableToggled( bool ) ), this, SLOT( setSeekable( bool ) ) ); 132 connect( &mediaPlayerState, SIGNAL( isSeekableToggled( bool ) ), this, SLOT( setSeekable( bool ) ) );
156 133
157 connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) ); 134 connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) );
158 connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) ); 135 connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) );
159 connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) ); 136 connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) );
160 connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) ); 137 connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) );
161 138
162 // Intialise state 139 // Intialise state
163 setLength( mediaPlayerState.length() ); 140 setLength( mediaPlayerState.length() );
164 setPosition( mediaPlayerState.position() ); 141 setPosition( mediaPlayerState.position() );
165 setLooping( mediaPlayerState.isFullscreen() ); 142 setLooping( mediaPlayerState.isFullscreen() );
166 // setPaused( mediaPlayerState->paused() ); 143 // setPaused( mediaPlayerState->paused() );
167 setPlaying( mediaPlayerState.isPlaying() ); 144 setPlaying( mediaPlayerState.isPlaying() );
168 145
169} 146}
170 147
171AudioWidget::~AudioWidget() { 148AudioWidget::~AudioWidget() {
172 149
173// mediaPlayerState->setPlaying(false); 150// mediaPlayerState->setPlaying(false);
174} 151}
175 152
176namespace { 153namespace {
177 154
178QPixmap combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { 155QPixmap combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
179 QPixmap pix( img.width(), img.height() ); 156 QPixmap pix( img.width(), img.height() );
180 QPainter p( &pix ); 157 QPainter p( &pix );
181 p.drawTiledPixmap( pix.rect(), bg, offset ); 158 p.drawTiledPixmap( pix.rect(), bg, offset );
182 p.drawImage( 0, 0, img ); 159 p.drawImage( 0, 0, img );
183 return pix; 160 return pix;
184} 161}
185 162
186 163
187QPixmap maskPixToMask( QPixmap pix, QBitmap mask ) { 164QPixmap maskPixToMask( QPixmap pix, QBitmap mask ) {
188 QPixmap pixmap( pix ); 165 QPixmap pixmap( pix );
189 pixmap.setMask( mask ); 166 pixmap.setMask( mask );
diff --git a/noncore/multimedia/opieplayer2/mediawidget.cpp b/noncore/multimedia/opieplayer2/mediawidget.cpp
index 4c4cead..db16b44 100644
--- a/noncore/multimedia/opieplayer2/mediawidget.cpp
+++ b/noncore/multimedia/opieplayer2/mediawidget.cpp
@@ -1,105 +1,148 @@
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 26
27MediaWidget::MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent, const char *name ) 27MediaWidget::MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent, const char *name )
28 : QWidget( parent, name ), mediaPlayerState( _mediaPlayerState ), playList( _playList ) 28 : QWidget( parent, name ), mediaPlayerState( _mediaPlayerState ), playList( _playList )
29{ 29{
30 connect( &mediaPlayerState, SIGNAL( displayTypeChanged( MediaPlayerState::DisplayType ) ), 30 connect( &mediaPlayerState, SIGNAL( displayTypeChanged( MediaPlayerState::DisplayType ) ),
31 this, SLOT( setDisplayType( MediaPlayerState::DisplayType ) ) ); 31 this, SLOT( setDisplayType( MediaPlayerState::DisplayType ) ) );
32 connect( &mediaPlayerState, SIGNAL( lengthChanged( long ) ), 32 connect( &mediaPlayerState, SIGNAL( lengthChanged( long ) ),
33 this, SLOT( setLength( long ) ) ); 33 this, SLOT( setLength( long ) ) );
34 connect( &mediaPlayerState, SIGNAL( playingToggled( bool ) ), 34 connect( &mediaPlayerState, SIGNAL( playingToggled( bool ) ),
35 this, SLOT( setPlaying( bool ) ) ); 35 this, SLOT( setPlaying( bool ) ) );
36} 36}
37 37
38MediaWidget::~MediaWidget() 38MediaWidget::~MediaWidget()
39{ 39{
40} 40}
41 41
42void MediaWidget::setupButtons( const SkinButtonInfo *skinInfo, uint buttonCount,
43 const QString &imagePrefix, const QSize &buttonAreaSize )
44{
45 buttonMask = QImage( buttonAreaSize, 8, 255 );
46 buttonMask.fill( 0 );
47
48 for ( uint i = 0; i < buttonCount; ++i ) {
49 Button button = setupButton( skinInfo[ i ], imagePrefix );
50 buttons.push_back( button );
51 }
52}
53
54MediaWidget::Button MediaWidget::setupButton( const SkinButtonInfo &buttonInfo, const QString &imagePrefix )
55{
56 Button button;
57 button.command = buttonInfo.command;
58 button.type = buttonInfo.type;
59
60 QString fileName = imagePrefix + buttonInfo.fileName + ".png";
61
62 button.mask = setupButtonMask( button.command, fileName );
63
64 return button;
65}
66
67QBitmap MediaWidget::setupButtonMask( const Command &command, const QString &fileName )
68{
69 QBitmap mask( fileName );
70 if ( mask.isNull() )
71 return mask;
72
73 QImage imgMask = mask.convertToImage();
74 uchar **dest = buttonMask.jumpTable();
75 for ( int y = 0; y < buttonMask.height(); y++ ) {
76 uchar *line = dest[y];
77 for ( int x = 0; x < buttonMask.width(); x++ )
78 if ( !qRed( imgMask.pixel( x, y ) ) )
79 line[x] = command + 1;
80 }
81
82 return mask;
83}
84
42void MediaWidget::closeEvent( QCloseEvent * ) 85void MediaWidget::closeEvent( QCloseEvent * )
43{ 86{
44 mediaPlayerState.setList(); 87 mediaPlayerState.setList();
45} 88}
46 89
47void MediaWidget::paintEvent( QPaintEvent *pe ) 90void MediaWidget::paintEvent( QPaintEvent *pe )
48{ 91{
49 QPainter p( this ); 92 QPainter p( this );
50 93
51 if ( mediaPlayerState.isFullscreen() ) { 94 if ( mediaPlayerState.isFullscreen() ) {
52 // Clear the background 95 // Clear the background
53 p.setBrush( QBrush( Qt::black ) ); 96 p.setBrush( QBrush( Qt::black ) );
54 return; 97 return;
55 } 98 }
56 99
57 if ( !pe->erased() ) { 100 if ( !pe->erased() ) {
58 // Combine with background and double buffer 101 // Combine with background and double buffer
59 QPixmap pix( pe->rect().size() ); 102 QPixmap pix( pe->rect().size() );
60 QPainter p( &pix ); 103 QPainter p( &pix );
61 p.translate( -pe->rect().topLeft().x(), -pe->rect().topLeft().y() ); 104 p.translate( -pe->rect().topLeft().x(), -pe->rect().topLeft().y() );
62 p.drawTiledPixmap( pe->rect(), backgroundPixmap, pe->rect().topLeft() ); 105 p.drawTiledPixmap( pe->rect(), backgroundPixmap, pe->rect().topLeft() );
63 paintAllButtons( p ); 106 paintAllButtons( p );
64 QPainter p2( this ); 107 QPainter p2( this );
65 p2.drawPixmap( pe->rect().topLeft(), pix ); 108 p2.drawPixmap( pe->rect().topLeft(), pix );
66 } else { 109 } else {
67 QPainter p( this ); 110 QPainter p( this );
68 paintAllButtons( p ); 111 paintAllButtons( p );
69 } 112 }
70} 113}
71 114
72MediaWidget::Button *MediaWidget::buttonAt( const QPoint &position ) 115MediaWidget::Button *MediaWidget::buttonAt( const QPoint &position )
73{ 116{
74 if ( position.x() <= 0 || position.y() <= 0 || 117 if ( position.x() <= 0 || position.y() <= 0 ||
75 position.x() >= buttonMask.width() || 118 position.x() >= buttonMask.width() ||
76 position.y() >= buttonMask.height() ) 119 position.y() >= buttonMask.height() )
77 return 0; 120 return 0;
78 121
79 int pixelIdx = buttonMask.pixelIndex( position.x(), position.y() ); 122 int pixelIdx = buttonMask.pixelIndex( position.x(), position.y() );
80 for ( ButtonVector::iterator it = buttons.begin(); it != buttons.end(); ++it ) 123 for ( ButtonVector::iterator it = buttons.begin(); it != buttons.end(); ++it )
81 if ( it->command + 1 == pixelIdx ) 124 if ( it->command + 1 == pixelIdx )
82 return &( *it ); 125 return &( *it );
83 126
84 return 0; 127 return 0;
85} 128}
86 129
87void MediaWidget::mousePressEvent( QMouseEvent *event ) 130void MediaWidget::mousePressEvent( QMouseEvent *event )
88{ 131{
89 Button *button = buttonAt( event->pos() - upperLeftOfButtonMask ); 132 Button *button = buttonAt( event->pos() - upperLeftOfButtonMask );
90 133
91 if ( !button ) { 134 if ( !button ) {
92 QWidget::mousePressEvent( event ); 135 QWidget::mousePressEvent( event );
93 return; 136 return;
94 } 137 }
95 138
96 switch ( button->command ) { 139 switch ( button->command ) {
97 case VolumeUp: emit moreClicked(); return; 140 case VolumeUp: emit moreClicked(); return;
98 case VolumeDown: emit lessClicked(); return; 141 case VolumeDown: emit lessClicked(); return;
99 case Back: emit backClicked(); return; 142 case Back: emit backClicked(); return;
100 case Forward: emit forwardClicked(); return; 143 case Forward: emit forwardClicked(); return;
101 default: break; 144 default: break;
102 } 145 }
103} 146}
104 147
105void MediaWidget::mouseReleaseEvent( QMouseEvent *event ) 148void MediaWidget::mouseReleaseEvent( QMouseEvent *event )
diff --git a/noncore/multimedia/opieplayer2/mediawidget.h b/noncore/multimedia/opieplayer2/mediawidget.h
index 8031371..148948a 100644
--- a/noncore/multimedia/opieplayer2/mediawidget.h
+++ b/noncore/multimedia/opieplayer2/mediawidget.h
@@ -22,102 +22,107 @@
22 22
23#ifndef MEDIAWIDGET_H 23#ifndef MEDIAWIDGET_H
24#define MEDIAWIDGET_H 24#define MEDIAWIDGET_H
25 25
26#include <qwidget.h> 26#include <qwidget.h>
27#include <qmap.h> 27#include <qmap.h>
28 28
29#include "mediaplayerstate.h" 29#include "mediaplayerstate.h"
30#include "playlistwidget.h" 30#include "playlistwidget.h"
31 31
32#include <vector> 32#include <vector>
33 33
34class MediaWidget : public QWidget 34class MediaWidget : public QWidget
35{ 35{
36 Q_OBJECT 36 Q_OBJECT
37public: 37public:
38 enum Command { Play = 0, Stop, Next, Previous, VolumeUp, VolumeDown, Loop, PlayList, Forward, Back, FullScreen, Undefined }; 38 enum Command { Play = 0, Stop, Next, Previous, VolumeUp, VolumeDown, Loop, PlayList, Forward, Back, FullScreen, Undefined };
39 enum ButtonType { NormalButton, ToggleButton }; 39 enum ButtonType { NormalButton, ToggleButton };
40 40
41 struct Button 41 struct Button
42 { 42 {
43 Button() : command( Undefined ), type( NormalButton ), isHeld( false ), isDown( false ) {} 43 Button() : command( Undefined ), type( NormalButton ), isHeld( false ), isDown( false ) {}
44 44
45 Command command; 45 Command command;
46 46
47 ButtonType type; // this should be part of the bitfield but gcc2 is too buggy to support this :-( 47 ButtonType type; // this should be part of the bitfield but gcc2 is too buggy to support this :-(
48 bool isHeld : 1; 48 bool isHeld : 1;
49 bool isDown : 1; 49 bool isDown : 1;
50 50
51 QBitmap mask; 51 QBitmap mask;
52 QPixmap pixUp; 52 QPixmap pixUp;
53 QPixmap pixDown; 53 QPixmap pixDown;
54 }; 54 };
55 typedef std::vector<Button> ButtonVector; 55 typedef std::vector<Button> ButtonVector;
56 56
57 struct SkinButtonInfo 57 struct SkinButtonInfo
58 { 58 {
59 Command command; 59 Command command;
60 const char *fileName; 60 const char *fileName;
61 ButtonType type; 61 ButtonType type;
62 }; 62 };
63 63
64 typedef std::vector<QBitmap> MaskVector; 64 typedef std::vector<QBitmap> MaskVector;
65 typedef std::vector<QPixmap> PixmapVector; 65 typedef std::vector<QPixmap> PixmapVector;
66 66
67 MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent = 0, const char *name = 0 ); 67 MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent = 0, const char *name = 0 );
68 virtual ~MediaWidget(); 68 virtual ~MediaWidget();
69 69
70public slots: 70public slots:
71 virtual void setDisplayType( MediaPlayerState::DisplayType displayType ) = 0; 71 virtual void setDisplayType( MediaPlayerState::DisplayType displayType ) = 0;
72 virtual void setLength( long length ) = 0; 72 virtual void setLength( long length ) = 0;
73 virtual void setPlaying( bool playing ) = 0; 73 virtual void setPlaying( bool playing ) = 0;
74 74
75signals: 75signals:
76 void moreReleased(); 76 void moreReleased();
77 void lessReleased(); 77 void lessReleased();
78 void forwardReleased(); 78 void forwardReleased();
79 void backReleased(); 79 void backReleased();
80 void forwardClicked(); 80 void forwardClicked();
81 void backClicked(); 81 void backClicked();
82 void moreClicked(); 82 void moreClicked();
83 void lessClicked(); 83 void lessClicked();
84 84
85protected: 85protected:
86 void setupButtons( const SkinButtonInfo *skinInfo, uint buttonCount,
87 const QString &imagePrefix, const QSize &buttonAreaSize );
88 Button setupButton( const SkinButtonInfo &buttonInfo, const QString &imagePrefix );
89 QBitmap setupButtonMask( const Command &command, const QString &fileName );
90
86 virtual void closeEvent( QCloseEvent * ); 91 virtual void closeEvent( QCloseEvent * );
87 92
88 virtual void paintEvent( QPaintEvent *pe ); 93 virtual void paintEvent( QPaintEvent *pe );
89 94
90 Button *buttonAt( const QPoint &position ); 95 Button *buttonAt( const QPoint &position );
91 96
92 virtual void mousePressEvent( QMouseEvent *event ); 97 virtual void mousePressEvent( QMouseEvent *event );
93 virtual void mouseReleaseEvent( QMouseEvent *event ); 98 virtual void mouseReleaseEvent( QMouseEvent *event );
94 99
95 virtual void makeVisible(); 100 virtual void makeVisible();
96 101
97 void handleCommand( Command command, bool buttonDown ); 102 void handleCommand( Command command, bool buttonDown );
98 103
99 bool isOverButton( const QPoint &position, int buttonId ) const; 104 bool isOverButton( const QPoint &position, int buttonId ) const;
100 105
101 void paintAllButtons( QPainter &p ); 106 void paintAllButtons( QPainter &p );
102 void paintButton( const Button &button ); 107 void paintButton( const Button &button );
103 void paintButton( QPainter &p, const Button &button ); 108 void paintButton( QPainter &p, const Button &button );
104 109
105 void setToggleButton( Button &button, bool down ); 110 void setToggleButton( Button &button, bool down );
106 void setToggleButton( Command command, bool down ); 111 void setToggleButton( Command command, bool down );
107 void toggleButton( Button &button ); 112 void toggleButton( Button &button );
108 113
109 MediaPlayerState &mediaPlayerState; 114 MediaPlayerState &mediaPlayerState;
110 PlayListWidget &playList; 115 PlayListWidget &playList;
111 116
112 ButtonVector buttons; 117 ButtonVector buttons;
113 118
114 QImage buttonMask; 119 QImage buttonMask;
115 120
116 QPoint upperLeftOfButtonMask; 121 QPoint upperLeftOfButtonMask;
117 122
118 QPixmap backgroundPixmap; 123 QPixmap backgroundPixmap;
119}; 124};
120 125
121#endif // MEDIAWIDGET_H 126#endif // MEDIAWIDGET_H
122/* vim: et sw=4 ts=4 127/* vim: et sw=4 ts=4
123 */ 128 */
diff --git a/noncore/multimedia/opieplayer2/videowidget.cpp b/noncore/multimedia/opieplayer2/videowidget.cpp
index 4901e47..d1efaad 100644
--- a/noncore/multimedia/opieplayer2/videowidget.cpp
+++ b/noncore/multimedia/opieplayer2/videowidget.cpp
@@ -33,152 +33,129 @@
33 33
34#include <qpe/qpeapplication.h> 34#include <qpe/qpeapplication.h>
35#include <qpe/resource.h> 35#include <qpe/resource.h>
36#include <qpe/config.h> 36#include <qpe/config.h>
37 37
38 38
39#include <qwidget.h> 39#include <qwidget.h>
40#include <qpainter.h> 40#include <qpainter.h>
41#include <qpixmap.h> 41#include <qpixmap.h>
42#include <qslider.h> 42#include <qslider.h>
43#include <qdrawutil.h> 43#include <qdrawutil.h>
44#include "videowidget.h" 44#include "videowidget.h"
45#include "mediaplayerstate.h" 45#include "mediaplayerstate.h"
46#include "playlistwidget.h" 46#include "playlistwidget.h"
47 47
48 48
49#ifdef Q_WS_QWS 49#ifdef Q_WS_QWS
50# define USE_DIRECT_PAINTER 50# define USE_DIRECT_PAINTER
51# include <qdirectpainter_qws.h> 51# include <qdirectpainter_qws.h>
52# include <qgfxraster_qws.h> 52# include <qgfxraster_qws.h>
53#endif 53#endif
54 54
55 55
56namespace 56namespace
57{ 57{
58 58
59const int xo = 2; // movable x offset 59const int xo = 2; // movable x offset
60const int yo = 0; // movable y offset 60const int yo = 0; // movable y offset
61 61
62const MediaWidget::SkinButtonInfo skinInfo[] = 62const MediaWidget::SkinButtonInfo skinInfo[] =
63{ 63{
64 { MediaWidget::Play, "play", MediaWidget::ToggleButton }, 64 { MediaWidget::Play, "play", MediaWidget::ToggleButton },
65 { MediaWidget::Stop, "stop", MediaWidget::NormalButton }, 65 { MediaWidget::Stop, "stop", MediaWidget::NormalButton },
66 { MediaWidget::Next, "fwd", MediaWidget::NormalButton }, 66 { MediaWidget::Next, "fwd", MediaWidget::NormalButton },
67 { MediaWidget::Previous, "back", MediaWidget::NormalButton }, 67 { MediaWidget::Previous, "back", MediaWidget::NormalButton },
68 { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton }, 68 { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton },
69 { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton }, 69 { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton },
70 { MediaWidget::FullScreen, "full", MediaWidget::ToggleButton } 70 { MediaWidget::FullScreen, "full", MediaWidget::ToggleButton }
71}; 71};
72 72
73const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] ); 73const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] );
74 74
75} 75}
76 76
77VideoWidget::VideoWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name ) 77VideoWidget::VideoWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name )
78 : MediaWidget( playList, mediaPlayerState, parent, name ), scaledWidth( 0 ), scaledHeight( 0 ), videoSliderBeingMoved( false ) 78 : MediaWidget( playList, mediaPlayerState, parent, name ), scaledWidth( 0 ), scaledHeight( 0 ), videoSliderBeingMoved( false )
79{ 79{
80 setCaption( tr("OpiePlayer - Video") ); 80 setCaption( tr("OpiePlayer - Video") );
81 81
82 82
83 videoFrame = new XineVideoWidget ( this, "Video frame" ); 83 videoFrame = new XineVideoWidget ( this, "Video frame" );
84 84
85 connect ( videoFrame, SIGNAL( videoResized ( const QSize & )), this, SIGNAL( videoResized ( const QSize & ))); 85 connect ( videoFrame, SIGNAL( videoResized ( const QSize & )), this, SIGNAL( videoResized ( const QSize & )));
86 connect ( videoFrame, SIGNAL( clicked () ), this, SLOT ( backToNormal() ) ); 86 connect ( videoFrame, SIGNAL( clicked () ), this, SLOT ( backToNormal() ) );
87 87
88 Config cfg("OpiePlayer"); 88 Config cfg("OpiePlayer");
89 cfg.setGroup("Options"); 89 cfg.setGroup("Options");
90 skin = cfg.readEntry("Skin","default"); 90 skin = cfg.readEntry("Skin","default");
91 91
92 QString skinPath = "opieplayer2/skins/" + skin; 92 QString skinPath = "opieplayer2/skins/" + skin;
93 backgroundPixmap = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); 93 backgroundPixmap = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) );
94 imgUp = QImage( Resource::loadImage( QString("%1/skinV_up").arg(skinPath) ) ); 94 imgUp = QImage( Resource::loadImage( QString("%1/skinV_up").arg(skinPath) ) );
95 imgDn = QImage( Resource::loadImage( QString("%1/skinV_down").arg(skinPath) ) ); 95 imgDn = QImage( Resource::loadImage( QString("%1/skinV_down").arg(skinPath) ) );
96 96
97 buttonMask = QImage( imgUp.width(), imgUp.height(), 8, 255 ); 97 setupButtons( skinInfo, buttonCount, QPEApplication::qpeDir() + "/pics/" + skinPath + "/skinV_mask_", imgUp.size() );
98 buttonMask.fill( 0 );
99
100 for ( uint i = 0; i < buttonCount; i++ ) {
101 Button button;
102 button.command = skinInfo[ i ].command;
103 button.type = skinInfo[ i ].type;
104
105 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skinV_mask_" + skinInfo[i].fileName + ".png" );
106 button.mask =QBitmap( filename );
107
108 if ( !button.mask.isNull() ) {
109 QImage imgMask = button.mask.convertToImage();
110 uchar **dest = buttonMask.jumpTable();
111 for ( int y = 0; y < imgUp.height(); y++ ) {
112 uchar *line = dest[y];
113 for ( int x = 0; x < imgUp.width(); x++ )
114 if ( !qRed( imgMask.pixel( x, y ) ) )
115 line[x] = button.command + 1;
116 }
117 }
118
119 buttons.push_back( button );
120 }
121 98
122 setBackgroundPixmap( backgroundPixmap ); 99 setBackgroundPixmap( backgroundPixmap );
123 100
124 slider = new QSlider( Qt::Horizontal, this ); 101 slider = new QSlider( Qt::Horizontal, this );
125 slider->setMinValue( 0 ); 102 slider->setMinValue( 0 );
126 slider->setMaxValue( 1 ); 103 slider->setMaxValue( 1 );
127 slider->setBackgroundPixmap( Resource::loadPixmap( backgroundPix ) ); 104 slider->setBackgroundPixmap( Resource::loadPixmap( backgroundPix ) );
128 //slider->setFocusPolicy( QWidget::NoFocus ); 105 //slider->setFocusPolicy( QWidget::NoFocus );
129 106
130 resizeEvent( NULL ); 107 resizeEvent( NULL );
131 108
132 setLength( mediaPlayerState.length() ); 109 setLength( mediaPlayerState.length() );
133 setPosition( mediaPlayerState.position() ); 110 setPosition( mediaPlayerState.position() );
134 setFullscreen( mediaPlayerState.isFullscreen() ); 111 setFullscreen( mediaPlayerState.isFullscreen() );
135 setPlaying( mediaPlayerState.isPlaying() ); 112 setPlaying( mediaPlayerState.isPlaying() );
136} 113}
137 114
138 115
139VideoWidget::~VideoWidget() 116VideoWidget::~VideoWidget()
140{ 117{
141} 118}
142 119
143QPixmap *combineVImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { 120QPixmap *combineVImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
144 QPixmap pix( img.width(), img.height() ); 121 QPixmap pix( img.width(), img.height() );
145 QPainter p( &pix ); 122 QPainter p( &pix );
146 p.drawTiledPixmap( pix.rect(), bg, offset ); 123 p.drawTiledPixmap( pix.rect(), bg, offset );
147 p.drawImage( 0, 0, img ); 124 p.drawImage( 0, 0, img );
148 return new QPixmap( pix ); 125 return new QPixmap( pix );
149} 126}
150 127
151QPixmap maskVPixToMask( QPixmap pix, QBitmap mask ) { 128QPixmap maskVPixToMask( QPixmap pix, QBitmap mask ) {
152 QPixmap pixmap( pix ); 129 QPixmap pixmap( pix );
153 pixmap.setMask( mask ); 130 pixmap.setMask( mask );
154 return pixmap; 131 return pixmap;
155} 132}
156 133
157void VideoWidget::resizeEvent( QResizeEvent * ) { 134void VideoWidget::resizeEvent( QResizeEvent * ) {
158 int h = height(); 135 int h = height();
159 int w = width(); 136 int w = width();
160 //int Vh = 160; 137 //int Vh = 160;
161 //int Vw = 220; 138 //int Vw = 220;
162 139
163 slider->setFixedWidth( w - 20 ); 140 slider->setFixedWidth( w - 20 );
164 slider->setGeometry( QRect( 15, h - 22, w - 90, 20 ) ); 141 slider->setGeometry( QRect( 15, h - 22, w - 90, 20 ) );
165 slider->setBackgroundOrigin( QWidget::ParentOrigin ); 142 slider->setBackgroundOrigin( QWidget::ParentOrigin );
166 slider->setFocusPolicy( QWidget::NoFocus ); 143 slider->setFocusPolicy( QWidget::NoFocus );
167 slider->setBackgroundPixmap( backgroundPixmap ); 144 slider->setBackgroundPixmap( backgroundPixmap );
168 145
169 upperLeftOfButtonMask.rx() = 0;// ( imgUp->width() ) / 2; 146 upperLeftOfButtonMask.rx() = 0;// ( imgUp->width() ) / 2;
170 if(w>h) 147 if(w>h)
171 upperLeftOfButtonMask.ry() = 0; 148 upperLeftOfButtonMask.ry() = 0;
172 else 149 else
173 upperLeftOfButtonMask.ry() = 185;//(( Vh - imgUp->height() ) / 2) - 10; 150 upperLeftOfButtonMask.ry() = 185;//(( Vh - imgUp->height() ) / 2) - 10;
174 QPoint p = upperLeftOfButtonMask; 151 QPoint p = upperLeftOfButtonMask;
175 152
176 QPixmap *pixUp = combineVImageWithBackground( imgUp, backgroundPixmap, p ); 153 QPixmap *pixUp = combineVImageWithBackground( imgUp, backgroundPixmap, p );
177 QPixmap *pixDn = combineVImageWithBackground( imgDn, backgroundPixmap, p ); 154 QPixmap *pixDn = combineVImageWithBackground( imgDn, backgroundPixmap, p );
178 155
179 for ( ButtonVector::iterator it = buttons.begin(); it != buttons.end(); ++it ) { 156 for ( ButtonVector::iterator it = buttons.begin(); it != buttons.end(); ++it ) {
180 Button &button = *it; 157 Button &button = *it;
181 158
182 if ( !button.mask.isNull() ) { 159 if ( !button.mask.isNull() ) {
183 button.pixUp = maskVPixToMask( *pixUp, button.mask ); 160 button.pixUp = maskVPixToMask( *pixUp, button.mask );
184 button.pixDown = maskVPixToMask( *pixDn, button.mask ); 161 button.pixDown = maskVPixToMask( *pixDn, button.mask );