Signed-off-by: falkTX <falktx@falktx.com>pull/457/head
@@ -603,6 +603,12 @@ START_NAMESPACE_DISTRHO | |||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_WANT_TIMEPOS 1 | #define DISTRHO_PLUGIN_WANT_TIMEPOS 1 | ||||
/** | |||||
Whether the %UI uses Cairo for drawing instead of the default OpenGL mode.@n | |||||
When enabled your %UI instance will subclass @ref CairoTopLevelWidget instead of @ref TopLevelWidget. | |||||
*/ | |||||
#define DISTRHO_UI_USE_CAIRO 1 | |||||
/** | /** | ||||
Whether the %UI uses a custom toolkit implementation based on OpenGL.@n | Whether the %UI uses a custom toolkit implementation based on OpenGL.@n | ||||
When enabled, the macros @ref DISTRHO_UI_CUSTOM_INCLUDE_PATH and @ref DISTRHO_UI_CUSTOM_WIDGET_TYPE are required. | When enabled, the macros @ref DISTRHO_UI_CUSTOM_INCLUDE_PATH and @ref DISTRHO_UI_CUSTOM_WIDGET_TYPE are required. | ||||
@@ -616,6 +622,12 @@ START_NAMESPACE_DISTRHO | |||||
*/ | */ | ||||
#define DISTRHO_UI_CUSTOM_INCLUDE_PATH | #define DISTRHO_UI_CUSTOM_INCLUDE_PATH | ||||
/** | |||||
Whether the %UI uses NanoVG for drawing instead of the default raw OpenGL mode.@n | |||||
When enabled your %UI instance will subclass @ref NanoTopLevelWidget instead of @ref TopLevelWidget. | |||||
*/ | |||||
#define DISTRHO_UI_USE_NANOVG 1 | |||||
/** | /** | ||||
The top-level-widget typedef to use for the custom toolkit. | The top-level-widget typedef to use for the custom toolkit. | ||||
This widget class MUST be a subclass of DGL TopLevelWindow class. | This widget class MUST be a subclass of DGL TopLevelWindow class. | ||||
@@ -648,19 +660,25 @@ START_NAMESPACE_DISTRHO | |||||
#define DISTRHO_UI_DEFAULT_HEIGHT 300 | #define DISTRHO_UI_DEFAULT_HEIGHT 300 | ||||
/** | /** | ||||
Whether the %UI uses NanoVG for drawing instead of the default raw OpenGL calls.@n | |||||
When enabled your %UI instance will subclass @ref NanoWidget instead of @ref Widget. | |||||
*/ | |||||
#define DISTRHO_UI_USE_NANOVG 1 | |||||
/** | |||||
Whether the %UI is resizable to any size by the user.@n | |||||
By default this is false, and resizing is only allowed under the plugin UI control,@n | |||||
Whether the %UI is resizable to any size by the user and OS.@n | |||||
By default this is false, with resizing only allowed when coded from the the plugin UI side.@n | |||||
Enabling this options makes it possible for the user to resize the plugin UI at anytime. | Enabling this options makes it possible for the user to resize the plugin UI at anytime. | ||||
@see UI::setGeometryConstraints(uint, uint, bool, bool) | @see UI::setGeometryConstraints(uint, uint, bool, bool) | ||||
*/ | */ | ||||
#define DISTRHO_UI_USER_RESIZABLE 1 | #define DISTRHO_UI_USER_RESIZABLE 1 | ||||
/** | |||||
Whether to %UI is going to use file browser dialogs.@n | |||||
By default this is false, with the file browser APIs not available for use. | |||||
*/ | |||||
#define DISTRHO_UI_FILE_BROWSER 1 | |||||
/** | |||||
Whether to %UI is going to use web browser views.@n | |||||
By default this is false, with the web browser APIs not available for use. | |||||
*/ | |||||
#define DISTRHO_UI_WEB_VIEW 1 | |||||
/** | /** | ||||
The %UI URI when exporting in LV2 format.@n | The %UI URI when exporting in LV2 format.@n | ||||
By default this is set to @ref DISTRHO_PLUGIN_URI with "#UI" as suffix. | By default this is set to @ref DISTRHO_PLUGIN_URI with "#UI" as suffix. | ||||
@@ -865,7 +883,7 @@ START_NAMESPACE_DISTRHO | |||||
/** | /** | ||||
Whether to enable runtime plugin tests.@n | Whether to enable runtime plugin tests.@n | ||||
This will check, during initialization of the plugin, if parameters, programs and states are setup properly.@n | This will check, during initialization of the plugin, if parameters, programs and states are setup properly.@n | ||||
Useful to enable as part of CI, can safely be skipped.@n | |||||
Useful to enable as part of CI, can be safely skipped.@n | |||||
Under DPF makefiles this can be enabled by using `make DPF_RUNTIME_TESTING=true`. | Under DPF makefiles this can be enabled by using `make DPF_RUNTIME_TESTING=true`. | ||||
@note Some checks are only available with the GCC compiler, | @note Some checks are only available with the GCC compiler, | ||||
@@ -885,26 +903,12 @@ START_NAMESPACE_DISTRHO | |||||
*/ | */ | ||||
#define DPF_VST3_DONT_USE_BRAND_ID | #define DPF_VST3_DONT_USE_BRAND_ID | ||||
/** | |||||
Disable all file browser related code.@n | |||||
Must be set as compiler macro when building DGL. (e.g. `CXXFLAGS="-DDGL_FILE_BROWSER_DISABLED"`) | |||||
*/ | |||||
#define DGL_FILE_BROWSER_DISABLED | |||||
/** | /** | ||||
Disable resource files, like internally used fonts.@n | Disable resource files, like internally used fonts.@n | ||||
Must be set as compiler macro when building DGL. (e.g. `CXXFLAGS="-DDGL_NO_SHARED_RESOURCES"`) | Must be set as compiler macro when building DGL. (e.g. `CXXFLAGS="-DDGL_NO_SHARED_RESOURCES"`) | ||||
*/ | */ | ||||
#define DGL_NO_SHARED_RESOURCES | #define DGL_NO_SHARED_RESOURCES | ||||
/** | |||||
Whether to use OpenGL3 instead of the default OpenGL2 compatility profile. | |||||
Under DPF makefiles this can be enabled by using `make USE_OPENGL3=true` on the dgl build step. | |||||
@note This is experimental and incomplete, contributions are welcome and appreciated. | |||||
*/ | |||||
#define DGL_USE_OPENGL3 | |||||
/** @} */ | /** @} */ | ||||
/* ------------------------------------------------------------------------------------------------------------ | /* ------------------------------------------------------------------------------------------------------------ | ||||
@@ -189,30 +189,65 @@ protected: | |||||
Get the plugin label.@n | Get the plugin label.@n | ||||
This label is a short restricted name consisting of only _, a-z, A-Z and 0-9 characters. | This label is a short restricted name consisting of only _, a-z, A-Z and 0-9 characters. | ||||
*/ | */ | ||||
#ifdef DISTRHO_PLUGIN_LABEL | |||||
virtual const char* getLabel() const | |||||
{ | |||||
return DISTRHO_PLUGIN_LABEL; | |||||
} | |||||
#else | |||||
virtual const char* getLabel() const = 0; | virtual const char* getLabel() const = 0; | ||||
#endif | |||||
/** | /** | ||||
Get an extensive comment/description about the plugin.@n | Get an extensive comment/description about the plugin.@n | ||||
Optional, returns nothing by default. | Optional, returns nothing by default. | ||||
*/ | */ | ||||
virtual const char* getDescription() const { return ""; } | |||||
virtual const char* getDescription() const | |||||
{ | |||||
#ifdef DISTRHO_PLUGIN_DESCRIPTION | |||||
return DISTRHO_PLUGIN_DESCRIPTION; | |||||
#else | |||||
return ""; | |||||
#endif | |||||
} | |||||
/** | /** | ||||
Get the plugin author/maker. | Get the plugin author/maker. | ||||
*/ | */ | ||||
#ifdef DISTRHO_PLUGIN_MAKER | |||||
virtual const char* getMaker() const | |||||
{ | |||||
return DISTRHO_PLUGIN_MAKER; | |||||
} | |||||
#else | |||||
virtual const char* getMaker() const = 0; | virtual const char* getMaker() const = 0; | ||||
#endif | |||||
/** | /** | ||||
Get the plugin homepage.@n | Get the plugin homepage.@n | ||||
Optional, returns nothing by default. | Optional, returns nothing by default. | ||||
*/ | */ | ||||
virtual const char* getHomePage() const { return ""; } | |||||
virtual const char* getHomePage() const | |||||
{ | |||||
#ifdef DISTRHO_PLUGIN_HOMEPAGE | |||||
return DISTRHO_PLUGIN_HOMEPAGE; | |||||
#else | |||||
return ""; | |||||
#endif | |||||
} | |||||
/** | /** | ||||
Get the plugin license (a single line of text or a URL).@n | Get the plugin license (a single line of text or a URL).@n | ||||
For commercial plugins this should return some short copyright information. | For commercial plugins this should return some short copyright information. | ||||
*/ | */ | ||||
#ifdef DISTRHO_PLUGIN_LICENSE | |||||
virtual const char* getLicense() const | |||||
{ | |||||
return DISTRHO_PLUGIN_LICENSE; | |||||
} | |||||
#else | |||||
virtual const char* getLicense() const = 0; | virtual const char* getLicense() const = 0; | ||||
#endif | |||||
/** | /** | ||||
Get the plugin version, in hexadecimal. | Get the plugin version, in hexadecimal. | ||||
@@ -0,0 +1,392 @@ | |||||
#pragma once | |||||
/** | |||||
This file contains C Macros that describe this plugin. | |||||
With these macros we can tell the host what features the plugin requires. | |||||
New functions will be available to call and/or override depending on which macros are enabled. | |||||
All values are either integer or strings. | |||||
For boolean-like values 1 means 'on' and 0 means 'off'. | |||||
*/ | |||||
/** | |||||
The plugin name. | |||||
This is used to identify your plugin before a Plugin instance can be created. | |||||
@note This macro is required. | |||||
*/ | |||||
#define DISTRHO_PLUGIN_NAME "Plugin Name" | |||||
/** | |||||
Number of audio inputs the plugin has. | |||||
@note This macro is required. | |||||
*/ | |||||
#define DISTRHO_PLUGIN_NUM_INPUTS 2 | |||||
/** | |||||
Number of audio outputs the plugin has. | |||||
@note This macro is required. | |||||
*/ | |||||
#define DISTRHO_PLUGIN_NUM_OUTPUTS 2 | |||||
/** | |||||
The plugin URI when exporting in LV2 format. | |||||
TODO describe what a URI is | |||||
@note This macro is required. | |||||
*/ | |||||
#define DISTRHO_PLUGIN_URI "urn:distrho:name" | |||||
/** | |||||
Whether the plugin has a custom UI. | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_HAS_UI 0 | |||||
/** | |||||
Whether the plugin processing is realtime-safe. | |||||
TODO - list rtsafe requirements | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_IS_RT_SAFE 0 | |||||
/** | |||||
Whether the plugin is a synth. | |||||
@ref DISTRHO_PLUGIN_WANT_MIDI_INPUT is automatically enabled when this is too. | |||||
@see DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_IS_SYNTH 0 | |||||
/** | |||||
Request the minimum buffer size for the input and output event ports. | |||||
Currently only used in LV2, with a default value of 2048 if unset. | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE 2048 | |||||
/** | |||||
Whether the plugin has an LV2 modgui. | |||||
This will simply add a "rdfs:seeAlso <modgui.ttl>" on the LV2 manifest. | |||||
It is up to you to create this file. | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_USES_MODGUI 0 | |||||
/** | |||||
Enable direct access between the UI and plugin code. | |||||
@see UI::getPluginInstancePointer() | |||||
@note DO NOT USE THIS UNLESS STRICTLY NECESSARY!! | |||||
Try to avoid it at all costs! | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 0 | |||||
/** | |||||
Whether the plugin introduces latency during audio or midi processing. | |||||
@see Plugin::setLatency(uint32_t) | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_LATENCY 0 | |||||
/** | |||||
Whether the plugin wants MIDI input. | |||||
This is automatically enabled if @ref DISTRHO_PLUGIN_IS_SYNTH is true. | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_MIDI_INPUT 0 | |||||
/** | |||||
Whether the plugin wants MIDI output. | |||||
@see Plugin::writeMidiEvent(const MidiEvent&) | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 0 | |||||
/** | |||||
Whether the plugin wants to change its own parameter inputs. | |||||
Not all hosts or plugin formats support this, | |||||
so Plugin::canRequestParameterValueChanges() can be used to query support at runtime. | |||||
@see Plugin::requestParameterValueChange(uint32_t, float) | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_PARAMETER_VALUE_CHANGE_REQUEST 0 | |||||
/** | |||||
Whether the plugin provides its own internal programs. | |||||
@see Plugin::initProgramName(uint32_t, String&) | |||||
@see Plugin::loadProgram(uint32_t) | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_PROGRAMS 0 | |||||
/** | |||||
Whether the plugin uses internal non-parameter data. | |||||
@see Plugin::initState(uint32_t, String&, String&) | |||||
@see Plugin::setState(const char*, const char*) | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_STATE 0 | |||||
/** | |||||
Whether the plugin implements the full state API. | |||||
When this macro is enabled, the plugin must implement a new getState(const char* key) function, which the host calls when saving its session/project. | |||||
This is useful for plugins that have custom internal values not exposed to the host as key-value state pairs or parameters. | |||||
Most simple effects and synths will not need this. | |||||
@note this macro is automatically enabled if a plugin has programs and state, as the key-value state pairs need to be updated when the current program changes. | |||||
@see Plugin::getState(const char*) | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_FULL_STATE 0 | |||||
/** | |||||
Whether the plugin wants time position information from the host. | |||||
@see Plugin::getTimePosition() | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_TIMEPOS 0 | |||||
/** | |||||
Whether the UI uses Cairo for drawing instead of the default OpenGL mode. | |||||
When enabled your UI instance will subclass CairoTopLevelWidget instead of TopLevelWidget. | |||||
*/ | |||||
// #define DISTRHO_UI_USE_CAIRO 0 | |||||
/** | |||||
Whether the UI uses a custom toolkit implementation based on OpenGL. | |||||
When enabled, the macros DISTRHO_UI_CUSTOM_INCLUDE_PATH and DISTRHO_UI_CUSTOM_WIDGET_TYPE are required. | |||||
*/ | |||||
// #define DISTRHO_UI_USE_CUSTOM 0 | |||||
/** | |||||
The include path to the header file used by the custom toolkit implementation. | |||||
This path must be relative to dpf/distrho/DistrhoUI.hpp | |||||
*/ | |||||
// #define DISTRHO_UI_CUSTOM_INCLUDE_PATH | |||||
/** | |||||
The top-level-widget typedef to use for the custom toolkit. | |||||
This widget class MUST be a subclass of DGL TopLevelWindow class. | |||||
It is recommended that you keep this widget class inside the DGL namespace, | |||||
and define widget type as e.g. DGL_NAMESPACE::MyCustomTopLevelWidget. | |||||
*/ | |||||
// #define DISTRHO_UI_CUSTOM_WIDGET_TYPE | |||||
/** | |||||
Whether the %UI uses NanoVG for drawing instead of the default raw OpenGL mode.@n | |||||
When enabled your %UI instance will subclass NanoTopLevelWidget instead of TopLevelWidget. | |||||
*/ | |||||
// #define DISTRHO_UI_USE_NANOVG 0 | |||||
/** | |||||
Default UI width to use when creating initial and temporary windows. | |||||
Setting this macro allows to skip a temporary UI from being created in certain VST2 and VST3 hosts. | |||||
(which would normally be done for knowing the UI size before host creates a window for it) | |||||
Value must match 1x scale factor. | |||||
When this macro is defined, the companion DISTRHO_UI_DEFAULT_HEIGHT macro must be defined as well. | |||||
*/ | |||||
// #define DISTRHO_UI_DEFAULT_WIDTH 300 | |||||
/** | |||||
Default UI height to use when creating initial and temporary windows. | |||||
Setting this macro allows to skip a temporary UI from being created in certain VST2 and VST3 hosts. | |||||
(which would normally be done for knowing the UI size before host creates a window for it) | |||||
Value must match 1x scale factor. | |||||
When this macro is defined, the companion DISTRHO_UI_DEFAULT_WIDTH macro must be defined as well. | |||||
*/ | |||||
// #define DISTRHO_UI_DEFAULT_HEIGHT 300 | |||||
/** | |||||
Whether the UI is resizable to any size by the user and OS. | |||||
By default this is false, with resizing only allowed when coded from the the plugin UI side. | |||||
Enabling this options makes it possible for the user to resize the plugin UI at anytime. | |||||
@see UI::setGeometryConstraints(uint, uint, bool, bool) | |||||
*/ | |||||
// #define DISTRHO_UI_USER_RESIZABLE 0 | |||||
/** | |||||
Whether to UI is going to use file browser dialogs. | |||||
By default this is false, with the file browser APIs not available for use. | |||||
*/ | |||||
// #define DISTRHO_UI_FILE_BROWSER 0 | |||||
/** | |||||
Whether to UI is going to use web browser views. | |||||
By default this is false, with the web browser APIs not available for use. | |||||
*/ | |||||
// #define DISTRHO_UI_WEB_VIEW 0 | |||||
/** | |||||
The UI URI when exporting in LV2 format. | |||||
By default this is set to @ref DISTRHO_PLUGIN_URI with "#UI" as suffix. | |||||
*/ | |||||
// #define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#UI" | |||||
/** | |||||
The AudioUnit type for a plugin. | |||||
This is a 4-character symbol, automatically set by DPF based on other plugin macros. | |||||
See https://developer.apple.com/documentation/audiotoolbox/1584142-audio_unit_types for more information. | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_AU_TYPE aufx | |||||
/** | |||||
A 4-character symbol that identifies a brand or manufacturer, with at least one non-lower case character. | |||||
Plugins from the same brand should use the same symbol. | |||||
@note This macro is required when building AU plugins, and used for VST3 if present | |||||
@note Setting this macro will change the uid of a VST3 plugin. | |||||
If you already released a DPF-based VST3 plugin make sure to also enable DPF_VST3_DONT_USE_BRAND_ID | |||||
*/ | |||||
#define DISTRHO_PLUGIN_BRAND_ID Dstr | |||||
/** | |||||
A 4-character symbol which identifies a plugin. | |||||
It must be unique within at least a set of plugins from the brand. | |||||
@note This macro is required when building AU plugins | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_UNIQUE_ID test | |||||
/** | |||||
Custom LV2 category for the plugin. | |||||
This is a single string, and can be one of the following values: | |||||
- lv2:AllpassPlugin | |||||
- lv2:AmplifierPlugin | |||||
- lv2:AnalyserPlugin | |||||
- lv2:BandpassPlugin | |||||
- lv2:ChorusPlugin | |||||
- lv2:CombPlugin | |||||
- lv2:CompressorPlugin | |||||
- lv2:ConstantPlugin | |||||
- lv2:ConverterPlugin | |||||
- lv2:DelayPlugin | |||||
- lv2:DistortionPlugin | |||||
- lv2:DynamicsPlugin | |||||
- lv2:EQPlugin | |||||
- lv2:EnvelopePlugin | |||||
- lv2:ExpanderPlugin | |||||
- lv2:FilterPlugin | |||||
- lv2:FlangerPlugin | |||||
- lv2:FunctionPlugin | |||||
- lv2:GatePlugin | |||||
- lv2:GeneratorPlugin | |||||
- lv2:HighpassPlugin | |||||
- lv2:InstrumentPlugin | |||||
- lv2:LimiterPlugin | |||||
- lv2:LowpassPlugin | |||||
- lv2:MIDIPlugin | |||||
- lv2:MixerPlugin | |||||
- lv2:ModulatorPlugin | |||||
- lv2:MultiEQPlugin | |||||
- lv2:OscillatorPlugin | |||||
- lv2:ParaEQPlugin | |||||
- lv2:PhaserPlugin | |||||
- lv2:PitchPlugin | |||||
- lv2:ReverbPlugin | |||||
- lv2:SimulatorPlugin | |||||
- lv2:SpatialPlugin | |||||
- lv2:SpectralPlugin | |||||
- lv2:UtilityPlugin | |||||
- lv2:WaveshaperPlugin | |||||
See http://lv2plug.in/ns/lv2core for more information. | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:Plugin" | |||||
/** | |||||
Custom VST3 categories for the plugin. | |||||
This is a single concatenated string of categories, separated by a @c |. | |||||
Each effect category can be one of the following values: | |||||
- Fx | |||||
- Fx|Ambisonics | |||||
- Fx|Analyzer | |||||
- Fx|Delay | |||||
- Fx|Distortion | |||||
- Fx|Dynamics | |||||
- Fx|EQ | |||||
- Fx|Filter | |||||
- Fx|Instrument | |||||
- Fx|Instrument|External | |||||
- Fx|Spatial | |||||
- Fx|Generator | |||||
- Fx|Mastering | |||||
- Fx|Modulation | |||||
- Fx|Network | |||||
- Fx|Pitch Shift | |||||
- Fx|Restoration | |||||
- Fx|Reverb | |||||
- Fx|Surround | |||||
- Fx|Tools | |||||
Each instrument category can be one of the following values: | |||||
- Instrument | |||||
- Instrument|Drum | |||||
- Instrument|External | |||||
- Instrument|Piano | |||||
- Instrument|Sampler | |||||
- Instrument|Synth | |||||
- Instrument|Synth|Sampler | |||||
And extra categories possible for any plugin type: | |||||
- Mono | |||||
- Stereo | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Stereo" | |||||
/** | |||||
Custom CLAP features for the plugin. | |||||
This is a list of features defined as a string array body, without the terminating @c , or nullptr. | |||||
A top-level category can be set as feature and be one of the following values: | |||||
- instrument | |||||
- audio-effect | |||||
- note-effect | |||||
- analyzer | |||||
The following sub-categories can also be set: | |||||
- synthesizer | |||||
- sampler | |||||
- drum | |||||
- drum-machine | |||||
- filter | |||||
- phaser | |||||
- equalizer | |||||
- de-esser | |||||
- phase-vocoder | |||||
- granular | |||||
- frequency-shifter | |||||
- pitch-shifter | |||||
- distortion | |||||
- transient-shaper | |||||
- compressor | |||||
- limiter | |||||
- flanger | |||||
- chorus | |||||
- delay | |||||
- reverb | |||||
- tremolo | |||||
- glitch | |||||
- utility | |||||
- pitch-correction | |||||
- restoration | |||||
- multi-effects | |||||
- mixing | |||||
- mastering | |||||
And finally the following audio capabilities can be set: | |||||
- mono | |||||
- stereo | |||||
- surround | |||||
- ambisonic | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_CLAP_FEATURES "audio-effect", "stereo" | |||||
/** | |||||
The plugin id when exporting in CLAP format, in reverse URI form. | |||||
@note This macro is required when building CLAP plugins | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.effect" | |||||
/** @} */ |
@@ -152,7 +152,7 @@ | |||||
#endif | #endif | ||||
#ifdef DISTRHO_UI_FILEBROWSER | #ifdef DISTRHO_UI_FILEBROWSER | ||||
# error typo detected use DGL_USE_FILE_BROWSER instead of DISTRHO_UI_FILEBROWSER | |||||
# error typo detected use DISTRHO_UI_FILE_BROWSER instead of DISTRHO_UI_FILEBROWSER | |||||
#endif | #endif | ||||
#ifdef DISTRHO_UI_WEBVIEW | #ifdef DISTRHO_UI_WEBVIEW | ||||
@@ -74,19 +74,11 @@ public: | |||||
fButton->setCallback(this); | fButton->setCallback(this); | ||||
fButton->setId(kParameterButton); | fButton->setId(kParameterButton); | ||||
#if 0 | |||||
// we can use this if/when our resources are scalable, for now they are PNGs | |||||
const double scaleFactor = getScaleFactor(); | |||||
if (scaleFactor != 1.0) | |||||
setSize(200 * scaleFactor, 200 * scaleFactor); | |||||
#else | |||||
// without scalable resources, let DPF handle the scaling internally | |||||
setGeometryConstraints(DISTRHO_UI_DEFAULT_WIDTH, DISTRHO_UI_DEFAULT_HEIGHT, true, true); | setGeometryConstraints(DISTRHO_UI_DEFAULT_WIDTH, DISTRHO_UI_DEFAULT_HEIGHT, true, true); | ||||
#endif | |||||
} | } | ||||
protected: | protected: | ||||
void onCairoDisplay(const CairoGraphicsContext& context) | |||||
void onCairoDisplay(const CairoGraphicsContext& context) override | |||||
{ | { | ||||
cairo_t* const cr = context.handle; | cairo_t* const cr = context.handle; | ||||
cairo_set_source_rgb(cr, 1.0, 0.8, 0.5); | cairo_set_source_rgb(cr, 1.0, 0.8, 0.5); | ||||
@@ -1,21 +1,16 @@ | |||||
/* | |||||
* DISTRHO Plugin Framework (DPF) | |||||
* Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
* or without fee is hereby granted, provided that the above copyright notice and this | |||||
* permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
/** | |||||
The plugin name.@n | |||||
#pragma once | |||||
/** | |||||
This file contains C Macros that describe this plugin. | |||||
With these macros we can tell the host what features the plugin requires. | |||||
New functions will be available to call and/or override depending on which macros are enabled. | |||||
All values are either integer or strings. | |||||
For boolean-like values 1 means 'on' and 0 means 'off'. | |||||
*/ | |||||
/** | |||||
The plugin name. | |||||
This is used to identify your plugin before a Plugin instance can be created. | This is used to identify your plugin before a Plugin instance can be created. | ||||
@note This macro is required. | @note This macro is required. | ||||
*/ | */ | ||||
@@ -35,106 +30,141 @@ | |||||
/** | /** | ||||
The plugin URI when exporting in LV2 format. | The plugin URI when exporting in LV2 format. | ||||
TODO describe what a URI is | |||||
@note This macro is required. | @note This macro is required. | ||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/CairoUI" | #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/CairoUI" | ||||
/** | /** | ||||
The AudioUnit manufacturer for a plugin. | |||||
This is a 4-character symbol with at least one non-lower case character. | |||||
Plugins from the same brand/maker should use the same symbol. | |||||
@note This macro is required when building AU plugins | |||||
Whether the plugin has a custom UI. | |||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_BRAND_ID Dstr | |||||
#define DISTRHO_PLUGIN_HAS_UI 1 | |||||
/** | /** | ||||
The AudioUnit subtype for a plugin. | |||||
This is a 4-character symbol which identifies a plugin. | |||||
It must be unique within a manufacturer's plugins, but different manufacturers can use the same subtype. | |||||
@note This macro is required when building AU plugins | |||||
Whether the plugin processing is realtime-safe. | |||||
TODO - list rtsafe requirements | |||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_UNIQUE_ID dCai | |||||
/** | |||||
The plugin id when exporting in CLAP format, in reverse URI form. | |||||
@note This macro is required when building CLAP plugins | |||||
*/ | |||||
#define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.examples.cairo-ui" | |||||
#define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||||
/** | /** | ||||
Wherever the plugin has a custom %UI. | |||||
@see DISTRHO_UI_USE_NANOVG | |||||
@see UI | |||||
Whether the plugin is a synth. | |||||
@ref DISTRHO_PLUGIN_WANT_MIDI_INPUT is automatically enabled when this is too. | |||||
@see DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_HAS_UI 1 | |||||
// #define DISTRHO_PLUGIN_IS_SYNTH 0 | |||||
/** | /** | ||||
Wherever the plugin processing is realtime-safe.@n | |||||
TODO - list rtsafe requirements | |||||
Request the minimum buffer size for the input and output event ports. | |||||
Currently only used in LV2, with a default value of 2048 if unset. | |||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||||
// #define DISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE 2048 | |||||
/** | /** | ||||
Wherever the plugin is a synth.@n | |||||
@ref DISTRHO_PLUGIN_WANT_MIDI_INPUT is automatically enabled when this is too. | |||||
@see DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||||
Whether the plugin has an LV2 modgui. | |||||
This will simply add a "rdfs:seeAlso <modgui.ttl>" on the LV2 manifest. | |||||
It is up to you to create this file. | |||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_IS_SYNTH 0 | |||||
// #define DISTRHO_PLUGIN_USES_MODGUI 0 | |||||
/** | /** | ||||
Enable direct access between the %UI and plugin code. | |||||
Enable direct access between the UI and plugin code. | |||||
@see UI::getPluginInstancePointer() | @see UI::getPluginInstancePointer() | ||||
@note DO NOT USE THIS UNLESS STRICTLY NECESSARY!! | @note DO NOT USE THIS UNLESS STRICTLY NECESSARY!! | ||||
Try to avoid it at all costs! | Try to avoid it at all costs! | ||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 0 | |||||
// #define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 0 | |||||
/** | /** | ||||
Wherever the plugin introduces latency during audio or midi processing. | |||||
Whether the plugin introduces latency during audio or midi processing. | |||||
@see Plugin::setLatency(uint32_t) | @see Plugin::setLatency(uint32_t) | ||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_WANT_LATENCY 0 | |||||
// #define DISTRHO_PLUGIN_WANT_LATENCY 0 | |||||
/** | /** | ||||
Wherever the plugin wants MIDI input.@n | |||||
Whether the plugin wants MIDI input. | |||||
This is automatically enabled if @ref DISTRHO_PLUGIN_IS_SYNTH is true. | This is automatically enabled if @ref DISTRHO_PLUGIN_IS_SYNTH is true. | ||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_WANT_MIDI_INPUT 0 | |||||
// #define DISTRHO_PLUGIN_WANT_MIDI_INPUT 0 | |||||
/** | /** | ||||
Wherever the plugin wants MIDI output. | |||||
Whether the plugin wants MIDI output. | |||||
@see Plugin::writeMidiEvent(const MidiEvent&) | @see Plugin::writeMidiEvent(const MidiEvent&) | ||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 0 | |||||
// #define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 0 | |||||
/** | /** | ||||
Wherever the plugin provides its own internal programs. | |||||
Whether the plugin wants to change its own parameter inputs. | |||||
Not all hosts or plugin formats support this, | |||||
so Plugin::canRequestParameterValueChanges() can be used to query support at runtime. | |||||
@see Plugin::requestParameterValueChange(uint32_t, float) | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_PARAMETER_VALUE_CHANGE_REQUEST 0 | |||||
/** | |||||
Whether the plugin provides its own internal programs. | |||||
@see Plugin::initProgramName(uint32_t, String&) | @see Plugin::initProgramName(uint32_t, String&) | ||||
@see Plugin::loadProgram(uint32_t) | @see Plugin::loadProgram(uint32_t) | ||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_WANT_PROGRAMS 0 | |||||
// #define DISTRHO_PLUGIN_WANT_PROGRAMS 0 | |||||
/** | /** | ||||
Wherever the plugin uses internal non-parameter data. | |||||
Whether the plugin uses internal non-parameter data. | |||||
@see Plugin::initState(uint32_t, String&, String&) | @see Plugin::initState(uint32_t, String&, String&) | ||||
@see Plugin::setState(const char*, const char*) | @see Plugin::setState(const char*, const char*) | ||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_WANT_STATE 0 | |||||
// #define DISTRHO_PLUGIN_WANT_STATE 0 | |||||
/** | /** | ||||
Wherever the plugin wants time position information from the host. | |||||
Whether the plugin implements the full state API. | |||||
When this macro is enabled, the plugin must implement a new getState(const char* key) function, which the host calls when saving its session/project. | |||||
This is useful for plugins that have custom internal values not exposed to the host as key-value state pairs or parameters. | |||||
Most simple effects and synths will not need this. | |||||
@note this macro is automatically enabled if a plugin has programs and state, as the key-value state pairs need to be updated when the current program changes. | |||||
@see Plugin::getState(const char*) | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_WANT_FULL_STATE 0 | |||||
/** | |||||
Whether the plugin wants time position information from the host. | |||||
@see Plugin::getTimePosition() | @see Plugin::getTimePosition() | ||||
*/ | */ | ||||
#define DISTRHO_PLUGIN_WANT_TIMEPOS 0 | |||||
// #define DISTRHO_PLUGIN_WANT_TIMEPOS 0 | |||||
/** | |||||
Whether the UI uses Cairo for drawing instead of the default OpenGL mode. | |||||
When enabled your UI instance will subclass CairoTopLevelWidget instead of TopLevelWidget. | |||||
*/ | |||||
#define DISTRHO_UI_USE_CAIRO 1 | |||||
/** | |||||
Whether the UI uses a custom toolkit implementation based on OpenGL. | |||||
When enabled, the macros DISTRHO_UI_CUSTOM_INCLUDE_PATH and DISTRHO_UI_CUSTOM_WIDGET_TYPE are required. | |||||
*/ | |||||
// #define DISTRHO_UI_USE_CUSTOM 0 | |||||
/** | /** | ||||
Wherever the %UI uses NanoVG for drawing instead of the default raw OpenGL calls.@n | |||||
When enabled your %UI instance will subclass @ref NanoWidget instead of @ref Widget. | |||||
The include path to the header file used by the custom toolkit implementation. | |||||
This path must be relative to dpf/distrho/DistrhoUI.hpp | |||||
*/ | */ | ||||
#define DISTRHO_UI_USE_NANOVG 0 | |||||
// #define DISTRHO_UI_CUSTOM_INCLUDE_PATH | |||||
/** | /** | ||||
Default UI width to use when creating initial and temporary windows.@n | |||||
The top-level-widget typedef to use for the custom toolkit. | |||||
This widget class MUST be a subclass of DGL TopLevelWindow class. | |||||
It is recommended that you keep this widget class inside the DGL namespace, | |||||
and define widget type as e.g. DGL_NAMESPACE::MyCustomTopLevelWidget. | |||||
*/ | |||||
// #define DISTRHO_UI_CUSTOM_WIDGET_TYPE | |||||
/** | |||||
Whether the %UI uses NanoVG for drawing instead of the default raw OpenGL mode.@n | |||||
When enabled your %UI instance will subclass NanoTopLevelWidget instead of TopLevelWidget. | |||||
*/ | |||||
// #define DISTRHO_UI_USE_NANOVG 0 | |||||
/** | |||||
Default UI width to use when creating initial and temporary windows. | |||||
Setting this macro allows to skip a temporary UI from being created in certain VST2 and VST3 hosts. | Setting this macro allows to skip a temporary UI from being created in certain VST2 and VST3 hosts. | ||||
(which would normally be done for knowing the UI size before host creates a window for it) | (which would normally be done for knowing the UI size before host creates a window for it) | ||||
@@ -145,7 +175,7 @@ | |||||
#define DISTRHO_UI_DEFAULT_WIDTH 200 | #define DISTRHO_UI_DEFAULT_WIDTH 200 | ||||
/** | /** | ||||
Default UI height to use when creating initial and temporary windows.@n | |||||
Default UI height to use when creating initial and temporary windows. | |||||
Setting this macro allows to skip a temporary UI from being created in certain VST2 and VST3 hosts. | Setting this macro allows to skip a temporary UI from being created in certain VST2 and VST3 hosts. | ||||
(which would normally be done for knowing the UI size before host creates a window for it) | (which would normally be done for knowing the UI size before host creates a window for it) | ||||
@@ -155,11 +185,209 @@ | |||||
*/ | */ | ||||
#define DISTRHO_UI_DEFAULT_HEIGHT 200 | #define DISTRHO_UI_DEFAULT_HEIGHT 200 | ||||
// TODO document this | |||||
#define DISTRHO_UI_USE_CAIRO 1 | |||||
/** | |||||
Whether the UI is resizable to any size by the user and OS. | |||||
By default this is false, with resizing only allowed when coded from the the plugin UI side. | |||||
Enabling this options makes it possible for the user to resize the plugin UI at anytime. | |||||
@see UI::setGeometryConstraints(uint, uint, bool, bool) | |||||
*/ | |||||
// #define DISTRHO_UI_USER_RESIZABLE 0 | |||||
/** | |||||
Whether to UI is going to use file browser dialogs. | |||||
By default this is false, with the file browser APIs not available for use. | |||||
*/ | |||||
// #define DISTRHO_UI_FILE_BROWSER 0 | |||||
// TODO document this | |||||
#define DISTRHO_UI_FILE_BROWSER 0 | |||||
/** | |||||
Whether to UI is going to use web browser views. | |||||
By default this is false, with the web browser APIs not available for use. | |||||
*/ | |||||
// #define DISTRHO_UI_WEB_VIEW 0 | |||||
/** | |||||
The UI URI when exporting in LV2 format. | |||||
By default this is set to @ref DISTRHO_PLUGIN_URI with "#UI" as suffix. | |||||
*/ | |||||
// #define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#UI" | |||||
/** | |||||
The AudioUnit type for a plugin. | |||||
This is a 4-character symbol, automatically set by DPF based on other plugin macros. | |||||
See https://developer.apple.com/documentation/audiotoolbox/1584142-audio_unit_types for more information. | |||||
*/ | |||||
// #define DISTRHO_PLUGIN_AU_TYPE aufx | |||||
/** | |||||
A 4-character symbol that identifies a brand or manufacturer, with at least one non-lower case character. | |||||
Plugins from the same brand should use the same symbol. | |||||
@note This macro is required when building AU plugins, and used for VST3 if present | |||||
@note Setting this macro will change the uid of a VST3 plugin. | |||||
If you already released a DPF-based VST3 plugin make sure to also enable DPF_VST3_DONT_USE_BRAND_ID | |||||
*/ | |||||
#define DISTRHO_PLUGIN_BRAND_ID Dstr | |||||
/** | |||||
A 4-character symbol which identifies a plugin. | |||||
It must be unique within at least a set of plugins from the brand. | |||||
@note This macro is required when building AU plugins | |||||
*/ | |||||
#define DISTRHO_PLUGIN_UNIQUE_ID dCai | |||||
/** | |||||
Custom LV2 category for the plugin. | |||||
This is a single string, and can be one of the following values: | |||||
- lv2:AllpassPlugin | |||||
- lv2:AmplifierPlugin | |||||
- lv2:AnalyserPlugin | |||||
- lv2:BandpassPlugin | |||||
- lv2:ChorusPlugin | |||||
- lv2:CombPlugin | |||||
- lv2:CompressorPlugin | |||||
- lv2:ConstantPlugin | |||||
- lv2:ConverterPlugin | |||||
- lv2:DelayPlugin | |||||
- lv2:DistortionPlugin | |||||
- lv2:DynamicsPlugin | |||||
- lv2:EQPlugin | |||||
- lv2:EnvelopePlugin | |||||
- lv2:ExpanderPlugin | |||||
- lv2:FilterPlugin | |||||
- lv2:FlangerPlugin | |||||
- lv2:FunctionPlugin | |||||
- lv2:GatePlugin | |||||
- lv2:GeneratorPlugin | |||||
- lv2:HighpassPlugin | |||||
- lv2:InstrumentPlugin | |||||
- lv2:LimiterPlugin | |||||
- lv2:LowpassPlugin | |||||
- lv2:MIDIPlugin | |||||
- lv2:MixerPlugin | |||||
- lv2:ModulatorPlugin | |||||
- lv2:MultiEQPlugin | |||||
- lv2:OscillatorPlugin | |||||
- lv2:ParaEQPlugin | |||||
- lv2:PhaserPlugin | |||||
- lv2:PitchPlugin | |||||
- lv2:ReverbPlugin | |||||
- lv2:SimulatorPlugin | |||||
- lv2:SpatialPlugin | |||||
- lv2:SpectralPlugin | |||||
- lv2:UtilityPlugin | |||||
- lv2:WaveshaperPlugin | |||||
See http://lv2plug.in/ns/lv2core for more information. | |||||
*/ | |||||
#define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:UtilityPlugin" | |||||
/** | |||||
Custom VST3 categories for the plugin. | |||||
This is a single concatenated string of categories, separated by a @c |. | |||||
Each effect category can be one of the following values: | |||||
- Fx | |||||
- Fx|Ambisonics | |||||
- Fx|Analyzer | |||||
- Fx|Delay | |||||
- Fx|Distortion | |||||
- Fx|Dynamics | |||||
- Fx|EQ | |||||
- Fx|Filter | |||||
- Fx|Instrument | |||||
- Fx|Instrument|External | |||||
- Fx|Spatial | |||||
- Fx|Generator | |||||
- Fx|Mastering | |||||
- Fx|Modulation | |||||
- Fx|Network | |||||
- Fx|Pitch Shift | |||||
- Fx|Restoration | |||||
- Fx|Reverb | |||||
- Fx|Surround | |||||
- Fx|Tools | |||||
Each instrument category can be one of the following values: | |||||
- Instrument | |||||
- Instrument|Drum | |||||
- Instrument|External | |||||
- Instrument|Piano | |||||
- Instrument|Sampler | |||||
- Instrument|Synth | |||||
- Instrument|Synth|Sampler | |||||
And extra categories possible for any plugin type: | |||||
- Mono | |||||
- Stereo | |||||
*/ | |||||
#define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Tools|Mono" | |||||
/** | |||||
Custom CLAP features for the plugin. | |||||
This is a list of features defined as a string array body, without the terminating @c , or nullptr. | |||||
A top-level category can be set as feature and be one of the following values: | |||||
- instrument | |||||
- audio-effect | |||||
- note-effect | |||||
- analyzer | |||||
The following sub-categories can also be set: | |||||
- synthesizer | |||||
- sampler | |||||
- drum | |||||
- drum-machine | |||||
- filter | |||||
- phaser | |||||
- equalizer | |||||
- de-esser | |||||
- phase-vocoder | |||||
- granular | |||||
- frequency-shifter | |||||
- pitch-shifter | |||||
- distortion | |||||
- transient-shaper | |||||
- compressor | |||||
- limiter | |||||
- flanger | |||||
- chorus | |||||
- delay | |||||
- reverb | |||||
- tremolo | |||||
- glitch | |||||
- utility | |||||
- pitch-correction | |||||
- restoration | |||||
- multi-effects | |||||
- mixing | |||||
- mastering | |||||
And finally the following audio capabilities can be set: | |||||
- mono | |||||
- stereo | |||||
- surround | |||||
- ambisonic | |||||
*/ | |||||
#define DISTRHO_PLUGIN_CLAP_FEATURES "audio-effect", "utility", "mono" | |||||
/** | |||||
The plugin id when exporting in CLAP format, in reverse URI form. | |||||
@note This macro is required when building CLAP plugins | |||||
*/ | |||||
#define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.examples.cairo-ui" | |||||
enum Parameters { | enum Parameters { | ||||
kParameterKnob, | kParameterKnob, | ||||