From 0bb4bf5221a09e4465c59e55fe5ccb93882298af Mon Sep 17 00:00:00 2001 From: Paul Giblock Date: Sat, 5 Apr 2008 04:17:25 +0000 Subject: [PATCH] Performance improvements to controller-base git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@888 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 25 +++++++++++++++++++ data/themes/default/add_controller.png | Bin 0 -> 1619 bytes data/themes/default/controller.png | Bin 0 -> 1387 bytes include/combobox.h | 32 ++++++++++++------------- include/knob.h | 5 ++++ include/mv_base.h | 3 ++- include/song_editor.h | 1 + src/core/mixer.cpp | 18 ++++++++++---- src/core/mv_base.cpp | 6 ++--- src/gui/song_editor.cpp | 7 ++++++ src/gui/widgets/knob.cpp | 29 ++++++++++++++++++++-- 11 files changed, 99 insertions(+), 27 deletions(-) create mode 100644 data/themes/default/add_controller.png create mode 100644 data/themes/default/controller.png diff --git a/ChangeLog b/ChangeLog index 14d775fc3..05ba00e71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2008-04-04 Paul Giblock + + * include/knob.h: + * src/gui/widgets/knob.cpp: + Add friendlyUpdates slot and override doConnections + + * include/song_editor.h: + Add button for managing controller to songEditor + + * include/mv_base.h: + * include/core/mv_base.cpp: + Make doConnections virtual + + * include/combobox.h: + Fixed tabs + + * src/core/mixer.cpp: + Couldn't easily convert from void* to int on a 64bit machine. Instead, we + now use a union. We should change any enqueueing code to use the union as + well + + * data/themes/add_controller.png: + * data/themes/controller.png: + Some new images for controllers + 2008-04-04 Tobias Doerffel * src/core/mixer.cpp: diff --git a/data/themes/default/add_controller.png b/data/themes/default/add_controller.png new file mode 100644 index 0000000000000000000000000000000000000000..7b7ec506d29094a250ce23b9dfd320602fde7380 GIT binary patch literal 1619 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 ); - } + comboBoxModel * model( void ) + { + return( castModel() ); + } - const comboBoxModel * model( void ) const - { - return( castModel() ); - } + const comboBoxModel * model( void ) const + { + return( castModel() ); + } - virtual void modelChanged( void ) - { - if( model() != NULL ) - { - connect( model(), SIGNAL( itemPixmapRemoved( QPixmap * ) ), - this, SLOT( deletePixmap( QPixmap * ) ) ); - } - } + virtual void modelChanged( void ) + { + if( model() != NULL ) + { + QWidget::connect( model(), SIGNAL( itemPixmapRemoved( QPixmap * ) ), + this, SLOT( deletePixmap( QPixmap * ) ) ); + } + } protected: diff --git a/include/knob.h b/include/knob.h index af51263ab..0b279f449 100644 --- a/include/knob.h +++ b/include/knob.h @@ -70,6 +70,7 @@ public slots: void connectToMidiDevice( void ); void connectToController( void ); void displayHelp( void ); + void friendlyUpdate( void ); signals: @@ -114,6 +115,10 @@ private: model()->step() ) ); } + virtual void doConnections( void ); + + + void valueChange( void ); void buttonReleased( void ); diff --git a/include/mv_base.h b/include/mv_base.h index 58a620149..28e9db411 100644 --- a/include/mv_base.h +++ b/include/mv_base.h @@ -71,6 +71,7 @@ signals: class modelView { + public: modelView( model * _model ); virtual ~modelView() @@ -98,7 +99,7 @@ protected: { } - void doConnections( void ); + virtual void doConnections( void ); private: diff --git a/include/song_editor.h b/include/song_editor.h index 8eedf3a4d..309b30daf 100644 --- a/include/song_editor.h +++ b/include/song_editor.h @@ -96,6 +96,7 @@ private: toolButton * m_addBBTrackButton; toolButton * m_addSampleTrackButton; + toolButton * m_addControllerButton; toolButton * m_drawModeButton; toolButton * m_editModeButton; diff --git a/src/core/mixer.cpp b/src/core/mixer.cpp index 84ed579e8..8c0ce5da6 100644 --- a/src/core/mixer.cpp +++ b/src/core/mixer.cpp @@ -95,7 +95,15 @@ public: { } JobTypes type; - void * job; + + union + { + playHandle * playHandleJob; + audioPort * audioPortJob; + int effectChannelJob; + void * job; + }; + volatile bool done; } ; @@ -159,11 +167,11 @@ private: switch( it->type ) { case PlayHandle: - ( (playHandle *) it->job )->play(); + it->playHandleJob->play(); break; case AudioPortEffects: { - audioPort * a = (audioPort *) it->job; + audioPort * a = it->audioPortJob; bool me = a->processEffects(); if( a->m_bufferUsage != audioPort::NoUsage || me ) { @@ -174,8 +182,8 @@ private: } break; case EffectChannel: - engine::getFxMixer()->processChannel( - (fx_ch_t) (int) it->job ); + engine::getFxMixer()->processChannel( + (fx_ch_t) it->effectChannelJob ); default: break; } diff --git a/src/core/mv_base.cpp b/src/core/mv_base.cpp index 10026acb9..a4451741a 100644 --- a/src/core/mv_base.cpp +++ b/src/core/mv_base.cpp @@ -72,14 +72,14 @@ void modelView::doConnections( void ) { QWidget * w = dynamic_cast( this ); QObject::connect( m_model, SIGNAL( dataChanged() ), - w, SLOT( update() ), Qt::QueuedConnection ); + w, SLOT( update() ), + Qt::QueuedConnection ); + QObject::connect( m_model, SIGNAL( propertiesChanged() ), w, SLOT( update() ), Qt::QueuedConnection ); } } - - #include "mv_base.moc" diff --git a/src/gui/song_editor.cpp b/src/gui/song_editor.cpp index 5ac71683b..78e366820 100644 --- a/src/gui/song_editor.cpp +++ b/src/gui/song_editor.cpp @@ -257,6 +257,12 @@ songEditor::songEditor( song * _song ) : m_s, SLOT( addSampleTrack() ), m_toolBar ); + m_addControllerButton = new toolButton( embed::getIconPixmap( + "add_controller" ), + tr( "Add controller" ), + m_s, SLOT( addSampleTrack() ), + m_toolBar ); + m_drawModeButton = new toolButton( embed::getIconPixmap( "edit_draw" ), tr( "Draw mode" ), @@ -322,6 +328,7 @@ songEditor::songEditor( song * _song ) : tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_addBBTrackButton ); tb_layout->addWidget( m_addSampleTrackButton ); + tb_layout->addWidget( m_addControllerButton ); tb_layout->addSpacing( 10 ); tb_layout->addWidget( m_drawModeButton ); tb_layout->addWidget( m_editModeButton ); diff --git a/src/gui/widgets/knob.cpp b/src/gui/widgets/knob.cpp index dcf5d113d..229e926e5 100644 --- a/src/gui/widgets/knob.cpp +++ b/src/gui/widgets/knob.cpp @@ -287,8 +287,9 @@ void knob::contextMenuEvent( QContextMenuEvent * ) SLOT( openInAutomationEditor() ) ); contextMenu.addSeparator(); } - contextMenu.addAction( tr( "Connect to controller..." ), this, - SLOT( connectToController() ) ); + contextMenu.addAction( embed::getIconPixmap( "controller" ), + tr( "Connect to controller..." ), this, + SLOT( connectToController() ) ); contextMenu.addSeparator(); contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ), this, SLOT( displayHelp() ) ); @@ -586,6 +587,30 @@ void knob::connectToController( void ) } +void knob::friendlyUpdate( void ) +{ + if( model()->getController() == NULL || controller::runningFrames() % (256*4) == 0 ) + { + update(); + } +} + + +void knob::doConnections( void ) +{ + if( model() != NULL ) + { + QObject::connect( model(), SIGNAL( dataChanged() ), + this, SLOT( friendlyUpdate() ), + Qt::QueuedConnection ); + + QObject::connect( model(), SIGNAL( propertiesChanged() ), + this, SLOT( update() ), Qt::QueuedConnection ); + } +} + + + void knob::displayHelp( void ) { QWhatsThis::showText( mapToGlobal( rect().bottomRight() ),