Performance improvements to controller-base
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@888 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -72,14 +72,14 @@ void modelView::doConnections( void )
|
||||
{
|
||||
QWidget * w = dynamic_cast<QWidget *>( 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"
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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() ),
|
||||
|
||||
Reference in New Issue
Block a user