Signed-off-by: falkTX <falktx@falktx.com>pull/457/head
| @@ -603,6 +603,12 @@ START_NAMESPACE_DISTRHO | |||
| */ | |||
| #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 | |||
| 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 | |||
| /** | |||
| 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. | |||
| This widget class MUST be a subclass of DGL TopLevelWindow class. | |||
| @@ -648,19 +660,25 @@ START_NAMESPACE_DISTRHO | |||
| #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. | |||
| @see UI::setGeometryConstraints(uint, uint, bool, bool) | |||
| */ | |||
| #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 | |||
| 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 | |||
| 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`. | |||
| @note Some checks are only available with the GCC compiler, | |||
| @@ -885,26 +903,12 @@ START_NAMESPACE_DISTRHO | |||
| */ | |||
| #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 | |||
| Must be set as compiler macro when building DGL. (e.g. `CXXFLAGS="-DDGL_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 | |||
| 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; | |||
| #endif | |||
| /** | |||
| Get an extensive comment/description about the plugin.@n | |||
| 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. | |||
| */ | |||
| #ifdef DISTRHO_PLUGIN_MAKER | |||
| virtual const char* getMaker() const | |||
| { | |||
| return DISTRHO_PLUGIN_MAKER; | |||
| } | |||
| #else | |||
| virtual const char* getMaker() const = 0; | |||
| #endif | |||
| /** | |||
| Get the plugin homepage.@n | |||
| 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 | |||
| 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; | |||
| #endif | |||
| /** | |||
| 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 | |||
| #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 | |||
| #ifdef DISTRHO_UI_WEBVIEW | |||
| @@ -74,19 +74,11 @@ public: | |||
| fButton->setCallback(this); | |||
| 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); | |||
| #endif | |||
| } | |||
| protected: | |||
| void onCairoDisplay(const CairoGraphicsContext& context) | |||
| void onCairoDisplay(const CairoGraphicsContext& context) override | |||
| { | |||
| cairo_t* const cr = context.handle; | |||
| 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. | |||
| @note This macro is required. | |||
| */ | |||
| @@ -35,106 +30,141 @@ | |||
| /** | |||
| The plugin URI when exporting in LV2 format. | |||
| TODO describe what a URI is | |||
| @note This macro is required. | |||
| */ | |||
| #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() | |||
| @note DO NOT USE THIS UNLESS STRICTLY NECESSARY!! | |||
| 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) | |||
| */ | |||
| #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. | |||
| */ | |||
| #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&) | |||
| */ | |||
| #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::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::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() | |||
| */ | |||
| #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. | |||
| (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 | |||
| /** | |||
| 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. | |||
| (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 | |||
| // 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 { | |||
| kParameterKnob, | |||