Add a method to track value changes in AutomatableModel - this can be used by DSP code instead of signals/slots to improve performance

This commit is contained in:
Vesa
2014-11-16 14:14:35 +02:00
parent df843e2b32
commit 3e19bc8ddb
2 changed files with 18 additions and 2 deletions

View File

@@ -25,7 +25,7 @@
#ifndef AUTOMATABLE_MODEL_H
#define AUTOMATABLE_MODEL_H
#include <math.h>
#include "lmms_math.h"
#include "JournallingObject.h"
#include "Model.h"
@@ -70,7 +70,8 @@ public:
enum ScaleType
{
Linear,
Logarithmic
Logarithmic,
Decibel
};
enum DataType
@@ -239,6 +240,15 @@ public:
return m_hasLinkedModels;
}
bool isValueChanged()
{
if( m_valueChanged )
{
m_valueChanged = false;
return true;
}
}
float globalAutomationValueAt( const MidiTime& time );
public slots:
@@ -288,6 +298,8 @@ private:
float m_step;
float m_range;
float m_centerValue;
bool m_valueChanged;
// most objects will need this temporarily (until sampleExact is
// standard)

View File

@@ -47,6 +47,7 @@ AutomatableModel::AutomatableModel( DataType type,
m_step( step ),
m_range( max - min ),
m_centerValue( m_minValue ),
m_valueChanged( false ),
m_setValueDepth( 0 ),
m_hasLinkedModels( false ),
m_controllerConnection( NULL )
@@ -234,6 +235,7 @@ void AutomatableModel::setValue( const float value )
(*it)->setJournalling( journalling );
}
}
m_valueChanged = true;
emit dataChanged();
}
else
@@ -327,6 +329,7 @@ void AutomatableModel::setAutomatedValue( const float value )
(*it)->setAutomatedValue( value );
}
}
m_valueChanged = true;
emit dataChanged();
}
--m_setValueDepth;
@@ -471,6 +474,7 @@ void AutomatableModel::setControllerConnection( ControllerConnection* c )
{
QObject::connect( m_controllerConnection, SIGNAL( valueChanged() ), this, SIGNAL( dataChanged() ) );
QObject::connect( m_controllerConnection, SIGNAL( destroyed() ), this, SLOT( unlinkControllerConnection() ) );
m_valueChanged = true;
emit dataChanged();
}
}