-rw-r--r-- | libopie2/opiemm/oimagezoomer.cpp | 2 | ||||
-rw-r--r-- | libopie2/opiemm/osoundsystem.cpp | 8 |
2 files changed, 6 insertions, 4 deletions
diff --git a/libopie2/opiemm/oimagezoomer.cpp b/libopie2/opiemm/oimagezoomer.cpp index d1eec67..b7ef238 100644 --- a/libopie2/opiemm/oimagezoomer.cpp +++ b/libopie2/opiemm/oimagezoomer.cpp @@ -1,233 +1,233 @@ #include "oimagezoomer.h" #include <opie2/odebug.h> #include <qimage.h> #include <qpixmap.h> #include <qpainter.h> #include <qrect.h> #include <qpoint.h> #include <qsize.h> namespace Opie { namespace MM { /** * \brief The most simple c'tor * The main c'tor. You still need to set a QPixmap/QIMage, * setImageSize,setViewPortSize,setVisiblePoint * * @param parent The parent widget * @param name A name for this widget * @param fl The widget flags * */ OImageZoomer::OImageZoomer( QWidget* parent, const char* name, WFlags fl ) : QFrame( parent, name, fl ) { init(); } /** * \brief This c'tor takes a QPixmap additional * * You initially set the QPixmap but you still need to provide * the additional data to make this widget useful * * @param pix A Pixmap it'll be converted to a QImage later! * @param par The parent widget * @param name The name of this widget * @param fl The widget flags */ OImageZoomer::OImageZoomer( const QPixmap& pix, QWidget* par, const char* name, WFlags fl ) : QFrame( par, name, fl ) { init(); setImage( pix ); } /** * \brief This c'tor takes a QImage instead * You just provide a QImage which is saved. It behaves the same as the others. * * @param img A Image which will be used for the zoomer content * @param par The parent of the widget * @param name The name of the widget * @param fl The widgets flags */ OImageZoomer::OImageZoomer( const QImage& img, QWidget* par, const char* name, WFlags fl) : QFrame( par, name, fl ) { init(); setImage( img ); } /** * \brief overloaded c'tor * * This differs only in the arguments it takes * * * @param pSize The size of the Page you show * @param vSize The size of the viewport. The size of the visible part of the widget * @param par The parent of the widget * @param name The name * @param fl The window flags */ OImageZoomer::OImageZoomer( const QSize& pSize, const QSize& vSize, QWidget* par, const char* name, WFlags fl ) : QFrame( par, name, fl ), m_imgSize( pSize ),m_visSize( vSize ) { init(); } /** * d'tor */ OImageZoomer::~OImageZoomer() { } void OImageZoomer::init() { m_mevent = false; setFrameStyle( Panel | Sunken ); } /** * \brief set the page/image size * Tell us the QSize of the Data you show to the user. We need this * to do the calculations * * @param size The size of the stuff you want to zoom on */ void OImageZoomer::setImageSize( const QSize& size ) { m_imgSize = size; repaint(); } /** * \brief Set the size of the viewport * Tell us the QSize of the viewport. The viewport is the part * of the widget which is exposed on the screen * * @param size Te size of the viewport * * @see QScrollView::viewport() */ void OImageZoomer::setViewPortSize( const QSize& size ) { m_visSize = size; repaint(); } /** * \brief the point in the topleft corner which is currently visible * Set the visible point. This most of the times relate to QScrollView::contentsX() * and QScrollView::contentsY() * * @see setVisiblePoint(int,int) */ void OImageZoomer::setVisiblePoint( const QPoint& pt ) { m_visPt = pt; repaint(); } /** * Set the Image. The image will be resized on resizeEvent * and it'll set the QPixmap background * * @param img The image will be stored internally and used as the background */ void OImageZoomer::setImage( const QImage& img) { m_img = img; resizeEvent( 0 ); repaint(); } /** * overloaded function it calls the QImage version */ void OImageZoomer::setImage( const QPixmap& pix) { setImage( pix.convertToImage() ); } void OImageZoomer::resizeEvent( QResizeEvent* ev ) { QFrame::resizeEvent( ev ); setBackgroundOrigin( QWidget::WidgetOrigin ); // TODO Qt3 use PalettePixmap and use size QPixmap pix; pix.convertFromImage( m_img.smoothScale( size().width(), size().height() ) ); setBackgroundPixmap( pix); } void OImageZoomer::drawContents( QPainter* p ) { /* * if the page size */ if ( m_imgSize.isEmpty() ) return; /* * paint a red rect which represents the visible size * * We need to recalculate x,y and width and height of the * rect. So image size relates to contentRect * */ QRect c( contentsRect() ); p->setPen( Qt::red ); /* * the contentRect is set equal to the size of the image * Rect/Original = NewRectORWidth/OriginalVisibleStuff and then simply we * need to add the c.y/x due usage of QFrame * For x and y we use the visiblePoint * For height and width we use the size of the viewport * if width/height would be bigger than our widget we use this width/height * */ int len = m_imgSize.width(); int x = (c.width()*m_visPt.x())/len + c.x(); int w = (c.width()*m_visSize.width() )/len + c.x(); if ( w > c.width() ) w = c.width(); len = m_imgSize.height(); int y = (c.height()*m_visPt.y() )/len + c.y(); int h = (c.height()*m_visSize.height() )/len + c.y(); if ( h > c.height() ) h = c.height(); p->drawRect( x, y, w, h ); } -void OImageZoomer::mousePressEvent( QMouseEvent*ev) { +void OImageZoomer::mousePressEvent( QMouseEvent*) { m_mouseX = m_mouseY = -1; m_mevent = true; } void OImageZoomer::mouseReleaseEvent( QMouseEvent*ev) { if (!m_mevent) return; int mx, my; mx = ev->x(); my = ev->y(); int diffx = (mx) * m_imgSize.width() / width(); int diffy = (my) * m_imgSize.height() / height(); emit zoomArea(diffx,diffy); } void OImageZoomer::mouseMoveEvent( QMouseEvent* ev ) { int mx, my; mx = ev->x(); my = ev->y(); if ( m_mouseX != -1 && m_mouseY != -1 ) { m_mevent = false; int diffx = ( mx - m_mouseX ) * m_imgSize.width() / width(); int diffy = ( my - m_mouseY ) * m_imgSize.height() / height(); emit zoomAreaRel( diffx, diffy ); } m_mouseX = mx; m_mouseY = my; } } } diff --git a/libopie2/opiemm/osoundsystem.cpp b/libopie2/opiemm/osoundsystem.cpp index 2b17230..763ff65 100644 --- a/libopie2/opiemm/osoundsystem.cpp +++ b/libopie2/opiemm/osoundsystem.cpp @@ -1,315 +1,317 @@ /* This file is part of the Opie Project (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> =. .=l. .>+-= _;:, .> :=|. This program is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU Library General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, ._= =} : or (at your option) any later version. .%`+i> _;_. .i_,=:_. -<s. This program is distributed in the hope that + . -:. = it will be useful, but WITHOUT ANY WARRANTY; : .. .:, . . . without even the implied warranty of =_ + =;=|` MERCHANTABILITY or FITNESS FOR A _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU ..}^=.= = ; Library General Public License for more ++= -. .` .: details. : = ...= . :.=- -. .:....=;==+<; You should have received a copy of the GNU -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <opie2/osoundsystem.h> #include <opie2/odebug.h> #include <errno.h> #include <fcntl.h> #include <string.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/soundcard.h> #include <sys/stat.h> using namespace Opie::Core; using namespace Opie::MM; /*====================================================================================== * OSoundSystem *======================================================================================*/ OSoundSystem* OSoundSystem::_instance = 0; OSoundSystem::OSoundSystem() { odebug << "OSoundSystem::OSoundSystem()" << oendl; synchronize(); } void OSoundSystem::synchronize() { // gather available interfaces by inspecting /dev //FIXME: we could use SIOCGIFCONF here, but we aren't interested in virtual (e.g. eth0:0) devices //FIXME: Use SIOCGIFCONF anway, because we can disable listing of aliased devices _interfaces.clear(); _interfaces.insert( "soundcard", new OSoundCard( this, "soundcard" ) ); /* QString str; QFile f( "/dev/sound" ); bool hasFile = f.open( IO_ReadOnly ); if ( !hasFile ) { odebug << "OSoundSystem: /dev/sound not existing. No sound devices available" << oendl; return; } QTextStream s( &f ); s.readLine(); s.readLine(); while ( !s.atEnd() ) { s >> str; str.truncate( str.find( ':' ) ); - odebug << "OSoundSystem: found interface '" << str << "'" << oendl; + odebug << "OSoundSystem: found interface '" << str << "'" << oendl; OAudioInterface* iface; iface = new OAudioInterface( this, (const char*) str ); _interfaces.insert( str, iface ); s.readLine(); } */ } int OSoundSystem::count() const { return _interfaces.count(); } OSoundCard* OSoundSystem::card( const QString& iface ) const { return _interfaces[iface]; } OSoundSystem* OSoundSystem::instance() { if ( !_instance ) _instance = new OSoundSystem(); return _instance; } OSoundSystem::CardIterator OSoundSystem::iterator() const { return OSoundSystem::CardIterator( _interfaces ); } /*====================================================================================== * OSoundCard *======================================================================================*/ OSoundCard::OSoundCard( QObject* parent, const char* name ) :QObject( parent, name ), _audio( 0 ), _mixer( 0 ) { odebug << "OSoundCard::OSoundCard()" << oendl; init(); } OSoundCard::~OSoundCard() { } void OSoundCard::init() { _audio = new OAudioInterface( this, "/dev/dsp" ); _mixer = new OMixerInterface( this, "/dev/mixer" ); } /*====================================================================================== * OAudioInterface *======================================================================================*/ OAudioInterface::OAudioInterface( QObject* parent, const char* name ) :QObject( parent, name ), _sfd(0) { odebug << "OAudioInterface::OAudioInterface()" << oendl; init(); } OAudioInterface::~OAudioInterface() { } void OAudioInterface::init() { } /*====================================================================================== * OMixerInterface *======================================================================================*/ OMixerInterface::OMixerInterface( QObject* parent, const char* name ) :QObject( parent, name ) { odebug << "OMixerInterface::OMixerInterface()" << oendl; init(); } OMixerInterface::~OMixerInterface() { } void OMixerInterface::init() { // open the device _fd = ::open( name(), O_RDWR ); if ( _fd == -1 ) { owarn << "OMixerInterface::init(): Can't open mixer." << oendl; return; } // construct the device capabilities int devmask = 0; if ( ioctl( _fd, SOUND_MIXER_READ_DEVMASK, &devmask ) != -1 ) { if ( devmask & ( 1 << SOUND_MIXER_VOLUME ) ) _channels.insert( "PlayVolume", SOUND_MIXER_VOLUME ); if ( devmask & ( 1 << SOUND_MIXER_BASS ) ) _channels.insert( "PlayBass", SOUND_MIXER_BASS ); if ( devmask & ( 1 << SOUND_MIXER_TREBLE ) ) _channels.insert( "PlayTreble", SOUND_MIXER_TREBLE ); if ( devmask & ( 1 << SOUND_MIXER_SYNTH ) ) _channels.insert( "PlaySynth", SOUND_MIXER_SYNTH ); if ( devmask & ( 1 << SOUND_MIXER_PCM ) ) _channels.insert( "PlayPCM", SOUND_MIXER_PCM ); if ( devmask & ( 1 << SOUND_MIXER_SPEAKER ) ) _channels.insert( "PlaySpeaker", SOUND_MIXER_SPEAKER ); if ( devmask & ( 1 << SOUND_MIXER_LINE ) ) _channels.insert( "PlayLine", SOUND_MIXER_LINE ); if ( devmask & ( 1 << SOUND_MIXER_MIC ) ) _channels.insert( "PlayMic", SOUND_MIXER_MIC ); if ( devmask & ( 1 << SOUND_MIXER_CD ) ) _channels.insert( "PlayCD", SOUND_MIXER_CD ); if ( devmask & ( 1 << SOUND_MIXER_IMIX ) ) _channels.insert( "PlayInputMix", SOUND_MIXER_IMIX ); if ( devmask & ( 1 << SOUND_MIXER_ALTPCM ) ) _channels.insert( "PlayAltPCM", SOUND_MIXER_ALTPCM ); if ( devmask & ( 1 << SOUND_MIXER_RECLEV ) ) _channels.insert( "PlayRecord", SOUND_MIXER_RECLEV ); if ( devmask & ( 1 << SOUND_MIXER_IGAIN ) ) _channels.insert( "PlayInputGain", SOUND_MIXER_IGAIN ); if ( devmask & ( 1 << SOUND_MIXER_OGAIN ) ) _channels.insert( "PlayOutputGain", SOUND_MIXER_OGAIN ); //odebug << "devmask available and constructed." << oendl; } devmask = 0; if ( ioctl( _fd, SOUND_MIXER_READ_RECMASK, &devmask ) != -1 ) { if ( devmask & ( 1 << SOUND_MIXER_VOLUME ) ) _channels.insert( "RecVolume", SOUND_MIXER_VOLUME ); if ( devmask & ( 1 << SOUND_MIXER_BASS ) ) _channels.insert( "RecBass", SOUND_MIXER_BASS ); if ( devmask & ( 1 << SOUND_MIXER_TREBLE ) ) _channels.insert( "RecTreble", SOUND_MIXER_TREBLE ); if ( devmask & ( 1 << SOUND_MIXER_SYNTH ) ) _channels.insert( "RecSynth", SOUND_MIXER_SYNTH ); if ( devmask & ( 1 << SOUND_MIXER_PCM ) ) _channels.insert( "RecPCM", SOUND_MIXER_PCM ); if ( devmask & ( 1 << SOUND_MIXER_SPEAKER ) ) _channels.insert( "RecSpeaker", SOUND_MIXER_SPEAKER ); if ( devmask & ( 1 << SOUND_MIXER_LINE ) ) _channels.insert( "RecLine", SOUND_MIXER_LINE ); if ( devmask & ( 1 << SOUND_MIXER_MIC ) ) _channels.insert( "RecMic", SOUND_MIXER_MIC ); if ( devmask & ( 1 << SOUND_MIXER_CD ) ) _channels.insert( "RecCD", SOUND_MIXER_CD ); if ( devmask & ( 1 << SOUND_MIXER_IMIX ) ) _channels.insert( "RecInputMix", SOUND_MIXER_IMIX ); if ( devmask & ( 1 << SOUND_MIXER_ALTPCM ) ) _channels.insert( "RecAltPCM", SOUND_MIXER_ALTPCM ); if ( devmask & ( 1 << SOUND_MIXER_RECLEV ) ) _channels.insert( "RecRecord", SOUND_MIXER_RECLEV ); if ( devmask & ( 1 << SOUND_MIXER_IGAIN ) ) _channels.insert( "RecInputGain", SOUND_MIXER_IGAIN ); if ( devmask & ( 1 << SOUND_MIXER_OGAIN ) ) _channels.insert( "RecOutputGain", SOUND_MIXER_OGAIN ); //odebug << "recmask available and constructed." << oendl; } /* ChannelIterator it; for ( it = _channels.begin(); it != _channels.end(); ++it ) { - odebug << "Channel " << it.key() << " available (bit " << it.data() << ")" << oendl; - odebug << " +--- Volume: " << volume( it.key() ) & 0xff << " | " << volume( it.key() ) >> 8 << "" << oendl; + odebug << "Channel " << it.key() << " available (bit " << it.data() << ")" << oendl; + odebug << " +--- Volume: " << volume( it.key() ) & 0xff << " | " << volume( it.key() ) >> 8 << "" << oendl; } */ } QStringList OMixerInterface::allChannels() const { ChannelIterator it = _channels.begin(); QStringList channels; while ( it != _channels.end() ) { channels += it.key(); it++; } return channels; } QStringList OMixerInterface::recChannels() const { owarn << "NYI" << oendl; + return QStringList(); } QStringList OMixerInterface::playChannels() const { owarn << "NYI" << oendl; + return QStringList(); } bool OMixerInterface::hasChannel( const QString& channel ) { return _channels.contains( channel ); } void OMixerInterface::setVolume( const QString& channel, int left, int right ) { int volume = left; volume |= ( right == -1 ) ? left << 8 : right << 8; if ( _channels.contains( channel ) ) { int result = ioctl( _fd, MIXER_WRITE( _channels[channel] ), &volume ); if ( result == -1 ) { owarn << "Can't set volume: " << strerror( errno ) << oendl; } else { if ( result & 0xff != left ) { owarn << "Device adjusted volume from " << left << " to " << (result & 0xff) << oendl; } } } } int OMixerInterface::volume( const QString& channel ) const { int volume; if ( _channels.contains( channel ) ) { if ( ioctl( _fd, MIXER_READ( _channels[channel] ), &volume ) == -1 ) { owarn << "Can't get volume: " << strerror( errno ) << oendl; } else return volume; } return -1; } |