Browse Source

Implement presets in param&state examples

pull/2/head
falkTX 9 years ago
parent
commit
0e19892458
7 changed files with 306 additions and 74 deletions
  1. +1
    -1
      dpf
  2. +5
    -4
      plugins/Parameters/DistrhoPluginInfo.h
  3. +52
    -2
      plugins/Parameters/ExamplePluginParameters.cpp
  4. +41
    -6
      plugins/Parameters/ExampleUIParameters.cpp
  5. +6
    -6
      plugins/States/DistrhoPluginInfo.h
  6. +125
    -12
      plugins/States/ExamplePluginStates.cpp
  7. +76
    -43
      plugins/States/ExampleUIStates.cpp

+ 1
- 1
dpf

@@ -1 +1 @@
Subproject commit eafa8349a9dd745a3739a78166606801c17240d2
Subproject commit d0a26d6d205ce51c450806d615c8edd3e48e7a90

+ 5
- 4
plugins/Parameters/DistrhoPluginInfo.h View File

@@ -21,9 +21,10 @@
#define DISTRHO_PLUGIN_NAME "Parameters" #define DISTRHO_PLUGIN_NAME "Parameters"
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/Parameters" #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/Parameters"


#define DISTRHO_PLUGIN_HAS_UI 1
#define DISTRHO_PLUGIN_IS_RT_SAFE 1
#define DISTRHO_PLUGIN_NUM_INPUTS 2
#define DISTRHO_PLUGIN_NUM_OUTPUTS 2
#define DISTRHO_PLUGIN_HAS_UI 1
#define DISTRHO_PLUGIN_IS_RT_SAFE 1
#define DISTRHO_PLUGIN_NUM_INPUTS 2
#define DISTRHO_PLUGIN_NUM_OUTPUTS 2
#define DISTRHO_PLUGIN_WANT_PROGRAMS 1


#endif // DISTRHO_PLUGIN_INFO_H_INCLUDED #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED

+ 52
- 2
plugins/Parameters/ExamplePluginParameters.cpp View File

@@ -28,7 +28,7 @@ class ExamplePluginParameters : public Plugin
{ {
public: public:
ExamplePluginParameters() ExamplePluginParameters()
: Plugin(9, 0, 0) // 9 parameters, 0 programs, 0 states
: Plugin(9, 2, 0) // 9 parameters, 2 programs, 0 states
{ {
/** /**
Initialize all our parameters to their defaults. Initialize all our parameters to their defaults.
@@ -117,7 +117,7 @@ The plugin will be treated as an effect, but it will not change the host audio."
/** /**
Changing parameters does not cause any realtime-unsafe operations, so we can mark them as automable. Changing parameters does not cause any realtime-unsafe operations, so we can mark them as automable.
Also set as boolean because they work are on/off switches.
Also set as boolean because they work as on/off switches.
*/ */
parameter.hints = kParameterIsAutomable|kParameterIsBoolean; parameter.hints = kParameterIsAutomable|kParameterIsBoolean;
@@ -171,6 +171,23 @@ The plugin will be treated as an effect, but it will not change the host audio."
parameter.symbol.replace('-', '_'); parameter.symbol.replace('-', '_');
} }
/**
Set the name of the program @a index.
This function will be called once, shortly after the plugin is created.
*/
void initProgramName(uint32_t index, String& programName) override
{
switch (index)
{
case 0:
programName = "Default";
break;
case 1:
programName = "Custom";
break;
}
}
/* -------------------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------------------
* Internal data */ * Internal data */
@@ -190,6 +207,39 @@ The plugin will be treated as an effect, but it will not change the host audio."
fParamGrid[index] = value; fParamGrid[index] = value;
} }
/**
Load a program.
The host may call this function from any context, including realtime processing.
*/
void loadProgram(uint32_t index) override
{
switch (index)
{
case 0:
fParamGrid[0] = 0.0f;
fParamGrid[1] = 0.0f;
fParamGrid[2] = 0.0f;
fParamGrid[3] = 0.0f;
fParamGrid[4] = 0.0f;
fParamGrid[5] = 0.0f;
fParamGrid[6] = 0.0f;
fParamGrid[7] = 0.0f;
fParamGrid[8] = 0.0f;
break;
case 1:
fParamGrid[0] = 1.0f;
fParamGrid[1] = 1.0f;
fParamGrid[2] = 0.0f;
fParamGrid[3] = 0.0f;
fParamGrid[4] = 1.0f;
fParamGrid[5] = 1.0f;
fParamGrid[6] = 1.0f;
fParamGrid[7] = 0.0f;
fParamGrid[8] = 1.0f;
break;
}
}
/* -------------------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------------------
* Process */ * Process */


+ 41
- 6
plugins/Parameters/ExampleUIParameters.cpp View File

@@ -18,12 +18,6 @@


START_NAMESPACE_DISTRHO START_NAMESPACE_DISTRHO


/**
For simplicity this UI will be of constant size.
*/
static const int kUIWidth = 512;
static const int kUIHeight = 512;

/** /**
We need the rectangle class from DGL. We need the rectangle class from DGL.
*/ */
@@ -34,6 +28,13 @@ using DGL::Rectangle;
class ExampleUIParameters : public UI class ExampleUIParameters : public UI
{ {
public: public:
/**
For simplicity this UI will be of constant size.
*/
static const int kUIWidth = 512;
static const int kUIHeight = 512;

/* constructor */
ExampleUIParameters() ExampleUIParameters()
: UI(kUIWidth, kUIHeight) : UI(kUIWidth, kUIHeight)
{ {
@@ -61,6 +62,40 @@ protected:
repaint(); repaint();
} }


/**
A program has been loaded on the plugin side.
This is called by the host to inform the UI about program changes.
*/
void programLoaded(uint32_t index) override
{
switch (index)
{
case 0:
fParamGrid[0] = false;
fParamGrid[1] = false;
fParamGrid[2] = false;
fParamGrid[3] = false;
fParamGrid[4] = false;
fParamGrid[5] = false;
fParamGrid[6] = false;
fParamGrid[7] = false;
fParamGrid[8] = false;
break;
case 1:
fParamGrid[0] = true;
fParamGrid[1] = true;
fParamGrid[2] = false;
fParamGrid[3] = false;
fParamGrid[4] = true;
fParamGrid[5] = true;
fParamGrid[6] = true;
fParamGrid[7] = false;
fParamGrid[8] = true;
break;
}
repaint();
}

/* -------------------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------------------
* Widget Callbacks */ * Widget Callbacks */




+ 6
- 6
plugins/States/DistrhoPluginInfo.h View File

@@ -21,11 +21,11 @@
#define DISTRHO_PLUGIN_NAME "States" #define DISTRHO_PLUGIN_NAME "States"
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/States" #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/States"


#define DISTRHO_PLUGIN_HAS_UI 1
#define DISTRHO_PLUGIN_IS_RT_SAFE 1
#define DISTRHO_PLUGIN_NUM_INPUTS 2
#define DISTRHO_PLUGIN_NUM_OUTPUTS 2
#define DISTRHO_PLUGIN_WANT_STATE 1
#define DISTRHO_PLUGIN_HAS_UI 1
#define DISTRHO_PLUGIN_IS_RT_SAFE 1
#define DISTRHO_PLUGIN_NUM_INPUTS 2
#define DISTRHO_PLUGIN_NUM_OUTPUTS 2
#define DISTRHO_PLUGIN_WANT_PROGRAMS 1
#define DISTRHO_PLUGIN_WANT_STATE 1


#endif // DISTRHO_PLUGIN_INFO_H_INCLUDED #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED

+ 125
- 12
plugins/States/ExamplePluginStates.cpp View File

@@ -28,9 +28,13 @@ class ExamplePluginStates : public Plugin
{ {
public: public:
ExamplePluginStates() ExamplePluginStates()
: Plugin(0, 0, 9) // 0 parameters, 0 programs, 9 states
: Plugin(0, 2, 9) // 0 parameters, 2 programs, 9 states
{ {
// nothing here
/**
Initialize all our parameters to their defaults.
In this example all default values are false, so we can simply zero them.
*/
std::memset(fParamGrid, 0, sizeof(bool)*9);
} }
protected: protected:
@@ -98,17 +102,29 @@ The plugin will be treated as an effect, but it will not change the host audio."
} }
/* -------------------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------------------
* Parameters */
* Init */
/** /**
This plugin has no parameters, so we can safely ignore some functions.
This plugin has no parameters..
*/ */
void initParameter(uint32_t, Parameter&) override {} void initParameter(uint32_t, Parameter&) override {}
void setParameterValue(uint32_t, float) override {}
float getParameterValue(uint32_t) const override { return 0.0f; }
/* --------------------------------------------------------------------------------------------------------
* State */
/**
Set the name of the program @a index.
This function will be called once, shortly after the plugin is created.
*/
void initProgramName(uint32_t index, String& programName) override
{
switch (index)
{
case 0:
programName = "Default";
break;
case 1:
programName = "Custom";
break;
}
}
/** /**
Set the state key and default value of @a index. Set the state key and default value of @a index.
@@ -150,13 +166,106 @@ The plugin will be treated as an effect, but it will not change the host audio."
defaultStateValue = "false"; defaultStateValue = "false";
} }
/* --------------------------------------------------------------------------------------------------------
* Internal data */
/**
This plugin has no parameters..
*/
void setParameterValue(uint32_t, float) override {}
float getParameterValue(uint32_t) const override { return 0.0f; }
/**
Load a program.
The host may call this function from any context, including realtime processing.
*/
void loadProgram(uint32_t index) override
{
switch (index)
{
case 0:
fParamGrid[0] = false;
fParamGrid[1] = false;
fParamGrid[2] = false;
fParamGrid[3] = false;
fParamGrid[4] = false;
fParamGrid[5] = false;
fParamGrid[6] = false;
fParamGrid[7] = false;
fParamGrid[8] = false;
break;
case 1:
fParamGrid[0] = true;
fParamGrid[1] = true;
fParamGrid[2] = false;
fParamGrid[3] = false;
fParamGrid[4] = true;
fParamGrid[5] = true;
fParamGrid[6] = true;
fParamGrid[7] = false;
fParamGrid[8] = true;
break;
}
}
/**
Get the value of an internal state.
The host may call this function from any non-realtime context.
*/
String getState(const char* key) const override
{
static const String sTrue ("true");
static const String sFalse("false");
// check which block changed
/**/ if (std::strcmp(key, "top-left") == 0)
return fParamGrid[0] ? sTrue : sFalse;
else if (std::strcmp(key, "top-center") == 0)
return fParamGrid[1] ? sTrue : sFalse;
else if (std::strcmp(key, "top-right") == 0)
return fParamGrid[2] ? sTrue : sFalse;
else if (std::strcmp(key, "middle-left") == 0)
return fParamGrid[3] ? sTrue : sFalse;
else if (std::strcmp(key, "middle-center") == 0)
return fParamGrid[4] ? sTrue : sFalse;
else if (std::strcmp(key, "middle-right") == 0)
return fParamGrid[5] ? sTrue : sFalse;
else if (std::strcmp(key, "bottom-left") == 0)
return fParamGrid[6] ? sTrue : sFalse;
else if (std::strcmp(key, "bottom-center") == 0)
return fParamGrid[7] ? sTrue : sFalse;
else if (std::strcmp(key, "bottom-right") == 0)
return fParamGrid[8] ? sTrue : sFalse;
return sFalse;
}
/** /**
Change an internal state. Change an internal state.
*/ */
void setState(const char*, const char*) override
void setState(const char* key, const char* value) override
{ {
// there is no plugin side state here.
// states on this plugin will only change the UI grid, so we do nothing here
const bool valueOnOff = (std::strcmp(value, "true") == 0);
// check which block changed
/**/ if (std::strcmp(key, "top-left") == 0)
fParamGrid[0] = valueOnOff;
else if (std::strcmp(key, "top-center") == 0)
fParamGrid[1] = valueOnOff;
else if (std::strcmp(key, "top-right") == 0)
fParamGrid[2] = valueOnOff;
else if (std::strcmp(key, "middle-left") == 0)
fParamGrid[3] = valueOnOff;
else if (std::strcmp(key, "middle-center") == 0)
fParamGrid[4] = valueOnOff;
else if (std::strcmp(key, "middle-right") == 0)
fParamGrid[5] = valueOnOff;
else if (std::strcmp(key, "bottom-left") == 0)
fParamGrid[6] = valueOnOff;
else if (std::strcmp(key, "bottom-center") == 0)
fParamGrid[7] = valueOnOff;
else if (std::strcmp(key, "bottom-right") == 0)
fParamGrid[8] = valueOnOff;
} }
/* -------------------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------------------
@@ -182,7 +291,11 @@ The plugin will be treated as an effect, but it will not change the host audio."
// ------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------
private: private:
// nothing here
/**
Our parameters used to display the grid on/off states.
*/
bool fParamGrid[9];
/** /**
Set our plugin class as non-copyable and add a leak detector just in case. Set our plugin class as non-copyable and add a leak detector just in case.


+ 76
- 43
plugins/States/ExampleUIStates.cpp View File

@@ -18,43 +18,39 @@


START_NAMESPACE_DISTRHO START_NAMESPACE_DISTRHO


/**
For simplicity this UI will be of constant size.
*/
static const int kUIWidth = 512;
static const int kUIHeight = 512;

/**
We need the rectangle class from DGL.
*/
using DGL::Rectangle;

/**
Get key name from an index.
*/
static const char* getStateKeyFromIndex(const uint32_t index)
{
switch (index)
{
case 0: return "top-left";
case 1: return "top-center";
case 2: return "top-right";
case 3: return "middle-left";
case 4: return "middle-center";
case 5: return "middle-right";
case 6: return "bottom-left";
case 7: return "bottom-center";
case 8: return "bottom-right";
}

return "unknown";
}

// ----------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------


class ExampleUIParameters : public UI class ExampleUIParameters : public UI
{ {
public: public:
/**
For simplicity this UI will be of constant size.
*/
static const int kUIWidth = 512;
static const int kUIHeight = 512;

/**
Get key name from an index.
*/
static const char* getStateKeyFromIndex(const uint32_t index) noexcept
{
switch (index)
{
case 0: return "top-left";
case 1: return "top-center";
case 2: return "top-right";
case 3: return "middle-left";
case 4: return "middle-center";
case 5: return "middle-right";
case 6: return "bottom-left";
case 7: return "bottom-center";
case 8: return "bottom-right";
}

return "unknown";
}

/* constructor */
ExampleUIParameters() ExampleUIParameters()
: UI() : UI()
{ {
@@ -75,32 +71,69 @@ protected:
*/ */
void parameterChanged(uint32_t, float) override {} void parameterChanged(uint32_t, float) override {}


/**
A program has been loaded on the plugin side.
This is called by the host to inform the UI about program changes.
*/
void programLoaded(uint32_t index) override
{
d_stdout("UI programLoaded %i", index);

switch (index)
{
case 0:
fParamGrid[0] = false;
fParamGrid[1] = false;
fParamGrid[2] = false;
fParamGrid[3] = false;
fParamGrid[4] = false;
fParamGrid[5] = false;
fParamGrid[6] = false;
fParamGrid[7] = false;
fParamGrid[8] = false;
break;
case 1:
fParamGrid[0] = true;
fParamGrid[1] = true;
fParamGrid[2] = false;
fParamGrid[3] = false;
fParamGrid[4] = true;
fParamGrid[5] = true;
fParamGrid[6] = true;
fParamGrid[7] = false;
fParamGrid[8] = true;
break;
}
repaint();
}

/** /**
A state has changed on the plugin side. A state has changed on the plugin side.
This is called by the host to inform the UI about state changes. This is called by the host to inform the UI about state changes.
*/ */
void stateChanged(const char* key, const char* value)
void stateChanged(const char* key, const char* value) override
{ {
// check which block changed, enable it if its value is "true"
const bool valueOnOff = (std::strcmp(value, "true") == 0);


// check which block changed
/**/ if (std::strcmp(key, "top-left") == 0) /**/ if (std::strcmp(key, "top-left") == 0)
fParamGrid[0] = (std::strcmp(value, "true") == 0);
fParamGrid[0] = valueOnOff;
else if (std::strcmp(key, "top-center") == 0) else if (std::strcmp(key, "top-center") == 0)
fParamGrid[1] = (std::strcmp(value, "true") == 0);
fParamGrid[1] = valueOnOff;
else if (std::strcmp(key, "top-right") == 0) else if (std::strcmp(key, "top-right") == 0)
fParamGrid[2] = (std::strcmp(value, "true") == 0);
fParamGrid[2] = valueOnOff;
else if (std::strcmp(key, "middle-left") == 0) else if (std::strcmp(key, "middle-left") == 0)
fParamGrid[3] = (std::strcmp(value, "true") == 0);
fParamGrid[3] = valueOnOff;
else if (std::strcmp(key, "middle-center") == 0) else if (std::strcmp(key, "middle-center") == 0)
fParamGrid[4] = (std::strcmp(value, "true") == 0);
fParamGrid[4] = valueOnOff;
else if (std::strcmp(key, "middle-right") == 0) else if (std::strcmp(key, "middle-right") == 0)
fParamGrid[5] = (std::strcmp(value, "true") == 0);
fParamGrid[5] = valueOnOff;
else if (std::strcmp(key, "bottom-left") == 0) else if (std::strcmp(key, "bottom-left") == 0)
fParamGrid[6] = (std::strcmp(value, "true") == 0);
fParamGrid[6] = valueOnOff;
else if (std::strcmp(key, "bottom-center") == 0) else if (std::strcmp(key, "bottom-center") == 0)
fParamGrid[7] = (std::strcmp(value, "true") == 0);
fParamGrid[7] = valueOnOff;
else if (std::strcmp(key, "bottom-right") == 0) else if (std::strcmp(key, "bottom-right") == 0)
fParamGrid[8] = (std::strcmp(value, "true") == 0);
fParamGrid[8] = valueOnOff;


// trigger repaint // trigger repaint
repaint(); repaint();


Loading…
Cancel
Save