Browse Source

More documentation and small UI changes

gh-pages
falkTX 9 years ago
parent
commit
4ef494a628
10 changed files with 170 additions and 178 deletions
  1. +77
    -77
      distrho/DistrhoPlugin.hpp
  2. +21
    -24
      distrho/DistrhoUI.hpp
  3. +1
    -1
      distrho/DistrhoUtils.hpp
  4. +11
    -14
      distrho/src/DistrhoPlugin.cpp
  5. +3
    -3
      distrho/src/DistrhoPluginJack.cpp
  6. +1
    -1
      distrho/src/DistrhoPluginVST.cpp
  7. +29
    -21
      distrho/src/DistrhoUI.cpp
  8. +4
    -4
      distrho/src/DistrhoUIDSSI.cpp
  9. +17
    -27
      distrho/src/DistrhoUIInternal.hpp
  10. +6
    -6
      distrho/src/DistrhoUILV2.cpp

+ 77
- 77
distrho/DistrhoPlugin.hpp View File

@@ -90,48 +90,48 @@ static const uint32_t kParameterIsOutput = 0x10;
When changing this struct values you must ensure maximum > minimum and default is within range.
*/
struct ParameterRanges {
/**
Default value.
*/
/**
Default value.
*/
float def;

/**
Minimum value.
*/
/**
Minimum value.
*/
float min;

/**
Maximum value.
*/
/**
Maximum value.
*/
float max;

/**
Default constructor.
*/
/**
Default constructor.
*/
ParameterRanges() noexcept
: def(0.0f),
min(0.0f),
max(1.0f) {}

/**
Constructor using custom values.
*/
/**
Constructor using custom values.
*/
ParameterRanges(const float df, const float mn, const float mx) noexcept
: def(df),
min(mn),
max(mx) {}

/**
Fix the default value within range.
*/
/**
Fix the default value within range.
*/
void fixDefault() noexcept
{
fixValue(def);
}

/**
Fix a value within range.
*/
/**
Fix a value within range.
*/
void fixValue(float& value) const noexcept
{
if (value < min)
@@ -140,9 +140,9 @@ struct ParameterRanges {
value = max;
}

/**
Get a fixed value within range.
*/
/**
Get a fixed value within range.
*/
const float& getFixedValue(const float& value) const noexcept
{
if (value <= min)
@@ -152,9 +152,9 @@ struct ParameterRanges {
return value;
}

/**
Get a value normalized to 0.0<->1.0.
*/
/**
Get a value normalized to 0.0<->1.0.
*/
float getNormalizedValue(const float& value) const noexcept
{
const float normValue((value - min) / (max - min));
@@ -166,9 +166,9 @@ struct ParameterRanges {
return normValue;
}

/**
Get a value normalized to 0.0<->1.0, fixed within range.
*/
/**
Get a value normalized to 0.0<->1.0, fixed within range.
*/
float getFixedAndNormalizedValue(const float& value) const noexcept
{
if (value <= min)
@@ -186,9 +186,9 @@ struct ParameterRanges {
return normValue;
}

/**
Get a proper value previously normalized to 0.0<->1.0.
*/
/**
Get a proper value previously normalized to 0.0<->1.0.
*/
float getUnnormalizedValue(const float& value) const noexcept
{
if (value <= 0.0f)
@@ -204,43 +204,43 @@ struct ParameterRanges {
Parameter.
*/
struct Parameter {
/**
Hints describing this parameter.
@see ParameterHints
*/
/**
Hints describing this parameter.
@see ParameterHints
*/
uint32_t hints;

/**
The name of this parameter.
A parameter name can contain any character, but hosts might have a hard time with non-ascii ones.
The name doesn't have to be unique within a plugin instance, but it's recommended.
*/
/**
The name of this parameter.
A parameter name can contain any character, but hosts might have a hard time with non-ascii ones.
The name doesn't have to be unique within a plugin instance, but it's recommended.
*/
d_string name;

/**
The symbol of this parameter.
A parameter symbol is a short restricted name used as a machine and human readable identifier.
The first character must be one of _, a-z or A-Z and subsequent characters can be from _, a-z, A-Z and 0-9.
@note: Parameter symbols MUST be unique within a plugin instance.
*/
/**
The symbol of this parameter.
A parameter symbol is a short restricted name used as a machine and human readable identifier.
The first character must be one of _, a-z or A-Z and subsequent characters can be from _, a-z, A-Z and 0-9.
@note: Parameter symbols MUST be unique within a plugin instance.
*/
d_string symbol;

/**
The unit of this parameter.
This means something like "dB", "kHz" and "ms".
Can be left blank if units do not apply to this parameter.
*/
/**
The unit of this parameter.
This means something like "dB", "kHz" and "ms".
Can be left blank if units do not apply to this parameter.
*/
d_string unit;

/**
Ranges of this parameter.
The ranges describe the default, minimum and maximum values.
*/
/**
Ranges of this parameter.
The ranges describe the default, minimum and maximum values.
*/
ParameterRanges ranges;

/**
Default constructor for a null parameter.
*/
/**
Default constructor for a null parameter.
*/
Parameter() noexcept
: hints(0x0),
name(),
@@ -253,25 +253,25 @@ struct Parameter {
MIDI event.
*/
struct MidiEvent {
/**
Size of internal data.
*/
/**
Size of internal data.
*/
static const uint32_t kDataSize = 4;

/**
Time offset in frames.
*/
/**
Time offset in frames.
*/
uint32_t frame;

/**
Number of bytes used.
*/
/**
Number of bytes used.
*/
uint32_t size;

/**
MIDI data.
If size > kDataSize, dataExt is used (otherwise null).
*/
/**
MIDI data.
If size > kDataSize, dataExt is used (otherwise null).
*/
uint8_t data[kDataSize];
const uint8_t* dataExt;
};
@@ -366,9 +366,9 @@ struct TimePosition {
beatsPerMinute(0.0) {}
} bbt;

/**
Default constructor for a time position.
*/
/**
Default constructor for a time position.
*/
TimePosition() noexcept
: playing(false),
frame(0),
@@ -627,7 +627,7 @@ private:
*/
extern Plugin* createPlugin();

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

END_NAMESPACE_DISTRHO



+ 21
- 24
distrho/DistrhoUI.hpp View File

@@ -41,9 +41,7 @@ START_NAMESPACE_DISTRHO

TODO.

you should not have to call setSize during construction,
that is handled by d_initSize
if you want to change size later on you should use setSize and then d_setSize to report to host
must call setSize during construction,
*/
class UI : public UIWidget
{
@@ -59,7 +57,7 @@ public:
virtual ~UI();

/* --------------------------------------------------------------------------------------------------------
* Host DSP state */
* Host state */

/**
Get the current sample rate used in plugin processing.
@@ -91,15 +89,6 @@ public:
void d_sendNote(const uint8_t channel, const uint8_t note, const uint8_t velocity);
#endif

/* --------------------------------------------------------------------------------------------------------
* Host UI state */

/**
TODO: Document this.
never call this from the constructor
*/
void d_setSize(const uint width, const uint height);

#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
/* --------------------------------------------------------------------------------------------------------
* Direct DSP access - DO NOT USE THIS UNLESS STRICTLY NECESSARY!! */
@@ -111,16 +100,6 @@ public:
#endif

protected:
/* --------------------------------------------------------------------------------------------------------
* Init */

/**
Set the initial UI size.
This function will be called once, shortly after the UI is created.
@see d_setSize(uint,uint)
*/
virtual void d_initSize(uint& width, uint& height) = 0;

/* --------------------------------------------------------------------------------------------------------
* DSP/Plugin Callbacks */

@@ -165,13 +144,31 @@ protected:

#if ! DISTRHO_UI_USE_NTK
/**
OpenGL reshape function, called when the host window is resized.
OpenGL window reshape function, called when parent window is resized.
You can reimplement this function for a custom OpenGL state.
@see Window::onReshape(uint,uint)
*/
virtual void d_uiReshape(uint width, uint height);
#endif

/* --------------------------------------------------------------------------------------------------------
* UI Resize Handling, internal */

#if DISTRHO_UI_USE_NTK
/**
NTK widget resize function, called when the widget is resized.
This is overriden here so the host knows when the UI is resized by you.
*/
void resize(int x, int y, int w, int h) override;
#else
/**
OpenGL widget resize function, called when the widget is resized.
This is overriden here so the host knows when the UI is resized by you.
@see Widget::onResize(const ResizeEvent&)
*/
void onResize(const ResizeEvent& ev) override;
#endif

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

private:


+ 1
- 1
distrho/DistrhoUtils.hpp View File

@@ -51,7 +51,7 @@ inline float
// misc functions

static inline
long d_cconst(const int a, const int b, const int c, const int d) noexcept
int64_t d_cconst(const int a, const int b, const int c, const int d) noexcept
{
return (a << 24) | (b << 16) | (c << 8) | (d << 0);
}


+ 11
- 14
distrho/src/DistrhoPlugin.cpp View File

@@ -18,20 +18,20 @@

START_NAMESPACE_DISTRHO

// -----------------------------------------------------------------------
// Static data, see DistrhoPluginInternal.hpp
/* ------------------------------------------------------------------------------------------------------------
* Static data, see DistrhoPluginInternal.hpp */

uint32_t d_lastBufferSize = 0;
double d_lastSampleRate = 0.0;

// -----------------------------------------------------------------------
// Static fallback data, see DistrhoPluginInternal.hpp
/* ------------------------------------------------------------------------------------------------------------
* Static fallback data, see DistrhoPluginInternal.hpp */

const d_string PluginExporter::sFallbackString;
const ParameterRanges PluginExporter::sFallbackRanges;

// -----------------------------------------------------------------------
// Plugin
/* ------------------------------------------------------------------------------------------------------------
* Plugin */

Plugin::Plugin(const uint32_t parameterCount, const uint32_t programCount, const uint32_t stateCount)
: pData(new PrivateData())
@@ -68,8 +68,8 @@ Plugin::~Plugin()
delete pData;
}

// -----------------------------------------------------------------------
// Host state
/* ------------------------------------------------------------------------------------------------------------
* Host state */

uint32_t Plugin::d_getBufferSize() const noexcept
{
@@ -84,9 +84,6 @@ double Plugin::d_getSampleRate() const noexcept
#if DISTRHO_PLUGIN_WANT_TIMEPOS
const TimePos& Plugin::d_getTimePos() const noexcept
{
// timePos outside run() may not be valid
DISTRHO_SAFE_ASSERT(pData->isProcessing);

return pData->timePos;
}
#endif
@@ -106,12 +103,12 @@ bool Plugin::d_writeMidiEvent(const MidiEvent& /*midiEvent*/) noexcept
}
#endif

// -----------------------------------------------------------------------
// Callbacks (optional)
/* ------------------------------------------------------------------------------------------------------------
* Callbacks (optional) */

void Plugin::d_bufferSizeChanged(uint32_t) {}
void Plugin::d_sampleRateChanged(double) {}

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

END_NAMESPACE_DISTRHO

+ 3
- 3
distrho/src/DistrhoPluginJack.cpp View File

@@ -105,9 +105,9 @@ public:
jack_activate(fClient);

if (const char* const name = jack_get_client_name(fClient))
fUI.setTitle(name);
fUI.setWindowTitle(name);
else
fUI.setTitle(fPlugin.getName());
fUI.setWindowTitle(fPlugin.getName());

fUI.exec(this);
}
@@ -295,7 +295,7 @@ protected:

void setSize(const uint width, const uint height)
{
fUI.setSize(width, height);
fUI.setWindowSize(width, height);
}

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


+ 1
- 1
distrho/src/DistrhoPluginVST.cpp View File

@@ -217,7 +217,7 @@ protected:

void setSize(const uint width, const uint height)
{
fUI.setSize(width, height);
fUI.setWindowSize(width, height);
hostCallback(audioMasterSizeWindow, width, height, nullptr, 0.0f);
}



+ 29
- 21
distrho/src/DistrhoUI.cpp View File

@@ -18,15 +18,15 @@

START_NAMESPACE_DISTRHO

// -----------------------------------------------------------------------
// Static data, see DistrhoUIInternal.hpp
/* ------------------------------------------------------------------------------------------------------------
* Static data, see DistrhoUIInternal.hpp */

double d_lastUiSampleRate = 0.0;
void* d_lastUiDspPtr = nullptr;
UIWindow* d_lastUiWindow = nullptr;

// -----------------------------------------------------------------------
// UI
/* ------------------------------------------------------------------------------------------------------------
* UI */

UI::UI()
: UIWidget(*d_lastUiWindow),
@@ -40,8 +40,8 @@ UI::~UI()
delete pData;
}

// -----------------------------------------------------------------------
// Host DSP State
/* ------------------------------------------------------------------------------------------------------------
* Host state */

double UI::d_getSampleRate() const noexcept
{
@@ -72,17 +72,9 @@ void UI::d_sendNote(const uint8_t channel, const uint8_t note, const uint8_t vel
}
#endif

// -----------------------------------------------------------------------
// Host UI State

void UI::d_setSize(const uint width, const uint height)
{
pData->setSizeCallback(width, height);
}

#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
// -----------------------------------------------------------------------
// Direct DSP access
/* ------------------------------------------------------------------------------------------------------------
* Direct DSP access */

void* UI::d_getPluginInstancePointer() const noexcept
{
@@ -90,13 +82,13 @@ void* UI::d_getPluginInstancePointer() const noexcept
}
#endif

// -----------------------------------------------------------------------
// DSP Callbacks (optional)
/* ------------------------------------------------------------------------------------------------------------
* DSP/Plugin Callbacks (optional) */

void UI::d_sampleRateChanged(double) {}

// -----------------------------------------------------------------------
// UI Callbacks (optional)
/* ------------------------------------------------------------------------------------------------------------
* UI Callbacks (optional) */

#if ! DISTRHO_UI_USE_NTK
void UI::d_uiReshape(uint width, uint height)
@@ -112,6 +104,22 @@ void UI::d_uiReshape(uint width, uint height)
}
#endif

// -----------------------------------------------------------------------
/* ------------------------------------------------------------------------------------------------------------
* UI Resize Handling, internal */

#if DISTRHO_UI_USE_NTK
void UI::resize(int x, int y, int w, int h)
{
UIWidget::resize(x, y w, h);
pData->setSizeCallback(w, h);
}
#else
void UI::onResize(const ResizeEvent& ev)
{
pData->setSizeCallback(ev.size.getWidth(), ev.size.getHeight());
}
#endif

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

END_NAMESPACE_DISTRHO

+ 4
- 4
distrho/src/DistrhoUIDSSI.cpp View File

@@ -97,7 +97,7 @@ public:
fHostClosed(false),
fOscData(oscData)
{
fUI.setTitle(uiTitle);
fUI.setWindowTitle(uiTitle);
}

~UIDssi()
@@ -147,12 +147,12 @@ public:

void dssiui_show()
{
fUI.setVisible(true);
fUI.setWindowVisible(true);
}

void dssiui_hide()
{
fUI.setVisible(false);
fUI.setWindowVisible(false);
}

void dssiui_quit()
@@ -195,7 +195,7 @@ protected:

void setSize(const uint width, const uint height)
{
fUI.setSize(width, height);
fUI.setWindowSize(width, height);
}

private:


+ 17
- 27
distrho/src/DistrhoUIInternal.hpp View File

@@ -62,10 +62,6 @@ struct UI::PrivateData {
void* dspPtr;
#endif

// UI
uint initialWidth;
uint initialHeight;

// Callbacks
editParamFunc editParamCallbackFunc;
setParamFunc setParamCallbackFunc;
@@ -80,8 +76,6 @@ struct UI::PrivateData {
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
dspPtr(d_lastUiDspPtr),
#endif
initialWidth(0),
initialHeight(0),
editParamCallbackFunc(nullptr),
setParamCallbackFunc(nullptr),
setStateCallbackFunc(nullptr),
@@ -134,9 +128,6 @@ struct UI::PrivateData {

void setSizeCallback(const uint width, const uint height)
{
DISTRHO_SAFE_ASSERT_RETURN(initialWidth != 0,);
DISTRHO_SAFE_ASSERT_RETURN(initialHeight != 0,);

if (setSizeCallbackFunc != nullptr)
setSizeCallbackFunc(ptr, width, height);
}
@@ -166,15 +157,9 @@ public:
{
DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,);

uint width = 0, height = 0;
fUI->d_initSize(width, height);

// set widget size
fUI->setSize(width, height);

// set window size
setResizable(false);
setSize(width, height);
setSize(fUI->getWidth(), fUI->getHeight());
}

~UIExporterWindow()
@@ -205,9 +190,10 @@ protected:
DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,);

// report size change to plugin UI
fUI->setSize(width, height);
// TESTING is this needed?
//fUI->setSize(width, height);

// update openGL state
// custom window reshape
fUI->d_uiReshape(width, height);

fIsReady = true;
@@ -256,6 +242,11 @@ public:
return glWindow.getHeight();
}

bool isVisible() const noexcept
{
return glWindow.isVisible();
}

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

uint32_t getParameterOffset() const noexcept
@@ -324,39 +315,38 @@ public:
return ! glApp.isQuiting();
}

bool isVisible() const noexcept
{
return glWindow.isVisible();
}

void quit()
{
glWindow.close();
glApp.quit();
}

void setSize(const uint width, const uint height)
// -------------------------------------------------------------------

void setWindowSize(const uint width, const uint height)
{
glWindow.setSize(width, height);
}

void setTitle(const char* const uiTitle)
void setWindowTitle(const char* const uiTitle)
{
glWindow.setTitle(uiTitle);
}

void setTransientWinId(const intptr_t winId)
void setWindowTransientWinId(const intptr_t winId)
{
glWindow.setTransientWinId(winId);
}

bool setVisible(const bool yesNo)
bool setWindowVisible(const bool yesNo)
{
glWindow.setVisible(yesNo);

return ! glApp.isQuiting();
}

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

void setSampleRate(const double sampleRate, const bool doCallback = false)
{
DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,);


+ 6
- 6
distrho/src/DistrhoUILV2.cpp View File

@@ -70,7 +70,7 @@ public:
if (options[i].type == uridMap->map(uridMap->handle, LV2_ATOM__Long))
{
if (const int64_t frontendWinId = *(const int64_t*)options[i].value)
fUI.setTransientWinId(static_cast<intptr_t>(frontendWinId));
fUI.setWindowTransientWinId(static_cast<intptr_t>(frontendWinId));
}
else
d_stderr("Host provides frontendWinId but has wrong value type");
@@ -82,7 +82,7 @@ public:
if (const char* const windowTitle = (const char*)options[i].value)
{
hasTitle = true;
fUI.setTitle(windowTitle);
fUI.setWindowTitle(windowTitle);
}
}
else
@@ -91,7 +91,7 @@ public:
}

if (! hasTitle)
fUI.setTitle(DISTRHO_PLUGIN_NAME);
fUI.setWindowTitle(DISTRHO_PLUGIN_NAME);
}

// -------------------------------------------------------------------
@@ -138,12 +138,12 @@ public:

int lv2ui_show()
{
return fUI.setVisible(true) ? 0 : 1;
return fUI.setWindowVisible(true) ? 0 : 1;
}

int lv2ui_hide()
{
return fUI.setVisible(false) ? 0 : 1;
return fUI.setWindowVisible(false) ? 0 : 1;
}

// -------------------------------------------------------------------
@@ -211,7 +211,7 @@ protected:

void setSize(const uint width, const uint height)
{
fUI.setSize(width, height);
fUI.setWindowSize(width, height);

if (fUiResize != nullptr && ! fWinIdWasNull)
fUiResize->ui_resize(fUiResize->handle, width, height);


Loading…
Cancel
Save