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, | ||||